1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.qedeq.kernel.bo.service.logic;
17
18 import java.util.HashMap;
19 import java.util.Map;
20
21 import org.qedeq.base.trace.Trace;
22 import org.qedeq.kernel.bo.logic.common.ExistenceChecker;
23 import org.qedeq.kernel.bo.logic.common.FunctionConstant;
24 import org.qedeq.kernel.bo.logic.common.FunctionKey;
25 import org.qedeq.kernel.bo.logic.common.PredicateConstant;
26 import org.qedeq.kernel.bo.logic.common.PredicateKey;
27 import org.qedeq.kernel.se.base.module.InitialFunctionDefinition;
28 import org.qedeq.kernel.se.base.module.InitialPredicateDefinition;
29 import org.qedeq.kernel.se.base.module.Rule;
30 import org.qedeq.kernel.se.common.RuleKey;
31
32
33
34
35
36
37
38 public class DefaultExistenceChecker implements ExistenceChecker {
39
40
41 private static final Class CLASS = DefaultExistenceChecker.class;
42
43
44 private final Map initialPredicateDefinitions = new HashMap();
45
46
47 private final Map predicateDefinitions = new HashMap();
48
49
50 private final Map initialFunctionDefinitions = new HashMap();
51
52
53 private final Map functionDefinitions = new HashMap();
54
55
56 private final Map ruleDefinitions = new HashMap();
57
58
59 private boolean setDefinitionByFormula;
60
61
62 private String identityOperator;
63
64
65
66
67
68 public DefaultExistenceChecker() {
69 clear();
70 }
71
72
73
74
75 public void clear() {
76 Trace.trace(CLASS, this, "setClassOperatorExists", "clear");
77 initialPredicateDefinitions.clear();
78 predicateDefinitions.clear();
79 initialFunctionDefinitions.clear();
80 ruleDefinitions.clear();
81 functionDefinitions.clear();
82 identityOperator = null;
83 setDefinitionByFormula = false;
84 }
85
86 public boolean predicateExists(final PredicateKey predicate) {
87 final InitialPredicateDefinition initialDefinition
88 = (InitialPredicateDefinition) initialPredicateDefinitions.get(predicate);
89 if (initialDefinition != null) {
90 return true;
91 }
92 return null != predicateDefinitions.get(predicate);
93 }
94
95 public boolean predicateExists(final String name, final int arguments) {
96 final PredicateKey predicate = new PredicateKey(name, "" + arguments);
97 return predicateExists(predicate);
98 }
99
100 public boolean isInitialPredicate(final PredicateKey predicate) {
101 final InitialPredicateDefinition initialDefinition
102 = (InitialPredicateDefinition) initialPredicateDefinitions.get(predicate);
103 return initialDefinition != null;
104 }
105
106
107
108
109
110
111
112
113
114 public void add(final InitialPredicateDefinition initialDefinition) {
115 final PredicateKey predicate = new PredicateKey(initialDefinition.getName(),
116 initialDefinition.getArgumentNumber());
117 if (predicateExists(predicate)) {
118 throw new IllegalArgumentException(LogicErrors.PREDICATE_ALREADY_DEFINED_TEXT
119 + predicate);
120 }
121 initialPredicateDefinitions.put(predicate, initialDefinition);
122 }
123
124
125
126
127
128
129
130
131
132 public void add(final PredicateConstant constant) {
133 final PredicateKey predicate = constant.getKey();
134 if (predicateExists(predicate)) {
135 throw new IllegalArgumentException(LogicErrors.PREDICATE_ALREADY_DEFINED_TEXT
136 + predicate);
137 }
138 predicateDefinitions.put(predicate, constant);
139 }
140
141
142
143
144
145
146
147 public PredicateConstant get(final PredicateKey predicate) {
148 return (PredicateConstant) predicateDefinitions.get(predicate);
149 }
150
151
152
153
154
155
156
157
158 public PredicateConstant getPredicate(final String name, final int arguments) {
159 final PredicateKey predicate = new PredicateKey(name, "" + arguments);
160 return get(predicate);
161 }
162
163 public boolean functionExists(final FunctionKey function) {
164 final InitialFunctionDefinition initialDefinition
165 = (InitialFunctionDefinition) initialFunctionDefinitions.get(function);
166 if (initialDefinition != null) {
167 return true;
168 }
169 return null != functionDefinitions.get(function);
170 }
171
172 public boolean functionExists(final String name, final int arguments) {
173 final FunctionKey function = new FunctionKey(name, "" + arguments);
174 return functionExists(function);
175 }
176
177
178
179
180
181
182
183
184
185 public void add(final FunctionConstant definition) {
186 final FunctionKey function = definition.getKey();
187 if (functionDefinitions.get(function) != null) {
188 throw new IllegalArgumentException(LogicErrors.FUNCTION_ALREADY_DEFINED_TEXT
189 + function);
190 }
191 functionDefinitions.put(function, definition);
192 }
193
194
195
196
197
198
199
200
201
202 public void add(final InitialFunctionDefinition initialDefinition) {
203 final FunctionKey predicate = new FunctionKey(initialDefinition.getName(),
204 initialDefinition.getArgumentNumber());
205 if (functionExists(predicate)) {
206 throw new IllegalArgumentException(LogicErrors.FUNCTION_ALREADY_DEFINED_TEXT
207 + predicate);
208 }
209 initialFunctionDefinitions.put(predicate, initialDefinition);
210 }
211
212
213
214
215
216
217
218 public FunctionConstant get(final FunctionKey function) {
219 return (FunctionConstant) functionDefinitions.get(function);
220 }
221
222
223
224
225
226
227
228
229 public FunctionConstant getFunction(final String name, final int arguments) {
230 final FunctionKey function = new FunctionKey(name, "" + arguments);
231 return get(function);
232 }
233
234 public boolean isInitialFunction(final FunctionKey function) {
235 final InitialFunctionDefinition initialDefinition
236 = (InitialFunctionDefinition) initialFunctionDefinitions.get(function);
237 return initialDefinition != null;
238 }
239
240
241 public boolean ruleExists(final RuleKey ruleKey) {
242 return null != get(ruleKey);
243 }
244
245
246
247
248
249
250
251
252
253 public void add(final RuleKey ruleKey, final Rule definition) {
254 if (ruleDefinitions.get(ruleKey) != null) {
255 throw new IllegalArgumentException(LogicErrors.RULE_ALREADY_DEFINED_TEXT
256 + ruleKey);
257 }
258 ruleDefinitions.put(ruleKey, definition);
259 }
260
261
262
263
264
265
266
267 public Rule get(final RuleKey ruleKey) {
268 return (Rule) ruleDefinitions.get(ruleKey);
269 }
270
271 public boolean classOperatorExists() {
272 return setDefinitionByFormula;
273 }
274
275
276
277
278
279
280
281
282
283
284
285
286 public boolean identityOperatorExists() {
287 return this.identityOperator != null;
288 }
289
290 public String getIdentityOperator() {
291 return this.identityOperator;
292 }
293
294
295
296
297
298
299 public void setIdentityOperatorDefined(final String identityOperator) {
300 Trace.param(CLASS, this, "setIdentityOperatorDefined", "identityOperator", identityOperator);
301 this.identityOperator = identityOperator;
302 }
303
304 }