1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.qedeq.kernel.bo.module;
17
18 import java.util.HashMap;
19 import java.util.Iterator;
20 import java.util.Map;
21
22 import org.qedeq.kernel.bo.common.ModuleReferenceList;
23 import org.qedeq.kernel.se.base.module.ChangedRule;
24 import org.qedeq.kernel.se.base.module.FunctionDefinition;
25 import org.qedeq.kernel.se.base.module.PredicateDefinition;
26 import org.qedeq.kernel.se.base.module.Rule;
27 import org.qedeq.kernel.se.common.CheckLevel;
28 import org.qedeq.kernel.se.common.IllegalModuleDataException;
29 import org.qedeq.kernel.se.common.ModuleContext;
30 import org.qedeq.kernel.se.common.RuleKey;
31 import org.qedeq.kernel.se.dto.module.NodeVo;
32 import org.qedeq.kernel.se.visitor.QedeqNumbers;
33
34
35
36
37
38
39 public final class ModuleLabels {
40
41
42 private ModuleReferenceList references = new KernelModuleReferenceList();
43
44
45 private final Map label2Bo = new HashMap();
46
47
48 private final Map label2Context = new HashMap();
49
50
51 private final Map predicateDefinitions = new HashMap();
52
53
54 private final Map predicateContexts = new HashMap();
55
56
57 private final Map functionDefinitions = new HashMap();
58
59
60 private final Map functionContexts = new HashMap();
61
62
63 private final Map ruleMaximum = new HashMap();
64
65
66 private final Map ruleDefinitions = new HashMap();
67
68
69 private final Map ruleContexts = new HashMap();
70
71
72 private final Map ruleLabels = new HashMap();
73
74
75
76
77 public ModuleLabels() {
78
79 }
80
81
82
83
84
85
86 public void setModuleReferences(final ModuleReferenceList references) {
87 this.references = references;
88 }
89
90
91
92
93
94
95 public ModuleReferenceList getReferences() {
96 return this.references;
97 }
98
99
100
101
102
103
104
105
106
107
108
109 public final void addNode(final ModuleContext context, final NodeVo node, final KernelQedeqBo qedeq,
110 final QedeqNumbers data) throws IllegalModuleDataException {
111
112 final ModuleContext con = new ModuleContext(context);
113 if (null == node.getId()) {
114 throw new IllegalModuleDataException(10001, "An id was not defined.", con, null,
115 null);
116 }
117 checkLabelIntern(con, node.getId());
118 label2Context.put(node.getId(), con);
119 final KernelNodeBo nodeBo = new KernelNodeBo(node, context, qedeq, data);
120 label2Bo.put(node.getId(), nodeBo);
121 }
122
123
124
125
126
127
128
129
130 public final void addLabel(final ModuleContext context, final String label)
131 throws IllegalModuleDataException {
132
133 final ModuleContext con = new ModuleContext(context);
134 checkLabelIntern(con, label);
135 label2Context.put(label, con);
136 }
137
138
139
140
141
142
143
144
145
146 private final void checkLabelIntern(final ModuleContext context, final String label)
147 throws IllegalModuleDataException {
148 if (label2Context.containsKey(label)) {
149 throw new IllegalModuleDataException(ModuleErrors.LABEL_DEFINED_MORE_THAN_ONCE_CODE,
150 ModuleErrors.LABEL_DEFINED_MORE_THAN_ONCE_TEXT + "\"" + label + "\"",
151 context, (ModuleContext) label2Context.get(label), null);
152 }
153 }
154
155
156
157
158
159
160
161 public final KernelNodeBo getNode(final String id) {
162 return (KernelNodeBo) label2Bo.get(id);
163 }
164
165
166
167
168
169
170
171 public final boolean isNode(final String id) {
172 return label2Bo.get(id) != null;
173 }
174
175
176
177
178
179
180
181 public final boolean isModule(final String id) {
182 return label2Bo.get(id) == null && label2Context.get(id) != null;
183 }
184
185
186
187
188
189
190
191 public void addPredicate(final PredicateDefinition definition, final ModuleContext context) {
192 final String identifier = definition.getName() + "_" + definition.getArgumentNumber();
193 getPredicateDefinitions().put(identifier, definition);
194 predicateContexts.put(identifier, new ModuleContext(context));
195 }
196
197
198
199
200
201
202
203
204 public PredicateDefinition getPredicate(final String name, final int argumentNumber) {
205 return (PredicateDefinition) getPredicateDefinitions().get(name + "_" + argumentNumber);
206 }
207
208
209
210
211
212
213
214
215 public ModuleContext getPredicateContext(final String name, final int argumentNumber) {
216 final ModuleContext context = (ModuleContext) predicateContexts.get(name + "_" + argumentNumber);
217 if (context != null) {
218 return new ModuleContext(context);
219 }
220 return null;
221 }
222
223
224
225
226
227
228
229 public void addFunction(final FunctionDefinition definition, final ModuleContext context) {
230 final String identifier = definition.getName() + "_" + definition.getArgumentNumber();
231 getFunctionDefinitions().put(identifier, definition);
232 functionContexts.put(identifier, new ModuleContext(context));
233 }
234
235
236
237
238
239
240
241
242 public FunctionDefinition getFunction(final String name, final int argumentNumber) {
243 return (FunctionDefinition) getFunctionDefinitions().get(name + "_" + argumentNumber);
244 }
245
246
247
248
249
250
251
252
253 public ModuleContext getFunctionContext(final String name, final int argumentNumber) {
254 final ModuleContext context = (ModuleContext) functionContexts.get(name + "_" + argumentNumber);
255 if (context != null) {
256 return new ModuleContext(context);
257 }
258 return null;
259 }
260
261
262
263
264
265
266
267
268
269 public void addRule(final String label, final Rule definition, final ModuleContext context) {
270 final RuleKey key = new RuleKey(definition.getName(), definition.getVersion());
271 ruleLabels.put(key, label);
272 final RuleKey oldMaximum = (RuleKey) ruleMaximum.get(definition.getName());
273 if (oldMaximum == null || oldMaximum.getVersion() == null || (key.getVersion() != null
274 && 0 < key.getVersion().compareTo(oldMaximum.getVersion()))) {
275 ruleMaximum.put(definition.getName(), key);
276 }
277 getRuleDefinitions().put(key, definition);
278 ruleContexts.put(key, new ModuleContext(context));
279 }
280
281
282
283
284
285
286
287
288
289
290 public void addChangedRule(final String label, final Rule definition, final ChangedRule cr,
291 final ModuleContext context) {
292 final RuleKey key = new RuleKey(cr.getName(), cr.getVersion());
293 ruleLabels.put(key, label);
294 final RuleKey oldMaximum = (RuleKey) ruleMaximum.get(cr.getName());
295 if (oldMaximum == null || oldMaximum.getVersion() == null || (key.getVersion() != null
296 && 0 < key.getVersion().compareTo(oldMaximum.getVersion()))) {
297 ruleMaximum.put(cr.getName(), key);
298 }
299 getRuleDefinitions().put(key, definition);
300 ruleContexts.put(key, new ModuleContext(context));
301 }
302
303
304
305
306
307
308
309 public RuleKey getRuleKey(final String ruleName) {
310 return (RuleKey) ruleMaximum.get(ruleName);
311 }
312
313
314
315
316
317
318
319 public Rule getRule(final RuleKey key) {
320 return (Rule) getRuleDefinitions().get(key);
321 }
322
323
324
325
326
327
328
329 public String getRuleLabel(final RuleKey key) {
330 return (String) ruleLabels.get(key);
331 }
332
333
334
335
336
337
338
339 public ModuleContext getRuleContext(final RuleKey key) {
340 final ModuleContext context = (ModuleContext) ruleContexts.get(key);
341 if (context != null) {
342 return new ModuleContext(context);
343 }
344 return null;
345 }
346
347
348
349
350
351
352 public Map getPredicateDefinitions() {
353 return this.predicateDefinitions;
354 }
355
356
357
358
359
360
361 public Map getFunctionDefinitions() {
362 return this.functionDefinitions;
363 }
364
365
366
367
368
369
370 public Map getRuleDefinitions() {
371 return this.ruleDefinitions;
372 }
373
374
375
376
377 public void resetNodesToWellFormedUnchecked() {
378 final Iterator i = label2Bo.entrySet().iterator();
379 while (i.hasNext()) {
380 Object obj = i.next();
381 if (obj instanceof KernelNodeBo) {
382 KernelNodeBo bo = (KernelNodeBo) obj;
383 bo.setWellFormed(CheckLevel.UNCHECKED);
384 bo.setProved(CheckLevel.UNCHECKED);
385 }
386 }
387 }
388
389
390
391
392 public void resetNodesToProvedUnchecked() {
393 final Iterator i = label2Bo.entrySet().iterator();
394 while (i.hasNext()) {
395 Object obj = i.next();
396 if (obj instanceof KernelNodeBo) {
397 KernelNodeBo bo = (KernelNodeBo) obj;
398 bo.setProved(CheckLevel.UNCHECKED);
399 }
400 }
401 }
402
403 }