View Javadoc

1   /* This file is part of the project "Hilbert II" - http://www.qedeq.org" target="alexandria_uri">http://www.qedeq.org
2    *
3    * Copyright 2000-2014,  Michael Meyling <mime@qedeq.org>.
4    *
5    * "Hilbert II" is free software; you can redistribute
6    * it and/or modify it under the terms of the GNU General Public
7    * License as published by the Free Software Foundation; either
8    * version 2 of the License, or (at your option) any later version.
9    *
10   * This program is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   * GNU General Public License for more details.
14   */
15  
16  package org.qedeq.kernel.bo.module;
17  
18  import java.io.File;
19  import java.io.IOException;
20  
21  import org.qedeq.kernel.bo.common.KernelProperties;
22  import org.qedeq.kernel.se.base.module.Specification;
23  import org.qedeq.kernel.se.common.ModuleAddress;
24  import org.qedeq.kernel.se.common.SourceFileExceptionList;
25  import org.qedeq.kernel.se.config.QedeqConfig;
26  import org.qedeq.kernel.se.visitor.ContextChecker;
27  import org.qedeq.kernel.se.visitor.InterruptException;
28  
29  /**
30   * The kernel internal service methods are assembled here. Needed by the kernel and its helpers.
31   *
32   * @author  Michael Meyling
33   */
34  public interface InternalKernelServices extends KernelProperties {
35  
36      /**
37       * Get access to configuration parameters.
38       *
39       * @return  Configuration access.
40       */
41      public QedeqConfig getConfig();
42  
43      /**
44       * Get buffer directory for QEDEQ module files.
45       *
46       * @return  buffer directory.
47       */
48      public File getBufferDirectory();
49  
50      /**
51       * Get directory for generated files.
52       *
53       * @return  Generation directory.
54       */
55      public File getGenerationDirectory();
56  
57      /**
58       * Get {@link KernelQedeqBo} for an address.
59       *
60       * @param   address Look for this address.
61       * @return  Existing or new {@link KernelQedeqBo}. Never <code>null</code>.
62       */
63      public KernelQedeqBo getKernelQedeqBo(ModuleAddress address);
64  
65      /**
66       * Transform an URL address into a local file path where the QEDEQ module is buffered.
67       * If the QEDEQ module is a local file the path to that file is given.
68       *
69       * @param   address     Get local address for this QEDEQ module address.
70       * @return  Local file path for that <code>address</code>.
71       */
72      public File getLocalFilePath(ModuleAddress address);
73  
74      /**
75       * Load QEDEQ module.
76       *
77       * @param   process Working process.
78       * @param   address Load module from this address.
79       * @return  BO for QEDEQ module. Loading still might have failed. Check status.
80       * @throws  InterruptException User canceled request.
81       */
82      public KernelQedeqBo loadKernelModule(final InternalServiceJob process, final ModuleAddress address)
83              throws InterruptException;
84  
85      /**
86       * Load specified QEDEQ module from QEDEQ parent module.
87       *
88       * @param   process Working process.
89       * @param   parent  Parent module address.
90       * @param   spec    Specification for another QEDEQ module.
91       * @return  Loaded module.
92       * @throws  SourceFileExceptionList     Loading failed.
93       * @throws  InterruptException User canceled request.
94       */
95      public KernelQedeqBo loadKernelModule(InternalServiceJob process, ModuleAddress parent,
96              Specification spec) throws SourceFileExceptionList, InterruptException;
97  
98      /**
99       * Get required modules of given module. You can check the status to know if the loading was
100      * successful.
101      *
102      * @param   process Working process.
103      * @param   qedeq   Module to check.
104      * @return  Successful loading.
105      * @throws  InterruptException User canceled request.
106      */
107     public boolean loadRequiredModules(InternalServiceJob process, KernelQedeqBo qedeq) throws InterruptException;
108 
109     /**
110      * Check if all formulas of a QEDEQ module and its required modules are well formed.
111      *
112      * @param   process Working process.
113      * @param   qedeq   Module to check.
114      * @return  Was check successful?
115      * @throws  InterruptException User canceled request.
116      */
117     public boolean checkWellFormedness(InternalServiceJob process, KernelQedeqBo qedeq) throws InterruptException;
118 
119     /**
120      * Check if all propositions of this and all required modules have correct formal proofs.
121      *
122      * @param   process Working process.
123      * @param   qedeq   Module to check.
124      * @return  Was check successful?
125      * @throws  InterruptException      Process execution was canceled by user.
126      */
127     public boolean checkFormallyProved(InternalServiceJob process, KernelQedeqBo qedeq) throws InterruptException;
128 
129     /**
130      * Execute plugin on given QEDEQ module.
131      *
132      * @param   parent      Parent service process. Must not be <code>null</code>
133      * @param   id          Plugin id.
134      * @param   qedeq       QEDEQ module.
135      * @param   data        Process data. Additional data beside module.
136      * @return  Plugin specific resulting object. Might be <code>null</code>.
137      * @throws  InterruptException      Process execution was canceled by user.
138      * @throws  NullPointerException    <code>parent</code> was null.
139      */
140     public Object executePlugin(final InternalServiceJob parent, final String id, final KernelQedeqBo qedeq,
141         final Object data) throws InterruptException;
142 
143     /**
144      * Get DAO for reading and writing QEDEQ modules from or to a file.
145      *
146      * @return  DAO.
147      */
148     public QedeqFileDao getQedeqFileDao();
149 
150     /**
151      * Creates a list with a {@link org.qedeq.kernel.se.common.SourceFileException} with dummy
152      * position.
153      *
154      * @param   address This source had a problem.
155      * @param   code    Failure code.
156      * @param   message Textual description of failure.
157      * @param   e       Wrapped exception.
158      * @return  Created list.
159      */
160     public SourceFileExceptionList createSourceFileExceptionList(int code, String message,
161          String address, IOException e);
162 
163     /**
164      * Creates a list with a {@link org.qedeq.kernel.se.common.SourceFileException} with dummy
165      * position.
166      *
167      * @param   address This source had a problem.
168      * @param   code    Failure code.
169      * @param   message Textual description of failure.
170      * @param   e       Wrapped exception.
171      * @return  Created list.
172      */
173     public SourceFileExceptionList createSourceFileExceptionList(int code, String message,
174         String address, RuntimeException e);
175 
176     /**
177      * Creates a list with a {@link org.qedeq.kernel.se.common.SourceFileException} with dummy
178      * position.
179      *
180      * @param   address This source had a problem.
181      * @param   code    Failure code.
182      * @param   message Textual description of failure.
183      * @param   e       Wrapped exception.
184      * @return  Created list.
185      */
186     public SourceFileExceptionList createSourceFileExceptionList(int code, String message,
187         String address, Exception e);
188 
189     /**
190      * Get context checker.
191      *
192      * @return  Checker for testing if context is valid.
193      */
194     public ContextChecker getContextChecker();
195 
196 }