Skip to content

Commit 520fc6f

Browse files
committed
Issue FUML14-9 - Put all ExecutionFactory functionality in base class.
1 parent 5f5b72e commit 520fc6f

4 files changed

Lines changed: 331 additions & 364 deletions

File tree

org.modeldriven.fuml/src/main/java/fuml/semantics/loci/ExecutionFactory.java

Lines changed: 327 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Initial version copyright 2008 Lockheed Martin Corporation, except
44
* as stated in the file entitled Licensing-Information.
55
*
6-
* All modifications copyright 2009-2017 Data Access Technologies, Inc.
6+
* All modifications copyright 2009-2018 Data Access Technologies, Inc.
77
*
88
* Licensed under the Academic Free License version 3.0
99
* (http://www.opensource.org/licenses/afl-3.0.php), except as stated
@@ -13,13 +13,115 @@
1313
package fuml.semantics.loci;
1414

1515
import fuml.Debug;
16+
import fuml.semantics.actions.AcceptCallActionActivation;
17+
import fuml.semantics.actions.AcceptEventActionActivation;
18+
import fuml.semantics.actions.AddStructuralFeatureValueActionActivation;
19+
import fuml.semantics.actions.CallBehaviorActionActivation;
20+
import fuml.semantics.actions.CallOperationActionActivation;
21+
import fuml.semantics.actions.ClearAssociationActionActivation;
22+
import fuml.semantics.actions.ClearStructuralFeatureActionActivation;
23+
import fuml.semantics.actions.ConditionalNodeActivation;
24+
import fuml.semantics.actions.CreateLinkActionActivation;
25+
import fuml.semantics.actions.CreateObjectActionActivation;
26+
import fuml.semantics.actions.DestroyLinkActionActivation;
27+
import fuml.semantics.actions.DestroyObjectActionActivation;
28+
import fuml.semantics.actions.ExpansionNodeActivation;
29+
import fuml.semantics.actions.ExpansionRegionActivation;
30+
import fuml.semantics.actions.InputPinActivation;
31+
import fuml.semantics.actions.LoopNodeActivation;
32+
import fuml.semantics.actions.OutputPinActivation;
33+
import fuml.semantics.actions.ReadExtentActionActivation;
34+
import fuml.semantics.actions.ReadIsClassifiedObjectActionActivation;
35+
import fuml.semantics.actions.ReadLinkActionActivation;
36+
import fuml.semantics.actions.ReadSelfActionActivation;
37+
import fuml.semantics.actions.ReadStructuralFeatureActionActivation;
38+
import fuml.semantics.actions.ReclassifyObjectActionActivation;
39+
import fuml.semantics.actions.ReduceActionActivation;
40+
import fuml.semantics.actions.RemoveStructuralFeatureValueActionActivation;
41+
import fuml.semantics.actions.ReplyActionActivation;
42+
import fuml.semantics.actions.SendSignalActionActivation;
43+
import fuml.semantics.actions.StartClassifierBehaviorActionActivation;
44+
import fuml.semantics.actions.StartObjectBehaviorActionActivation;
45+
import fuml.semantics.actions.StructuredActivityNodeActivation;
46+
import fuml.semantics.actions.TestIdentityActionActivation;
47+
import fuml.semantics.actions.ValueSpecificationActionActivation;
48+
import fuml.semantics.activities.ActivityExecution;
49+
import fuml.semantics.activities.ActivityFinalNodeActivation;
50+
import fuml.semantics.activities.ActivityParameterNodeActivation;
51+
import fuml.semantics.activities.CentralBufferNodeActivation;
52+
import fuml.semantics.activities.DataStoreNodeActivation;
53+
import fuml.semantics.activities.DecisionNodeActivation;
54+
import fuml.semantics.activities.FlowFinalNodeActivation;
55+
import fuml.semantics.activities.ForkNodeActivation;
56+
import fuml.semantics.activities.InitialNodeActivation;
57+
import fuml.semantics.activities.JoinNodeActivation;
58+
import fuml.semantics.activities.MergeNodeActivation;
59+
import fuml.semantics.commonbehavior.CallEventBehavior;
60+
import fuml.semantics.commonbehavior.CallEventExecution;
1661
import fuml.semantics.commonbehavior.Execution;
1762
import fuml.semantics.commonbehavior.OpaqueBehaviorExecution;
1863
import fuml.semantics.values.Evaluation;
64+
import fuml.semantics.values.InstanceValueEvaluation;
65+
import fuml.semantics.values.LiteralBooleanEvaluation;
66+
import fuml.semantics.values.LiteralIntegerEvaluation;
67+
import fuml.semantics.values.LiteralNullEvaluation;
68+
import fuml.semantics.values.LiteralRealEvaluation;
69+
import fuml.semantics.values.LiteralStringEvaluation;
70+
import fuml.semantics.values.LiteralUnlimitedNaturalEvaluation;
71+
import fuml.syntax.actions.AcceptCallAction;
72+
import fuml.syntax.actions.AcceptEventAction;
73+
import fuml.syntax.actions.AddStructuralFeatureValueAction;
74+
import fuml.syntax.actions.CallBehaviorAction;
75+
import fuml.syntax.actions.CallOperationAction;
76+
import fuml.syntax.actions.ClearAssociationAction;
77+
import fuml.syntax.actions.ClearStructuralFeatureAction;
78+
import fuml.syntax.actions.ConditionalNode;
79+
import fuml.syntax.actions.CreateLinkAction;
80+
import fuml.syntax.actions.CreateObjectAction;
81+
import fuml.syntax.actions.DestroyLinkAction;
82+
import fuml.syntax.actions.DestroyObjectAction;
83+
import fuml.syntax.actions.ExpansionNode;
84+
import fuml.syntax.actions.ExpansionRegion;
85+
import fuml.syntax.actions.InputPin;
86+
import fuml.syntax.actions.LoopNode;
87+
import fuml.syntax.actions.OutputPin;
88+
import fuml.syntax.actions.ReadExtentAction;
89+
import fuml.syntax.actions.ReadIsClassifiedObjectAction;
90+
import fuml.syntax.actions.ReadLinkAction;
91+
import fuml.syntax.actions.ReadSelfAction;
92+
import fuml.syntax.actions.ReadStructuralFeatureAction;
93+
import fuml.syntax.actions.ReclassifyObjectAction;
94+
import fuml.syntax.actions.ReduceAction;
95+
import fuml.syntax.actions.RemoveStructuralFeatureValueAction;
96+
import fuml.syntax.actions.ReplyAction;
97+
import fuml.syntax.actions.SendSignalAction;
98+
import fuml.syntax.actions.StartClassifierBehaviorAction;
99+
import fuml.syntax.actions.StartObjectBehaviorAction;
100+
import fuml.syntax.actions.StructuredActivityNode;
101+
import fuml.syntax.actions.TestIdentityAction;
102+
import fuml.syntax.actions.ValueSpecificationAction;
103+
import fuml.syntax.activities.Activity;
104+
import fuml.syntax.activities.ActivityFinalNode;
105+
import fuml.syntax.activities.ActivityParameterNode;
106+
import fuml.syntax.activities.CentralBufferNode;
107+
import fuml.syntax.activities.DataStoreNode;
108+
import fuml.syntax.activities.DecisionNode;
109+
import fuml.syntax.activities.FlowFinalNode;
110+
import fuml.syntax.activities.ForkNode;
111+
import fuml.syntax.activities.InitialNode;
112+
import fuml.syntax.activities.JoinNode;
113+
import fuml.syntax.activities.MergeNode;
114+
import fuml.syntax.classification.InstanceValue;
19115
import fuml.syntax.commonbehavior.OpaqueBehavior;
20116
import fuml.syntax.simpleclassifiers.PrimitiveType;
117+
import fuml.syntax.values.LiteralBoolean;
118+
import fuml.syntax.values.LiteralInteger;
119+
import fuml.syntax.values.LiteralNull;
120+
import fuml.syntax.values.LiteralReal;
121+
import fuml.syntax.values.LiteralString;
122+
import fuml.syntax.values.LiteralUnlimitedNatural;
21123

22-
public abstract class ExecutionFactory extends org.modeldriven.fuml.FumlObject {
124+
public class ExecutionFactory extends org.modeldriven.fuml.FumlObject {
23125

24126
public fuml.semantics.loci.Locus locus = null;
25127
public fuml.semantics.commonbehavior.OpaqueBehaviorExecutionList primitiveBehaviorPrototypes = new fuml.semantics.commonbehavior.OpaqueBehaviorExecutionList();
@@ -72,8 +174,229 @@ public fuml.semantics.values.Evaluation createEvaluation(
72174

73175
} // createEvaluation
74176

75-
public abstract fuml.semantics.loci.SemanticVisitor instantiateVisitor(
76-
fuml.syntax.commonstructure.Element element);
177+
public fuml.semantics.loci.SemanticVisitor instantiateVisitor(
178+
fuml.syntax.commonstructure.Element element) {
179+
// Instantiate a visitor object for the given element.
180+
181+
SemanticVisitor visitor = null;
182+
183+
// Formerly Level L1
184+
185+
if (element instanceof LiteralBoolean) {
186+
visitor = new LiteralBooleanEvaluation();
187+
}
188+
189+
else if (element instanceof LiteralString) {
190+
visitor = new LiteralStringEvaluation();
191+
}
192+
193+
else if (element instanceof LiteralNull) {
194+
visitor = new LiteralNullEvaluation();
195+
}
196+
197+
else if (element instanceof InstanceValue) {
198+
visitor = new InstanceValueEvaluation();
199+
}
200+
201+
else if (element instanceof LiteralUnlimitedNatural) {
202+
visitor = new LiteralUnlimitedNaturalEvaluation();
203+
}
204+
205+
else if (element instanceof LiteralInteger) {
206+
visitor = new LiteralIntegerEvaluation();
207+
}
208+
209+
else if (element instanceof LiteralReal) {
210+
visitor = new LiteralRealEvaluation();
211+
}
212+
213+
else if (element instanceof CallEventBehavior) {
214+
visitor = new CallEventExecution();
215+
216+
// Formerly Level L2
217+
218+
} else if (element instanceof Activity) {
219+
visitor = new ActivityExecution();
220+
}
221+
222+
else if (element instanceof ActivityParameterNode) {
223+
visitor = new ActivityParameterNodeActivation();
224+
}
225+
226+
else if (element instanceof CentralBufferNode) {
227+
visitor = new CentralBufferNodeActivation();
228+
}
229+
230+
else if (element instanceof InitialNode) {
231+
visitor = new InitialNodeActivation();
232+
}
233+
234+
else if (element instanceof ActivityFinalNode) {
235+
visitor = new ActivityFinalNodeActivation();
236+
}
237+
238+
else if (element instanceof FlowFinalNode) {
239+
visitor = new FlowFinalNodeActivation();
240+
}
241+
242+
else if (element instanceof JoinNode) {
243+
visitor = new JoinNodeActivation();
244+
}
245+
246+
else if (element instanceof MergeNode) {
247+
visitor = new MergeNodeActivation();
248+
}
249+
250+
else if (element instanceof ForkNode) {
251+
visitor = new ForkNodeActivation();
252+
}
253+
254+
else if (element instanceof DecisionNode) {
255+
visitor = new DecisionNodeActivation();
256+
}
257+
258+
else if (element instanceof InputPin) {
259+
visitor = new InputPinActivation();
260+
}
261+
262+
else if (element instanceof OutputPin) {
263+
visitor = new OutputPinActivation();
264+
}
265+
266+
else if (element instanceof CallBehaviorAction) {
267+
visitor = new CallBehaviorActionActivation();
268+
}
269+
270+
else if (element instanceof CallOperationAction) {
271+
visitor = new CallOperationActionActivation();
272+
}
273+
274+
else if (element instanceof SendSignalAction) {
275+
visitor = new SendSignalActionActivation();
276+
}
277+
278+
else if (element instanceof ReadSelfAction) {
279+
visitor = new ReadSelfActionActivation();
280+
}
281+
282+
else if (element instanceof TestIdentityAction) {
283+
visitor = new TestIdentityActionActivation();
284+
}
285+
286+
else if (element instanceof ValueSpecificationAction) {
287+
visitor = new ValueSpecificationActionActivation();
288+
}
289+
290+
else if (element instanceof CreateObjectAction) {
291+
visitor = new CreateObjectActionActivation();
292+
}
293+
294+
else if (element instanceof DestroyObjectAction) {
295+
visitor = new DestroyObjectActionActivation();
296+
}
297+
298+
else if (element instanceof ReadStructuralFeatureAction) {
299+
visitor = new ReadStructuralFeatureActionActivation();
300+
}
301+
302+
else if (element instanceof ClearStructuralFeatureAction) {
303+
visitor = new ClearStructuralFeatureActionActivation();
304+
}
305+
306+
else if (element instanceof AddStructuralFeatureValueAction) {
307+
visitor = new AddStructuralFeatureValueActionActivation();
308+
}
309+
310+
else if (element instanceof RemoveStructuralFeatureValueAction) {
311+
visitor = new RemoveStructuralFeatureValueActionActivation();
312+
}
313+
314+
else if (element instanceof ReadLinkAction) {
315+
visitor = new ReadLinkActionActivation();
316+
}
317+
318+
else if (element instanceof ClearAssociationAction) {
319+
visitor = new ClearAssociationActionActivation();
320+
}
321+
322+
else if (element instanceof CreateLinkAction) {
323+
visitor = new CreateLinkActionActivation();
324+
}
325+
326+
else if (element instanceof DestroyLinkAction) {
327+
visitor = new DestroyLinkActionActivation();
328+
}
329+
330+
// Formerly Level L3
331+
332+
else if (element instanceof DataStoreNode) {
333+
visitor = new DataStoreNodeActivation();
334+
}
335+
336+
else if (element instanceof ConditionalNode) {
337+
visitor = new ConditionalNodeActivation();
338+
}
339+
340+
else if (element instanceof LoopNode) {
341+
visitor = new LoopNodeActivation();
342+
}
343+
344+
else if (element instanceof ExpansionRegion) {
345+
visitor = new ExpansionRegionActivation();
346+
}
347+
348+
// Note: Since ConditionalNode, LoopNode and ExpansionRegion are
349+
// subclasses of StructuredActivityNode, element must be tested
350+
// against the three subclasses before the superclass.
351+
else if (element instanceof StructuredActivityNode) {
352+
visitor = new StructuredActivityNodeActivation();
353+
}
354+
355+
else if (element instanceof ExpansionNode) {
356+
visitor = new ExpansionNodeActivation();
357+
}
358+
359+
else if (element instanceof ReadExtentAction) {
360+
visitor = new ReadExtentActionActivation();
361+
}
362+
363+
else if (element instanceof ReadIsClassifiedObjectAction) {
364+
visitor = new ReadIsClassifiedObjectActionActivation();
365+
}
366+
367+
else if (element instanceof ReclassifyObjectAction) {
368+
visitor = new ReclassifyObjectActionActivation();
369+
}
370+
371+
else if (element instanceof StartObjectBehaviorAction) {
372+
visitor = new StartObjectBehaviorActionActivation();
373+
}
374+
375+
else if (element instanceof StartClassifierBehaviorAction) {
376+
visitor = new StartClassifierBehaviorActionActivation();
377+
}
378+
379+
// Note: Since AcceptCallAction is a subclass of AcceptEventAction,
380+
// element must be tested against AcceptCallAction before
381+
// AcceptEventAction.
382+
else if (element instanceof AcceptCallAction) {
383+
visitor = new AcceptCallActionActivation();
384+
}
385+
386+
else if (element instanceof AcceptEventAction) {
387+
visitor = new AcceptEventActionActivation();
388+
}
389+
390+
else if (element instanceof ReplyAction) {
391+
visitor = new ReplyActionActivation();
392+
}
393+
394+
else if (element instanceof ReduceAction) {
395+
visitor = new ReduceActionActivation();
396+
}
397+
398+
return visitor;
399+
}
77400

78401
public fuml.semantics.commonbehavior.OpaqueBehaviorExecution instantiateOpaqueBehaviorExecution(
79402
fuml.syntax.commonbehavior.OpaqueBehavior behavior) {

0 commit comments

Comments
 (0)