Merge lp:~danilovesky/workcraft/trunk-refactor-stg-generator into lp:workcraft

Proposed by Danil Sokolov
Status: Merged
Merged at revision: 647
Proposed branch: lp:~danilovesky/workcraft/trunk-refactor-stg-generator
Merge into: lp:workcraft
Diff against target: 6002 lines (+2598/-1271)
55 files modified
CircuitPlugin/src/org/workcraft/plugins/circuit/stg/CircuitToStgConverter.java (+31/-38)
CircuitPlugin/src/org/workcraft/plugins/circuit/stg/NodeStg.java (+0/-29)
CircuitPlugin/src/org/workcraft/plugins/circuit/stg/SignalStg.java (+0/-42)
CircuitPlugin/src/org/workcraft/plugins/circuit/tools/CircuitSimulationTool.java (+7/-7)
DfsPlugin/src/org/workcraft/plugins/dfs/stg/BinaryRegisterStg.java (+1/-0)
DfsPlugin/src/org/workcraft/plugins/dfs/stg/CounterflowLogicStg.java (+1/-0)
DfsPlugin/src/org/workcraft/plugins/dfs/stg/CounterflowRegisterStg.java (+1/-0)
DfsPlugin/src/org/workcraft/plugins/dfs/stg/LogicStg.java (+1/-0)
DfsPlugin/src/org/workcraft/plugins/dfs/stg/NodeStg.java (+0/-30)
DfsPlugin/src/org/workcraft/plugins/dfs/stg/RegisterStg.java (+1/-0)
DfsPlugin/src/org/workcraft/plugins/dfs/stg/StgGenerator.java (+262/-244)
DfsPlugin/src/org/workcraft/plugins/dfs/tasks/CheckDataflowDeadlockTask.java (+1/-1)
DfsPlugin/src/org/workcraft/plugins/dfs/tasks/CheckDataflowHazardTask.java (+1/-1)
DfsPlugin/src/org/workcraft/plugins/dfs/tasks/CheckDataflowTask.java (+1/-1)
DfsPlugin/src/org/workcraft/plugins/dfs/tools/DfsSimulationTool.java (+1/-1)
DfsPlugin/src/org/workcraft/plugins/dfs/tools/StgGeneratorTool.java (+1/-1)
MpsatPlugin/src/org/workcraft/plugins/mpsat/tasks/MpsatTask.java (+1/-1)
PetriNetPlugin/src/org/workcraft/plugins/petri/tools/PetriNetSimulationTool.java (+52/-6)
SONPlugin/src/org/workcraft/plugins/son/tools/SONSimulationTool.java (+4/-2)
STGPlugin/src/org/workcraft/plugins/stg/generator/NodeStg.java (+38/-0)
STGPlugin/src/org/workcraft/plugins/stg/generator/SignalStg.java (+52/-0)
STGPlugin/src/org/workcraft/plugins/stg/generator/StgGenerator.java (+294/-0)
WorkcraftCore/src/org/workcraft/plugins/shared/CommonVisualSettings.java (+1/-1)
WorkcraftRunner/.fatjar (+0/-14)
XmasPlugin/src/org/workcraft/plugins/xmas/XmasSettings.java (+14/-14)
XmasPlugin/src/org/workcraft/plugins/xmas/components/StateDecoration.java (+7/-0)
XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualQueueComponent.java (+27/-20)
XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualSinkComponent.java (+28/-0)
XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualSourceComponent.java (+29/-2)
XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualSwitchComponent.java (+47/-0)
XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualXmasComponent.java (+4/-4)
XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualXmasConnection.java (+3/-3)
XmasPlugin/src/org/workcraft/plugins/xmas/stg/ContactStg.java (+36/-0)
XmasPlugin/src/org/workcraft/plugins/xmas/stg/ForkStg.java (+5/-4)
XmasPlugin/src/org/workcraft/plugins/xmas/stg/FunctionStg.java (+4/-3)
XmasPlugin/src/org/workcraft/plugins/xmas/stg/JoinStg.java (+5/-4)
XmasPlugin/src/org/workcraft/plugins/xmas/stg/MergeStg.java (+39/-0)
XmasPlugin/src/org/workcraft/plugins/xmas/stg/NodeStg.java (+0/-38)
XmasPlugin/src/org/workcraft/plugins/xmas/stg/QueueStg.java (+50/-65)
XmasPlugin/src/org/workcraft/plugins/xmas/stg/SignalStg.java (+0/-47)
XmasPlugin/src/org/workcraft/plugins/xmas/stg/SinkStg.java (+4/-2)
XmasPlugin/src/org/workcraft/plugins/xmas/stg/SlotStg.java (+40/-0)
XmasPlugin/src/org/workcraft/plugins/xmas/stg/SourceStg.java (+4/-2)
XmasPlugin/src/org/workcraft/plugins/xmas/stg/StgGenerator.java (+1118/-511)
XmasPlugin/src/org/workcraft/plugins/xmas/stg/SwitchStg.java (+44/-0)
XmasPlugin/src/org/workcraft/plugins/xmas/tools/JsonExport.java (+1/-1)
XmasPlugin/src/org/workcraft/plugins/xmas/tools/PNetExt.java (+5/-6)
XmasPlugin/src/org/workcraft/plugins/xmas/tools/PNetGen.java (+7/-9)
XmasPlugin/src/org/workcraft/plugins/xmas/tools/StgGeneratorTool.java (+1/-1)
XmasPlugin/src/org/workcraft/plugins/xmas/tools/SyncTool.java (+2/-2)
XmasPlugin/src/org/workcraft/plugins/xmas/tools/VerAnalysis.java (+28/-12)
XmasPlugin/src/org/workcraft/plugins/xmas/tools/VerConfTool.java (+11/-17)
XmasPlugin/src/org/workcraft/plugins/xmas/tools/VerQuery.java (+32/-18)
XmasPlugin/src/org/workcraft/plugins/xmas/tools/VerTool.java (+26/-10)
XmasPlugin/src/org/workcraft/plugins/xmas/tools/XmasSimulationTool.java (+225/-57)
To merge this branch: bzr merge lp:~danilovesky/workcraft/trunk-refactor-stg-generator
Reviewer Review Type Date Requested Status
Danil Sokolov Approve
Review via email: mp+272416@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Danil Sokolov (danilovesky) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/stg/CircuitToStgConverter.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/stg/CircuitToStgConverter.java 2015-07-26 21:27:56 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/stg/CircuitToStgConverter.java 2015-09-25 14:54:20 +0000
@@ -16,6 +16,7 @@
16import org.workcraft.dom.Node;16import org.workcraft.dom.Node;
17import org.workcraft.dom.hierarchy.NamespaceHelper;17import org.workcraft.dom.hierarchy.NamespaceHelper;
18import org.workcraft.dom.visual.Movable;18import org.workcraft.dom.visual.Movable;
19import org.workcraft.dom.visual.Positioning;
19import org.workcraft.dom.visual.TransformHelper;20import org.workcraft.dom.visual.TransformHelper;
20import org.workcraft.dom.visual.VisualNode;21import org.workcraft.dom.visual.VisualNode;
21import org.workcraft.exceptions.InvalidConnectionException;22import org.workcraft.exceptions.InvalidConnectionException;
@@ -41,6 +42,7 @@
41import org.workcraft.plugins.stg.VisualImplicitPlaceArc;42import org.workcraft.plugins.stg.VisualImplicitPlaceArc;
42import org.workcraft.plugins.stg.VisualSTG;43import org.workcraft.plugins.stg.VisualSTG;
43import org.workcraft.plugins.stg.VisualSignalTransition;44import org.workcraft.plugins.stg.VisualSignalTransition;
45import org.workcraft.plugins.stg.generator.SignalStg;
44import org.workcraft.util.Geometry;46import org.workcraft.util.Geometry;
45import org.workcraft.util.Hierarchy;47import org.workcraft.util.Hierarchy;
46import org.workcraft.util.TwoWayMap;48import org.workcraft.util.TwoWayMap;
@@ -53,12 +55,12 @@
5355
54 private static final double SCALE_X = 4.0;56 private static final double SCALE_X = 4.0;
55 private static final double SCALE_Y = 4.0;57 private static final double SCALE_Y = 4.0;
56 private static final Point2D OFFSET_P1 = new Point2D.Double(0.0, -1.0);58 private static final Point2D OFFSET_P1 = new Point2D.Double(0.0, -2.0);
57 private static final Point2D OFFSET_P0 = new Point2D.Double(0.0, 1.0);59 private static final Point2D OFFSET_P0 = new Point2D.Double(0.0, +2.0);
58 private static final Point2D OFFSET_INIT_PLUS = new Point2D.Double(0.0, -1.0);60 private static final Point2D OFFSET_INIT_PLUS = new Point2D.Double(0.0, -2.0);
59 private static final Point2D OFFSET_INIT_MINUS = new Point2D.Double(0.0, 1.0);61 private static final Point2D OFFSET_INIT_MINUS = new Point2D.Double(0.0, +2.0);
60 private static final Point2D OFFSET_INC_PLUS = new Point2D.Double(0.0, -2.0);62 private static final Point2D OFFSET_INC_PLUS = new Point2D.Double(0.0, -1.0);
61 private static final Point2D OFFSET_INC_MINUS = new Point2D.Double(0.0, 2.0);63 private static final Point2D OFFSET_INC_MINUS = new Point2D.Double(0.0, +1.0);
6264
63 private final VisualCircuit circuit;65 private final VisualCircuit circuit;
64 private final VisualSTG stg;66 private final VisualSTG stg;
@@ -176,13 +178,15 @@
176 String signalName = CircuitUtils.getSignalName(circuit, signal);178 String signalName = CircuitUtils.getSignalName(circuit, signal);
177179
178 VisualPlace zeroPlace = stg.createPlace(signalName + NAME_SUFFIX_0, container);180 VisualPlace zeroPlace = stg.createPlace(signalName + NAME_SUFFIX_0, container);
179 zeroPlace.setLabel(signalName + LABEL_SUFFIX_0);181 zeroPlace.setNamePositioning(Positioning.TOP);
182 zeroPlace.setLabelPositioning(Positioning.BOTTOM);
180 if (!signal.getReferencedContact().getInitToOne()) {183 if (!signal.getReferencedContact().getInitToOne()) {
181 zeroPlace.getReferencedPlace().setTokens(1);184 zeroPlace.getReferencedPlace().setTokens(1);
182 }185 }
183 186
184 VisualPlace onePlace = stg.createPlace(signalName + NAME_SUFFIX_1, container);187 VisualPlace onePlace = stg.createPlace(signalName + NAME_SUFFIX_1, container);
185 onePlace.setLabel(signalName + LABEL_SUFFIX_1);188 onePlace.setNamePositioning(Positioning.BOTTOM);
189 onePlace.setLabelPositioning(Positioning.TOP);
186 if (signal.getReferencedContact().getInitToOne()) {190 if (signal.getReferencedContact().getInitToOne()) {
187 onePlace.getReferencedPlace().setTokens(1);191 onePlace.getReferencedPlace().setTokens(1);
188 }192 }
@@ -217,9 +221,9 @@
217221
218 private void createSignalStgTransitions(VisualContact driver, Dnf dnf, Direction direction) {222 private void createSignalStgTransitions(VisualContact driver, Dnf dnf, Direction direction) {
219 SignalStg driverStg = driverToStgMap.getValue(driver);223 SignalStg driverStg = driverToStgMap.getValue(driver);
220 VisualPlace predPlace = (direction == Direction.PLUS ? driverStg.P0 : driverStg.P1); 224 VisualPlace predPlace = (direction == Direction.PLUS ? driverStg.zero : driverStg.one);
221 VisualPlace succPlace = (direction == Direction.PLUS ? driverStg.P1 : driverStg.P0); 225 VisualPlace succPlace = (direction == Direction.PLUS ? driverStg.one : driverStg.zero);
222 HashSet<VisualSignalTransition> transitions = (direction == Direction.PLUS ? driverStg.Rs : driverStg.Fs); 226 Collection<VisualSignalTransition> transitions = (direction == Direction.PLUS ? driverStg.riseList : driverStg.fallList);
223 227
224 TreeSet<DnfClause> clauses = new TreeSet<DnfClause>(228 TreeSet<DnfClause> clauses = new TreeSet<DnfClause>(
225 new Comparator<DnfClause>() {229 new Comparator<DnfClause>() {
@@ -258,7 +262,7 @@
258 if (sourceDriverStg == null) {262 if (sourceDriverStg == null) {
259 throw new RuntimeException("No source for '" + circuit.getMathName(sourceContact) + "' while generating '" + signalName + "'.");263 throw new RuntimeException("No source for '" + circuit.getMathName(sourceContact) + "' while generating '" + signalName + "'.");
260 }264 }
261 VisualPlace place = literal.getNegation() ? sourceDriverStg.P0 : sourceDriverStg.P1;265 VisualPlace place = literal.getNegation() ? sourceDriverStg.zero : sourceDriverStg.one;
262 placesToRead.add(place);266 placesToRead.add(place);
263 }267 }
264 268
@@ -267,14 +271,8 @@
267 }271 }
268 272
269 for (VisualPlace place : placesToRead) {273 for (VisualPlace place : placesToRead) {
270 // FIXME: Why duplicate arcs would be created in the first place?
271 try {274 try {
272 if(stg.getConnection(place, transition) == null) {275 stg.connectUndirected(place, transition);
273 stg.connect(place, transition);
274 }
275 if(stg.getConnection(transition, place) == null) {
276 stg.connect(transition, place);
277 }
278 } catch (InvalidConnectionException e) {276 } catch (InvalidConnectionException e) {
279 throw new RuntimeException(e);277 throw new RuntimeException(e);
280 }278 }
@@ -333,17 +331,15 @@
333 }331 }
334332
335 if ((zeroPlace != null) && (onePlace != null)) {333 if ((zeroPlace != null) && (onePlace != null)) {
336 zeroPlace.setLabel(signalName + LABEL_SUFFIX_0);
337 onePlace.setLabel(signalName + LABEL_SUFFIX_1);
338 SignalStg signalStg = new SignalStg(zeroPlace, onePlace);334 SignalStg signalStg = new SignalStg(zeroPlace, onePlace);
339 result.put(driver, signalStg);335 result.put(driver, signalStg);
340 for (VisualSignalTransition transition: stg.getVisualSignalTransitions()) {336 for (VisualSignalTransition transition: stg.getVisualSignalTransitions()) {
341 if (signalName.equals(transition.getSignalName())) {337 if (signalName.equals(transition.getSignalName())) {
342 if (transition.getDirection() == Direction.PLUS) {338 if (transition.getDirection() == Direction.PLUS) {
343 signalStg.Rs.add(transition);339 signalStg.riseList.add(transition);
344 }340 }
345 if (transition.getDirection() == Direction.MINUS) {341 if (transition.getDirection() == Direction.MINUS) {
346 signalStg.Fs.add(transition);342 signalStg.fallList.add(transition);
347 }343 }
348 }344 }
349 }345 }
@@ -358,8 +354,8 @@
358 for (VisualContact driver: drivers) {354 for (VisualContact driver: drivers) {
359 SignalStg signalStg = driverToStgMap.getValue(driver);355 SignalStg signalStg = driverToStgMap.getValue(driver);
360 if (signalStg != null) {356 if (signalStg != null) {
361 signalStg.Rs.removeAll(redundantTransitions);357 signalStg.riseList.removeAll(redundantTransitions);
362 signalStg.Fs.removeAll(redundantTransitions);358 signalStg.fallList.removeAll(redundantTransitions);
363 }359 }
364 }360 }
365 stg.remove(redundantTransitions);361 stg.remove(redundantTransitions);
@@ -370,8 +366,8 @@
370 for (VisualContact driver: drivers) {366 for (VisualContact driver: drivers) {
371 SignalStg signalStg = driverToStgMap.getValue(driver);367 SignalStg signalStg = driverToStgMap.getValue(driver);
372 if (signalStg != null) {368 if (signalStg != null) {
373 HashSet<Node> deadPostset = new HashSet<Node>(stg.getPostset(signalStg.P0));369 HashSet<Node> deadPostset = new HashSet<Node>(stg.getPostset(signalStg.zero));
374 deadPostset.retainAll(stg.getPostset(signalStg.P1));370 deadPostset.retainAll(stg.getPostset(signalStg.one));
375 result.addAll(deadPostset);371 result.addAll(deadPostset);
376 }372 }
377 }373 }
@@ -383,14 +379,14 @@
383 for (VisualContact driver: drivers) {379 for (VisualContact driver: drivers) {
384 SignalStg signalStg = driverToStgMap.getValue(driver);380 SignalStg signalStg = driverToStgMap.getValue(driver);
385 if (signalStg != null) {381 if (signalStg != null) {
386 result.addAll(getDuplicates(signalStg.Rs));382 result.addAll(getDuplicates(signalStg.riseList));
387 result.addAll(getDuplicates(signalStg.Fs));383 result.addAll(getDuplicates(signalStg.fallList));
388 }384 }
389 }385 }
390 return result;386 return result;
391 }387 }
392 388
393 private HashSet<Node> getDuplicates(HashSet<VisualSignalTransition> transitions) {389 private HashSet<Node> getDuplicates(Collection<VisualSignalTransition> transitions) {
394 HashSet<Node> result = new HashSet<>();390 HashSet<Node> result = new HashSet<>();
395 for (VisualSignalTransition t1: transitions) {391 for (VisualSignalTransition t1: transitions) {
396 if (result.contains(t1)) continue;392 if (result.contains(t1)) continue;
@@ -414,18 +410,18 @@
414 if (signalStg != null) {410 if (signalStg != null) {
415 VisualContact signal = CircuitUtils.findSignal(circuit, driver); 411 VisualContact signal = CircuitUtils.findSignal(circuit, driver);
416 Point2D centerPosition = getPosition(signal);412 Point2D centerPosition = getPosition(signal);
417 setPosition(signalStg.P0, Geometry.add(centerPosition, OFFSET_P0));413 setPosition(signalStg.zero, Geometry.add(centerPosition, OFFSET_P0));
418 setPosition(signalStg.P1, Geometry.add(centerPosition, OFFSET_P1));414 setPosition(signalStg.one, Geometry.add(centerPosition, OFFSET_P1));
419 415
420 centerPosition = Geometry.add(centerPosition, getDirectionOffset(signal));416 centerPosition = Geometry.add(centerPosition, getDirectionOffset(signal));
421 Point2D plusPosition = Geometry.add(centerPosition, OFFSET_INIT_PLUS);417 Point2D plusPosition = Geometry.add(centerPosition, OFFSET_INIT_PLUS);
422 for (VisualSignalTransition transition: signalStg.Rs) {418 for (VisualSignalTransition transition: signalStg.riseList) {
423 setPosition(transition, plusPosition);419 setPosition(transition, plusPosition);
424 plusPosition = Geometry.add(plusPosition, OFFSET_INC_PLUS);420 plusPosition = Geometry.add(plusPosition, OFFSET_INC_PLUS);
425 }421 }
426422
427 Point2D minusPosition = Geometry.add(centerPosition, OFFSET_INIT_MINUS);423 Point2D minusPosition = Geometry.add(centerPosition, OFFSET_INIT_MINUS);
428 for (VisualSignalTransition transition: signalStg.Fs) {424 for (VisualSignalTransition transition: signalStg.fallList) {
429 setPosition(transition, minusPosition);425 setPosition(transition, minusPosition);
430 minusPosition = Geometry.add(minusPosition, OFFSET_INC_MINUS);426 minusPosition = Geometry.add(minusPosition, OFFSET_INC_MINUS);
431 }427 }
@@ -465,10 +461,7 @@
465 SignalStg signalStg = driverToStgMap.getValue(driver);461 SignalStg signalStg = driverToStgMap.getValue(driver);
466 if (signalStg != null) {462 if (signalStg != null) {
467 Collection<Node> nodesToGroup = new LinkedList<Node>();463 Collection<Node> nodesToGroup = new LinkedList<Node>();
468 nodesToGroup.add(signalStg.P1);464 nodesToGroup.addAll(signalStg.getAllNodes());
469 nodesToGroup.add(signalStg.P0);
470 nodesToGroup.addAll(signalStg.Rs);
471 nodesToGroup.addAll(signalStg.Fs);
472465
473 Container currentLevel = null;466 Container currentLevel = null;
474 Container oldLevel = stg.getCurrentLevel();467 Container oldLevel = stg.getCurrentLevel();
475468
=== removed file 'CircuitPlugin/src/org/workcraft/plugins/circuit/stg/NodeStg.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/stg/NodeStg.java 2015-05-06 20:28:22 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/stg/NodeStg.java 1970-01-01 00:00:00 +0000
@@ -1,29 +0,0 @@
1package org.workcraft.plugins.circuit.stg;
2
3import java.util.List;
4
5import org.workcraft.dom.Node;
6import org.workcraft.plugins.petri.VisualPlace;
7import org.workcraft.plugins.stg.VisualSignalTransition;
8
9public abstract class NodeStg {
10 public abstract List<VisualPlace> getAllVisualPlaces();
11 public abstract List<VisualSignalTransition> getAllVisualTransitions();
12
13 public boolean containsDirectlyOrByReference(Node n) {
14 if (n != null) {
15 for (VisualPlace p: getAllVisualPlaces()) {
16 if ((n == p) || ((p != null) && (n == p.getReferencedPlace()))) {
17 return true;
18 }
19 }
20 for (VisualSignalTransition t: getAllVisualTransitions()) {
21 if ((n == t) || ((t != null) && (n == t.getReferencedTransition()))) {
22 return true;
23 }
24 }
25 }
26 return false;
27 }
28
29}
300
=== removed file 'CircuitPlugin/src/org/workcraft/plugins/circuit/stg/SignalStg.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/stg/SignalStg.java 2015-05-06 20:28:22 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/stg/SignalStg.java 1970-01-01 00:00:00 +0000
@@ -1,42 +0,0 @@
1package org.workcraft.plugins.circuit.stg;
2
3import java.util.ArrayList;
4import java.util.Arrays;
5import java.util.HashSet;
6import java.util.List;
7
8import org.workcraft.plugins.petri.VisualPlace;
9import org.workcraft.plugins.stg.VisualSignalTransition;
10
11
12public class SignalStg extends NodeStg {
13 public final VisualPlace P0;
14 public final VisualPlace P1;
15 public final HashSet<VisualSignalTransition> Rs;
16 public final HashSet<VisualSignalTransition> Fs;
17
18 public SignalStg(VisualPlace P0, VisualPlace P1) {
19 this(P0, P1, new HashSet<VisualSignalTransition>(), new HashSet<VisualSignalTransition>());
20 }
21
22 public SignalStg(VisualPlace P0, VisualPlace P1, HashSet<VisualSignalTransition> Rs, HashSet<VisualSignalTransition> Fs) {
23 this.P0 = P0;
24 this.P1 = P1;
25 this.Rs = Rs;
26 this.Fs = Fs;
27 }
28
29 @Override
30 public List<VisualSignalTransition> getAllVisualTransitions() {
31 List<VisualSignalTransition> result = new ArrayList<VisualSignalTransition>();
32 result.addAll(Rs);
33 result.addAll(Fs);
34 return result;
35 }
36
37 @Override
38 public List<VisualPlace> getAllVisualPlaces() {
39 return Arrays.asList(P0, P1);
40 }
41
42}
430
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/tools/CircuitSimulationTool.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/tools/CircuitSimulationTool.java 2015-06-30 13:42:58 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/tools/CircuitSimulationTool.java 2015-09-25 14:54:20 +0000
@@ -27,13 +27,13 @@
27import org.workcraft.plugins.circuit.VisualContact;27import org.workcraft.plugins.circuit.VisualContact;
28import org.workcraft.plugins.circuit.VisualJoint;28import org.workcraft.plugins.circuit.VisualJoint;
29import org.workcraft.plugins.circuit.stg.CircuitToStgConverter;29import org.workcraft.plugins.circuit.stg.CircuitToStgConverter;
30import org.workcraft.plugins.circuit.stg.SignalStg;
31import org.workcraft.plugins.petri.Place;30import org.workcraft.plugins.petri.Place;
32import org.workcraft.plugins.petri.Transition;31import org.workcraft.plugins.petri.Transition;
33import org.workcraft.plugins.shared.CommonSimulationSettings;32import org.workcraft.plugins.shared.CommonSimulationSettings;
34import org.workcraft.plugins.stg.LabelParser;33import org.workcraft.plugins.stg.LabelParser;
35import org.workcraft.plugins.stg.SignalTransition;34import org.workcraft.plugins.stg.SignalTransition;
36import org.workcraft.plugins.stg.VisualSignalTransition;35import org.workcraft.plugins.stg.VisualSignalTransition;
36import org.workcraft.plugins.stg.generator.SignalStg;
37import org.workcraft.plugins.stg.tools.StgSimulationTool;37import org.workcraft.plugins.stg.tools.StgSimulationTool;
38import org.workcraft.util.Func;38import org.workcraft.util.Func;
3939
@@ -149,7 +149,7 @@
149 if ((converter != null) && contact.isDriver()) {149 if ((converter != null) && contact.isDriver()) {
150 SignalStg signalStg = converter.getSignalStg(contact);150 SignalStg signalStg = converter.getSignalStg(contact);
151 if (signalStg != null) {151 if (signalStg != null) {
152 for (VisualSignalTransition transition : signalStg.getAllVisualTransitions()) {152 for (VisualSignalTransition transition : signalStg.getAllTransitions()) {
153 if (net.isEnabled(transition.getReferencedTransition())) {153 if (net.isEnabled(transition.getReferencedTransition())) {
154 result = transition.getReferencedTransition();154 result = transition.getReferencedTransition();
155 break;155 break;
@@ -209,10 +209,10 @@
209 SignalStg signalStg = converter.getSignalStg(contact);209 SignalStg signalStg = converter.getSignalStg(contact);
210 if (signalStg != null) {210 if (signalStg != null) {
211 Node traceCurrentNode = getTraceCurrentNode();211 Node traceCurrentNode = getTraceCurrentNode();
212 final boolean isOne = (signalStg.P1.getReferencedPlace().getTokens() == 1);212 final boolean isOne = (signalStg.one.getReferencedPlace().getTokens() == 1);
213 final boolean isZero = (signalStg.P0.getReferencedPlace().getTokens() == 1);213 final boolean isZero = (signalStg.zero.getReferencedPlace().getTokens() == 1);
214 final boolean isExcited = (getContactExcitedTransition(contact) != null);214 final boolean isExcited = (getContactExcitedTransition(contact) != null);
215 final boolean isInTrace = (signalStg.containsDirectlyOrByReference(traceCurrentNode));215 final boolean isInTrace = (signalStg.contains(traceCurrentNode));
216 return new Decoration() {216 return new Decoration() {
217 @Override217 @Override
218 public Color getColorisation() {218 public Color getColorisation() {
@@ -248,8 +248,8 @@
248 } else if ((node instanceof VisualJoint) || (node instanceof VisualCircuitConnection)) {248 } else if ((node instanceof VisualJoint) || (node instanceof VisualCircuitConnection)) {
249 SignalStg signalStg = converter.getSignalStg((VisualNode)node);249 SignalStg signalStg = converter.getSignalStg((VisualNode)node);
250 if (signalStg != null) {250 if (signalStg != null) {
251 final boolean isOne = (signalStg.P1.getReferencedPlace().getTokens() == 1);251 final boolean isOne = (signalStg.one.getReferencedPlace().getTokens() == 1);
252 final boolean isZero = (signalStg.P0.getReferencedPlace().getTokens() == 1);252 final boolean isZero = (signalStg.zero.getReferencedPlace().getTokens() == 1);
253 return new Decoration() {253 return new Decoration() {
254 @Override254 @Override
255 public Color getColorisation() {255 public Color getColorisation() {
256256
=== modified file 'DfsPlugin/src/org/workcraft/plugins/dfs/stg/BinaryRegisterStg.java'
--- DfsPlugin/src/org/workcraft/plugins/dfs/stg/BinaryRegisterStg.java 2013-09-10 15:21:42 +0000
+++ DfsPlugin/src/org/workcraft/plugins/dfs/stg/BinaryRegisterStg.java 2015-09-25 14:54:20 +0000
@@ -10,6 +10,7 @@
10import org.workcraft.dom.Node;10import org.workcraft.dom.Node;
11import org.workcraft.plugins.petri.VisualPlace;11import org.workcraft.plugins.petri.VisualPlace;
12import org.workcraft.plugins.stg.VisualSignalTransition;12import org.workcraft.plugins.stg.VisualSignalTransition;
13import org.workcraft.plugins.stg.generator.NodeStg;
1314
14public class BinaryRegisterStg extends NodeStg {15public class BinaryRegisterStg extends NodeStg {
15 public final VisualPlace M0; // M=016 public final VisualPlace M0; // M=0
1617
=== modified file 'DfsPlugin/src/org/workcraft/plugins/dfs/stg/CounterflowLogicStg.java'
--- DfsPlugin/src/org/workcraft/plugins/dfs/stg/CounterflowLogicStg.java 2015-08-27 21:29:15 +0000
+++ DfsPlugin/src/org/workcraft/plugins/dfs/stg/CounterflowLogicStg.java 2015-09-25 14:54:20 +0000
@@ -10,6 +10,7 @@
10import org.workcraft.dom.Node;10import org.workcraft.dom.Node;
11import org.workcraft.plugins.petri.VisualPlace;11import org.workcraft.plugins.petri.VisualPlace;
12import org.workcraft.plugins.stg.VisualSignalTransition;12import org.workcraft.plugins.stg.VisualSignalTransition;
13import org.workcraft.plugins.stg.generator.NodeStg;
1314
14public class CounterflowLogicStg extends NodeStg {15public class CounterflowLogicStg extends NodeStg {
15 public final VisualPlace fwC0; // forwardC=016 public final VisualPlace fwC0; // forwardC=0
1617
=== modified file 'DfsPlugin/src/org/workcraft/plugins/dfs/stg/CounterflowRegisterStg.java'
--- DfsPlugin/src/org/workcraft/plugins/dfs/stg/CounterflowRegisterStg.java 2013-09-09 11:11:43 +0000
+++ DfsPlugin/src/org/workcraft/plugins/dfs/stg/CounterflowRegisterStg.java 2015-09-25 14:54:20 +0000
@@ -5,6 +5,7 @@
55
6import org.workcraft.plugins.petri.VisualPlace;6import org.workcraft.plugins.petri.VisualPlace;
7import org.workcraft.plugins.stg.VisualSignalTransition;7import org.workcraft.plugins.stg.VisualSignalTransition;
8import org.workcraft.plugins.stg.generator.NodeStg;
89
9public class CounterflowRegisterStg extends NodeStg {10public class CounterflowRegisterStg extends NodeStg {
10 public final VisualPlace orM0; // orM=011 public final VisualPlace orM0; // orM=0
1112
=== modified file 'DfsPlugin/src/org/workcraft/plugins/dfs/stg/LogicStg.java'
--- DfsPlugin/src/org/workcraft/plugins/dfs/stg/LogicStg.java 2015-08-27 21:29:15 +0000
+++ DfsPlugin/src/org/workcraft/plugins/dfs/stg/LogicStg.java 2015-09-25 14:54:20 +0000
@@ -10,6 +10,7 @@
10import org.workcraft.dom.Node;10import org.workcraft.dom.Node;
11import org.workcraft.plugins.petri.VisualPlace;11import org.workcraft.plugins.petri.VisualPlace;
12import org.workcraft.plugins.stg.VisualSignalTransition;12import org.workcraft.plugins.stg.VisualSignalTransition;
13import org.workcraft.plugins.stg.generator.NodeStg;
1314
14public class LogicStg extends NodeStg {15public class LogicStg extends NodeStg {
15 public final VisualPlace C0; // C=016 public final VisualPlace C0; // C=0
1617
=== removed file 'DfsPlugin/src/org/workcraft/plugins/dfs/stg/NodeStg.java'
--- DfsPlugin/src/org/workcraft/plugins/dfs/stg/NodeStg.java 2015-08-27 21:29:15 +0000
+++ DfsPlugin/src/org/workcraft/plugins/dfs/stg/NodeStg.java 1970-01-01 00:00:00 +0000
@@ -1,30 +0,0 @@
1package org.workcraft.plugins.dfs.stg;
2
3import java.util.List;
4
5import org.workcraft.dom.Node;
6import org.workcraft.plugins.petri.VisualPlace;
7import org.workcraft.plugins.stg.VisualSignalTransition;
8
9public abstract class NodeStg {
10 public abstract List<VisualSignalTransition> getAllTransitions();
11
12 public abstract List<VisualPlace> getAllPlaces();
13
14 public boolean contains(Node n) {
15 if (n != null) {
16 for (VisualPlace p: getAllPlaces()) {
17 if (n == p || (p != null && n == p.getReferencedPlace())) {
18 return true;
19 }
20 }
21 for (VisualSignalTransition t: getAllTransitions()) {
22 if (n == t || (t != null && n == t.getReferencedTransition())) {
23 return true;
24 }
25 }
26 }
27 return false;
28 }
29
30}
310
=== modified file 'DfsPlugin/src/org/workcraft/plugins/dfs/stg/RegisterStg.java'
--- DfsPlugin/src/org/workcraft/plugins/dfs/stg/RegisterStg.java 2015-08-27 21:29:15 +0000
+++ DfsPlugin/src/org/workcraft/plugins/dfs/stg/RegisterStg.java 2015-09-25 14:54:20 +0000
@@ -5,6 +5,7 @@
55
6import org.workcraft.plugins.petri.VisualPlace;6import org.workcraft.plugins.petri.VisualPlace;
7import org.workcraft.plugins.stg.VisualSignalTransition;7import org.workcraft.plugins.stg.VisualSignalTransition;
8import org.workcraft.plugins.stg.generator.NodeStg;
89
9public class RegisterStg extends NodeStg {10public class RegisterStg extends NodeStg {
10 public final VisualPlace M0; // M=011 public final VisualPlace M0; // M=0
1112
=== modified file 'DfsPlugin/src/org/workcraft/plugins/dfs/stg/StgGenerator.java'
--- DfsPlugin/src/org/workcraft/plugins/dfs/stg/StgGenerator.java 2015-09-13 20:57:03 +0000
+++ DfsPlugin/src/org/workcraft/plugins/dfs/stg/StgGenerator.java 2015-09-25 14:54:20 +0000
@@ -1,7 +1,7 @@
1package org.workcraft.plugins.dfs.stg;1package org.workcraft.plugins.dfs.stg;
22
3import java.awt.Color;3import java.awt.Color;
4import java.awt.geom.AffineTransform;4import java.awt.geom.Point2D;
5import java.util.Collection;5import java.util.Collection;
6import java.util.HashMap;6import java.util.HashMap;
7import java.util.HashSet;7import java.util.HashSet;
@@ -12,10 +12,7 @@
12import org.workcraft.dom.Connection;12import org.workcraft.dom.Connection;
13import org.workcraft.dom.Container;13import org.workcraft.dom.Container;
14import org.workcraft.dom.Node;14import org.workcraft.dom.Node;
15import org.workcraft.dom.visual.Movable;
16import org.workcraft.dom.visual.Positioning;15import org.workcraft.dom.visual.Positioning;
17import org.workcraft.dom.visual.TransformHelper;
18import org.workcraft.dom.visual.connections.VisualConnection;
19import org.workcraft.exceptions.InvalidConnectionException;16import org.workcraft.exceptions.InvalidConnectionException;
20import org.workcraft.plugins.dfs.ControlRegister.SynchronisationType;17import org.workcraft.plugins.dfs.ControlRegister.SynchronisationType;
21import org.workcraft.plugins.dfs.DfsSettings;18import org.workcraft.plugins.dfs.DfsSettings;
@@ -30,15 +27,14 @@
30import org.workcraft.plugins.dfs.VisualPushRegister;27import org.workcraft.plugins.dfs.VisualPushRegister;
31import org.workcraft.plugins.dfs.VisualRegister;28import org.workcraft.plugins.dfs.VisualRegister;
32import org.workcraft.plugins.petri.VisualPlace;29import org.workcraft.plugins.petri.VisualPlace;
33import org.workcraft.plugins.stg.STG;
34import org.workcraft.plugins.stg.SignalTransition;30import org.workcraft.plugins.stg.SignalTransition;
35import org.workcraft.plugins.stg.VisualSTG;
36import org.workcraft.plugins.stg.VisualSignalTransition;31import org.workcraft.plugins.stg.VisualSignalTransition;
32import org.workcraft.plugins.stg.generator.NodeStg;
37import org.workcraft.util.CieColorUtils;33import org.workcraft.util.CieColorUtils;
38import org.workcraft.util.ColorGenerator;34import org.workcraft.util.ColorGenerator;
39import org.workcraft.util.Hierarchy;35import org.workcraft.util.Hierarchy;
4036
41public class StgGenerator {37public class StgGenerator extends org.workcraft.plugins.stg.generator.StgGenerator {
42 public static final String nameC = "C_";38 public static final String nameC = "C_";
43 public static final String nameFwC = "fwC_";39 public static final String nameFwC = "fwC_";
44 public static final String nameBwC = "bwC_";40 public static final String nameBwC = "bwC_";
@@ -59,86 +55,97 @@
59 public static final String labelFalseM = "falseM(";55 public static final String labelFalseM = "falseM(";
60 public static final String label0 = ")=0";56 public static final String label0 = ")=0";
61 public static final String label1 = ")=1";57 public static final String label1 = ")=1";
62 private static final double xScaling = 6;
63 private static final double yScaling = 6;
6458
65 private Map<VisualLogic, LogicStg> logicMap = new HashMap<>(); 59 private Map<VisualLogic, LogicStg> logicMap;
66 private Map<VisualRegister, RegisterStg> registerMap = new HashMap<>();60 private Map<VisualRegister, RegisterStg> registerMap;
67 private Map<VisualCounterflowLogic, CounterflowLogicStg> counterflowLogicMap = new HashMap<>(); 61 private Map<VisualCounterflowLogic, CounterflowLogicStg> counterflowLogicMap;
68 private Map<VisualCounterflowRegister, CounterflowRegisterStg> counterflowRegisterMap = new HashMap<>();62 private Map<VisualCounterflowRegister, CounterflowRegisterStg> counterflowRegisterMap;
69 private Map<VisualControlRegister, BinaryRegisterStg> controlRegisterMap = new HashMap<>();63 private Map<VisualControlRegister, BinaryRegisterStg> controlRegisterMap;
70 private Map<VisualPushRegister, BinaryRegisterStg> pushRegisterMap = new HashMap<>();64 private Map<VisualPushRegister, BinaryRegisterStg> pushRegisterMap;
71 private Map<VisualPopRegister, BinaryRegisterStg> popRegisterMap = new HashMap<>();65 private Map<VisualPopRegister, BinaryRegisterStg> popRegisterMap;
72 private final VisualDfs dfs;
73 private final VisualSTG stg;
7466
75 public StgGenerator(VisualDfs dfs) {67 public StgGenerator(VisualDfs dfs) {
76 this.dfs = dfs;68 super(dfs);
77 this.stg = new VisualSTG(new STG());
78 convert();
79 }69 }
80 70
81 private void convert() {71 private VisualDfs getDfsModel() {
72 return (VisualDfs)getSrcModel();
73 }
74
75 @Override
76 public Point2D getScale() {
77 return new Point2D.Double(6.0, 6.0);
78 }
79
80 @Override
81 public void convert() {
82 try {82 try {
83 for(VisualLogic l : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualLogic.class)) {83 for(VisualLogic l : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualLogic.class)) {
84 LogicStg lstg = generateLogicStg(l);84 LogicStg lstg = generateLogicStg(l);
85 logicMap.put(l, lstg);85 groupComponentStg(lstg);
86 putLogicStg(l, lstg);
86 }87 }
87 for(VisualRegister r : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualRegister.class)) {88 for(VisualRegister r : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualRegister.class)) {
88 RegisterStg rstg = generateRegisterSTG(r);89 RegisterStg rstg = generateRegisterSTG(r);
89 registerMap.put(r, rstg);90 groupComponentStg(rstg);
91 putRegisterStg(r, rstg);
90 }92 }
9193
92 for(VisualCounterflowLogic l : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualCounterflowLogic.class)) {94 for(VisualCounterflowLogic l : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualCounterflowLogic.class)) {
93 CounterflowLogicStg lstg = generateCounterflowLogicStg(l);95 CounterflowLogicStg lstg = generateCounterflowLogicStg(l);
94 counterflowLogicMap.put(l, lstg);96 groupComponentStg(lstg);
97 putCounterflowLogicStg(l, lstg);
95 }98 }
96 for(VisualCounterflowRegister r : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualCounterflowRegister.class)) {99 for(VisualCounterflowRegister r : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualCounterflowRegister.class)) {
97 CounterflowRegisterStg rstg = generateCounterflowRegisterSTG(r);100 CounterflowRegisterStg rstg = generateCounterflowRegisterSTG(r);
98 counterflowRegisterMap.put(r, rstg);101 groupComponentStg(rstg);
102 putCounterflowRegisterStg(r, rstg);
99 }103 }
100104
101 for(VisualControlRegister r : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualControlRegister.class)) {105 for(VisualControlRegister r : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualControlRegister.class)) {
102 BinaryRegisterStg rstg = generateControlRegisterStg(r);106 BinaryRegisterStg rstg = generateControlRegisterStg(r);
103 controlRegisterMap.put(r, rstg);107 groupComponentStg(rstg);
108 putControlRegisterStg(r, rstg);
104 }109 }
105 for(VisualPushRegister r : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualPushRegister.class)) {110 for(VisualPushRegister r : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualPushRegister.class)) {
106 BinaryRegisterStg rstg = generatePushRegisterStg(r);111 BinaryRegisterStg rstg = generatePushRegisterStg(r);
107 pushRegisterMap.put(r, rstg);112 groupComponentStg(rstg);
113 putPushRegisterStg(r, rstg);
108 }114 }
109 for(VisualPopRegister r : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualPopRegister.class)) {115 for(VisualPopRegister r : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualPopRegister.class)) {
110 BinaryRegisterStg rstg = generatePopRegisterStg(r);116 BinaryRegisterStg rstg = generatePopRegisterStg(r);
111 popRegisterMap.put(r, rstg);117 groupComponentStg(rstg);
118 putPopRegisterStg(r, rstg);
112 }119 }
113120
114 for(VisualLogic l : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualLogic.class)) {121 for(VisualLogic l : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualLogic.class)) {
115 connectLogicStg(l);122 connectLogicStg(l);
116 }123 }
117 for(VisualRegister r : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualRegister.class)) {124 for(VisualRegister r : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualRegister.class)) {
118 connectRegisterStg(r);125 connectRegisterStg(r);
119 } 126 }
120127
121 for(VisualCounterflowLogic l : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualCounterflowLogic.class)) {128 for(VisualCounterflowLogic l : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualCounterflowLogic.class)) {
122 connectCounterflowLogicStg(l);129 connectCounterflowLogicStg(l);
123 }130 }
124 for(VisualCounterflowRegister r : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualCounterflowRegister.class)) {131 for(VisualCounterflowRegister r : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualCounterflowRegister.class)) {
125 connectCounterflowRegisterStg(r);132 connectCounterflowRegisterStg(r);
126 } 133 }
127134
128 for(VisualControlRegister r : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualControlRegister.class)) {135 for(VisualControlRegister r : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualControlRegister.class)) {
129 connectControlRegisterStg(r);136 connectControlRegisterStg(r);
130 } 137 }
131 for(VisualPushRegister r : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualPushRegister.class)) {138 for(VisualPushRegister r : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualPushRegister.class)) {
132 connectPushRegisterStg(r);139 connectPushRegisterStg(r);
133 } 140 }
134 for(VisualPopRegister r : Hierarchy.getDescendantsOfType(dfs.getRoot(), VisualPopRegister.class)) {141 for(VisualPopRegister r : Hierarchy.getDescendantsOfType(getDfsModel().getRoot(), VisualPopRegister.class)) {
135 connectPopRegisterStg(r);142 connectPopRegisterStg(r);
136 } 143 }
137 } catch (InvalidConnectionException e) {144 } catch (InvalidConnectionException e) {
138 throw new RuntimeException(e);145 throw new RuntimeException(e);
139 }146 }
140 }147 }
141 148
142 static Color[] tokenColors = DfsSettings.getTokenPalette().getColors();149 static Color[] tokenColors = DfsSettings.getTokenPalette().getColors();
143 private ColorGenerator createColorGenerator(boolean required) {150 private ColorGenerator createColorGenerator(boolean required) {
144 ColorGenerator result = null;151 ColorGenerator result = null;
@@ -150,55 +157,21 @@
150 }157 }
151 return result;158 return result;
152 }159 }
153160
154 public VisualSTG getStg() {161
155 return stg;
156 }
157
158 static void setPosition(Movable node, double x, double y) {
159 TransformHelper.applyTransform(node, AffineTransform.getTranslateInstance(x, y));
160 }
161
162 private void createConsumingArc(VisualPlace p, VisualSignalTransition t, boolean propagateTokenColor) throws InvalidConnectionException {
163 if (p != null && t != null) {
164 VisualConnection connection = stg.connect(p, t);
165 connection.setTokenColorPropagator(propagateTokenColor);
166 }
167 }
168
169 private void createProducingArc(VisualSignalTransition t, VisualPlace p, boolean propagateTokenColor) throws InvalidConnectionException {
170 if (p != null && t != null) {
171 VisualConnection connection = stg.connect(t, p);
172 connection.setTokenColorPropagator(propagateTokenColor);
173 }
174 }
175
176 private void createReadArc(VisualPlace p, VisualSignalTransition t, boolean propagateTokenColor) throws InvalidConnectionException {
177 if (p != null && t != null) {
178 VisualConnection connection = stg.connectUndirected(p, t);
179 connection.setTokenColorPropagator(propagateTokenColor);
180 }
181 }
182
183 private void createReadArcs(VisualPlace p, Collection<VisualSignalTransition> ts, boolean propagateTokenColor) throws InvalidConnectionException {
184 for (VisualSignalTransition t : new HashSet<VisualSignalTransition>(ts)) {
185 createReadArc(p, t, propagateTokenColor);
186 }
187 }
188
189 private LogicStg generateLogicStg(VisualLogic l) throws InvalidConnectionException {162 private LogicStg generateLogicStg(VisualLogic l) throws InvalidConnectionException {
190 String name = dfs.getName(l);163 String name = getDfsModel().getName(l);
191 AffineTransform transform = TransformHelper.getTransformToRoot(l);164 Point2D pos = getComponentPosition(l);
192 double x = xScaling * (transform.getTranslateX() + l.getX());165 double x = pos.getX();
193 double y = yScaling * (transform.getTranslateY() + l.getY());166 double y = pos.getY();
194 Collection<Node> nodes = new LinkedList<Node>();167 Collection<Node> nodes = new LinkedList<Node>();
195 SignalTransition.Type type = SignalTransition.Type.INTERNAL;168 SignalTransition.Type type = SignalTransition.Type.INTERNAL;
196 ColorGenerator tokenColorGenerator = createColorGenerator(dfs.getPreset(l).size() == 0);169 ColorGenerator tokenColorGenerator = createColorGenerator(getDfsModel().getPreset(l).size() == 0);
197 170
198 171
199 Container curContainer = null;172 Container curContainer = null;
200 173
201 VisualPlace C0 = stg.createPlace(nameC + name + name0, curContainer);174 VisualPlace C0 = getStgModel().createPlace(nameC + name + name0, curContainer);
202 C0.setLabel(labelC + name + label0);175 C0.setLabel(labelC + name + label0);
203 C0.setLabelPositioning(Positioning.BOTTOM);176 C0.setLabelPositioning(Positioning.BOTTOM);
204 if (!l.getReferencedLogic().isComputed()) {177 if (!l.getReferencedLogic().isComputed()) {
@@ -209,7 +182,7 @@
209 setPosition(C0, x + 2.0, y + 1.0);182 setPosition(C0, x + 2.0, y + 1.0);
210 nodes.add(C0);183 nodes.add(C0);
211184
212 VisualPlace C1 = stg.createPlace(nameC + name + name1, curContainer);185 VisualPlace C1 = getStgModel().createPlace(nameC + name + name1, curContainer);
213 C1.setLabel(labelC + name + label1);186 C1.setLabel(labelC + name + label1);
214 C1.setLabelPositioning(Positioning.TOP);187 C1.setLabelPositioning(Positioning.TOP);
215 if (l.getReferencedLogic().isComputed()) {188 if (l.getReferencedLogic().isComputed()) {
@@ -221,11 +194,11 @@
221 nodes.add(C1);194 nodes.add(C1);
222195
223 Set<Node> preset = new HashSet<Node>();196 Set<Node> preset = new HashSet<Node>();
224 preset.addAll(dfs.getPreset(l, VisualLogic.class));197 preset.addAll(getDfsModel().getPreset(l, VisualLogic.class));
225 preset.addAll(dfs.getPreset(l, VisualRegister.class));198 preset.addAll(getDfsModel().getPreset(l, VisualRegister.class));
226 preset.addAll(dfs.getPreset(l, VisualControlRegister.class));199 preset.addAll(getDfsModel().getPreset(l, VisualControlRegister.class));
227 preset.addAll(dfs.getPreset(l, VisualPushRegister.class));200 preset.addAll(getDfsModel().getPreset(l, VisualPushRegister.class));
228 preset.addAll(dfs.getPreset(l, VisualPopRegister.class));201 preset.addAll(getDfsModel().getPreset(l, VisualPopRegister.class));
229 if (preset.size() == 0) {202 if (preset.size() == 0) {
230 preset.add(l);203 preset.add(l);
231 }204 }
@@ -236,7 +209,7 @@
236 double dy = 0.0;209 double dy = 0.0;
237 for (Node n: preset) {210 for (Node n: preset) {
238 if (CR == null || l.getReferencedLogic().isEarlyEvaluation()) { 211 if (CR == null || l.getReferencedLogic().isEarlyEvaluation()) {
239 CR = stg.createSignalTransition(nameC + name, type, SignalTransition.Direction.PLUS, curContainer);212 CR = getStgModel().createSignalTransition(nameC + name, type, SignalTransition.Direction.PLUS, curContainer);
240 CR.setTokenColorGenerator(tokenColorGenerator);213 CR.setTokenColorGenerator(tokenColorGenerator);
241 createConsumingArc(C0, CR, false);214 createConsumingArc(C0, CR, false);
242 createProducingArc(CR, C1, true);215 createProducingArc(CR, C1, true);
@@ -245,7 +218,7 @@
245 }218 }
246 CRs.put(n, CR);219 CRs.put(n, CR);
247 if (CF == null) { 220 if (CF == null) {
248 CF = stg.createSignalTransition(nameC + name, type, SignalTransition.Direction.MINUS, curContainer);221 CF = getStgModel().createSignalTransition(nameC + name, type, SignalTransition.Direction.MINUS, curContainer);
249 createConsumingArc(C1, CF, false);222 createConsumingArc(C1, CF, false);
250 createProducingArc(CF, C0, false);223 createProducingArc(CF, C0, false);
251 setPosition(CF, x - 2.0, y - 1.0 - dy);224 setPosition(CF, x - 2.0, y - 1.0 - dy);
@@ -255,34 +228,32 @@
255 dy += 1.0;228 dy += 1.0;
256 }229 }
257230
258 stg.select(nodes);
259 stg.groupSelection();
260 return new LogicStg(C0, C1, CRs, CFs);231 return new LogicStg(C0, C1, CRs, CFs);
261 }232 }
262233
263 private void connectLogicStg(VisualLogic l) throws InvalidConnectionException {234 private void connectLogicStg(VisualLogic l) throws InvalidConnectionException {
264 LogicStg lstg = getLogicStg(l);235 LogicStg lstg = getLogicStg(l);
265 for (VisualLogic n: dfs.getPreset(l, VisualLogic.class)) {236 for (VisualLogic n: getDfsModel().getPreset(l, VisualLogic.class)) {
266 LogicStg nstg = getLogicStg(n);237 LogicStg nstg = getLogicStg(n);
267 createReadArc(nstg.C1, lstg.CRs.get(n), true);238 createReadArc(nstg.C1, lstg.CRs.get(n), true);
268 createReadArc(nstg.C0, lstg.CFs.get(n), false);239 createReadArc(nstg.C0, lstg.CFs.get(n), false);
269 }240 }
270 for (VisualRegister n: dfs.getPreset(l, VisualRegister.class)) {241 for (VisualRegister n: getDfsModel().getPreset(l, VisualRegister.class)) {
271 RegisterStg nstg = getRegisterStg(n);242 RegisterStg nstg = getRegisterStg(n);
272 createReadArc(nstg.M1, lstg.CRs.get(n), true);243 createReadArc(nstg.M1, lstg.CRs.get(n), true);
273 createReadArc(nstg.M0, lstg.CFs.get(n), false);244 createReadArc(nstg.M0, lstg.CFs.get(n), false);
274 }245 }
275 for (VisualControlRegister n: dfs.getPreset(l, VisualControlRegister.class)) {246 for (VisualControlRegister n: getDfsModel().getPreset(l, VisualControlRegister.class)) {
276 BinaryRegisterStg nstg = getControlRegisterStg(n);247 BinaryRegisterStg nstg = getControlRegisterStg(n);
277 createReadArc(nstg.M1, lstg.CRs.get(n), true);248 createReadArc(nstg.M1, lstg.CRs.get(n), true);
278 createReadArc(nstg.M0, lstg.CFs.get(n), false);249 createReadArc(nstg.M0, lstg.CFs.get(n), false);
279 }250 }
280 for (VisualPushRegister n: dfs.getPreset(l, VisualPushRegister.class)) {251 for (VisualPushRegister n: getDfsModel().getPreset(l, VisualPushRegister.class)) {
281 BinaryRegisterStg nstg = getPushRegisterStg(n);252 BinaryRegisterStg nstg = getPushRegisterStg(n);
282 createReadArc(nstg.tM1, lstg.CRs.get(n), true);253 createReadArc(nstg.tM1, lstg.CRs.get(n), true);
283 createReadArc(nstg.tM0, lstg.CFs.get(n), false);254 createReadArc(nstg.tM0, lstg.CFs.get(n), false);
284 }255 }
285 for (VisualPopRegister n: dfs.getPreset(l, VisualPopRegister.class)) {256 for (VisualPopRegister n: getDfsModel().getPreset(l, VisualPopRegister.class)) {
286 BinaryRegisterStg nstg = getPopRegisterStg(n);257 BinaryRegisterStg nstg = getPopRegisterStg(n);
287 createReadArc(nstg.M1, lstg.CRs.get(n), true);258 createReadArc(nstg.M1, lstg.CRs.get(n), true);
288 createReadArc(nstg.M0, lstg.CFs.get(n), false);259 createReadArc(nstg.M0, lstg.CFs.get(n), false);
@@ -290,25 +261,33 @@
290 }261 }
291262
292 public LogicStg getLogicStg(VisualLogic logic) {263 public LogicStg getLogicStg(VisualLogic logic) {
293 return logicMap.get(logic);264 return ((logicMap == null) ? null : logicMap.get(logic));
294 }265 }
295266
267 public void putLogicStg(VisualLogic logic, LogicStg stg) {
268 if (logicMap == null) {
269 logicMap = new HashMap<>();
270 }
271 logicMap.put(logic, stg);
272 }
273
274
296 private RegisterStg generateRegisterSTG(VisualRegister r) throws InvalidConnectionException {275 private RegisterStg generateRegisterSTG(VisualRegister r) throws InvalidConnectionException {
297 String name = dfs.getName(r);276 String name = getDfsModel().getName(r);
298 AffineTransform transform = TransformHelper.getTransformToRoot(r);277 Point2D pos = getComponentPosition(r);
299 double x = xScaling * (transform.getTranslateX() + r.getX());278 double x = pos.getX();
300 double y = yScaling * (transform.getTranslateY() + r.getY());279 double y = pos.getY();
301 Collection<Node> nodes = new LinkedList<Node>();280 Collection<Node> nodes = new LinkedList<Node>();
302 SignalTransition.Type type = SignalTransition.Type.INTERNAL;281 SignalTransition.Type type = SignalTransition.Type.INTERNAL;
303 if (dfs.getPreset(r).size() == 0) {282 if (getDfsModel().getPreset(r).size() == 0) {
304 type = SignalTransition.Type.INPUT;283 type = SignalTransition.Type.INPUT;
305 } else if (dfs.getPostset(r).size() == 0) {284 } else if (getDfsModel().getPostset(r).size() == 0) {
306 type = SignalTransition.Type.OUTPUT;285 type = SignalTransition.Type.OUTPUT;
307 }286 }
308 ColorGenerator tokenColorGenerator = createColorGenerator(dfs.getPreset(r).size() == 0);287 ColorGenerator tokenColorGenerator = createColorGenerator(getDfsModel().getPreset(r).size() == 0);
309 Container curContainer = null;288 Container curContainer = null;
310289
311 VisualPlace M0 = stg.createPlace(nameM + name + name0, curContainer);290 VisualPlace M0 = getStgModel().createPlace(nameM + name + name0, curContainer);
312 M0.setLabel(labelM + name + label0);291 M0.setLabel(labelM + name + label0);
313 M0.setLabelPositioning(Positioning.BOTTOM);292 M0.setLabelPositioning(Positioning.BOTTOM);
314 if (!r.getReferencedRegister().isMarked()) {293 if (!r.getReferencedRegister().isMarked()) {
@@ -319,7 +298,7 @@
319 setPosition(M0, x + 2.0, y + 1.0);298 setPosition(M0, x + 2.0, y + 1.0);
320 nodes.add(M0);299 nodes.add(M0);
321 300
322 VisualPlace M1 = stg.createPlace(nameM + name + name1, curContainer);301 VisualPlace M1 = getStgModel().createPlace(nameM + name + name1, curContainer);
323 M1.setLabel(labelM + name + label1);302 M1.setLabel(labelM + name + label1);
324 M1.setLabelPositioning(Positioning.TOP);303 M1.setLabelPositioning(Positioning.TOP);
325 if (r.getReferencedRegister().isMarked()) {304 if (r.getReferencedRegister().isMarked()) {
@@ -329,82 +308,80 @@
329 setPosition(M1, x + 2.0, y - 1.0);308 setPosition(M1, x + 2.0, y - 1.0);
330 nodes.add(M1);309 nodes.add(M1);
331 310
332 VisualSignalTransition MR = stg.createSignalTransition(nameM + name, type, SignalTransition.Direction.PLUS, curContainer);311 VisualSignalTransition MR = getStgModel().createSignalTransition(nameM + name, type, SignalTransition.Direction.PLUS, curContainer);
333 MR.setTokenColorGenerator(tokenColorGenerator);312 MR.setTokenColorGenerator(tokenColorGenerator);
334 createConsumingArc(M0, MR, false);313 createConsumingArc(M0, MR, false);
335 createProducingArc(MR, M1, true);314 createProducingArc(MR, M1, true);
336 setPosition(MR, x - 2.0, y + 1.0);315 setPosition(MR, x - 2.0, y + 1.0);
337 nodes.add(MR);316 nodes.add(MR);
338 317
339 VisualSignalTransition MF = stg.createSignalTransition(nameM + name, type, SignalTransition.Direction.MINUS, curContainer);318 VisualSignalTransition MF = getStgModel().createSignalTransition(nameM + name, type, SignalTransition.Direction.MINUS, curContainer);
340 createConsumingArc(M1, MF, false);319 createConsumingArc(M1, MF, false);
341 createProducingArc(MF, M0, false);320 createProducingArc(MF, M0, false);
342 setPosition(MF, x - 2.0, y - 1.0);321 setPosition(MF, x - 2.0, y - 1.0);
343 nodes.add(MF);322 nodes.add(MF);
344 323
345 stg.select(nodes);
346 stg.groupSelection();
347 return new RegisterStg(M0, M1, MR, MF);324 return new RegisterStg(M0, M1, MR, MF);
348 }325 }
349326
350 private void connectRegisterStg(VisualRegister r) throws InvalidConnectionException {327 private void connectRegisterStg(VisualRegister r) throws InvalidConnectionException {
351 RegisterStg rstg = getRegisterStg(r);328 RegisterStg rstg = getRegisterStg(r);
352 // preset329 // preset
353 for (VisualLogic n: dfs.getPreset(r, VisualLogic.class)) {330 for (VisualLogic n: getDfsModel().getPreset(r, VisualLogic.class)) {
354 LogicStg nstg = getLogicStg(n);331 LogicStg nstg = getLogicStg(n);
355 createReadArc(nstg.C1, rstg.MR, true);332 createReadArc(nstg.C1, rstg.MR, true);
356 createReadArc(nstg.C0, rstg.MF, false);333 createReadArc(nstg.C0, rstg.MF, false);
357 }334 }
358 // R-preset335 // R-preset
359 for (VisualRegister n: dfs.getRPreset(r, VisualRegister.class)) {336 for (VisualRegister n: getDfsModel().getRPreset(r, VisualRegister.class)) {
360 RegisterStg nstg = getRegisterStg(n);337 RegisterStg nstg = getRegisterStg(n);
361 createReadArc(nstg.M1, rstg.MR, true);338 createReadArc(nstg.M1, rstg.MR, true);
362 createReadArc(nstg.M0, rstg.MF, false);339 createReadArc(nstg.M0, rstg.MF, false);
363 }340 }
364 for (VisualCounterflowRegister n: dfs.getRPreset(r, VisualCounterflowRegister.class)) {341 for (VisualCounterflowRegister n: getDfsModel().getRPreset(r, VisualCounterflowRegister.class)) {
365 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);342 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);
366 createReadArc(nstg.orM1, rstg.MR, true);343 createReadArc(nstg.orM1, rstg.MR, true);
367 createReadArc(nstg.orM0, rstg.MF, false);344 createReadArc(nstg.orM0, rstg.MF, false);
368 createReadArc(nstg.andM1, rstg.MF, false);345 createReadArc(nstg.andM1, rstg.MF, false);
369 createReadArc(nstg.andM0, rstg.MR, false);346 createReadArc(nstg.andM0, rstg.MR, false);
370 }347 }
371 for (VisualControlRegister n: dfs.getRPreset(r, VisualControlRegister.class)) {348 for (VisualControlRegister n: getDfsModel().getRPreset(r, VisualControlRegister.class)) {
372 BinaryRegisterStg nstg = getControlRegisterStg(n);349 BinaryRegisterStg nstg = getControlRegisterStg(n);
373 createReadArc(nstg.M1, rstg.MR, true);350 createReadArc(nstg.M1, rstg.MR, true);
374 createReadArc(nstg.M0, rstg.MF, false);351 createReadArc(nstg.M0, rstg.MF, false);
375 }352 }
376 for (VisualPushRegister n: dfs.getRPreset(r, VisualPushRegister.class)) {353 for (VisualPushRegister n: getDfsModel().getRPreset(r, VisualPushRegister.class)) {
377 BinaryRegisterStg nstg = getPushRegisterStg(n);354 BinaryRegisterStg nstg = getPushRegisterStg(n);
378 createReadArc(nstg.tM1, rstg.MR, true);355 createReadArc(nstg.tM1, rstg.MR, true);
379 createReadArc(nstg.tM0, rstg.MF, false);356 createReadArc(nstg.tM0, rstg.MF, false);
380 }357 }
381 for (VisualPopRegister n: dfs.getRPreset(r, VisualPopRegister.class)) {358 for (VisualPopRegister n: getDfsModel().getRPreset(r, VisualPopRegister.class)) {
382 BinaryRegisterStg nstg = getPopRegisterStg(n);359 BinaryRegisterStg nstg = getPopRegisterStg(n);
383 createReadArc(nstg.M1, rstg.MR, true);360 createReadArc(nstg.M1, rstg.MR, true);
384 createReadArc(nstg.M0, rstg.MF, false);361 createReadArc(nstg.M0, rstg.MF, false);
385 }362 }
386 // R-postset363 // R-postset
387 for (VisualRegister n: dfs.getRPostset(r, VisualRegister.class)) {364 for (VisualRegister n: getDfsModel().getRPostset(r, VisualRegister.class)) {
388 RegisterStg nstg = getRegisterStg(n);365 RegisterStg nstg = getRegisterStg(n);
389 createReadArc(nstg.M1, rstg.MF, false);366 createReadArc(nstg.M1, rstg.MF, false);
390 createReadArc(nstg.M0, rstg.MR, false);367 createReadArc(nstg.M0, rstg.MR, false);
391 }368 }
392 for (VisualCounterflowRegister n: dfs.getRPostset(r, VisualCounterflowRegister.class)) {369 for (VisualCounterflowRegister n: getDfsModel().getRPostset(r, VisualCounterflowRegister.class)) {
393 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);370 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);
394 createReadArc(nstg.andM1, rstg.MF, false);371 createReadArc(nstg.andM1, rstg.MF, false);
395 createReadArc(nstg.andM0, rstg.MR, false);372 createReadArc(nstg.andM0, rstg.MR, false);
396 }373 }
397 for (VisualControlRegister n: dfs.getRPostset(r, VisualControlRegister.class)) {374 for (VisualControlRegister n: getDfsModel().getRPostset(r, VisualControlRegister.class)) {
398 BinaryRegisterStg nstg = getControlRegisterStg(n);375 BinaryRegisterStg nstg = getControlRegisterStg(n);
399 createReadArc(nstg.M1, rstg.MF, false);376 createReadArc(nstg.M1, rstg.MF, false);
400 createReadArc(nstg.M0, rstg.MR, false);377 createReadArc(nstg.M0, rstg.MR, false);
401 }378 }
402 for (VisualPushRegister n: dfs.getRPostset(r, VisualPushRegister.class)) {379 for (VisualPushRegister n: getDfsModel().getRPostset(r, VisualPushRegister.class)) {
403 BinaryRegisterStg nstg = getPushRegisterStg(n);380 BinaryRegisterStg nstg = getPushRegisterStg(n);
404 createReadArc(nstg.M1, rstg.MF, false);381 createReadArc(nstg.M1, rstg.MF, false);
405 createReadArc(nstg.M0, rstg.MR, false);382 createReadArc(nstg.M0, rstg.MR, false);
406 }383 }
407 for (VisualPopRegister n: dfs.getRPostset(r, VisualPopRegister.class)) {384 for (VisualPopRegister n: getDfsModel().getRPostset(r, VisualPopRegister.class)) {
408 BinaryRegisterStg nstg = getPopRegisterStg(n);385 BinaryRegisterStg nstg = getPopRegisterStg(n);
409 createReadArc(nstg.tM1, rstg.MF, false);386 createReadArc(nstg.tM1, rstg.MF, false);
410 createReadArc(nstg.tM0, rstg.MR, false);387 createReadArc(nstg.tM0, rstg.MR, false);
@@ -412,22 +389,30 @@
412 }389 }
413390
414 public RegisterStg getRegisterStg(VisualRegister register) {391 public RegisterStg getRegisterStg(VisualRegister register) {
415 return registerMap.get(register);392 return ((registerMap == null) ? null : registerMap.get(register));
416 }393 }
417394
395 public void putRegisterStg(VisualRegister register, RegisterStg stg) {
396 if (registerMap == null) {
397 registerMap = new HashMap<>();
398 }
399 registerMap.put(register, stg);
400 }
401
402
418 private CounterflowLogicStg generateCounterflowLogicStg(VisualCounterflowLogic l) throws InvalidConnectionException {403 private CounterflowLogicStg generateCounterflowLogicStg(VisualCounterflowLogic l) throws InvalidConnectionException {
419 String name = dfs.getName(l);404 String name = getDfsModel().getName(l);
420 AffineTransform transform = TransformHelper.getTransformToRoot(l);405 Point2D pos = getComponentPosition(l);
421 double x = xScaling * (transform.getTranslateX() + l.getX()); 406 double x = pos.getX();
422 double y = yScaling * (transform.getTranslateY() + l.getY());407 double y = pos.getY();
423 Collection<Node> nodes = new LinkedList<Node>();408 Collection<Node> nodes = new LinkedList<Node>();
424 SignalTransition.Type type = SignalTransition.Type.INTERNAL;409 SignalTransition.Type type = SignalTransition.Type.INTERNAL;
425 ColorGenerator presetTokenColorGenerator = createColorGenerator(dfs.getPreset(l).size() == 0);410 ColorGenerator presetTokenColorGenerator = createColorGenerator(getDfsModel().getPreset(l).size() == 0);
426 ColorGenerator postsetTokenColorGenerator = createColorGenerator(dfs.getPostset(l).size() == 0);411 ColorGenerator postsetTokenColorGenerator = createColorGenerator(getDfsModel().getPostset(l).size() == 0);
427 412
428 Container curContainer = null;413 Container curContainer = null;
429 414
430 VisualPlace fwC0 = stg.createPlace(nameFwC + name + name0, curContainer);415 VisualPlace fwC0 = getStgModel().createPlace(nameFwC + name + name0, curContainer);
431 fwC0.setLabel(labelFwC + name + label0);416 fwC0.setLabel(labelFwC + name + label0);
432 fwC0.setLabelPositioning(Positioning.BOTTOM);417 fwC0.setLabelPositioning(Positioning.BOTTOM);
433 if (!l.getReferencedCounterflowLogic().isForwardComputed()) {418 if (!l.getReferencedCounterflowLogic().isForwardComputed()) {
@@ -438,7 +423,7 @@
438 setPosition(fwC0, x + 2.0, y - 2.0);423 setPosition(fwC0, x + 2.0, y - 2.0);
439 nodes.add(fwC0);424 nodes.add(fwC0);
440425
441 VisualPlace fwC1 = stg.createPlace(nameFwC + name + name1, curContainer);426 VisualPlace fwC1 = getStgModel().createPlace(nameFwC + name + name1, curContainer);
442 fwC1.setLabel(labelFwC + name + label1);427 fwC1.setLabel(labelFwC + name + label1);
443 fwC1.setLabelPositioning(Positioning.TOP);428 fwC1.setLabelPositioning(Positioning.TOP);
444 if (l.getReferencedCounterflowLogic().isForwardComputed()) {429 if (l.getReferencedCounterflowLogic().isForwardComputed()) {
@@ -450,8 +435,8 @@
450 nodes.add(fwC1);435 nodes.add(fwC1);
451436
452 Set<Node> preset = new HashSet<Node>();437 Set<Node> preset = new HashSet<Node>();
453 preset.addAll(dfs.getPreset(l, VisualCounterflowLogic.class));438 preset.addAll(getDfsModel().getPreset(l, VisualCounterflowLogic.class));
454 preset.addAll(dfs.getPreset(l, VisualCounterflowRegister.class));439 preset.addAll(getDfsModel().getPreset(l, VisualCounterflowRegister.class));
455 if (preset.size() == 0) {440 if (preset.size() == 0) {
456 preset.add(l);441 preset.add(l);
457 }442 }
@@ -463,7 +448,7 @@
463 double dy = 0.0;448 double dy = 0.0;
464 for (Node n: preset) {449 for (Node n: preset) {
465 if (fwCR == null || l.getReferencedCounterflowLogic().isForwardEarlyEvaluation()) { 450 if (fwCR == null || l.getReferencedCounterflowLogic().isForwardEarlyEvaluation()) {
466 fwCR = stg.createSignalTransition(nameFwC + name, type, SignalTransition.Direction.PLUS, curContainer);451 fwCR = getStgModel().createSignalTransition(nameFwC + name, type, SignalTransition.Direction.PLUS, curContainer);
467 fwCR.setTokenColorGenerator(presetTokenColorGenerator);452 fwCR.setTokenColorGenerator(presetTokenColorGenerator);
468 createConsumingArc(fwC0, fwCR, false);453 createConsumingArc(fwC0, fwCR, false);
469 createProducingArc(fwCR, fwC1, true);454 createProducingArc(fwCR, fwC1, true);
@@ -472,7 +457,7 @@
472 }457 }
473 fwCRs.put(n, fwCR);458 fwCRs.put(n, fwCR);
474 if (fwCF == null) { 459 if (fwCF == null) {
475 fwCF = stg.createSignalTransition(nameFwC + name, type, SignalTransition.Direction.MINUS, curContainer);460 fwCF = getStgModel().createSignalTransition(nameFwC + name, type, SignalTransition.Direction.MINUS, curContainer);
476 createConsumingArc(fwC1, fwCF, false);461 createConsumingArc(fwC1, fwCF, false);
477 createProducingArc(fwCF, fwC0, false);462 createProducingArc(fwCF, fwC0, false);
478 setPosition(fwCF, x - 2.0, y - 4.0 - dy);463 setPosition(fwCF, x - 2.0, y - 4.0 - dy);
@@ -483,7 +468,7 @@
483 }468 }
484 }469 }
485 470
486 VisualPlace bwC0 = stg.createPlace(nameBwC + name + name0, curContainer);471 VisualPlace bwC0 = getStgModel().createPlace(nameBwC + name + name0, curContainer);
487 bwC0.setLabel(labelBwC + name + label0);472 bwC0.setLabel(labelBwC + name + label0);
488 bwC0.setLabelPositioning(Positioning.BOTTOM);473 bwC0.setLabelPositioning(Positioning.BOTTOM);
489 if (!l.getReferencedCounterflowLogic().isBackwardComputed()) {474 if (!l.getReferencedCounterflowLogic().isBackwardComputed()) {
@@ -494,7 +479,7 @@
494 setPosition(bwC0, x + 2.0, y + 4.0);479 setPosition(bwC0, x + 2.0, y + 4.0);
495 nodes.add(bwC0);480 nodes.add(bwC0);
496481
497 VisualPlace bwC1 = stg.createPlace(nameBwC + name + name1, curContainer);482 VisualPlace bwC1 = getStgModel().createPlace(nameBwC + name + name1, curContainer);
498 bwC1.setLabel(labelBwC + name + label1);483 bwC1.setLabel(labelBwC + name + label1);
499 bwC1.setLabelPositioning(Positioning.TOP);484 bwC1.setLabelPositioning(Positioning.TOP);
500 if (l.getReferencedCounterflowLogic().isBackwardComputed()) {485 if (l.getReferencedCounterflowLogic().isBackwardComputed()) {
@@ -506,8 +491,8 @@
506 nodes.add(bwC1);491 nodes.add(bwC1);
507 492
508 Set<Node> postset = new HashSet<Node>();493 Set<Node> postset = new HashSet<Node>();
509 postset.addAll(dfs.getPostset(l, VisualCounterflowLogic.class));494 postset.addAll(getDfsModel().getPostset(l, VisualCounterflowLogic.class));
510 postset.addAll(dfs.getPostset(l, VisualCounterflowRegister.class));495 postset.addAll(getDfsModel().getPostset(l, VisualCounterflowRegister.class));
511 if (postset.size() == 0) {496 if (postset.size() == 0) {
512 postset.add(l);497 postset.add(l);
513 }498 }
@@ -519,7 +504,7 @@
519 double dy = 0.0;504 double dy = 0.0;
520 for (Node n: postset) {505 for (Node n: postset) {
521 if (bwCR == null || l.getReferencedCounterflowLogic().isBackwardEarlyEvaluation()) { 506 if (bwCR == null || l.getReferencedCounterflowLogic().isBackwardEarlyEvaluation()) {
522 bwCR = stg.createSignalTransition(nameBwC + name, type, SignalTransition.Direction.PLUS, curContainer);507 bwCR = getStgModel().createSignalTransition(nameBwC + name, type, SignalTransition.Direction.PLUS, curContainer);
523 bwCR.setTokenColorGenerator(postsetTokenColorGenerator);508 bwCR.setTokenColorGenerator(postsetTokenColorGenerator);
524 createConsumingArc(bwC0, bwCR, false);509 createConsumingArc(bwC0, bwCR, false);
525 createProducingArc(bwCR, bwC1, false);510 createProducingArc(bwCR, bwC1, false);
@@ -528,7 +513,7 @@
528 }513 }
529 bwCRs.put(n, bwCR);514 bwCRs.put(n, bwCR);
530 if (bwCF == null) { 515 if (bwCF == null) {
531 bwCF = stg.createSignalTransition(nameBwC + name, type, SignalTransition.Direction.MINUS, curContainer);516 bwCF = getStgModel().createSignalTransition(nameBwC + name, type, SignalTransition.Direction.MINUS, curContainer);
532 createConsumingArc(bwC1, bwCF, false);517 createConsumingArc(bwC1, bwCF, false);
533 createProducingArc(bwCF, bwC0, false);518 createProducingArc(bwCF, bwC0, false);
534 setPosition(bwCF, x - 2.0, y + 2.0 - dy);519 setPosition(bwCF, x - 2.0, y + 2.0 - dy);
@@ -538,32 +523,30 @@
538 dy += 1.0;523 dy += 1.0;
539 }524 }
540 } 525 }
541 526
542 stg.select(nodes);
543 stg.groupSelection();
544 return new CounterflowLogicStg(fwC0, fwC1, fwCRs, fwCFs, bwC0, bwC1, bwCRs, bwCFs);527 return new CounterflowLogicStg(fwC0, fwC1, fwCRs, fwCFs, bwC0, bwC1, bwCRs, bwCFs);
545 }528 }
546529
547 private void connectCounterflowLogicStg(VisualCounterflowLogic l) throws InvalidConnectionException {530 private void connectCounterflowLogicStg(VisualCounterflowLogic l) throws InvalidConnectionException {
548 CounterflowLogicStg lstg = getCounterflowLogicStg(l);531 CounterflowLogicStg lstg = getCounterflowLogicStg(l);
549 // preset532 // preset
550 for (VisualCounterflowLogic n: dfs.getPreset(l, VisualCounterflowLogic.class)) {533 for (VisualCounterflowLogic n: getDfsModel().getPreset(l, VisualCounterflowLogic.class)) {
551 CounterflowLogicStg nstg = getCounterflowLogicStg(n);534 CounterflowLogicStg nstg = getCounterflowLogicStg(n);
552 createReadArc(nstg.fwC1, lstg.fwCRs.get(n), true);535 createReadArc(nstg.fwC1, lstg.fwCRs.get(n), true);
553 createReadArc(nstg.fwC0, lstg.fwCFs.get(n), false);536 createReadArc(nstg.fwC0, lstg.fwCFs.get(n), false);
554 }537 }
555 for (VisualCounterflowRegister n: dfs.getPreset(l, VisualCounterflowRegister.class)) {538 for (VisualCounterflowRegister n: getDfsModel().getPreset(l, VisualCounterflowRegister.class)) {
556 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);539 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);
557 createReadArc(nstg.orM1, lstg.fwCRs.get(n), true);540 createReadArc(nstg.orM1, lstg.fwCRs.get(n), true);
558 createReadArc(nstg.orM0, lstg.fwCFs.get(n), false);541 createReadArc(nstg.orM0, lstg.fwCFs.get(n), false);
559 }542 }
560 // postset543 // postset
561 for (VisualCounterflowLogic n: dfs.getPostset(l, VisualCounterflowLogic.class)) {544 for (VisualCounterflowLogic n: getDfsModel().getPostset(l, VisualCounterflowLogic.class)) {
562 CounterflowLogicStg nstg = getCounterflowLogicStg(n);545 CounterflowLogicStg nstg = getCounterflowLogicStg(n);
563 createReadArc(nstg.bwC1, lstg.bwCRs.get(n), false);546 createReadArc(nstg.bwC1, lstg.bwCRs.get(n), false);
564 createReadArc(nstg.bwC0, lstg.bwCFs.get(n), false);547 createReadArc(nstg.bwC0, lstg.bwCFs.get(n), false);
565 }548 }
566 for (VisualCounterflowRegister n: dfs.getPostset(l, VisualCounterflowRegister.class)) {549 for (VisualCounterflowRegister n: getDfsModel().getPostset(l, VisualCounterflowRegister.class)) {
567 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);550 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);
568 createReadArc(nstg.orM1, lstg.bwCRs.get(n), false);551 createReadArc(nstg.orM1, lstg.bwCRs.get(n), false);
569 createReadArc(nstg.orM0, lstg.bwCFs.get(n), false);552 createReadArc(nstg.orM0, lstg.bwCFs.get(n), false);
@@ -571,25 +554,33 @@
571 }554 }
572555
573 public CounterflowLogicStg getCounterflowLogicStg(VisualCounterflowLogic logic) {556 public CounterflowLogicStg getCounterflowLogicStg(VisualCounterflowLogic logic) {
574 return counterflowLogicMap.get(logic);557 return ((counterflowLogicMap == null) ? null : counterflowLogicMap.get(logic));
575 }558 }
559
560 public void putCounterflowLogicStg(VisualCounterflowLogic logic, CounterflowLogicStg stg) {
561 if (counterflowLogicMap == null) {
562 counterflowLogicMap = new HashMap<>();
563 }
564 counterflowLogicMap.put(logic, stg);
565 }
566
576567
577 private CounterflowRegisterStg generateCounterflowRegisterSTG(VisualCounterflowRegister r) throws InvalidConnectionException {568 private CounterflowRegisterStg generateCounterflowRegisterSTG(VisualCounterflowRegister r) throws InvalidConnectionException {
578 String name = dfs.getName(r);569 String name = getDfsModel().getName(r);
579 AffineTransform transform = TransformHelper.getTransformToRoot(r);570 Point2D pos = getComponentPosition(r);
580 double x = xScaling * (transform.getTranslateX() + r.getX()); 571 double x = pos.getX();
581 double y = yScaling * (transform.getTranslateY() + r.getY());572 double y = pos.getY();
582 Collection<Node> nodes = new LinkedList<Node>();573 Collection<Node> nodes = new LinkedList<Node>();
583 SignalTransition.Type type = SignalTransition.Type.INTERNAL;574 SignalTransition.Type type = SignalTransition.Type.INTERNAL;
584 if (dfs.getPreset(r).size() == 0 || dfs.getPostset(r).size() == 0) {575 if (getDfsModel().getPreset(r).size() == 0 || getDfsModel().getPostset(r).size() == 0) {
585 type = SignalTransition.Type.INPUT;576 type = SignalTransition.Type.INPUT;
586 }577 }
587 ColorGenerator presetTokenColorGenerator = createColorGenerator(dfs.getPreset(r).size() == 0);578 ColorGenerator presetTokenColorGenerator = createColorGenerator(getDfsModel().getPreset(r).size() == 0);
588 ColorGenerator postsetTokenColorGenerator = createColorGenerator(dfs.getPostset(r).size() == 0);579 ColorGenerator postsetTokenColorGenerator = createColorGenerator(getDfsModel().getPostset(r).size() == 0);
589580
590 Container curContainer = null;581 Container curContainer = null;
591 582
592 VisualPlace orM0 = stg.createPlace(nameOrM + name + name0, curContainer);583 VisualPlace orM0 = getStgModel().createPlace(nameOrM + name + name0, curContainer);
593 orM0.setLabel(labelOrM + name + label0);584 orM0.setLabel(labelOrM + name + label0);
594 orM0.setLabelPositioning(Positioning.BOTTOM);585 orM0.setLabelPositioning(Positioning.BOTTOM);
595 if (!r.getReferencedCounterflowRegister().isOrMarked()) {586 if (!r.getReferencedCounterflowRegister().isOrMarked()) {
@@ -600,7 +591,7 @@
600 setPosition(orM0, x + 2.0, y - 2.0);591 setPosition(orM0, x + 2.0, y - 2.0);
601 nodes.add(orM0);592 nodes.add(orM0);
602593
603 VisualPlace orM1 = stg.createPlace(nameOrM + name + name1, curContainer);594 VisualPlace orM1 = getStgModel().createPlace(nameOrM + name + name1, curContainer);
604 orM1.setLabel(labelOrM + name + label1);595 orM1.setLabel(labelOrM + name + label1);
605 orM1.setLabelPositioning(Positioning.TOP);596 orM1.setLabelPositioning(Positioning.TOP);
606 if (r.getReferencedCounterflowRegister().isOrMarked()) {597 if (r.getReferencedCounterflowRegister().isOrMarked()) {
@@ -611,33 +602,33 @@
611 setPosition(orM1, x + 2.0, y - 4.0);602 setPosition(orM1, x + 2.0, y - 4.0);
612 nodes.add(orM1);603 nodes.add(orM1);
613604
614 VisualSignalTransition orMRfw = stg.createSignalTransition(nameOrM + name, type, SignalTransition.Direction.PLUS, curContainer);605 VisualSignalTransition orMRfw = getStgModel().createSignalTransition(nameOrM + name, type, SignalTransition.Direction.PLUS, curContainer);
615 orMRfw.setTokenColorGenerator(presetTokenColorGenerator);606 orMRfw.setTokenColorGenerator(presetTokenColorGenerator);
616 createConsumingArc(orM0, orMRfw, false);607 createConsumingArc(orM0, orMRfw, false);
617 createProducingArc(orMRfw, orM1, true);608 createProducingArc(orMRfw, orM1, true);
618 setPosition(orMRfw, x - 2.0, y - 2.5);609 setPosition(orMRfw, x - 2.0, y - 2.5);
619 nodes.add(orMRfw);610 nodes.add(orMRfw);
620611
621 VisualSignalTransition orMRbw = stg.createSignalTransition(nameOrM + name, type, SignalTransition.Direction.PLUS, curContainer);612 VisualSignalTransition orMRbw = getStgModel().createSignalTransition(nameOrM + name, type, SignalTransition.Direction.PLUS, curContainer);
622 orMRbw.setTokenColorGenerator(postsetTokenColorGenerator);613 orMRbw.setTokenColorGenerator(postsetTokenColorGenerator);
623 createConsumingArc(orM0, orMRbw, false);614 createConsumingArc(orM0, orMRbw, false);
624 createProducingArc(orMRbw, orM1, true);615 createProducingArc(orMRbw, orM1, true);
625 setPosition(orMRbw, x - 2.0, y - 1.5);616 setPosition(orMRbw, x - 2.0, y - 1.5);
626 nodes.add(orMRbw);617 nodes.add(orMRbw);
627618
628 VisualSignalTransition orMFfw = stg.createSignalTransition(nameOrM + name, type, SignalTransition.Direction.MINUS, curContainer);619 VisualSignalTransition orMFfw = getStgModel().createSignalTransition(nameOrM + name, type, SignalTransition.Direction.MINUS, curContainer);
629 createConsumingArc(orM1, orMFfw, false);620 createConsumingArc(orM1, orMFfw, false);
630 createProducingArc(orMFfw, orM0, false);621 createProducingArc(orMFfw, orM0, false);
631 setPosition(orMFfw, x - 2.0, y - 4.5);622 setPosition(orMFfw, x - 2.0, y - 4.5);
632 nodes.add(orMFfw);623 nodes.add(orMFfw);
633624
634 VisualSignalTransition orMFbw = stg.createSignalTransition(nameOrM + name, type, SignalTransition.Direction.MINUS, curContainer);625 VisualSignalTransition orMFbw = getStgModel().createSignalTransition(nameOrM + name, type, SignalTransition.Direction.MINUS, curContainer);
635 createConsumingArc(orM1, orMFbw, false);626 createConsumingArc(orM1, orMFbw, false);
636 createProducingArc(orMFbw, orM0, false);627 createProducingArc(orMFbw, orM0, false);
637 setPosition(orMFbw, x - 2.0, y - 3.5);628 setPosition(orMFbw, x - 2.0, y - 3.5);
638 nodes.add(orMFbw);629 nodes.add(orMFbw);
639630
640 VisualPlace andM0 = stg.createPlace(nameAndM + name + name0, curContainer);631 VisualPlace andM0 = getStgModel().createPlace(nameAndM + name + name0, curContainer);
641 andM0.setLabel(labelAndM + name + label0);632 andM0.setLabel(labelAndM + name + label0);
642 andM0.setLabelPositioning(Positioning.BOTTOM);633 andM0.setLabelPositioning(Positioning.BOTTOM);
643 if (!r.getReferencedCounterflowRegister().isAndMarked()) {634 if (!r.getReferencedCounterflowRegister().isAndMarked()) {
@@ -648,7 +639,7 @@
648 setPosition(andM0, x + 2.0, y + 4.0);639 setPosition(andM0, x + 2.0, y + 4.0);
649 nodes.add(andM0);640 nodes.add(andM0);
650641
651 VisualPlace andM1 = stg.createPlace(nameAndM + name + name1, curContainer);642 VisualPlace andM1 = getStgModel().createPlace(nameAndM + name + name1, curContainer);
652 andM1.setLabel(labelAndM + name + label1);643 andM1.setLabel(labelAndM + name + label1);
653 andM1.setLabelPositioning(Positioning.TOP);644 andM1.setLabelPositioning(Positioning.TOP);
654 if (r.getReferencedCounterflowRegister().isAndMarked()) {645 if (r.getReferencedCounterflowRegister().isAndMarked()) {
@@ -659,34 +650,32 @@
659 setPosition(andM1, x + 2.0, y + 2.0);650 setPosition(andM1, x + 2.0, y + 2.0);
660 nodes.add(andM1);651 nodes.add(andM1);
661652
662 VisualSignalTransition andMR = stg.createSignalTransition(nameAndM + name, type, SignalTransition.Direction.PLUS, curContainer);653 VisualSignalTransition andMR = getStgModel().createSignalTransition(nameAndM + name, type, SignalTransition.Direction.PLUS, curContainer);
663 createConsumingArc(andM0, andMR, false);654 createConsumingArc(andM0, andMR, false);
664 createProducingArc(andMR, andM1, false);655 createProducingArc(andMR, andM1, false);
665 setPosition(andMR, x - 2.0, y + 4.0);656 setPosition(andMR, x - 2.0, y + 4.0);
666 nodes.add(andMR);657 nodes.add(andMR);
667658
668 VisualSignalTransition andMF = stg.createSignalTransition(nameAndM + name, type, SignalTransition.Direction.MINUS, curContainer);659 VisualSignalTransition andMF = getStgModel().createSignalTransition(nameAndM + name, type, SignalTransition.Direction.MINUS, curContainer);
669 createConsumingArc(andM1, andMF, false);660 createConsumingArc(andM1, andMF, false);
670 createProducingArc(andMF, andM0, false);661 createProducingArc(andMF, andM0, false);
671 setPosition(andMF, x - 2.0, y + 2.0);662 setPosition(andMF, x - 2.0, y + 2.0);
672 nodes.add(andMF);663 nodes.add(andMF);
673664
674 stg.select(nodes);
675 stg.groupSelection();
676 return new CounterflowRegisterStg(orM0, orM1, orMRfw, orMRbw, orMFfw, orMFbw, andM0, andM1, andMR, andMF);665 return new CounterflowRegisterStg(orM0, orM1, orMRfw, orMRbw, orMFfw, orMFbw, andM0, andM1, andMR, andMF);
677 }666 }
678667
679 private void connectCounterflowRegisterStg(VisualCounterflowRegister r) throws InvalidConnectionException {668 private void connectCounterflowRegisterStg(VisualCounterflowRegister r) throws InvalidConnectionException {
680 CounterflowRegisterStg rstg = getCounterflowRegisterStg(r); 669 CounterflowRegisterStg rstg = getCounterflowRegisterStg(r);
681 670
682 for (VisualRegister n: dfs.getPreset(r, VisualRegister.class)) {671 for (VisualRegister n: getDfsModel().getPreset(r, VisualRegister.class)) {
683 RegisterStg nstg = getRegisterStg(n);672 RegisterStg nstg = getRegisterStg(n);
684 createReadArc(nstg.M1, rstg.orMRfw, true);673 createReadArc(nstg.M1, rstg.orMRfw, true);
685 createReadArc(nstg.M1, rstg.andMR, false);674 createReadArc(nstg.M1, rstg.andMR, false);
686 createReadArc(nstg.M0, rstg.orMFfw, false);675 createReadArc(nstg.M0, rstg.orMFfw, false);
687 createReadArc(nstg.M0, rstg.andMF, false);676 createReadArc(nstg.M0, rstg.andMF, false);
688 }677 }
689 for (VisualRegister n: dfs.getPostset(r, VisualRegister.class)) {678 for (VisualRegister n: getDfsModel().getPostset(r, VisualRegister.class)) {
690 RegisterStg nstg = getRegisterStg(n);679 RegisterStg nstg = getRegisterStg(n);
691 createReadArc(nstg.M1, rstg.orMRbw, true);680 createReadArc(nstg.M1, rstg.orMRbw, true);
692 createReadArc(nstg.M1, rstg.andMR, false);681 createReadArc(nstg.M1, rstg.andMR, false);
@@ -694,14 +683,14 @@
694 createReadArc(nstg.M0, rstg.andMF, false);683 createReadArc(nstg.M0, rstg.andMF, false);
695 }684 }
696685
697 for (VisualCounterflowLogic n: dfs.getPreset(r, VisualCounterflowLogic.class)) {686 for (VisualCounterflowLogic n: getDfsModel().getPreset(r, VisualCounterflowLogic.class)) {
698 CounterflowLogicStg nstg = getCounterflowLogicStg(n);687 CounterflowLogicStg nstg = getCounterflowLogicStg(n);
699 createReadArc(nstg.fwC1, rstg.orMRfw, true);688 createReadArc(nstg.fwC1, rstg.orMRfw, true);
700 createReadArc(nstg.fwC0, rstg.orMFfw, false);689 createReadArc(nstg.fwC0, rstg.orMFfw, false);
701 createReadArc(nstg.fwC1, rstg.andMR, false);690 createReadArc(nstg.fwC1, rstg.andMR, false);
702 createReadArc(nstg.fwC0, rstg.andMF, false);691 createReadArc(nstg.fwC0, rstg.andMF, false);
703 }692 }
704 for (VisualCounterflowLogic n: dfs.getPostset(r, VisualCounterflowLogic.class)) {693 for (VisualCounterflowLogic n: getDfsModel().getPostset(r, VisualCounterflowLogic.class)) {
705 CounterflowLogicStg nstg = getCounterflowLogicStg(n);694 CounterflowLogicStg nstg = getCounterflowLogicStg(n);
706 createReadArc(nstg.bwC1, rstg.orMRbw, true);695 createReadArc(nstg.bwC1, rstg.orMRbw, true);
707 createReadArc(nstg.bwC0, rstg.orMFbw, false);696 createReadArc(nstg.bwC0, rstg.orMFbw, false);
@@ -709,12 +698,12 @@
709 createReadArc(nstg.bwC0, rstg.andMF, false);698 createReadArc(nstg.bwC0, rstg.andMF, false);
710 }699 }
711 700
712 for (VisualCounterflowRegister n: dfs.getPreset(r, VisualCounterflowRegister.class)) {701 for (VisualCounterflowRegister n: getDfsModel().getPreset(r, VisualCounterflowRegister.class)) {
713 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);702 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);
714 createReadArc(nstg.orM1, rstg.orMRfw, true);703 createReadArc(nstg.orM1, rstg.orMRfw, true);
715 createReadArc(nstg.orM0, rstg.orMFfw, false);704 createReadArc(nstg.orM0, rstg.orMFfw, false);
716 }705 }
717 for (VisualCounterflowRegister n: dfs.getPostset(r, VisualCounterflowRegister.class)) {706 for (VisualCounterflowRegister n: getDfsModel().getPostset(r, VisualCounterflowRegister.class)) {
718 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);707 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);
719 createReadArc(nstg.orM1, rstg.orMRbw, true);708 createReadArc(nstg.orM1, rstg.orMRbw, true);
720 createReadArc(nstg.orM0, rstg.orMFbw, false);709 createReadArc(nstg.orM0, rstg.orMFbw, false);
@@ -722,8 +711,8 @@
722 711
723 Set<VisualCounterflowRegister> rSet = new HashSet<VisualCounterflowRegister>();712 Set<VisualCounterflowRegister> rSet = new HashSet<VisualCounterflowRegister>();
724 rSet.add(r);713 rSet.add(r);
725 rSet.addAll(dfs.getRPreset(r, VisualCounterflowRegister.class));714 rSet.addAll(getDfsModel().getRPreset(r, VisualCounterflowRegister.class));
726 rSet.addAll(dfs.getRPostset(r, VisualCounterflowRegister.class)); 715 rSet.addAll(getDfsModel().getRPostset(r, VisualCounterflowRegister.class));
727 for (VisualCounterflowRegister n: rSet) {716 for (VisualCounterflowRegister n: rSet) {
728 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);717 CounterflowRegisterStg nstg = getCounterflowRegisterStg(n);
729 createReadArc(nstg.orM1, rstg.andMR, true);718 createReadArc(nstg.orM1, rstg.andMR, true);
@@ -736,26 +725,34 @@
736 }725 }
737 726
738 public CounterflowRegisterStg getCounterflowRegisterStg(VisualCounterflowRegister register) {727 public CounterflowRegisterStg getCounterflowRegisterStg(VisualCounterflowRegister register) {
739 return counterflowRegisterMap.get(register);728 return ((counterflowRegisterMap == null) ? null: counterflowRegisterMap.get(register));
740 }729 }
730
731 public void putCounterflowRegisterStg(VisualCounterflowRegister register, CounterflowRegisterStg stg) {
732 if (counterflowRegisterMap == null) {
733 counterflowRegisterMap = new HashMap<>();
734 }
735 counterflowRegisterMap.put(register, stg);
736 }
737
741738
742 private BinaryRegisterStg generateBinaryRegisterSTG(VisualBinaryRegister r, 739 private BinaryRegisterStg generateBinaryRegisterSTG(VisualBinaryRegister r,
743 boolean andSync, boolean orSync) throws InvalidConnectionException {740 boolean andSync, boolean orSync) throws InvalidConnectionException {
744 Collection<Node> nodes = new LinkedList<Node>();741 Collection<Node> nodes = new LinkedList<Node>();
745 String name = dfs.getName(r);742 String name = getDfsModel().getName(r);
746 AffineTransform transform = TransformHelper.getTransformToRoot(r);743 Point2D pos = getComponentPosition(r);
747 double x = xScaling * (transform.getTranslateX() + r.getX());744 double x = pos.getX();
748 double y = yScaling * (transform.getTranslateY() + r.getY());745 double y = pos.getY();
749 SignalTransition.Type type = SignalTransition.Type.INTERNAL;746 SignalTransition.Type type = SignalTransition.Type.INTERNAL;
750 if (dfs.getPreset(r, VisualControlRegister.class).size() == 0) {747 if (getDfsModel().getPreset(r, VisualControlRegister.class).size() == 0) {
751 type = SignalTransition.Type.INPUT;748 type = SignalTransition.Type.INPUT;
752 } else if (dfs.getPostset(r).size() == 0) {749 } else if (getDfsModel().getPostset(r).size() == 0) {
753 type = SignalTransition.Type.OUTPUT;750 type = SignalTransition.Type.OUTPUT;
754 }751 }
755 ColorGenerator tokenColorGenerator = createColorGenerator(dfs.getPreset(r).size() == 0);752 ColorGenerator tokenColorGenerator = createColorGenerator(getDfsModel().getPreset(r).size() == 0);
756 Container curContainer = null;753 Container curContainer = null;
757754
758 VisualPlace M0 = stg.createPlace(nameM + name + name0, curContainer);755 VisualPlace M0 = getStgModel().createPlace(nameM + name + name0, curContainer);
759 M0.setLabel(labelM + name + label0);756 M0.setLabel(labelM + name + label0);
760 M0.setLabelPositioning(Positioning.BOTTOM);757 M0.setLabelPositioning(Positioning.BOTTOM);
761 if (!r.getReferencedBinaryRegister().isTrueMarked() && !r.getReferencedBinaryRegister().isFalseMarked()) {758 if (!r.getReferencedBinaryRegister().isTrueMarked() && !r.getReferencedBinaryRegister().isFalseMarked()) {
@@ -766,7 +763,7 @@
766 setPosition(M0, x - 4.0, y + 1.0);763 setPosition(M0, x - 4.0, y + 1.0);
767 nodes.add(M0);764 nodes.add(M0);
768765
769 VisualPlace M1 = stg.createPlace(nameM + name + name1, curContainer);766 VisualPlace M1 = getStgModel().createPlace(nameM + name + name1, curContainer);
770 M1.setLabel(labelM + name + label1);767 M1.setLabel(labelM + name + label1);
771 M1.setLabelPositioning(Positioning.TOP);768 M1.setLabelPositioning(Positioning.TOP);
772 if (r.getReferencedBinaryRegister().isTrueMarked() || r.getReferencedBinaryRegister().isFalseMarked()) {769 if (r.getReferencedBinaryRegister().isTrueMarked() || r.getReferencedBinaryRegister().isFalseMarked()) {
@@ -777,7 +774,7 @@
777 setPosition(M1, x - 4.0, y - 1.0);774 setPosition(M1, x - 4.0, y - 1.0);
778 nodes.add(M1);775 nodes.add(M1);
779776
780 VisualPlace tM0 = stg.createPlace(nameTrueM + name + name0, curContainer);777 VisualPlace tM0 = getStgModel().createPlace(nameTrueM + name + name0, curContainer);
781 tM0.setLabel(labelTrueM + name + label0);778 tM0.setLabel(labelTrueM + name + label0);
782 tM0.setLabelPositioning(Positioning.BOTTOM);779 tM0.setLabelPositioning(Positioning.BOTTOM);
783 if (!r.getReferencedBinaryRegister().isTrueMarked()) {780 if (!r.getReferencedBinaryRegister().isTrueMarked()) {
@@ -788,7 +785,7 @@
788 setPosition(tM0, x + 4.0, y - 2.0);785 setPosition(tM0, x + 4.0, y - 2.0);
789 nodes.add(tM0);786 nodes.add(tM0);
790787
791 VisualPlace tM1 = stg.createPlace(nameTrueM + name + name1, curContainer);788 VisualPlace tM1 = getStgModel().createPlace(nameTrueM + name + name1, curContainer);
792 tM1.setLabel(labelTrueM + name + label1);789 tM1.setLabel(labelTrueM + name + label1);
793 tM1.setLabelPositioning(Positioning.TOP);790 tM1.setLabelPositioning(Positioning.TOP);
794 if (r.getReferencedBinaryRegister().isTrueMarked()) {791 if (r.getReferencedBinaryRegister().isTrueMarked()) {
@@ -800,7 +797,7 @@
800 nodes.add(tM1);797 nodes.add(tM1);
801798
802 Set<Node> preset = new HashSet<Node>();799 Set<Node> preset = new HashSet<Node>();
803 preset.addAll(dfs.getRPreset(r, VisualControlRegister.class));800 preset.addAll(getDfsModel().getRPreset(r, VisualControlRegister.class));
804 if (preset.size() == 0) {801 if (preset.size() == 0) {
805 preset.add(r);802 preset.add(r);
806 }803 }
@@ -810,7 +807,7 @@
810 double dy = 0.0;807 double dy = 0.0;
811 for (Node n: preset) {808 for (Node n: preset) {
812 if (tMR == null || orSync) { 809 if (tMR == null || orSync) {
813 tMR = stg.createSignalTransition(nameTrueM + name, type, SignalTransition.Direction.PLUS, curContainer);810 tMR = getStgModel().createSignalTransition(nameTrueM + name, type, SignalTransition.Direction.PLUS, curContainer);
814 tMR.setTokenColorGenerator(tokenColorGenerator);811 tMR.setTokenColorGenerator(tokenColorGenerator);
815 createConsumingArc(tM0, tMR, false);812 createConsumingArc(tM0, tMR, false);
816 createProducingArc(tMR, tM1, true);813 createProducingArc(tMR, tM1, true);
@@ -822,7 +819,7 @@
822 tMRs.put(n, tMR);819 tMRs.put(n, tMR);
823 dy += 1.0;820 dy += 1.0;
824 }821 }
825 VisualSignalTransition tMF = stg.createSignalTransition(nameTrueM + name, type, SignalTransition.Direction.MINUS, curContainer);822 VisualSignalTransition tMF = getStgModel().createSignalTransition(nameTrueM + name, type, SignalTransition.Direction.MINUS, curContainer);
826 createConsumingArc(tM1, tMF, false);823 createConsumingArc(tM1, tMF, false);
827 createProducingArc(tMF, tM0, false);824 createProducingArc(tMF, tM0, false);
828 createConsumingArc(M1, tMF, false);825 createConsumingArc(M1, tMF, false);
@@ -831,7 +828,7 @@
831 nodes.add(tMF);828 nodes.add(tMF);
832829
833 830
834 VisualPlace fM0 = stg.createPlace(nameFalseM + name + name0, curContainer);831 VisualPlace fM0 = getStgModel().createPlace(nameFalseM + name + name0, curContainer);
835 fM0.setLabel(labelFalseM + name + label0);832 fM0.setLabel(labelFalseM + name + label0);
836 fM0.setLabelPositioning(Positioning.BOTTOM);833 fM0.setLabelPositioning(Positioning.BOTTOM);
837 if (!r.getReferencedBinaryRegister().isFalseMarked()) {834 if (!r.getReferencedBinaryRegister().isFalseMarked()) {
@@ -842,7 +839,7 @@
842 setPosition(fM0, x + 4.0, y + 4.0);839 setPosition(fM0, x + 4.0, y + 4.0);
843 nodes.add(fM0);840 nodes.add(fM0);
844841
845 VisualPlace fM1 = stg.createPlace(nameFalseM + name + name1, curContainer);842 VisualPlace fM1 = getStgModel().createPlace(nameFalseM + name + name1, curContainer);
846 fM1.setLabel(labelFalseM + name + label1);843 fM1.setLabel(labelFalseM + name + label1);
847 fM1.setLabelPositioning(Positioning.TOP);844 fM1.setLabelPositioning(Positioning.TOP);
848 if (r.getReferencedBinaryRegister().isFalseMarked()) {845 if (r.getReferencedBinaryRegister().isFalseMarked()) {
@@ -858,7 +855,7 @@
858 dy = 0.0;855 dy = 0.0;
859 for (Node n: preset) {856 for (Node n: preset) {
860 if (fMR == null || andSync) { 857 if (fMR == null || andSync) {
861 fMR = stg.createSignalTransition(nameFalseM + name, type, SignalTransition.Direction.PLUS, curContainer);858 fMR = getStgModel().createSignalTransition(nameFalseM + name, type, SignalTransition.Direction.PLUS, curContainer);
862 fMR.setTokenColorGenerator(tokenColorGenerator);859 fMR.setTokenColorGenerator(tokenColorGenerator);
863 createConsumingArc(fM0, fMR, false);860 createConsumingArc(fM0, fMR, false);
864 createProducingArc(fMR, fM1, true);861 createProducingArc(fMR, fM1, true);
@@ -870,7 +867,7 @@
870 fMRs.put(n, fMR);867 fMRs.put(n, fMR);
871 dy += 1.0;868 dy += 1.0;
872 }869 }
873 VisualSignalTransition fMF = stg.createSignalTransition(nameFalseM + name, type, SignalTransition.Direction.MINUS, curContainer);870 VisualSignalTransition fMF = getStgModel().createSignalTransition(nameFalseM + name, type, SignalTransition.Direction.MINUS, curContainer);
874 createConsumingArc(fM1, fMF, false);871 createConsumingArc(fM1, fMF, false);
875 createProducingArc(fMF, fM0, false);872 createProducingArc(fMF, fM0, false);
876 createConsumingArc(M1, fMF, false);873 createConsumingArc(M1, fMF, false);
@@ -882,8 +879,6 @@
882 createReadArcs(tM0, fMRs.values(), false);879 createReadArcs(tM0, fMRs.values(), false);
883 createReadArcs(fM0, tMRs.values(), false);880 createReadArcs(fM0, tMRs.values(), false);
884881
885 stg.select(nodes);
886 stg.groupSelection();
887 return new BinaryRegisterStg(M0, M1, tM0, tM1, tMRs, tMF, fM0, fM1, fMRs, fMF);882 return new BinaryRegisterStg(M0, M1, tM0, tM1, tMRs, tMF, fM0, fM1, fMRs, fMF);
888 }883 }
889884
@@ -896,7 +891,7 @@
896 private void connectControlRegisterStg(VisualControlRegister r) throws InvalidConnectionException {891 private void connectControlRegisterStg(VisualControlRegister r) throws InvalidConnectionException {
897 BinaryRegisterStg rstg = getControlRegisterStg(r);892 BinaryRegisterStg rstg = getControlRegisterStg(r);
898 // preset893 // preset
899 for (VisualLogic n: dfs.getPreset(r, VisualLogic.class)) {894 for (VisualLogic n: getDfsModel().getPreset(r, VisualLogic.class)) {
900 LogicStg nstg = getLogicStg(n);895 LogicStg nstg = getLogicStg(n);
901 createReadArcs(nstg.C1, rstg.tMRs.values(), true);896 createReadArcs(nstg.C1, rstg.tMRs.values(), true);
902 createReadArcs(nstg.C1, rstg.fMRs.values(), true);897 createReadArcs(nstg.C1, rstg.fMRs.values(), true);
@@ -904,17 +899,17 @@
904 createReadArc(nstg.C0, rstg.fMF, false);899 createReadArc(nstg.C0, rstg.fMF, false);
905 }900 }
906 // R-preset901 // R-preset
907 for (VisualRegister n: dfs.getRPreset(r, VisualRegister.class)) {902 for (VisualRegister n: getDfsModel().getRPreset(r, VisualRegister.class)) {
908 RegisterStg nstg = getRegisterStg(n);903 RegisterStg nstg = getRegisterStg(n);
909 createReadArcs(nstg.M1, rstg.tMRs.values(), true);904 createReadArcs(nstg.M1, rstg.tMRs.values(), true);
910 createReadArcs(nstg.M1, rstg.fMRs.values(), true);905 createReadArcs(nstg.M1, rstg.fMRs.values(), true);
911 createReadArc(nstg.M0, rstg.tMF, false);906 createReadArc(nstg.M0, rstg.tMF, false);
912 createReadArc(nstg.M0, rstg.fMF, false);907 createReadArc(nstg.M0, rstg.fMF, false);
913 }908 }
914 Collection<VisualControlRegister> crPreset = dfs.getRPreset(r, VisualControlRegister.class);909 Collection<VisualControlRegister> crPreset = getDfsModel().getRPreset(r, VisualControlRegister.class);
915 for (VisualControlRegister n: crPreset) {910 for (VisualControlRegister n: crPreset) {
916 BinaryRegisterStg nstg = getControlRegisterStg(n);911 BinaryRegisterStg nstg = getControlRegisterStg(n);
917 Connection connection = dfs.getConnection(n, r);912 Connection connection = getDfsModel().getConnection(n, r);
918 if (connection instanceof VisualControlConnection && ((VisualControlConnection)connection).getReferencedControlConnection().isInverting()) {913 if (connection instanceof VisualControlConnection && ((VisualControlConnection)connection).getReferencedControlConnection().isInverting()) {
919 createReadArc(nstg.tM1, rstg.fMRs.get(n), true);914 createReadArc(nstg.tM1, rstg.fMRs.get(n), true);
920 createReadArc(nstg.fM1, rstg.tMRs.get(n), true);915 createReadArc(nstg.fM1, rstg.tMRs.get(n), true);
@@ -937,14 +932,14 @@
937 createReadArc(nstg.M0, rstg.tMF, false);932 createReadArc(nstg.M0, rstg.tMF, false);
938 createReadArc(nstg.M0, rstg.fMF, false);933 createReadArc(nstg.M0, rstg.fMF, false);
939 }934 }
940 for (VisualPushRegister n: dfs.getRPreset(r, VisualPushRegister.class)) {935 for (VisualPushRegister n: getDfsModel().getRPreset(r, VisualPushRegister.class)) {
941 BinaryRegisterStg nstg = getPushRegisterStg(n);936 BinaryRegisterStg nstg = getPushRegisterStg(n);
942 createReadArcs(nstg.tM1, rstg.tMRs.values(), true);937 createReadArcs(nstg.tM1, rstg.tMRs.values(), true);
943 createReadArcs(nstg.tM1, rstg.fMRs.values(), true);938 createReadArcs(nstg.tM1, rstg.fMRs.values(), true);
944 createReadArc(nstg.tM0, rstg.tMF, false);939 createReadArc(nstg.tM0, rstg.tMF, false);
945 createReadArc(nstg.tM0, rstg.fMF, false);940 createReadArc(nstg.tM0, rstg.fMF, false);
946 }941 }
947 for (VisualPopRegister n: dfs.getRPreset(r, VisualPopRegister.class)) {942 for (VisualPopRegister n: getDfsModel().getRPreset(r, VisualPopRegister.class)) {
948 BinaryRegisterStg nstg = getPopRegisterStg(n);943 BinaryRegisterStg nstg = getPopRegisterStg(n);
949 createReadArcs(nstg.M1, rstg.tMRs.values(), true);944 createReadArcs(nstg.M1, rstg.tMRs.values(), true);
950 createReadArcs(nstg.M1, rstg.fMRs.values(), true);945 createReadArcs(nstg.M1, rstg.fMRs.values(), true);
@@ -952,23 +947,23 @@
952 createReadArc(nstg.M0, rstg.fMF, false);947 createReadArc(nstg.M0, rstg.fMF, false);
953 }948 }
954 // R-postset949 // R-postset
955 for (VisualRegister n: dfs.getRPostset(r, VisualRegister.class)) {950 for (VisualRegister n: getDfsModel().getRPostset(r, VisualRegister.class)) {
956 RegisterStg nstg = getRegisterStg(n);951 RegisterStg nstg = getRegisterStg(n);
957 createReadArc(nstg.M1, rstg.tMF, false); 952 createReadArc(nstg.M1, rstg.tMF, false);
958 createReadArc(nstg.M1, rstg.fMF, false); 953 createReadArc(nstg.M1, rstg.fMF, false);
959 createReadArcs(nstg.M0, rstg.tMRs.values(), false);954 createReadArcs(nstg.M0, rstg.tMRs.values(), false);
960 createReadArcs(nstg.M0, rstg.fMRs.values(), false);955 createReadArcs(nstg.M0, rstg.fMRs.values(), false);
961 }956 }
962 for (VisualControlRegister n: dfs.getRPostset(r, VisualControlRegister.class)) {957 for (VisualControlRegister n: getDfsModel().getRPostset(r, VisualControlRegister.class)) {
963 BinaryRegisterStg nstg = getControlRegisterStg(n);958 BinaryRegisterStg nstg = getControlRegisterStg(n);
964 createReadArc(nstg.M1, rstg.tMF, false);959 createReadArc(nstg.M1, rstg.tMF, false);
965 createReadArc(nstg.M1, rstg.fMF, false);960 createReadArc(nstg.M1, rstg.fMF, false);
966 createReadArcs(nstg.M0, rstg.tMRs.values(), false);961 createReadArcs(nstg.M0, rstg.tMRs.values(), false);
967 createReadArcs(nstg.M0, rstg.fMRs.values(), false);962 createReadArcs(nstg.M0, rstg.fMRs.values(), false);
968 }963 }
969 for (VisualPushRegister n: dfs.getRPostset(r, VisualPushRegister.class)) {964 for (VisualPushRegister n: getDfsModel().getRPostset(r, VisualPushRegister.class)) {
970 BinaryRegisterStg nstg = getPushRegisterStg(n);965 BinaryRegisterStg nstg = getPushRegisterStg(n);
971 Connection connection = dfs.getConnection(r, n);966 Connection connection = getDfsModel().getConnection(r, n);
972 if (connection instanceof VisualControlConnection && ((VisualControlConnection)connection).getReferencedControlConnection().isInverting()) {967 if (connection instanceof VisualControlConnection && ((VisualControlConnection)connection).getReferencedControlConnection().isInverting()) {
973 createReadArc(nstg.tM1, rstg.fMF, false); 968 createReadArc(nstg.tM1, rstg.fMF, false);
974 createReadArc(nstg.fM1, rstg.tMF, false);969 createReadArc(nstg.fM1, rstg.tMF, false);
@@ -979,9 +974,9 @@
979 createReadArcs(nstg.M0, rstg.tMRs.values(), false);974 createReadArcs(nstg.M0, rstg.tMRs.values(), false);
980 createReadArcs(nstg.M0, rstg.fMRs.values(), false);975 createReadArcs(nstg.M0, rstg.fMRs.values(), false);
981 }976 }
982 for (VisualPopRegister n: dfs.getRPostset(r, VisualPopRegister.class)) {977 for (VisualPopRegister n: getDfsModel().getRPostset(r, VisualPopRegister.class)) {
983 BinaryRegisterStg nstg = getPopRegisterStg(n);978 BinaryRegisterStg nstg = getPopRegisterStg(n);
984 Connection connection = dfs.getConnection(r, n);979 Connection connection = getDfsModel().getConnection(r, n);
985 if (connection instanceof VisualControlConnection && ((VisualControlConnection)connection).getReferencedControlConnection().isInverting()) {980 if (connection instanceof VisualControlConnection && ((VisualControlConnection)connection).getReferencedControlConnection().isInverting()) {
986 createReadArc(nstg.tM1, rstg.fMF, false); 981 createReadArc(nstg.tM1, rstg.fMF, false);
987 createReadArc(nstg.fM1, rstg.tMF, false);982 createReadArc(nstg.fM1, rstg.tMF, false);
@@ -995,8 +990,16 @@
995 }990 }
996 991
997 public BinaryRegisterStg getControlRegisterStg(VisualControlRegister register) {992 public BinaryRegisterStg getControlRegisterStg(VisualControlRegister register) {
998 return controlRegisterMap.get(register);993 return ((controlRegisterMap == null) ? null : controlRegisterMap.get(register));
999 }994 }
995
996 public void putControlRegisterStg(VisualControlRegister register, BinaryRegisterStg stg) {
997 if (controlRegisterMap == null) {
998 controlRegisterMap = new HashMap<>();
999 }
1000 controlRegisterMap.put(register, stg);
1001 }
1002
10001003
1001 private BinaryRegisterStg generatePushRegisterStg(VisualPushRegister r) throws InvalidConnectionException {1004 private BinaryRegisterStg generatePushRegisterStg(VisualPushRegister r) throws InvalidConnectionException {
1002 return generateBinaryRegisterSTG(r, false, false);1005 return generateBinaryRegisterSTG(r, false, false);
@@ -1005,7 +1008,7 @@
1005 private void connectPushRegisterStg(VisualPushRegister r) throws InvalidConnectionException {1008 private void connectPushRegisterStg(VisualPushRegister r) throws InvalidConnectionException {
1006 BinaryRegisterStg rstg = getPushRegisterStg(r);1009 BinaryRegisterStg rstg = getPushRegisterStg(r);
1007 // preset1010 // preset
1008 for (VisualLogic n: dfs.getPreset(r, VisualLogic.class)) {1011 for (VisualLogic n: getDfsModel().getPreset(r, VisualLogic.class)) {
1009 LogicStg nstg = getLogicStg(n);1012 LogicStg nstg = getLogicStg(n);
1010 createReadArcs(nstg.C1, rstg.tMRs.values(), true);1013 createReadArcs(nstg.C1, rstg.tMRs.values(), true);
1011 createReadArcs(nstg.C1, rstg.fMRs.values(), true);1014 createReadArcs(nstg.C1, rstg.fMRs.values(), true);
@@ -1013,16 +1016,16 @@
1013 createReadArc(nstg.C0, rstg.fMF, false);1016 createReadArc(nstg.C0, rstg.fMF, false);
1014 }1017 }
1015 // R-preset1018 // R-preset
1016 for (VisualRegister n: dfs.getRPreset(r, VisualRegister.class)) {1019 for (VisualRegister n: getDfsModel().getRPreset(r, VisualRegister.class)) {
1017 RegisterStg nstg = getRegisterStg(n);1020 RegisterStg nstg = getRegisterStg(n);
1018 createReadArcs(nstg.M1, rstg.tMRs.values(), true);1021 createReadArcs(nstg.M1, rstg.tMRs.values(), true);
1019 createReadArcs(nstg.M1, rstg.fMRs.values(), true);1022 createReadArcs(nstg.M1, rstg.fMRs.values(), true);
1020 createReadArc(nstg.M0, rstg.tMF, false);1023 createReadArc(nstg.M0, rstg.tMF, false);
1021 createReadArc(nstg.M0, rstg.fMF, false);1024 createReadArc(nstg.M0, rstg.fMF, false);
1022 }1025 }
1023 for (VisualControlRegister n: dfs.getRPreset(r, VisualControlRegister.class)) {1026 for (VisualControlRegister n: getDfsModel().getRPreset(r, VisualControlRegister.class)) {
1024 BinaryRegisterStg nstg = getControlRegisterStg(n);1027 BinaryRegisterStg nstg = getControlRegisterStg(n);
1025 Connection connection = dfs.getConnection(n, r);1028 Connection connection = getDfsModel().getConnection(n, r);
1026 if (connection instanceof VisualControlConnection && ((VisualControlConnection)connection).getReferencedControlConnection().isInverting()) {1029 if (connection instanceof VisualControlConnection && ((VisualControlConnection)connection).getReferencedControlConnection().isInverting()) {
1027 createReadArc(nstg.tM1, rstg.fMRs.get(n), true);1030 createReadArc(nstg.tM1, rstg.fMRs.get(n), true);
1028 createReadArc(nstg.fM1, rstg.tMRs.get(n), true);1031 createReadArc(nstg.fM1, rstg.tMRs.get(n), true);
@@ -1035,14 +1038,14 @@
1035 createReadArc(nstg.fM0, rstg.fMF, false);1038 createReadArc(nstg.fM0, rstg.fMF, false);
1036 }1039 }
1037 }1040 }
1038 for (VisualPushRegister n: dfs.getRPreset(r, VisualPushRegister.class)) {1041 for (VisualPushRegister n: getDfsModel().getRPreset(r, VisualPushRegister.class)) {
1039 BinaryRegisterStg nstg = getPushRegisterStg(n);1042 BinaryRegisterStg nstg = getPushRegisterStg(n);
1040 createReadArcs(nstg.tM1, rstg.tMRs.values(), true);1043 createReadArcs(nstg.tM1, rstg.tMRs.values(), true);
1041 createReadArcs(nstg.tM1, rstg.fMRs.values(), true);1044 createReadArcs(nstg.tM1, rstg.fMRs.values(), true);
1042 createReadArc(nstg.tM0, rstg.tMF, false);1045 createReadArc(nstg.tM0, rstg.tMF, false);
1043 createReadArc(nstg.tM0, rstg.fMF, false);1046 createReadArc(nstg.tM0, rstg.fMF, false);
1044 }1047 }
1045 for (VisualPopRegister n: dfs.getRPreset(r, VisualPopRegister.class)) {1048 for (VisualPopRegister n: getDfsModel().getRPreset(r, VisualPopRegister.class)) {
1046 BinaryRegisterStg nstg = getPopRegisterStg(n);1049 BinaryRegisterStg nstg = getPopRegisterStg(n);
1047 createReadArcs(nstg.M1, rstg.tMRs.values(), true);1050 createReadArcs(nstg.M1, rstg.tMRs.values(), true);
1048 createReadArcs(nstg.M1, rstg.fMRs.values(), true);1051 createReadArcs(nstg.M1, rstg.fMRs.values(), true);
@@ -1050,22 +1053,22 @@
1050 createReadArc(nstg.M0, rstg.fMF, false);1053 createReadArc(nstg.M0, rstg.fMF, false);
1051 }1054 }
1052 // R-postset1055 // R-postset
1053 for (VisualRegister n: dfs.getRPostset(r, VisualRegister.class)) {1056 for (VisualRegister n: getDfsModel().getRPostset(r, VisualRegister.class)) {
1054 RegisterStg nstg = getRegisterStg(n);1057 RegisterStg nstg = getRegisterStg(n);
1055 createReadArc(nstg.M1, rstg.tMF, false); // register M1 in R-postset is read only by tMF1058 createReadArc(nstg.M1, rstg.tMF, false); // register M1 in R-postset is read only by tMF
1056 createReadArcs(nstg.M0, rstg.tMRs.values(), false); // register M0 in R-postset is read only by tMR1059 createReadArcs(nstg.M0, rstg.tMRs.values(), false); // register M0 in R-postset is read only by tMR
1057 }1060 }
1058 for (VisualControlRegister n: dfs.getRPostset(r, VisualControlRegister.class)) {1061 for (VisualControlRegister n: getDfsModel().getRPostset(r, VisualControlRegister.class)) {
1059 BinaryRegisterStg nstg = getControlRegisterStg(n);1062 BinaryRegisterStg nstg = getControlRegisterStg(n);
1060 createReadArc(nstg.M1, rstg.tMF, false);1063 createReadArc(nstg.M1, rstg.tMF, false);
1061 createReadArcs(nstg.M0, rstg.tMRs.values(), false);1064 createReadArcs(nstg.M0, rstg.tMRs.values(), false);
1062 }1065 }
1063 for (VisualPushRegister n: dfs.getRPostset(r, VisualPushRegister.class)) {1066 for (VisualPushRegister n: getDfsModel().getRPostset(r, VisualPushRegister.class)) {
1064 BinaryRegisterStg nstg = getPushRegisterStg(n);1067 BinaryRegisterStg nstg = getPushRegisterStg(n);
1065 createReadArc(nstg.M1, rstg.tMF, false);1068 createReadArc(nstg.M1, rstg.tMF, false);
1066 createReadArcs(nstg.M0, rstg.tMRs.values(), false);1069 createReadArcs(nstg.M0, rstg.tMRs.values(), false);
1067 }1070 }
1068 for (VisualPopRegister n: dfs.getRPostset(r, VisualPopRegister.class)) {1071 for (VisualPopRegister n: getDfsModel().getRPostset(r, VisualPopRegister.class)) {
1069 BinaryRegisterStg nstg = getPopRegisterStg(n);1072 BinaryRegisterStg nstg = getPopRegisterStg(n);
1070 createReadArc(nstg.tM1, rstg.tMF, false); // pop tM1 in R-postset is read only by tMF1073 createReadArc(nstg.tM1, rstg.tMF, false); // pop tM1 in R-postset is read only by tMF
1071 createReadArcs(nstg.tM0, rstg.tMRs.values(), false); // pop tM0 in R-postset is read only by tMR1074 createReadArcs(nstg.tM0, rstg.tMRs.values(), false); // pop tM0 in R-postset is read only by tMR
@@ -1073,7 +1076,14 @@
1073 }1076 }
1074 1077
1075 public BinaryRegisterStg getPushRegisterStg(VisualPushRegister register) {1078 public BinaryRegisterStg getPushRegisterStg(VisualPushRegister register) {
1076 return pushRegisterMap.get(register);1079 return ((pushRegisterMap == null) ? null : pushRegisterMap.get(register));
1080 }
1081
1082 public void putPushRegisterStg(VisualPushRegister register, BinaryRegisterStg stg) {
1083 if (pushRegisterMap == null) {
1084 pushRegisterMap = new HashMap<>();
1085 }
1086 pushRegisterMap.put(register, stg);
1077 }1087 }
10781088
10791089
@@ -1084,20 +1094,20 @@
1084 private void connectPopRegisterStg(VisualPopRegister r) throws InvalidConnectionException {1094 private void connectPopRegisterStg(VisualPopRegister r) throws InvalidConnectionException {
1085 BinaryRegisterStg rstg = getPopRegisterStg(r);1095 BinaryRegisterStg rstg = getPopRegisterStg(r);
1086 // preset1096 // preset
1087 for (VisualLogic n: dfs.getPreset(r, VisualLogic.class)) {1097 for (VisualLogic n: getDfsModel().getPreset(r, VisualLogic.class)) {
1088 LogicStg nstg = getLogicStg(n);1098 LogicStg nstg = getLogicStg(n);
1089 createReadArcs(nstg.C1, rstg.tMRs.values(), true);1099 createReadArcs(nstg.C1, rstg.tMRs.values(), true);
1090 createReadArc(nstg.C0, rstg.tMF, false);1100 createReadArc(nstg.C0, rstg.tMF, false);
1091 }1101 }
1092 // R-preset1102 // R-preset
1093 for (VisualRegister n: dfs.getRPreset(r, VisualRegister.class)) {1103 for (VisualRegister n: getDfsModel().getRPreset(r, VisualRegister.class)) {
1094 RegisterStg nstg = getRegisterStg(n);1104 RegisterStg nstg = getRegisterStg(n);
1095 createReadArcs(nstg.M1, rstg.tMRs.values(), true);1105 createReadArcs(nstg.M1, rstg.tMRs.values(), true);
1096 createReadArc(nstg.M0, rstg.tMF, false);1106 createReadArc(nstg.M0, rstg.tMF, false);
1097 }1107 }
1098 for (VisualControlRegister n: dfs.getRPreset(r, VisualControlRegister.class)) {1108 for (VisualControlRegister n: getDfsModel().getRPreset(r, VisualControlRegister.class)) {
1099 BinaryRegisterStg nstg = getControlRegisterStg(n);1109 BinaryRegisterStg nstg = getControlRegisterStg(n);
1100 Connection connection = dfs.getConnection(n, r);1110 Connection connection = getDfsModel().getConnection(n, r);
1101 if (connection instanceof VisualControlConnection && ((VisualControlConnection)connection).getReferencedControlConnection().isInverting()) {1111 if (connection instanceof VisualControlConnection && ((VisualControlConnection)connection).getReferencedControlConnection().isInverting()) {
1102 createReadArc(nstg.tM1, rstg.fMRs.get(n), true);1112 createReadArc(nstg.tM1, rstg.fMRs.get(n), true);
1103 createReadArc(nstg.fM1, rstg.tMRs.get(n), true);1113 createReadArc(nstg.fM1, rstg.tMRs.get(n), true);
@@ -1110,39 +1120,39 @@
1110 createReadArc(nstg.fM0, rstg.fMF, false);1120 createReadArc(nstg.fM0, rstg.fMF, false);
1111 }1121 }
1112 }1122 }
1113 for (VisualPushRegister n: dfs.getRPreset(r, VisualPushRegister.class)) {1123 for (VisualPushRegister n: getDfsModel().getRPreset(r, VisualPushRegister.class)) {
1114 BinaryRegisterStg nstg = getPushRegisterStg(n);1124 BinaryRegisterStg nstg = getPushRegisterStg(n);
1115 createReadArcs(nstg.tM1, rstg.tMRs.values(), true);1125 createReadArcs(nstg.tM1, rstg.tMRs.values(), true);
1116 createReadArc(nstg.tM0, rstg.tMF, false);1126 createReadArc(nstg.tM0, rstg.tMF, false);
1117 }1127 }
1118 for (VisualPopRegister n: dfs.getRPreset(r, VisualPopRegister.class)) {1128 for (VisualPopRegister n: getDfsModel().getRPreset(r, VisualPopRegister.class)) {
1119 BinaryRegisterStg nstg = getPopRegisterStg(n);1129 BinaryRegisterStg nstg = getPopRegisterStg(n);
1120 createReadArcs(nstg.M1, rstg.tMRs.values(), true);1130 createReadArcs(nstg.M1, rstg.tMRs.values(), true);
1121 createReadArc(nstg.M0, rstg.tMF, false);1131 createReadArc(nstg.M0, rstg.tMF, false);
1122 }1132 }
1123 // R-postset1133 // R-postset
1124 for (VisualRegister n: dfs.getRPostset(r, VisualRegister.class)) {1134 for (VisualRegister n: getDfsModel().getRPostset(r, VisualRegister.class)) {
1125 RegisterStg nstg = getRegisterStg(n);1135 RegisterStg nstg = getRegisterStg(n);
1126 createReadArc(nstg.M1, rstg.tMF, false);1136 createReadArc(nstg.M1, rstg.tMF, false);
1127 createReadArc(nstg.M1, rstg.fMF, false);1137 createReadArc(nstg.M1, rstg.fMF, false);
1128 createReadArcs(nstg.M0, rstg.tMRs.values(), false);1138 createReadArcs(nstg.M0, rstg.tMRs.values(), false);
1129 createReadArcs(nstg.M0, rstg.fMRs.values(), false);1139 createReadArcs(nstg.M0, rstg.fMRs.values(), false);
1130 }1140 }
1131 for (VisualControlRegister n: dfs.getRPostset(r, VisualControlRegister.class)) {1141 for (VisualControlRegister n: getDfsModel().getRPostset(r, VisualControlRegister.class)) {
1132 BinaryRegisterStg nstg = getControlRegisterStg(n);1142 BinaryRegisterStg nstg = getControlRegisterStg(n);
1133 createReadArc(nstg.M1, rstg.tMF, false);1143 createReadArc(nstg.M1, rstg.tMF, false);
1134 createReadArc(nstg.M1, rstg.fMF, false);1144 createReadArc(nstg.M1, rstg.fMF, false);
1135 createReadArcs(nstg.M0, rstg.tMRs.values(), false);1145 createReadArcs(nstg.M0, rstg.tMRs.values(), false);
1136 createReadArcs(nstg.M0, rstg.fMRs.values(), false);1146 createReadArcs(nstg.M0, rstg.fMRs.values(), false);
1137 }1147 }
1138 for (VisualPushRegister n: dfs.getRPostset(r, VisualPushRegister.class)) {1148 for (VisualPushRegister n: getDfsModel().getRPostset(r, VisualPushRegister.class)) {
1139 BinaryRegisterStg nstg = getPushRegisterStg(n);1149 BinaryRegisterStg nstg = getPushRegisterStg(n);
1140 createReadArc(nstg.M1, rstg.tMF, false);1150 createReadArc(nstg.M1, rstg.tMF, false);
1141 createReadArc(nstg.M1, rstg.fMF, false);1151 createReadArc(nstg.M1, rstg.fMF, false);
1142 createReadArcs(nstg.M0, rstg.tMRs.values(), false);1152 createReadArcs(nstg.M0, rstg.tMRs.values(), false);
1143 createReadArcs(nstg.M0, rstg.fMRs.values(), false);1153 createReadArcs(nstg.M0, rstg.fMRs.values(), false);
1144 }1154 }
1145 for (VisualPopRegister n: dfs.getRPostset(r, VisualPopRegister.class)) {1155 for (VisualPopRegister n: getDfsModel().getRPostset(r, VisualPopRegister.class)) {
1146 BinaryRegisterStg nstg = getPopRegisterStg(n);1156 BinaryRegisterStg nstg = getPopRegisterStg(n);
1147 createReadArc(nstg.tM1, rstg.tMF, false);1157 createReadArc(nstg.tM1, rstg.tMF, false);
1148 createReadArc(nstg.tM1, rstg.fMF, false);1158 createReadArc(nstg.tM1, rstg.fMF, false);
@@ -1152,8 +1162,16 @@
1152 }1162 }
11531163
1154 public BinaryRegisterStg getPopRegisterStg(VisualPopRegister register) {1164 public BinaryRegisterStg getPopRegisterStg(VisualPopRegister register) {
1155 return popRegisterMap.get(register);1165 return ((popRegisterMap == null) ? null : popRegisterMap.get(register));
1156 }1166 }
1167
1168 public void putPopRegisterStg(VisualPopRegister register, BinaryRegisterStg stg) {
1169 if (popRegisterMap == null) {
1170 popRegisterMap = new HashMap<>();
1171 }
1172 popRegisterMap.put(register, stg);
1173 }
1174
11571175
1158 public boolean isRelated(Node highLevelNode, Node node) {1176 public boolean isRelated(Node highLevelNode, Node node) {
1159 NodeStg nodeStg = null;1177 NodeStg nodeStg = null;
11601178
=== modified file 'DfsPlugin/src/org/workcraft/plugins/dfs/tasks/CheckDataflowDeadlockTask.java'
--- DfsPlugin/src/org/workcraft/plugins/dfs/tasks/CheckDataflowDeadlockTask.java 2015-04-30 23:14:48 +0000
+++ DfsPlugin/src/org/workcraft/plugins/dfs/tasks/CheckDataflowDeadlockTask.java 2015-09-25 14:54:20 +0000
@@ -43,7 +43,7 @@
43 final Framework framework = Framework.getInstance();43 final Framework framework = Framework.getInstance();
44 try {44 try {
45 StgGenerator generator = new StgGenerator((VisualDfs)we.getModelEntry().getVisualModel());45 StgGenerator generator = new StgGenerator((VisualDfs)we.getModelEntry().getVisualModel());
46 STGModel model = (STGModel)generator.getStg().getMathModel(); 46 STGModel model = (STGModel)generator.getStgModel().getMathModel();
47 Exporter exporter = Export.chooseBestExporter(framework.getPluginManager(), model, Format.STG);47 Exporter exporter = Export.chooseBestExporter(framework.getPluginManager(), model, Format.STG);
48 if (exporter == null) {48 if (exporter == null) {
49 throw new RuntimeException ("Exporter not available: model class " + model.getClass().getName() + " to format STG.");49 throw new RuntimeException ("Exporter not available: model class " + model.getClass().getName() + " to format STG.");
5050
=== modified file 'DfsPlugin/src/org/workcraft/plugins/dfs/tasks/CheckDataflowHazardTask.java'
--- DfsPlugin/src/org/workcraft/plugins/dfs/tasks/CheckDataflowHazardTask.java 2015-04-30 23:14:48 +0000
+++ DfsPlugin/src/org/workcraft/plugins/dfs/tasks/CheckDataflowHazardTask.java 2015-09-25 14:54:20 +0000
@@ -43,7 +43,7 @@
43 final Framework framework = Framework.getInstance();43 final Framework framework = Framework.getInstance();
44 try {44 try {
45 StgGenerator generator = new StgGenerator((VisualDfs)we.getModelEntry().getVisualModel());45 StgGenerator generator = new StgGenerator((VisualDfs)we.getModelEntry().getVisualModel());
46 STGModel model = (STGModel)generator.getStg().getMathModel(); 46 STGModel model = (STGModel)generator.getStgModel().getMathModel();
47 Exporter exporter = Export.chooseBestExporter(framework.getPluginManager(), model, Format.STG);47 Exporter exporter = Export.chooseBestExporter(framework.getPluginManager(), model, Format.STG);
48 if (exporter == null) {48 if (exporter == null) {
49 throw new RuntimeException ("Exporter not available: model class " + model.getClass().getName() + " to format STG.");49 throw new RuntimeException ("Exporter not available: model class " + model.getClass().getName() + " to format STG.");
5050
=== modified file 'DfsPlugin/src/org/workcraft/plugins/dfs/tasks/CheckDataflowTask.java'
--- DfsPlugin/src/org/workcraft/plugins/dfs/tasks/CheckDataflowTask.java 2015-04-30 23:14:48 +0000
+++ DfsPlugin/src/org/workcraft/plugins/dfs/tasks/CheckDataflowTask.java 2015-09-25 14:54:20 +0000
@@ -48,7 +48,7 @@
48 final Framework framework = Framework.getInstance();48 final Framework framework = Framework.getInstance();
49 try {49 try {
50 StgGenerator generator = new StgGenerator((VisualDfs)we.getModelEntry().getVisualModel());50 StgGenerator generator = new StgGenerator((VisualDfs)we.getModelEntry().getVisualModel());
51 STGModel model = (STGModel)generator.getStg().getMathModel(); 51 STGModel model = (STGModel)generator.getStgModel().getMathModel();
52 Exporter exporter = Export.chooseBestExporter(framework.getPluginManager(), model, Format.STG);52 Exporter exporter = Export.chooseBestExporter(framework.getPluginManager(), model, Format.STG);
53 if (exporter == null) {53 if (exporter == null) {
54 throw new RuntimeException ("Exporter not available: model class " + model.getClass().getName() + " to format STG.");54 throw new RuntimeException ("Exporter not available: model class " + model.getClass().getName() + " to format STG.");
5555
=== modified file 'DfsPlugin/src/org/workcraft/plugins/dfs/tools/DfsSimulationTool.java'
--- DfsPlugin/src/org/workcraft/plugins/dfs/tools/DfsSimulationTool.java 2015-08-27 21:29:15 +0000
+++ DfsPlugin/src/org/workcraft/plugins/dfs/tools/DfsSimulationTool.java 2015-09-25 14:54:20 +0000
@@ -64,7 +64,7 @@
64 @Override64 @Override
65 public VisualModel getUnderlyingModel(VisualModel model) {65 public VisualModel getUnderlyingModel(VisualModel model) {
66 generator = new StgGenerator((VisualDfs)model);66 generator = new StgGenerator((VisualDfs)model);
67 return generator.getStg();67 return generator.getStgModel();
68 }68 }
69 69
70 private VisualPlace getVisualPlace(Place place) {70 private VisualPlace getVisualPlace(Place place) {
7171
=== modified file 'DfsPlugin/src/org/workcraft/plugins/dfs/tools/StgGeneratorTool.java'
--- DfsPlugin/src/org/workcraft/plugins/dfs/tools/StgGeneratorTool.java 2015-07-30 15:45:39 +0000
+++ DfsPlugin/src/org/workcraft/plugins/dfs/tools/StgGeneratorTool.java 2015-09-25 14:54:20 +0000
@@ -37,7 +37,7 @@
37 final Workspace workspace = framework.getWorkspace();37 final Workspace workspace = framework.getWorkspace();
38 final Path<String> directory = we.getWorkspacePath().getParent();38 final Path<String> directory = we.getWorkspacePath().getParent();
39 final String desiredName = we.getWorkspacePath().getNode();39 final String desiredName = we.getWorkspacePath().getNode();
40 final ModelEntry me = new ModelEntry(new StgDescriptor(), generator.getStg());40 final ModelEntry me = new ModelEntry(new StgDescriptor(), generator.getStgModel());
41 boolean openInEditor = (me.isVisual() || CommonEditorSettings.getOpenNonvisual());41 boolean openInEditor = (me.isVisual() || CommonEditorSettings.getOpenNonvisual());
42 workspace.add(directory, desiredName, me, false, openInEditor);42 workspace.add(directory, desiredName, me, false, openInEditor);
43 }43 }
4444
=== modified file 'MpsatPlugin/src/org/workcraft/plugins/mpsat/tasks/MpsatTask.java'
--- MpsatPlugin/src/org/workcraft/plugins/mpsat/tasks/MpsatTask.java 2015-08-03 12:45:13 +0000
+++ MpsatPlugin/src/org/workcraft/plugins/mpsat/tasks/MpsatTask.java 2015-09-25 14:54:20 +0000
@@ -34,7 +34,7 @@
34 34
35 @Override35 @Override
36 public Result<? extends ExternalProcessResult> run(ProgressMonitor<? super ExternalProcessResult> monitor) {36 public Result<? extends ExternalProcessResult> run(ProgressMonitor<? super ExternalProcessResult> monitor) {
37 ArrayList<String> command = new ArrayList<String>();37 ArrayList<String> command = new ArrayList<>();
38 // Name of the executable38 // Name of the executable
39 command.add(MpsatUtilitySettings.getCommand() + MpsatUtilitySettings.getCommandSuffix(tryPnml));39 command.add(MpsatUtilitySettings.getCommand() + MpsatUtilitySettings.getCommandSuffix(tryPnml));
40 // Built-in arguments40 // Built-in arguments
4141
=== modified file 'PetriNetPlugin/src/org/workcraft/plugins/petri/tools/PetriNetSimulationTool.java'
--- PetriNetPlugin/src/org/workcraft/plugins/petri/tools/PetriNetSimulationTool.java 2015-09-10 22:34:47 +0000
+++ PetriNetPlugin/src/org/workcraft/plugins/petri/tools/PetriNetSimulationTool.java 2015-09-25 14:54:20 +0000
@@ -48,6 +48,7 @@
48import javax.swing.JButton;48import javax.swing.JButton;
49import javax.swing.JLabel;49import javax.swing.JLabel;
50import javax.swing.JPanel;50import javax.swing.JPanel;
51import javax.swing.JScrollBar;
51import javax.swing.JScrollPane;52import javax.swing.JScrollPane;
52import javax.swing.JSeparator;53import javax.swing.JSeparator;
53import javax.swing.JSlider;54import javax.swing.JSlider;
@@ -70,6 +71,7 @@
70import org.workcraft.dom.visual.HitMan;71import org.workcraft.dom.visual.HitMan;
71import org.workcraft.dom.visual.VisualGroup;72import org.workcraft.dom.visual.VisualGroup;
72import org.workcraft.dom.visual.VisualModel;73import org.workcraft.dom.visual.VisualModel;
74import org.workcraft.dom.visual.VisualNode;
73import org.workcraft.dom.visual.VisualPage;75import org.workcraft.dom.visual.VisualPage;
74import org.workcraft.dom.visual.connections.VisualConnection;76import org.workcraft.dom.visual.connections.VisualConnection;
75import org.workcraft.gui.Coloriser;77import org.workcraft.gui.Coloriser;
@@ -88,6 +90,7 @@
88import org.workcraft.plugins.petri.Transition;90import org.workcraft.plugins.petri.Transition;
89import org.workcraft.plugins.petri.VisualPetriNet;91import org.workcraft.plugins.petri.VisualPetriNet;
90import org.workcraft.plugins.petri.VisualPlace;92import org.workcraft.plugins.petri.VisualPlace;
93import org.workcraft.plugins.petri.VisualReplicaPlace;
91import org.workcraft.plugins.petri.VisualTransition;94import org.workcraft.plugins.petri.VisualTransition;
92import org.workcraft.plugins.shared.CommonSimulationSettings;95import org.workcraft.plugins.shared.CommonSimulationSettings;
93import org.workcraft.util.ColorGenerator;96import org.workcraft.util.ColorGenerator;
@@ -213,6 +216,7 @@
213 timer.start();216 timer.start();
214 }217 }
215 updateState(editor);218 updateState(editor);
219 editor.requestFocus();
216 }220 }
217 });221 });
218 222
@@ -236,6 +240,7 @@
236 random = true;240 random = true;
237 }241 }
238 updateState(editor);242 updateState(editor);
243 editor.requestFocus();
239 }244 }
240 });245 });
241246
@@ -259,6 +264,7 @@
259 random = false;264 random = false;
260 }265 }
261 updateState(editor);266 updateState(editor);
267 editor.requestFocus();
262 }268 }
263 });269 });
264270
@@ -266,6 +272,7 @@
266 @Override272 @Override
267 public void actionPerformed(ActionEvent e) {273 public void actionPerformed(ActionEvent e) {
268 clearTraces(editor);274 clearTraces(editor);
275 editor.requestFocus();
269 }276 }
270 });277 });
271 278
@@ -273,6 +280,7 @@
273 @Override280 @Override
274 public void actionPerformed(ActionEvent e) {281 public void actionPerformed(ActionEvent e) {
275 stepBack(editor);282 stepBack(editor);
283 editor.requestFocus();
276 }284 }
277 });285 });
278 286
@@ -280,6 +288,7 @@
280 @Override288 @Override
281 public void actionPerformed(ActionEvent e) {289 public void actionPerformed(ActionEvent e) {
282 step(editor);290 step(editor);
291 editor.requestFocus();
283 }292 }
284 });293 });
285 294
@@ -287,6 +296,7 @@
287 @Override296 @Override
288 public void actionPerformed(ActionEvent e) {297 public void actionPerformed(ActionEvent e) {
289 copyState(editor);298 copyState(editor);
299 editor.requestFocus();
290 }300 }
291 });301 });
292 302
@@ -294,6 +304,7 @@
294 @Override304 @Override
295 public void actionPerformed(ActionEvent e) {305 public void actionPerformed(ActionEvent e) {
296 pasteState(editor);306 pasteState(editor);
307 editor.requestFocus();
297 }308 }
298 });309 });
299 310
@@ -301,6 +312,7 @@
301 @Override312 @Override
302 public void actionPerformed(ActionEvent e) {313 public void actionPerformed(ActionEvent e) {
303 mergeTrace(editor);314 mergeTrace(editor);
315 editor.requestFocus();
304 }316 }
305 });317 });
306 318
@@ -308,6 +320,7 @@
308 @Override320 @Override
309 public void actionPerformed(ActionEvent e) {321 public void actionPerformed(ActionEvent e) {
310 saveInitState(editor);322 saveInitState(editor);
323 editor.requestFocus();
311 }324 }
312 });325 });
313 326
@@ -341,6 +354,7 @@
341 }354 }
342 }355 }
343 updateState(editor);356 updateState(editor);
357 editor.requestFocus();
344 }358 }
345359
346 @Override360 @Override
@@ -432,9 +446,13 @@
432 backwardButton.setEnabled((mainTrace.getPosition() > 0) || (branchTrace.getPosition() > 0));446 backwardButton.setEnabled((mainTrace.getPosition() > 0) || (branchTrace.getPosition() > 0));
433 forwardButton.setEnabled(branchTrace.canProgress() || (branchTrace.isEmpty() && mainTrace.canProgress()));447 forwardButton.setEnabled(branchTrace.canProgress() || (branchTrace.isEmpty() && mainTrace.canProgress()));
434 traceTable.tableChanged(new TableModelEvent(traceTable.getModel()));448 traceTable.tableChanged(new TableModelEvent(traceTable.getModel()));
435 editor.requestFocus();
436 editor.repaint();449 editor.repaint();
437 }450 }
451
452 public void scrollTraceToBottom() {
453 JScrollBar verticalScrollBar = tracePane.getVerticalScrollBar();
454 verticalScrollBar.setValue(verticalScrollBar.getMaximum());
455 }
438456
439 private boolean quietStepBack() {457 private boolean quietStepBack() {
440 excitedContainers.clear();458 excitedContainers.clear();
@@ -786,11 +804,11 @@
786 if (t == null) return;804 if (t == null) return;
787 805
788 String transitionId = null;806 String transitionId = null;
789 // if clicked on the trace event, do the step forward807 // If clicked on the trace event, do the step forward.
790 if (branchTrace.isEmpty() && !mainTrace.isEmpty() && (mainTrace.getPosition() < mainTrace.size())) {808 if (branchTrace.isEmpty() && !mainTrace.isEmpty() && (mainTrace.getPosition() < mainTrace.size())) {
791 transitionId = mainTrace.get(mainTrace.getPosition());809 transitionId = mainTrace.get(mainTrace.getPosition());
792 }810 }
793 // otherwise form/use the branch trace811 // Otherwise form/use the branch trace.
794 if (!branchTrace.isEmpty() && (branchTrace.getPosition() < branchTrace.size())) {812 if (!branchTrace.isEmpty() && (branchTrace.getPosition() < branchTrace.size())) {
795 transitionId = branchTrace.get(branchTrace.getPosition());813 transitionId = branchTrace.get(branchTrace.getPosition());
796 }814 }
@@ -806,7 +824,7 @@
806 }824 }
807 branchTrace.add(net.getNodeReference(t));825 branchTrace.add(net.getNodeReference(t));
808 step(editor);826 step(editor);
809 return;827 scrollTraceToBottom();
810 }828 }
811 829
812 @Override830 @Override
@@ -897,7 +915,7 @@
897 @Override915 @Override
898 public Decoration getDecoration(Node node) {916 public Decoration getDecoration(Node node) {
899 917
900 if(node instanceof VisualTransition) {918 if (node instanceof VisualTransition) {
901 Transition transition = ((VisualTransition)node).getReferencedTransition();919 Transition transition = ((VisualTransition)node).getReferencedTransition();
902 Node currentTraceTransition = getTraceCurrentNode();920 Node currentTraceTransition = getTraceCurrentNode();
903 if (transition == currentTraceTransition) {921 if (transition == currentTraceTransition) {
@@ -927,7 +945,7 @@
927 }945 }
928 }946 }
929 947
930 if (node instanceof VisualPage || node instanceof VisualGroup) {948 if ((node instanceof VisualPage) || (node instanceof VisualGroup)) {
931 final boolean ret = isContainerExcited((Container)node);949 final boolean ret = isContainerExcited((Container)node);
932 return new ContainerDecoration() {950 return new ContainerDecoration() {
933951
@@ -947,12 +965,40 @@
947 }965 }
948 };966 };
949 }967 }
968
969 if (node instanceof VisualConnection) {
970 if (isArcExcited((VisualConnection)node)) {
971 return new Decoration() {
972
973 @Override
974 public Color getColorisation() {
975 return CommonSimulationSettings.getEnabledForegroundColor();
976 }
977
978 @Override
979 public Color getBackground() {
980 return CommonSimulationSettings.getEnabledBackgroundColor();
981 }
982 };
983 }
984 }
950 985
951 return null;986 return null;
952 }987 }
953 };988 };
954 }989 }
955990
991 private boolean isArcExcited(VisualConnection connection) {
992 VisualNode first = connection.getFirst();
993 Place place = null;
994 if (first instanceof VisualPlace) {
995 place = ((VisualPlace)first).getReferencedPlace();
996 } else if (first instanceof VisualReplicaPlace) {
997 place = ((VisualReplicaPlace)first).getReferencedPlace();
998 }
999 return ((place != null) && (place.getTokens() > 0));
1000 }
1001
956 @Override1002 @Override
957 public void lostOwnership(Clipboard clip, Transferable arg) {1003 public void lostOwnership(Clipboard clip, Transferable arg) {
958 }1004 }
9591005
=== modified file 'SONPlugin/src/org/workcraft/plugins/son/tools/SONSimulationTool.java'
--- SONPlugin/src/org/workcraft/plugins/son/tools/SONSimulationTool.java 2015-09-14 20:30:27 +0000
+++ SONPlugin/src/org/workcraft/plugins/son/tools/SONSimulationTool.java 2015-09-25 14:54:20 +0000
@@ -215,6 +215,7 @@
215 timer = null;215 timer = null;
216 } 216 }
217 updateState(editor);217 updateState(editor);
218 editor.requestFocus();
218 }219 }
219 });220 });
220221
@@ -248,6 +249,7 @@
248 setDecoration(simuAlg.getEnabledNodes(sync, phases, isRev));249 setDecoration(simuAlg.getEnabledNodes(sync, phases, isRev));
249 excitedContainers.clear();250 excitedContainers.clear();
250 updateState(editor);251 updateState(editor);
252 editor.requestFocus();
251 }253 }
252 });254 });
253 255
@@ -320,6 +322,7 @@
320 }322 }
321 }323 }
322 updateState(editor);324 updateState(editor);
325 editor.requestFocus();
323 }326 }
324327
325 @Override328 @Override
@@ -360,6 +363,7 @@
360 net.resetConditionErrStates();363 net.resetConditionErrStates();
361 } 364 }
362 updateState(editor); 365 updateState(editor);
366 editor.requestFocus();
363 editor.forceRedraw();367 editor.forceRedraw();
364 editor.getModel().setTemplateNode(null);368 editor.getModel().setTemplateNode(null);
365 }369 }
@@ -418,8 +422,6 @@
418 reverseButton.setIcon(GUI.createIconFromSVG("images/icons/svg/son-reverse-simulation.svg"));422 reverseButton.setIcon(GUI.createIconFromSVG("images/icons/svg/son-reverse-simulation.svg"));
419 reverseButton.setToolTipText("Switch to forward simulation");423 reverseButton.setToolTipText("Switch to forward simulation");
420 }424 }
421
422 editor.requestFocus();
423 editor.repaint();425 editor.repaint();
424 }426 }
425 427
426428
=== added directory 'STGPlugin/src/org/workcraft/plugins/stg/generator'
=== added file 'STGPlugin/src/org/workcraft/plugins/stg/generator/NodeStg.java'
--- STGPlugin/src/org/workcraft/plugins/stg/generator/NodeStg.java 1970-01-01 00:00:00 +0000
+++ STGPlugin/src/org/workcraft/plugins/stg/generator/NodeStg.java 2015-09-25 14:54:20 +0000
@@ -0,0 +1,38 @@
1package org.workcraft.plugins.stg.generator;
2
3import java.util.Collection;
4import java.util.HashSet;
5
6import org.workcraft.dom.Node;
7import org.workcraft.plugins.petri.VisualPlace;
8import org.workcraft.plugins.stg.VisualSignalTransition;
9
10public abstract class NodeStg {
11 public abstract Collection<VisualSignalTransition> getAllTransitions();
12
13 public abstract Collection<VisualPlace> getAllPlaces();
14
15 public Collection<Node> getAllNodes() {
16 HashSet<Node> result = new HashSet<>();
17 result.addAll(getAllPlaces());
18 result.addAll(getAllTransitions());
19 return result;
20 }
21
22 public boolean contains(Node n) {
23 if (n != null) {
24 for (VisualPlace p: getAllPlaces()) {
25 if ((n == p) || ((p != null) && (n == p.getReferencedPlace()))) {
26 return true;
27 }
28 }
29 for (VisualSignalTransition t: getAllTransitions()) {
30 if ((n == t) || ((t != null) && (n == t.getReferencedTransition()))) {
31 return true;
32 }
33 }
34 }
35 return false;
36 }
37
38}
039
=== added file 'STGPlugin/src/org/workcraft/plugins/stg/generator/SignalStg.java'
--- STGPlugin/src/org/workcraft/plugins/stg/generator/SignalStg.java 1970-01-01 00:00:00 +0000
+++ STGPlugin/src/org/workcraft/plugins/stg/generator/SignalStg.java 2015-09-25 14:54:20 +0000
@@ -0,0 +1,52 @@
1package org.workcraft.plugins.stg.generator;
2
3import java.util.ArrayList;
4import java.util.Arrays;
5import java.util.Collection;
6import java.util.HashSet;
7import java.util.List;
8
9import org.workcraft.plugins.petri.VisualPlace;
10import org.workcraft.plugins.stg.VisualSignalTransition;
11
12public class SignalStg extends NodeStg {
13 public final VisualPlace zero;
14 public final VisualPlace one;
15 public final ArrayList<VisualSignalTransition> fallList = new ArrayList<>();
16 public final ArrayList<VisualSignalTransition> riseList = new ArrayList<>();
17
18 public SignalStg(VisualPlace zero, VisualPlace one) {
19 this.zero = zero;
20 this.one = one;
21 }
22
23 public SignalStg(VisualPlace zero, VisualPlace one, VisualSignalTransition fall, VisualSignalTransition rise) {
24 this.zero = zero;
25 this.one = one;
26 this.fallList.add(fall);
27 this.riseList.add(rise);
28 }
29
30 public SignalStg(VisualPlace zero, VisualPlace one, ArrayList<VisualSignalTransition> fallList, ArrayList<VisualSignalTransition> riseList) {
31 this.zero = zero;
32 this.one = one;
33 this.fallList.addAll(fallList);
34 this.riseList.addAll(riseList);
35 }
36
37 @Override
38 public Collection<VisualSignalTransition> getAllTransitions() {
39 HashSet<VisualSignalTransition> tmp = new HashSet<>();
40 tmp.addAll(fallList);
41 tmp.addAll(riseList);
42 List<VisualSignalTransition> result = new ArrayList<>();
43 result.addAll(tmp);
44 return result;
45 }
46
47 @Override
48 public Collection<VisualPlace> getAllPlaces() {
49 return Arrays.asList(zero, one);
50 }
51
52}
053
=== added file 'STGPlugin/src/org/workcraft/plugins/stg/generator/StgGenerator.java'
--- STGPlugin/src/org/workcraft/plugins/stg/generator/StgGenerator.java 1970-01-01 00:00:00 +0000
+++ STGPlugin/src/org/workcraft/plugins/stg/generator/StgGenerator.java 2015-09-25 14:54:20 +0000
@@ -0,0 +1,294 @@
1package org.workcraft.plugins.stg.generator;
2
3import java.awt.geom.AffineTransform;
4import java.awt.geom.Point2D;
5import java.util.ArrayList;
6import java.util.Arrays;
7import java.util.Collection;
8import java.util.HashSet;
9import java.util.List;
10
11import org.workcraft.dom.Container;
12import org.workcraft.dom.Node;
13import org.workcraft.dom.visual.Movable;
14import org.workcraft.dom.visual.Positioning;
15import org.workcraft.dom.visual.TransformHelper;
16import org.workcraft.dom.visual.VisualComponent;
17import org.workcraft.dom.visual.VisualModel;
18import org.workcraft.dom.visual.connections.VisualConnection;
19import org.workcraft.exceptions.InvalidConnectionException;
20import org.workcraft.plugins.petri.VisualPlace;
21import org.workcraft.plugins.petri.VisualReplicaPlace;
22import org.workcraft.plugins.stg.STG;
23import org.workcraft.plugins.stg.SignalTransition;
24import org.workcraft.plugins.stg.VisualSTG;
25import org.workcraft.plugins.stg.VisualSignalTransition;
26import org.workcraft.util.Hierarchy;
27
28abstract public class StgGenerator {
29
30 public enum SignalLayoutType { LEFT_TO_RIGHT, RIGHT_TO_LEFT, LEFT_TO_RIGHT_INVERTED, RIGHT_TO_LEFT_INVERTED }
31
32 public static final String _NAME0 = "_0";
33 public static final String _NAME1 = "_1";
34
35 private final VisualModel src;
36 private final VisualSTG stg;
37
38 public StgGenerator(VisualModel src) {
39 this.src = src;
40 this.stg = new VisualSTG(new STG());
41 convert();
42 }
43
44 public VisualModel getSrcModel() {
45 return src;
46 }
47
48 public VisualSTG getStgModel() {
49 return stg;
50 }
51
52 abstract public void convert();
53
54 public void setPosition(Movable node, double x, double y) {
55 TransformHelper.applyTransform(node, AffineTransform.getTranslateInstance(x, y));
56 }
57
58
59 public VisualConnection createConsumingArc(VisualPlace p, VisualSignalTransition t) throws InvalidConnectionException {
60 VisualConnection connection = null;
61 if (p != null && t != null) {
62 connection = stg.connect(p, t);
63 }
64 return connection;
65 }
66
67 public VisualConnection createConsumingArc(VisualPlace p, VisualSignalTransition t, boolean propagateTokenColor) throws InvalidConnectionException {
68 VisualConnection connection = null;
69 if (p != null && t != null) {
70 connection = stg.connect(p, t);
71 connection.setTokenColorPropagator(propagateTokenColor);
72 }
73 return connection;
74 }
75
76
77 public VisualConnection createProducingArc(VisualSignalTransition t, VisualPlace p) throws InvalidConnectionException {
78 VisualConnection connection = null;
79 if (p != null && t != null) {
80 connection = stg.connect(t, p);
81 }
82 return connection;
83 }
84
85 public VisualConnection createProducingArc(VisualSignalTransition t, VisualPlace p, boolean propagateTokenColor) throws InvalidConnectionException {
86 VisualConnection connection = null;
87 if (p != null && t != null) {
88 connection = stg.connect(t, p);
89 connection.setTokenColorPropagator(propagateTokenColor);
90 }
91 return connection;
92 }
93
94 public VisualConnection createReadArc(VisualPlace p, VisualSignalTransition t) throws InvalidConnectionException {
95 VisualConnection connection = null;
96 if (p != null && t != null) {
97 connection = stg.connectUndirected(p, t);
98 }
99 return connection;
100 }
101
102 public VisualConnection createReadArc(VisualPlace p, VisualSignalTransition t, boolean propagateTokenColor) throws InvalidConnectionException {
103 VisualConnection connection = null;
104 if (p != null && t != null) {
105 connection = stg.connectUndirected(p, t);
106 connection.setTokenColorPropagator(propagateTokenColor);
107 }
108 return connection;
109 }
110
111 public void createReadArcs(VisualPlace p, Collection<VisualSignalTransition> ts) throws InvalidConnectionException {
112 if (ts != null) {
113 for (VisualSignalTransition t: ts) {
114 stg.connectUndirected(p, t);
115 }
116 }
117 }
118
119 public void createReadArcs(VisualPlace p, Collection<VisualSignalTransition> ts, boolean propagateTokenColor) throws InvalidConnectionException {
120 for (VisualSignalTransition t : new HashSet<VisualSignalTransition>(ts)) {
121 createReadArc(p, t, propagateTokenColor);
122 }
123 }
124
125 public void createReadArcsBetweenSignals(SignalStg from, SignalStg to) throws InvalidConnectionException {
126 if ((from != null) && (to != null)) {
127 createReadArcs(from.one, to.riseList);
128 createReadArcs(from.zero, to.fallList);
129 }
130 }
131
132
133 public void createReplicaReadArc(VisualPlace p, VisualSignalTransition t) throws InvalidConnectionException {
134 double dx = ((p.getRootSpaceX() > t.getRootSpaceX()) ? 6.0 : -6.0);
135 createReplicaReadArc(p, t, dx, 0.0);
136 }
137
138 public void createReplicaReadArc(VisualPlace p, VisualSignalTransition t, double xOffset, double yOffset) throws InvalidConnectionException {
139 Point2D replicaPosition = new Point2D.Double(t.getRootSpaceX() + xOffset, t.getRootSpaceY() + yOffset);
140 createReplicaReadArcs(p, Arrays.asList(t), replicaPosition);
141 }
142
143 public void createReplicaReadArcs(VisualPlace p, List<VisualSignalTransition> ts, double xOffset, double yOffset) throws InvalidConnectionException {
144 if ((p != null) && (ts != null)) {
145 VisualReplicaPlace replicaPlace = null;
146 for (VisualSignalTransition t: ts) {
147 if (replicaPlace == null) {
148 Container container = Hierarchy.getNearestContainer(new HashSet<Node>(ts));
149 replicaPlace = stg.createVisualReplica(p, container, VisualReplicaPlace.class);
150 Point2D pos = new Point2D.Double(t.getRootSpaceX() + xOffset, t.getRootSpaceY() + yOffset);
151 replicaPlace.setRootSpacePosition(pos);
152 }
153 stg.connectUndirected(replicaPlace, t);
154 }
155 }
156 }
157
158 public void createReplicaReadArcs(VisualPlace p, Collection<VisualSignalTransition> ts, Point2D replicaPosition) throws InvalidConnectionException {
159 if ((p != null) && (ts != null)) {
160 Container container = Hierarchy.getNearestContainer(new HashSet<Node>(ts));
161 VisualReplicaPlace replicaPlace = stg.createVisualReplica(p, container, VisualReplicaPlace.class);
162 if (replicaPosition != null) {
163 replicaPlace.setRootSpacePosition(replicaPosition);
164 }
165 for (VisualSignalTransition t: ts) {
166 stg.connectUndirected(replicaPlace, t);
167 }
168 }
169 }
170
171 public void createReplicaReadArcBetweenSignals(SignalStg from, SignalStg to) throws InvalidConnectionException {
172 double xT = to.fallList.get(0).getRootSpaceX();
173 double xP = to.one.getRootSpaceX();
174 double yZero = to.zero.getRootSpaceY();
175 double yOne = to.one.getRootSpaceY();
176 double x = ((xT > xP) ? xT + 6.0 : xT - 6.0);
177 createReplicaReadArcs(from.zero, to.fallList, new Point2D.Double(x, yZero));
178 createReplicaReadArcs(from.one, to.riseList, new Point2D.Double(x, yOne));
179 }
180
181 public Point2D getSignalCenterPosition(SignalStg signal) {
182 double x = 0.0;
183 for (VisualSignalTransition t: signal.getAllTransitions()) {
184 x += t.getRootSpaceX();
185 }
186 x /= signal.getAllTransitions().size();
187
188 double y = 0.0;
189 for (VisualPlace p: signal.getAllPlaces()) {
190 y += p.getRootSpaceY();
191 }
192 y /= signal.getAllPlaces().size();
193
194 return new Point2D.Double(x, y);
195 }
196
197 public SignalStg generateBasicSignalStg(String signalName, double x, double y, SignalTransition.Type type) throws InvalidConnectionException {
198 VisualPlace zero = stg.createPlace(signalName + _NAME0, null);
199 zero.getReferencedPlace().setTokens(1);
200 zero.setNamePositioning(Positioning.BOTTOM);
201 zero.setLabelPositioning(Positioning.TOP);
202 setPosition(zero, x + 0.0, y + 2.0);
203
204 VisualPlace one = stg.createPlace(signalName + _NAME1, null);
205 one.getReferencedPlace().setTokens(0);
206 one.setNamePositioning(Positioning.TOP);
207 one.setLabelPositioning(Positioning.BOTTOM);
208 setPosition(one, x + 0.0, y - 2.0);
209
210 VisualSignalTransition fall = stg.createSignalTransition(signalName, type, SignalTransition.Direction.MINUS, null);
211 createConsumingArc(one, fall);
212 createProducingArc(fall, zero);
213 setPosition(fall, x + 4.0, y + 0.0);
214
215 VisualSignalTransition rise = stg.createSignalTransition(signalName, type, SignalTransition.Direction.PLUS, null);
216 createConsumingArc(zero, rise);
217 createProducingArc(rise, one);
218 setPosition(rise, x - 4.0, y - 0.0);
219
220 return new SignalStg(zero, one, fall, rise);
221 }
222
223 public SignalStg generateSignalStg(SignalLayoutType layoutType, String signalName, Point2D pos, SignalTransition.Type type, int fallCount, int riseCount) throws InvalidConnectionException {
224 double x = pos.getX();
225 double y = pos.getY();
226 int xSign = 1;
227 if ( (layoutType == SignalLayoutType.RIGHT_TO_LEFT) || (layoutType == SignalLayoutType.RIGHT_TO_LEFT_INVERTED) ) {
228 xSign = -1;
229 }
230 int ySign = 1;
231 if ( (layoutType == SignalLayoutType.LEFT_TO_RIGHT_INVERTED) || (layoutType == SignalLayoutType.RIGHT_TO_LEFT_INVERTED) ) {
232 ySign = -1;
233 }
234
235 VisualPlace zero = stg.createPlace(signalName + _NAME0, null);
236 zero.getReferencedPlace().setTokens(1);
237 zero.setNamePositioning((ySign < 0) ? Positioning.BOTTOM : Positioning.TOP);
238 zero.setLabelPositioning((ySign < 0) ? Positioning.TOP : Positioning.BOTTOM);
239 setPosition(zero, x + xSign * 4.0, y + ySign * 2.0);
240
241 VisualPlace one = stg.createPlace(signalName + _NAME1, null);
242 one.getReferencedPlace().setTokens(0);
243 one.setNamePositioning((ySign < 0) ? Positioning.TOP : Positioning.BOTTOM);
244 one.setLabelPositioning((ySign < 0) ? Positioning.BOTTOM : Positioning.TOP);
245 setPosition(one, x + xSign * 4.0, y - ySign * 2.0);
246
247 ArrayList<VisualSignalTransition> fallList = new ArrayList<>(fallCount);
248 for (int i = fallCount-1; i >= 0; --i) {
249 VisualSignalTransition fall = stg.createSignalTransition(signalName, type, SignalTransition.Direction.MINUS, null);
250 createConsumingArc(one, fall);
251 createProducingArc(fall, zero);
252 setPosition(fall, x + 0.0, y + ySign * (2.0 + i));
253 fallList.add(fall);
254 }
255
256 ArrayList<VisualSignalTransition> riseList = new ArrayList<>(riseCount);
257 for (int i = riseCount-1; i >= 0; --i) {
258 VisualSignalTransition rise = stg.createSignalTransition(signalName, type, SignalTransition.Direction.PLUS, null);
259 createConsumingArc(zero, rise);
260 createProducingArc(rise, one);
261 setPosition(rise, x + 0.0, y - ySign * (2.0 + i));
262 riseList.add(rise);
263 }
264
265 return new SignalStg(zero, one, fallList, riseList);
266 }
267
268 public void setSignalInitialState(SignalStg signalStg, boolean initToOne) {
269 if (initToOne) {
270 signalStg.one.getReferencedPlace().setTokens(1);
271 signalStg.zero.getReferencedPlace().setTokens(0);
272 } else {
273 signalStg.one.getReferencedPlace().setTokens(0);
274 signalStg.zero.getReferencedPlace().setTokens(1);
275 }
276 }
277
278 public Point2D getComponentPosition(VisualComponent component) {
279 AffineTransform transform = TransformHelper.getTransformToRoot(component);
280 double x = getScale().getX() * (transform.getTranslateX() + component.getX());
281 double y = getScale().getY() * (transform.getTranslateY() + component.getY());
282 return new Point2D.Double(x, y);
283 }
284
285 public Point2D getScale() {
286 return new Point2D.Double(10.0, 10.0);
287 }
288
289 public void groupComponentStg(NodeStg nodeStg) {
290 stg.select(nodeStg.getAllNodes());
291 stg.groupSelection();
292 }
293
294}
0295
=== modified file 'WorkcraftCore/src/org/workcraft/plugins/shared/CommonVisualSettings.java'
--- WorkcraftCore/src/org/workcraft/plugins/shared/CommonVisualSettings.java 2015-07-22 17:40:16 +0000
+++ WorkcraftCore/src/org/workcraft/plugins/shared/CommonVisualSettings.java 2015-09-25 14:54:20 +0000
@@ -61,7 +61,7 @@
61 private static final Color defaultLabelColor = Color.BLACK;61 private static final Color defaultLabelColor = Color.BLACK;
62 private static final boolean defaultNameVisibility = true;62 private static final boolean defaultNameVisibility = true;
63 private static final Positioning defaultNamePositioning = Positioning.BOTTOM;63 private static final Positioning defaultNamePositioning = Positioning.BOTTOM;
64 private static final Color defaultNameColor = Color.BLUE.darker();64 private static final Color defaultNameColor = Color.GRAY.darker();
65 private static final Integer defaultRedrawInterval = 20;65 private static final Integer defaultRedrawInterval = 20;
6666
67 private static double baseSize = defaultBaseSize;67 private static double baseSize = defaultBaseSize;
6868
=== removed file 'WorkcraftRunner/.fatjar'
--- WorkcraftRunner/.fatjar 2013-07-11 11:26:55 +0000
+++ WorkcraftRunner/.fatjar 1970-01-01 00:00:00 +0000
@@ -1,14 +0,0 @@
1#Fat Jar Configuration File
2#Wed Jul 25 12:13:21 BST 2012
3onejar.license.required=false
4manifest.classpath=./Workcraft/bin\:./ThirdParty/batik/batik-anim.jar\:./ThirdParty/batik/batik-awt-util.jar\:./ThirdParty/batik/batik-bridge.jar\:./ThirdParty/batik/bati\nk-codec.jar\:./ThirdParty/batik/batik-css.jar\:./ThirdParty/batik/batik-dom.jar\:./ThirdParty/batik/batik-ext.jar\:./ThirdParty/batik/batik-extension.jar\:./Third\nParty/batik/batik-gui-util.jar\:./ThirdParty/batik/batik-gvt.jar\:./ThirdParty/batik/batik-parser.jar\:./ThirdParty/batik/batik-script.jar\:./ThirdParty/batik/ba\ntik-svg-dom.jar\:./ThirdParty/batik/batik-svggen.jar\:./ThirdParty/batik/batik-swing.jar\:./ThirdParty/batik/batik-transcoder.jar\:./ThirdParty/batik/batik-util.\njar\:./ThirdParty/batik/batik-xml.jar\:./ThirdParty/batik/xml-apis-ext.jar\:./ThirdParty/batik/xml-apis.jar\:./ThirdParty/commons-logging-1.1.jar\:./ThirdParty/fl\nexdock-0.5.1.jar\:./ThirdParty/javaparser-1.0.7.jar\:./ThirdParty/jedit.jar\:./ThirdParty/jga-0.8-lgpl.jar\:./ThirdParty/js.jar\:./ThirdParty/junit-4.5.jar\:./Thir\ndParty/pcollections-1.0.0.jar\:./ThirdParty/substance.jar\:./ThirdParty/TableLayout-bin-jdk1.5-2009-08-26.jar\:./ThirdParty/desij.jar\:./CpogsPlugin/bin\:./Circui\ntPlugin/bin\:./STGPlugin/bin\:./PetriNetPlugin/bin\:./GatesPlugin/bin\:./GraphPlugin/bin\:./MpsatPlugin/bin\:./PetrifyPlugin/bin
5manifest.removesigners=true
6onejar.checkbox=false
7jarname=/home/danil/workspace/workcraft/src-danilovesky/Workcraf.jar
8manifest.mergeall=true
9manifest.mainclass=org.workcraft.Console
10manifest.file=<createnew>
11jarname.isextern=true
12onejar.expand=
13excludes=
14includes=
150
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/XmasSettings.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/XmasSettings.java 2015-09-03 15:25:56 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/XmasSettings.java 2015-09-25 14:54:20 +0000
@@ -16,19 +16,19 @@
16 private static final String keyShowContacts = prefix + ".showContacts";16 private static final String keyShowContacts = prefix + ".showContacts";
17 private static final String keyBorderWidth = prefix + ".borderWidth";17 private static final String keyBorderWidth = prefix + ".borderWidth";
18 private static final String keyWireWidth = prefix + ".wireWidth";18 private static final String keyWireWidth = prefix + ".wireWidth";
19 private static final String keyJasonFileName = prefix + ".jasonFileName";19 private static final String keyVxmDirectory = prefix + ".vxmDirectory";
2020
21 private static final boolean defaultShowContacts = false;21 private static final boolean defaultShowContacts = false;
22 private static final double defaultBorderWidth = 0.06;22 private static final double defaultBorderWidth = 0.06;
23 private static final double defaultWireWidth = 0.04;23 private static final double defaultWireWidth = 0.06;
24 private static final String defaultJasonFileName = "";24 private static final String defaultVxmDirectory = "tools/vxm/";
2525
26 private static boolean showContacts = defaultShowContacts;26 private static boolean showContacts = defaultShowContacts;
27 private static double borderWidth = defaultBorderWidth;27 private static double borderWidth = defaultBorderWidth;
28 private static double wireWidth = defaultWireWidth;28 private static double wireWidth = defaultWireWidth;
29 private static String jasonFileName = defaultJasonFileName;29 private static String vxmDirectory = defaultVxmDirectory;
30
3130
31
32 public XmasSettings() {32 public XmasSettings() {
33 properties.add(new PropertyDeclaration<XmasSettings, Boolean>(33 properties.add(new PropertyDeclaration<XmasSettings, Boolean>(
34 this, "Show contacts", Boolean.class, true, false, false) {34 this, "Show contacts", Boolean.class, true, false, false) {
@@ -61,12 +61,12 @@
61 });61 });
6262
63 properties.add(new PropertyDeclaration<XmasSettings, String>(63 properties.add(new PropertyDeclaration<XmasSettings, String>(
64 this, "JSON conversion file", String.class, true, false, false) {64 this, "VXM working directory", String.class, true, false, false) {
65 protected void setter(XmasSettings object, String value) {65 protected void setter(XmasSettings object, String value) {
66 XmasSettings.setJasonFileName(value);66 XmasSettings.setVxmDirectory(value);
67 }67 }
68 protected String getter(XmasSettings object) {68 protected String getter(XmasSettings object) {
69 return XmasSettings.getJasonFileName();69 return XmasSettings.getVxmDirectory();
70 }70 }
71 });71 });
72 }72 }
@@ -81,7 +81,7 @@
81 setShowContacts(config.getBoolean(keyShowContacts, defaultShowContacts));81 setShowContacts(config.getBoolean(keyShowContacts, defaultShowContacts));
82 setBorderWidth (config.getDouble(keyBorderWidth, defaultBorderWidth));82 setBorderWidth (config.getDouble(keyBorderWidth, defaultBorderWidth));
83 setWireWidth(config.getDouble(keyWireWidth, defaultWireWidth));83 setWireWidth(config.getDouble(keyWireWidth, defaultWireWidth));
84 setJasonFileName(config.getString(keyJasonFileName, defaultJasonFileName));84 setVxmDirectory(config.getString(keyVxmDirectory, defaultVxmDirectory));
85 }85 }
8686
87 @Override87 @Override
@@ -89,7 +89,7 @@
89 config.setBoolean(keyShowContacts, getShowContacts());89 config.setBoolean(keyShowContacts, getShowContacts());
90 config.setDouble(keyBorderWidth, getBorderWidth());90 config.setDouble(keyBorderWidth, getBorderWidth());
91 config.setDouble(keyWireWidth, getWireWidth());91 config.setDouble(keyWireWidth, getWireWidth());
92 config.set(keyJasonFileName, getJasonFileName());92 config.set(keyVxmDirectory, getVxmDirectory());
93 }93 }
9494
95 @Override95 @Override
@@ -126,12 +126,12 @@
126 wireWidth = value;126 wireWidth = value;
127 }127 }
128128
129 public static String getJasonFileName() {129 public static String getVxmDirectory() {
130 return jasonFileName;130 return vxmDirectory;
131 }131 }
132132
133 public static void setJasonFileName(String value) {133 public static void setVxmDirectory(String value) {
134 jasonFileName = value;134 vxmDirectory = value;
135 }135 }
136136
137}137}
138138
=== added file 'XmasPlugin/src/org/workcraft/plugins/xmas/components/StateDecoration.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/components/StateDecoration.java 1970-01-01 00:00:00 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/components/StateDecoration.java 2015-09-25 14:54:20 +0000
@@ -0,0 +1,7 @@
1package org.workcraft.plugins.xmas.components;
2
3import org.workcraft.gui.graph.tools.Decoration;
4
5public interface StateDecoration extends Decoration {
6 public boolean getState();
7}
08
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualQueueComponent.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualQueueComponent.java 2015-09-05 22:18:55 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualQueueComponent.java 2015-09-25 14:54:20 +0000
@@ -46,13 +46,13 @@
46 46
47 public static final String PROPERTY_FOREGROUND_COLOR = "Foreground color";47 public static final String PROPERTY_FOREGROUND_COLOR = "Foreground color";
48 48
49 private final double slotWidth = 0.35 * size;49 public final double slotWidth = 0.35 * size;
50 private final double slotHeight = 0.8 * size;50 public final double slotHeight = 1.0 * size;
51 private final double contactLength = 0.5 * size - slotWidth;51 public final double contactLength = 0.5 * size - slotWidth;
52 private final double tokenSize = 0.5 * slotWidth;52 public final double tokenSize = 0.5 * slotWidth;
53 private final double headSize = 0.15 * size;53 public final double headSize = 0.15 * size;
54 private final double tailSize = 0.15 * size;54 public final double tailSize = 0.15 * size;
5555
56 public Color color = new Color(0, 0, 0, 255);56 public Color color = new Color(0, 0, 0, 255);
57 57
58 public VisualQueueComponent(QueueComponent component) {58 public VisualQueueComponent(QueueComponent component) {
@@ -188,18 +188,22 @@
188 g.setColor(getForegroundColor());188 g.setColor(getForegroundColor());
189 for (int i = 0; i < capacity; i++) {189 for (int i = 0; i < capacity; i++) {
190 SlotState slot = ((QueueDecoration)d).getSlotState(i);190 SlotState slot = ((QueueDecoration)d).getSlotState(i);
191 g.draw(getSlotShape(i));191 Shape slotShape = transformShape(getSlotShape(i));
192 g.draw(slotShape);
192 if (!slot.isMemExcited && slot.isFull) {193 if (!slot.isMemExcited && slot.isFull) {
193 g.draw(getTokenShape(i));194 Shape tokenShape = transformShape(getTokenShape(i));
194 g.fill(getTokenShape(i));195 g.draw(tokenShape);
196 g.fill(tokenShape);
195 }197 }
196 if (!slot.isHeadExcited && slot.isHead) {198 if (!slot.isHeadExcited && slot.isHead) {
197 g.draw(getHeadShape(i));199 Shape headShape = transformShape(getHeadShape(i));
198 g.fill(getHeadShape(i));200 g.draw(headShape);
201 g.fill(headShape);
199 }202 }
200 if (!slot.isTailExcited && slot.isTail) {203 if (!slot.isTailExcited && slot.isTail) {
201 g.draw(getTailShape(i));204 Shape tailShape = transformShape(getTailShape(i));
202 g.fill(getTailShape(i));205 g.draw(tailShape);
206 g.fill(tailShape);
203 }207 }
204 }208 }
205 // Excited elements209 // Excited elements
@@ -207,21 +211,24 @@
207 for (int i = 0; i < capacity; i++) {211 for (int i = 0; i < capacity; i++) {
208 SlotState slot = ((QueueDecoration)d).getSlotState(i);212 SlotState slot = ((QueueDecoration)d).getSlotState(i);
209 if (slot.isMemExcited) {213 if (slot.isMemExcited) {
210 g.draw(getTokenShape(i));214 Shape tokenShape = transformShape(getTokenShape(i));
215 g.draw(tokenShape);
211 if (slot.isFull) {216 if (slot.isFull) {
212 g.fill(getTokenShape(i));217 g.fill(tokenShape);
213 }218 }
214 }219 }
215 if (slot.isHeadExcited) {220 if (slot.isHeadExcited) {
216 g.draw(getHeadShape(i));221 Shape headShape = transformShape(getHeadShape(i));
222 g.draw(headShape);
217 if (slot.isHead) {223 if (slot.isHead) {
218 g.fill(getHeadShape(i));224 g.fill(headShape);
219 }225 }
220 }226 }
221 if (slot.isTailExcited) { 227 if (slot.isTailExcited) {
222 g.draw(getTailShape(i));228 Shape tailShape = transformShape(getTailShape(i));
229 g.draw(tailShape);
223 if (slot.isTail) {230 if (slot.isTail) {
224 g.fill(getTailShape(i));231 g.fill(tailShape);
225 }232 }
226 }233 }
227 }234 }
228235
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualSinkComponent.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualSinkComponent.java 2015-09-03 15:25:56 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualSinkComponent.java 2015-09-25 14:54:20 +0000
@@ -21,20 +21,29 @@
2121
22package org.workcraft.plugins.xmas.components;22package org.workcraft.plugins.xmas.components;
2323
24import java.awt.BasicStroke;
25import java.awt.Graphics2D;
24import java.awt.Shape;26import java.awt.Shape;
25import java.awt.event.KeyEvent;27import java.awt.event.KeyEvent;
28import java.awt.geom.Ellipse2D;
26import java.awt.geom.Path2D;29import java.awt.geom.Path2D;
2730
28import org.workcraft.annotations.DisplayName;31import org.workcraft.annotations.DisplayName;
29import org.workcraft.annotations.Hotkey;32import org.workcraft.annotations.Hotkey;
30import org.workcraft.annotations.SVGIcon;33import org.workcraft.annotations.SVGIcon;
34import org.workcraft.dom.visual.DrawRequest;
31import org.workcraft.dom.visual.Positioning;35import org.workcraft.dom.visual.Positioning;
36import org.workcraft.gui.Coloriser;
37import org.workcraft.gui.graph.tools.Decoration;
38import org.workcraft.plugins.xmas.XmasSettings;
3239
33@DisplayName("Sink")40@DisplayName("Sink")
34@Hotkey(KeyEvent.VK_O)41@Hotkey(KeyEvent.VK_O)
35@SVGIcon("images/icons/svg/xmas-sink.svg")42@SVGIcon("images/icons/svg/xmas-sink.svg")
36public class VisualSinkComponent extends VisualXmasComponent {43public class VisualSinkComponent extends VisualXmasComponent {
37 44
45 public final double tokenSize = 0.18 * size;
46
38 public VisualSinkComponent(SinkComponent component) {47 public VisualSinkComponent(SinkComponent component) {
39 super(component);48 super(component);
40 if (component.getChildren().isEmpty()) { 49 if (component.getChildren().isEmpty()) {
@@ -64,5 +73,24 @@
6473
65 return shape;74 return shape;
66 }75 }
76
77 public Shape getTokenShape() {
78 return new Ellipse2D.Double(+1.4 * tokenSize, +0.6 * tokenSize, tokenSize, tokenSize);
79 }
80
81 @Override
82 public void draw(DrawRequest r) {
83 super.draw(r);
84 Graphics2D g = r.getGraphics();
85 Decoration d = r.getDecoration();
86 if (d instanceof StateDecoration) {
87 if (((StateDecoration)d).getState()) {
88 g.setStroke(new BasicStroke((float)XmasSettings.getBorderWidth()));
89 g.setColor(Coloriser.colorise(getForegroundColor(), d.getColorisation()));
90 Shape shape = transformShape(getTokenShape());
91 g.draw(shape);
92 }
93 }
94 }
6795
68}96}
6997
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualSourceComponent.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualSourceComponent.java 2015-09-03 15:25:56 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualSourceComponent.java 2015-09-25 14:54:20 +0000
@@ -21,19 +21,24 @@
2121
22package org.workcraft.plugins.xmas.components;22package org.workcraft.plugins.xmas.components;
2323
24import java.awt.BasicStroke;
24import java.awt.Color;25import java.awt.Color;
26import java.awt.Graphics2D;
25import java.awt.Shape;27import java.awt.Shape;
26import java.awt.event.KeyEvent;28import java.awt.event.KeyEvent;
27import java.awt.geom.AffineTransform;29import java.awt.geom.Ellipse2D;
28import java.awt.geom.Path2D;30import java.awt.geom.Path2D;
2931
30import org.workcraft.annotations.DisplayName;32import org.workcraft.annotations.DisplayName;
31import org.workcraft.annotations.Hotkey;33import org.workcraft.annotations.Hotkey;
32import org.workcraft.annotations.SVGIcon;34import org.workcraft.annotations.SVGIcon;
35import org.workcraft.dom.visual.DrawRequest;
33import org.workcraft.dom.visual.Positioning;36import org.workcraft.dom.visual.Positioning;
34import org.workcraft.dom.visual.Stylable;37import org.workcraft.dom.visual.Stylable;
35import org.workcraft.dom.visual.TransformHelper;38import org.workcraft.gui.Coloriser;
39import org.workcraft.gui.graph.tools.Decoration;
36import org.workcraft.gui.propertyeditor.PropertyDeclaration;40import org.workcraft.gui.propertyeditor.PropertyDeclaration;
41import org.workcraft.plugins.xmas.XmasSettings;
37import org.workcraft.plugins.xmas.components.SourceComponent.Mode;42import org.workcraft.plugins.xmas.components.SourceComponent.Mode;
38import org.workcraft.plugins.xmas.components.SourceComponent.Type;43import org.workcraft.plugins.xmas.components.SourceComponent.Type;
3944
@@ -46,6 +51,8 @@
46 51
47 public Color color = new Color(0, 255, 0, 255);52 public Color color = new Color(0, 255, 0, 255);
48 private VisualXmasContact oContact = null;53 private VisualXmasContact oContact = null;
54 public final double tokenSize = 0.18 * size;
55
49 56
50 public VisualSourceComponent(SourceComponent component) {57 public VisualSourceComponent(SourceComponent component) {
51 super(component);58 super(component);
@@ -96,6 +103,26 @@
96 103
97 return shape;104 return shape;
98 }105 }
106
107 public Shape getTokenShape() {
108 return new Ellipse2D.Double(-1.8 * tokenSize, -2.5 * tokenSize, tokenSize, tokenSize);
109 }
110
111 @Override
112 public void draw(DrawRequest r) {
113 super.draw(r);
114 Graphics2D g = r.getGraphics();
115 Decoration d = r.getDecoration();
116 if (d instanceof StateDecoration) {
117 if (((StateDecoration)d).getState()) {
118 g.setStroke(new BasicStroke((float)XmasSettings.getBorderWidth()));
119 g.setColor(Coloriser.colorise(getForegroundColor(), d.getColorisation()));
120 Shape shape = transformShape(getTokenShape());
121 g.fill(shape);
122 g.draw(shape);
123 }
124 }
125 }
99126
100 @Override127 @Override
101 public void copyStyle(Stylable src) {128 public void copyStyle(Stylable src) {
102129
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualSwitchComponent.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualSwitchComponent.java 2015-09-03 15:25:56 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualSwitchComponent.java 2015-09-25 14:54:20 +0000
@@ -21,18 +21,27 @@
2121
22package org.workcraft.plugins.xmas.components;22package org.workcraft.plugins.xmas.components;
2323
24import java.awt.BasicStroke;
25import java.awt.Graphics2D;
24import java.awt.Shape;26import java.awt.Shape;
27import java.awt.geom.Ellipse2D;
25import java.awt.geom.Path2D;28import java.awt.geom.Path2D;
2629
27import org.workcraft.annotations.DisplayName;30import org.workcraft.annotations.DisplayName;
28import org.workcraft.annotations.SVGIcon;31import org.workcraft.annotations.SVGIcon;
32import org.workcraft.dom.visual.DrawRequest;
29import org.workcraft.dom.visual.Positioning;33import org.workcraft.dom.visual.Positioning;
34import org.workcraft.gui.Coloriser;
35import org.workcraft.gui.graph.tools.Decoration;
36import org.workcraft.plugins.xmas.XmasSettings;
3037
3138
32@DisplayName("Switch")39@DisplayName("Switch")
33@SVGIcon("images/icons/svg/xmas-switch.svg")40@SVGIcon("images/icons/svg/xmas-switch.svg")
34public class VisualSwitchComponent extends VisualXmasComponent {41public class VisualSwitchComponent extends VisualXmasComponent {
35 42
43 public final double pointerSize = 0.20 * size;
44
36 public VisualSwitchComponent(SwitchComponent component) {45 public VisualSwitchComponent(SwitchComponent component) {
37 super(component);46 super(component);
38 if (component.getChildren().isEmpty()) { 47 if (component.getChildren().isEmpty()) {
@@ -45,6 +54,44 @@
45 public SwitchComponent getReferencedSwitchComponent() {54 public SwitchComponent getReferencedSwitchComponent() {
46 return (SwitchComponent)getReferencedComponent();55 return (SwitchComponent)getReferencedComponent();
47 }56 }
57
58 public Shape getUpPointerShape() {
59 Path2D shape = new Path2D.Double();
60 shape.moveTo(+0.50 * size, -0.28 * size);
61 shape.lineTo(+0.50 * size + 0.7 * pointerSize, -0.28 * size + pointerSize);
62 shape.lineTo(+0.50 * size - 0.7 * pointerSize, -0.28 * size + pointerSize);
63 shape.closePath();
64 return shape;
65 }
66
67 public Shape getDownPointerShape() {
68 Path2D shape = new Path2D.Double();
69 shape.moveTo(+0.50 * size, +0.28 * size);
70 shape.lineTo(+0.50 * size + 0.7 * pointerSize, +0.28 * size - pointerSize);
71 shape.lineTo(+0.50 * size - 0.7 * pointerSize, +0.28 * size - pointerSize);
72 shape.closePath();
73 return shape;
74 }
75
76 @Override
77 public void draw(DrawRequest r) {
78 super.draw(r);
79 Graphics2D g = r.getGraphics();
80 Decoration d = r.getDecoration();
81 if (d instanceof StateDecoration) {
82 g.setStroke(new BasicStroke((float)XmasSettings.getBorderWidth()));
83 g.setColor(Coloriser.colorise(getForegroundColor(), d.getColorisation()));
84 if (((StateDecoration)d).getState()) {
85 Shape shape = transformShape(getUpPointerShape());
86 g.fill(shape);
87 g.draw(shape);
88 } else {
89 Shape shape = transformShape(getDownPointerShape());
90 g.fill(shape);
91 g.draw(shape);
92 }
93 }
94 }
4895
49 @Override96 @Override
50 public Shape getShape() {97 public Shape getShape() {
5198
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualXmasComponent.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualXmasComponent.java 2015-09-03 15:25:56 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualXmasComponent.java 2015-09-25 14:54:20 +0000
@@ -178,7 +178,7 @@
178 178
179 @Override179 @Override
180 public Rectangle2D getInternalBoundingBoxInLocalSpace() {180 public Rectangle2D getInternalBoundingBoxInLocalSpace() {
181 return getTransformedShape().getBounds2D();181 return transformShape(getShape()).getBounds2D();
182 }182 }
183183
184 public Rectangle2D getBoundingBoxInLocalSpace() {184 public Rectangle2D getBoundingBoxInLocalSpace() {
@@ -272,12 +272,12 @@
272 272
273 abstract public Shape getShape();273 abstract public Shape getShape();
274 274
275 public Shape getTransformedShape() {275 public Shape transformShape(Shape shape) {
276 AffineTransform rotateTransform = new AffineTransform();276 AffineTransform rotateTransform = new AffineTransform();
277 if (orientation != null) {277 if (orientation != null) {
278 rotateTransform.quadrantRotate(orientation.getQuadrant());278 rotateTransform.quadrantRotate(orientation.getQuadrant());
279 }279 }
280 return rotateTransform.createTransformedShape(getShape());280 return rotateTransform.createTransformedShape(shape);
281 }281 }
282282
283 @Override283 @Override
@@ -287,7 +287,7 @@
287 287
288 g.setColor(Coloriser.colorise(getForegroundColor(), d.getColorisation()));288 g.setColor(Coloriser.colorise(getForegroundColor(), d.getColorisation()));
289 g.setStroke(new BasicStroke((float)XmasSettings.getBorderWidth()));289 g.setStroke(new BasicStroke((float)XmasSettings.getBorderWidth()));
290 g.draw(getTransformedShape());290 g.draw(transformShape(getShape()));
291291
292 drawNameInLocalSpace(r);292 drawNameInLocalSpace(r);
293 drawLabelInLocalSpace(r);293 drawLabelInLocalSpace(r);
294294
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualXmasConnection.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualXmasConnection.java 2015-09-03 15:25:56 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/components/VisualXmasConnection.java 2015-09-25 14:54:20 +0000
@@ -16,11 +16,11 @@
16public class VisualXmasConnection extends VisualConnection {16public class VisualXmasConnection extends VisualConnection {
1717
18 public VisualXmasConnection() {18 public VisualXmasConnection() {
19 super();19 this(null, null, null);
20 }20 }
21 21
22 public VisualXmasConnection(MathConnection c) {22 public VisualXmasConnection(MathConnection con) {
23 super();23 this(con, null, null);
24 }24 }
25 25
26 public VisualXmasConnection(MathConnection con, VisualComponent c1, VisualComponent c2) {26 public VisualXmasConnection(MathConnection con, VisualComponent c1, VisualComponent c2) {
2727
=== added file 'XmasPlugin/src/org/workcraft/plugins/xmas/stg/ContactStg.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/stg/ContactStg.java 1970-01-01 00:00:00 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/stg/ContactStg.java 2015-09-25 14:54:20 +0000
@@ -0,0 +1,36 @@
1package org.workcraft.plugins.xmas.stg;
2
3import java.util.Collection;
4import java.util.HashSet;
5
6import org.workcraft.plugins.petri.VisualPlace;
7import org.workcraft.plugins.stg.VisualSignalTransition;
8import org.workcraft.plugins.stg.generator.NodeStg;
9import org.workcraft.plugins.stg.generator.SignalStg;
10
11public class ContactStg extends NodeStg {
12 public final SignalStg rdy;
13 public final SignalStg dn;
14
15 public ContactStg(SignalStg rdy, SignalStg dn) {
16 this.rdy = rdy;
17 this.dn = dn;
18 }
19
20 @Override
21 public Collection<VisualSignalTransition> getAllTransitions() {
22 HashSet<VisualSignalTransition> result = new HashSet<>();
23 result.addAll(rdy.getAllTransitions());
24 result.addAll(dn.getAllTransitions());
25 return result;
26 }
27
28 @Override
29 public Collection<VisualPlace> getAllPlaces() {
30 HashSet<VisualPlace> result = new HashSet<>();
31 result.addAll(rdy.getAllPlaces());
32 result.addAll(dn.getAllPlaces());
33 return result;
34 }
35
36}
037
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/stg/ForkStg.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/stg/ForkStg.java 2015-09-03 15:25:56 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/stg/ForkStg.java 2015-09-25 14:54:20 +0000
@@ -5,13 +5,14 @@
55
6import org.workcraft.plugins.petri.VisualPlace;6import org.workcraft.plugins.petri.VisualPlace;
7import org.workcraft.plugins.stg.VisualSignalTransition;7import org.workcraft.plugins.stg.VisualSignalTransition;
8import org.workcraft.plugins.stg.generator.NodeStg;
89
9public class ForkStg extends NodeStg {10public class ForkStg extends NodeStg {
10 public final SignalStg i;11 public final ContactStg i;
11 public final SignalStg a;12 public final ContactStg a;
12 public final SignalStg b;13 public final ContactStg b;
1314
14 public ForkStg(SignalStg i, SignalStg a, SignalStg b) {15 public ForkStg(ContactStg i, ContactStg a, ContactStg b) {
15 this.i = i;16 this.i = i;
16 this.a = a;17 this.a = a;
17 this.b = b;18 this.b = b;
1819
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/stg/FunctionStg.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/stg/FunctionStg.java 2015-09-03 15:25:56 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/stg/FunctionStg.java 2015-09-25 14:54:20 +0000
@@ -5,12 +5,13 @@
55
6import org.workcraft.plugins.petri.VisualPlace;6import org.workcraft.plugins.petri.VisualPlace;
7import org.workcraft.plugins.stg.VisualSignalTransition;7import org.workcraft.plugins.stg.VisualSignalTransition;
8import org.workcraft.plugins.stg.generator.NodeStg;
89
9public class FunctionStg extends NodeStg {10public class FunctionStg extends NodeStg {
10 public final SignalStg i;11 public final ContactStg i;
11 public final SignalStg o;12 public final ContactStg o;
1213
13 public FunctionStg(SignalStg i, SignalStg o) {14 public FunctionStg(ContactStg i, ContactStg o) {
14 this.i = i;15 this.i = i;
15 this.o = o;16 this.o = o;
16 }17 }
1718
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/stg/JoinStg.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/stg/JoinStg.java 2015-09-03 15:25:56 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/stg/JoinStg.java 2015-09-25 14:54:20 +0000
@@ -5,13 +5,14 @@
55
6import org.workcraft.plugins.petri.VisualPlace;6import org.workcraft.plugins.petri.VisualPlace;
7import org.workcraft.plugins.stg.VisualSignalTransition;7import org.workcraft.plugins.stg.VisualSignalTransition;
8import org.workcraft.plugins.stg.generator.NodeStg;
89
9public class JoinStg extends NodeStg {10public class JoinStg extends NodeStg {
10 public final SignalStg a;11 public final ContactStg a;
11 public final SignalStg b;12 public final ContactStg b;
12 public final SignalStg o;13 public final ContactStg o;
1314
14 public JoinStg(SignalStg a, SignalStg b, SignalStg o) {15 public JoinStg(ContactStg a, ContactStg b, ContactStg o) {
15 this.a = a;16 this.a = a;
16 this.b = b;17 this.b = b;
17 this.o = o;18 this.o = o;
1819
=== added file 'XmasPlugin/src/org/workcraft/plugins/xmas/stg/MergeStg.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/stg/MergeStg.java 1970-01-01 00:00:00 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/stg/MergeStg.java 2015-09-25 14:54:20 +0000
@@ -0,0 +1,39 @@
1package org.workcraft.plugins.xmas.stg;
2
3import java.util.Collection;
4import java.util.HashSet;
5
6import org.workcraft.plugins.petri.VisualPlace;
7import org.workcraft.plugins.stg.VisualSignalTransition;
8import org.workcraft.plugins.stg.generator.NodeStg;
9
10public class MergeStg extends NodeStg {
11 public final ContactStg a;
12 public final ContactStg b;
13 public final ContactStg o;
14
15 public MergeStg(ContactStg a, ContactStg b, ContactStg o) {
16 this.a = a;
17 this.b = b;
18 this.o = o;
19 }
20
21 @Override
22 public Collection<VisualSignalTransition> getAllTransitions() {
23 HashSet<VisualSignalTransition> result = new HashSet<>();
24 result.addAll(a.getAllTransitions());
25 result.addAll(b.getAllTransitions());
26 result.addAll(o.getAllTransitions());
27 return result;
28 }
29
30 @Override
31 public Collection<VisualPlace> getAllPlaces() {
32 HashSet<VisualPlace> result = new HashSet<>();
33 result.addAll(a.getAllPlaces());
34 result.addAll(b.getAllPlaces());
35 result.addAll(o.getAllPlaces());
36 return result;
37 }
38
39}
040
=== removed file 'XmasPlugin/src/org/workcraft/plugins/xmas/stg/NodeStg.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/stg/NodeStg.java 2015-08-28 17:16:49 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/stg/NodeStg.java 1970-01-01 00:00:00 +0000
@@ -1,38 +0,0 @@
1package org.workcraft.plugins.xmas.stg;
2
3import java.util.Collection;
4import java.util.HashSet;
5
6import org.workcraft.dom.Node;
7import org.workcraft.plugins.petri.VisualPlace;
8import org.workcraft.plugins.stg.VisualSignalTransition;
9
10public abstract class NodeStg {
11 public abstract Collection<VisualSignalTransition> getAllTransitions();
12
13 public abstract Collection<VisualPlace> getAllPlaces();
14
15 public Collection<Node> getAllNodes() {
16 HashSet<Node> result = new HashSet<>();
17 result.addAll(getAllPlaces());
18 result.addAll(getAllTransitions());
19 return result;
20 }
21
22 public boolean contains(Node n) {
23 if (n != null) {
24 for (VisualPlace p: getAllPlaces()) {
25 if (n == p || (p != null && n == p.getReferencedPlace())) {
26 return true;
27 }
28 }
29 for (VisualSignalTransition t: getAllTransitions()) {
30 if (n == t || (t != null && n == t.getReferencedTransition())) {
31 return true;
32 }
33 }
34 }
35 return false;
36 }
37
38}
390
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/stg/QueueStg.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/stg/QueueStg.java 2015-09-05 22:18:55 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/stg/QueueStg.java 2015-09-25 14:54:20 +0000
@@ -1,24 +1,22 @@
1package org.workcraft.plugins.xmas.stg;1package org.workcraft.plugins.xmas.stg;
22
3import java.util.ArrayList;3import java.util.ArrayList;
4import java.util.Collection;
4import java.util.List;5import java.util.List;
56
6import org.workcraft.plugins.petri.VisualPlace;7import org.workcraft.plugins.petri.VisualPlace;
7import org.workcraft.plugins.stg.VisualSignalTransition;8import org.workcraft.plugins.stg.VisualSignalTransition;
9import org.workcraft.plugins.stg.generator.NodeStg;
810
9public class QueueStg extends NodeStg {11public class QueueStg extends NodeStg {
10 public final SignalStg i;12 public final ContactStg i;
11 public final SignalStg o;13 public final ContactStg o;
12 public final ArrayList<SignalStg> memList = new ArrayList<>();14 public final ArrayList<SlotStg> slotList = new ArrayList<>();
13 public final ArrayList<SignalStg> headList = new ArrayList<>();
14 public final ArrayList<SignalStg> tailList = new ArrayList<>();
1515
16 public QueueStg(SignalStg i, SignalStg o, ArrayList<SignalStg> memList, ArrayList<SignalStg> headList, ArrayList<SignalStg> tailList) {16 public QueueStg(ContactStg i, ContactStg o, ArrayList<SlotStg> slotList) {
17 this.i = i;17 this.i = i;
18 this.o = o;18 this.o = o;
19 this.memList.addAll(memList);19 this.slotList.addAll(slotList);
20 this.headList.addAll(headList);
21 this.tailList.addAll(tailList);
22 }20 }
2321
24 @Override22 @Override
@@ -26,68 +24,55 @@
26 List<VisualSignalTransition> result = new ArrayList<>();24 List<VisualSignalTransition> result = new ArrayList<>();
27 result.addAll(i.getAllTransitions());25 result.addAll(i.getAllTransitions());
28 result.addAll(o.getAllTransitions());26 result.addAll(o.getAllTransitions());
29 result.addAll(getMemTransitions());27 result.addAll(getSlotTransitions());
30 result.addAll(getHeadTransitions());28 return result;
31 result.addAll(getTailTransitions());29 }
32 return result;30
33 }31 public List<VisualSignalTransition> getSlotTransitions() {
3432 List<VisualSignalTransition> result = new ArrayList<>();
35 public List<VisualSignalTransition> getMemTransitions() {33 for (SlotStg slot: slotList) {
36 List<VisualSignalTransition> result = new ArrayList<>();34 result.addAll(slot.getAllTransitions());
37 for (SignalStg mem: memList) {35 }
38 result.addAll(mem.getAllTransitions());36 return result;
39 }37 }
40 return result;
41 }
42
43 public List<VisualSignalTransition> getHeadTransitions() {
44 List<VisualSignalTransition> result = new ArrayList<>();
45 for (SignalStg head: headList) {
46 result.addAll(head.getAllTransitions());
47 }
48 return result;
49 }
50
51 public List<VisualSignalTransition> getTailTransitions() {
52 List<VisualSignalTransition> result = new ArrayList<>();
53 for (SignalStg tail: tailList) {
54 result.addAll(tail.getAllTransitions());
55 }
56 return result;
57 }
58
59 38
60 @Override39 @Override
61 public List<VisualPlace> getAllPlaces() {40 public List<VisualPlace> getAllPlaces() {
62 List<VisualPlace> result = new ArrayList<>();41 List<VisualPlace> result = new ArrayList<>();
63 result.addAll(i.getAllPlaces());42 result.addAll(i.getAllPlaces());
64 result.addAll(o.getAllPlaces());43 result.addAll(o.getAllPlaces());
65 result.addAll(getMemPlaces());44 result.addAll(getSlotPlaces());
66 result.addAll(getHeadPlaces());45 return result;
67 result.addAll(getTailPlaces());46 }
68 return result;47
69 }48 public List<VisualPlace> getSlotPlaces() {
7049 List<VisualPlace> result = new ArrayList<>();
71 public List<VisualPlace> getMemPlaces() {50 for (SlotStg slot: slotList) {
72 List<VisualPlace> result = new ArrayList<>();51 result.addAll(slot.getAllPlaces());
73 for (SignalStg mem: memList) {52 }
74 result.addAll(mem.getAllPlaces());53 return result;
75 }54 }
76 return result;55
77 }56 public Collection<VisualSignalTransition> getMemTransitions() {
7857 List<VisualSignalTransition> result = new ArrayList<>();
79 public List<VisualPlace> getHeadPlaces() {58 for (SlotStg slot: slotList) {
80 List<VisualPlace> result = new ArrayList<>();59 result.addAll(slot.mem.getAllTransitions());
81 for (SignalStg head: headList) {60 }
82 result.addAll(head.getAllPlaces());61 return result;
83 }62 }
84 return result;63
85 }64 public Collection<VisualSignalTransition> getHeadTransitions() {
8665 List<VisualSignalTransition> result = new ArrayList<>();
87 public List<VisualPlace> getTailPlaces() {66 for (SlotStg slot: slotList) {
88 List<VisualPlace> result = new ArrayList<>();67 result.addAll(slot.hd.getAllTransitions());
89 for (SignalStg tail: tailList) {68 }
90 result.addAll(tail.getAllPlaces());69 return result;
70 }
71
72 public Collection<VisualSignalTransition> getTailTransitions() {
73 List<VisualSignalTransition> result = new ArrayList<>();
74 for (SlotStg slot: slotList) {
75 result.addAll(slot.tl.getAllTransitions());
91 }76 }
92 return result;77 return result;
93 }78 }
9479
=== removed file 'XmasPlugin/src/org/workcraft/plugins/xmas/stg/SignalStg.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/stg/SignalStg.java 2015-09-03 15:25:56 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/stg/SignalStg.java 1970-01-01 00:00:00 +0000
@@ -1,47 +0,0 @@
1package org.workcraft.plugins.xmas.stg;
2
3import java.util.ArrayList;
4import java.util.Arrays;
5import java.util.Collection;
6import java.util.HashSet;
7import java.util.List;
8
9import org.workcraft.plugins.petri.VisualPlace;
10import org.workcraft.plugins.stg.VisualSignalTransition;
11
12public class SignalStg extends NodeStg {
13 public final VisualPlace zero;
14 public final VisualPlace one;
15 public final ArrayList<VisualSignalTransition> fallList = new ArrayList<>();
16 public final ArrayList<VisualSignalTransition> riseList = new ArrayList<>();
17
18 public SignalStg(VisualPlace zero, VisualPlace one, VisualSignalTransition fall, VisualSignalTransition rise) {
19 this.zero = zero;
20 this.one = one;
21 this.fallList.add(fall);
22 this.riseList.add(rise);
23 }
24
25 public SignalStg(VisualPlace zero, VisualPlace one, ArrayList<VisualSignalTransition> fallList, ArrayList<VisualSignalTransition> riseList) {
26 this.zero = zero;
27 this.one = one;
28 this.fallList.addAll(fallList);
29 this.riseList.addAll(riseList);
30 }
31
32 @Override
33 public Collection<VisualSignalTransition> getAllTransitions() {
34 HashSet<VisualSignalTransition> tmp = new HashSet<>();
35 tmp.addAll(fallList);
36 tmp.addAll(riseList);
37 List<VisualSignalTransition> result = new ArrayList<>();
38 result.addAll(tmp);
39 return result;
40 }
41
42 @Override
43 public Collection<VisualPlace> getAllPlaces() {
44 return Arrays.asList(zero, one);
45 }
46
47}
480
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/stg/SinkStg.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/stg/SinkStg.java 2015-09-05 22:18:55 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/stg/SinkStg.java 2015-09-25 14:54:20 +0000
@@ -6,12 +6,14 @@
66
7import org.workcraft.plugins.petri.VisualPlace;7import org.workcraft.plugins.petri.VisualPlace;
8import org.workcraft.plugins.stg.VisualSignalTransition;8import org.workcraft.plugins.stg.VisualSignalTransition;
9import org.workcraft.plugins.stg.generator.NodeStg;
10import org.workcraft.plugins.stg.generator.SignalStg;
911
10public class SinkStg extends NodeStg {12public class SinkStg extends NodeStg {
11 public final SignalStg i;13 public final ContactStg i;
12 public final SignalStg oracle;14 public final SignalStg oracle;
1315
14 public SinkStg(SignalStg i, SignalStg oracle) {16 public SinkStg(ContactStg i, SignalStg oracle) {
15 this.i = i;17 this.i = i;
16 this.oracle = oracle;18 this.oracle = oracle;
17 }19 }
1820
=== added file 'XmasPlugin/src/org/workcraft/plugins/xmas/stg/SlotStg.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/stg/SlotStg.java 1970-01-01 00:00:00 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/stg/SlotStg.java 2015-09-25 14:54:20 +0000
@@ -0,0 +1,40 @@
1package org.workcraft.plugins.xmas.stg;
2
3import java.util.Collection;
4import java.util.HashSet;
5
6import org.workcraft.plugins.petri.VisualPlace;
7import org.workcraft.plugins.stg.VisualSignalTransition;
8import org.workcraft.plugins.stg.generator.NodeStg;
9import org.workcraft.plugins.stg.generator.SignalStg;
10
11public class SlotStg extends NodeStg {
12 public final SignalStg mem;
13 public final ContactStg hd;
14 public final ContactStg tl;
15
16 public SlotStg(SignalStg mem, ContactStg hd, ContactStg tl) {
17 this.mem = mem;
18 this.hd = hd;
19 this.tl = tl;
20 }
21
22 @Override
23 public Collection<VisualSignalTransition> getAllTransitions() {
24 HashSet<VisualSignalTransition> result = new HashSet<>();
25 result.addAll(mem.getAllTransitions());
26 result.addAll(hd.getAllTransitions());
27 result.addAll(tl.getAllTransitions());
28 return result;
29 }
30
31 @Override
32 public Collection<VisualPlace> getAllPlaces() {
33 HashSet<VisualPlace> result = new HashSet<>();
34 result.addAll(mem.getAllPlaces());
35 result.addAll(hd.getAllPlaces());
36 result.addAll(tl.getAllPlaces());
37 return result;
38 }
39
40}
041
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/stg/SourceStg.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/stg/SourceStg.java 2015-09-05 22:18:55 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/stg/SourceStg.java 2015-09-25 14:54:20 +0000
@@ -6,12 +6,14 @@
66
7import org.workcraft.plugins.petri.VisualPlace;7import org.workcraft.plugins.petri.VisualPlace;
8import org.workcraft.plugins.stg.VisualSignalTransition;8import org.workcraft.plugins.stg.VisualSignalTransition;
9import org.workcraft.plugins.stg.generator.NodeStg;
10import org.workcraft.plugins.stg.generator.SignalStg;
911
10public class SourceStg extends NodeStg {12public class SourceStg extends NodeStg {
11 public final SignalStg o;13 public final ContactStg o;
12 public final SignalStg oracle;14 public final SignalStg oracle;
1315
14 public SourceStg(SignalStg o, SignalStg oracle) {16 public SourceStg(ContactStg o, SignalStg oracle) {
15 this.o = o;17 this.o = o;
16 this.oracle = oracle;18 this.oracle = oracle;
17 }19 }
1820
=== modified file 'XmasPlugin/src/org/workcraft/plugins/xmas/stg/StgGenerator.java'
--- XmasPlugin/src/org/workcraft/plugins/xmas/stg/StgGenerator.java 2015-09-14 16:35:29 +0000
+++ XmasPlugin/src/org/workcraft/plugins/xmas/stg/StgGenerator.java 2015-09-25 14:54:20 +0000
@@ -1,662 +1,1259 @@
1package org.workcraft.plugins.xmas.stg;1package org.workcraft.plugins.xmas.stg;
22
3import java.awt.geom.AffineTransform;
4import java.awt.geom.Point2D;3import java.awt.geom.Point2D;
5import java.util.ArrayList;4import java.util.ArrayList;
5import java.util.Arrays;
6import java.util.HashMap;6import java.util.HashMap;
7import java.util.HashSet;
7import java.util.Map;8import java.util.Map;
9import java.util.Set;
810
9import org.workcraft.dom.Container;
10import org.workcraft.dom.Node;11import org.workcraft.dom.Node;
11import org.workcraft.dom.visual.Movable;12import org.workcraft.dom.visual.VisualComponent;
12import org.workcraft.dom.visual.Positioning;
13import org.workcraft.dom.visual.TransformHelper;
14import org.workcraft.exceptions.InvalidConnectionException;13import org.workcraft.exceptions.InvalidConnectionException;
15import org.workcraft.plugins.petri.VisualPlace;14import org.workcraft.plugins.petri.VisualPlace;
16import org.workcraft.plugins.petri.VisualReplicaPlace;
17import org.workcraft.plugins.stg.STG;
18import org.workcraft.plugins.stg.SignalTransition;15import org.workcraft.plugins.stg.SignalTransition;
19import org.workcraft.plugins.stg.SignalTransition.Type;16import org.workcraft.plugins.stg.SignalTransition.Type;
20import org.workcraft.plugins.stg.VisualSTG;
21import org.workcraft.plugins.stg.VisualSignalTransition;17import org.workcraft.plugins.stg.VisualSignalTransition;
18import org.workcraft.plugins.stg.generator.NodeStg;
19import org.workcraft.plugins.stg.generator.SignalStg;
22import org.workcraft.plugins.xmas.VisualXmas;20import org.workcraft.plugins.xmas.VisualXmas;
23import org.workcraft.plugins.xmas.XmasUtils;21import org.workcraft.plugins.xmas.XmasUtils;
24import org.workcraft.plugins.xmas.components.VisualForkComponent;22import org.workcraft.plugins.xmas.components.VisualForkComponent;
25import org.workcraft.plugins.xmas.components.VisualFunctionComponent;23import org.workcraft.plugins.xmas.components.VisualFunctionComponent;
26import org.workcraft.plugins.xmas.components.VisualJoinComponent;24import org.workcraft.plugins.xmas.components.VisualJoinComponent;
25import org.workcraft.plugins.xmas.components.VisualMergeComponent;
27import org.workcraft.plugins.xmas.components.VisualQueueComponent;26import org.workcraft.plugins.xmas.components.VisualQueueComponent;
28import org.workcraft.plugins.xmas.components.VisualSinkComponent;27import org.workcraft.plugins.xmas.components.VisualSinkComponent;
29import org.workcraft.plugins.xmas.components.VisualSourceComponent;28import org.workcraft.plugins.xmas.components.VisualSourceComponent;
29import org.workcraft.plugins.xmas.components.VisualSwitchComponent;
30import org.workcraft.plugins.xmas.components.VisualXmasComponent;30import org.workcraft.plugins.xmas.components.VisualXmasComponent;
31import org.workcraft.plugins.xmas.components.VisualXmasContact;31import org.workcraft.plugins.xmas.components.VisualXmasContact;
32import org.workcraft.util.Hierarchy;32import org.workcraft.util.Hierarchy;
3333
34public class StgGenerator {34public class StgGenerator extends org.workcraft.plugins.stg.generator.StgGenerator {
35 public static final String nameOirdy = "_Oirdy";35
36 public static final String nameAirdy = "_Airdy";36 private enum XmasStgType { IORACLE, TORACLE, IRDY, IDN, TRDY, TDN }
37 public static final String nameBirdy = "_Birdy";37
38 public static final String nameItrdy = "_Itrdy";38 private static final String _INITIATOR = "I";
39 public static final String nameAtrdy = "_Atrdy";39 private static final String _TARGET = "T";
40 public static final String nameBtrdy = "_Btrdy";40 private static final String _RDY = "Rdy";
41 public static final String nameOracle = "_oracle";41 private static final String _DN = "Dn";
42 public static final String nameMem = "_mem";42 private static final String _ORACLE = "_oracle";
43 public static final String nameHead = "_hd";43 private static final String _MEM = "_mem";
44 public static final String nameTail = "_tl";44 private static final String _HEAD = "_hd";
45 public static final String name0 = "_0";45 private static final String _TAIL = "_tl";
46 public static final String name1 = "_1";46 private static final String _PORT_I = "_i";
47 private static final double xScaling = 6;47 private static final String _PORT_O = "_o";
48 private static final double yScaling = 6;48 private static final String _PORT_A = "_a";
4949 private static final String _PORT_B = "_b";
50 private Map<VisualXmasContact, SignalStg> contactMap = new HashMap<>(); 50
51 private Map<VisualSourceComponent, SourceStg> sourceMap = new HashMap<>(); 51 private static final String _O_IRDY = _PORT_O + _INITIATOR + _RDY;
52 private Map<VisualSinkComponent, SinkStg> sinkMap = new HashMap<>(); 52 private static final String _O_IDN = _PORT_O + _INITIATOR + _DN;
53 private Map<VisualFunctionComponent, FunctionStg> functionMap = new HashMap<>(); 53 private static final String _A_IRDY = _PORT_A + _INITIATOR + _RDY;
54 private Map<VisualForkComponent, ForkStg> forkMap = new HashMap<>(); 54 private static final String _A_IDN = _PORT_A + _INITIATOR + _DN;
55 private Map<VisualJoinComponent, JoinStg> joinMap = new HashMap<>(); 55 private static final String _B_IRDY = _PORT_B + _INITIATOR + _RDY;
56 private Map<VisualQueueComponent, QueueStg> queueMap = new HashMap<>(); 56 private static final String _B_IDN = _PORT_B + _INITIATOR + _DN;
57 private final VisualXmas xmas;57
58 private final VisualSTG stg;58 private static final String _I_TRDY = _PORT_I + _TARGET + _RDY;
59 private static final String _I_TDN = _PORT_I + _TARGET + _DN;
60 private static final String _A_TRDY = _PORT_A + _TARGET + _RDY;
61 private static final String _A_TDN = _PORT_A + _TARGET + _DN;
62 private static final String _B_TRDY = _PORT_B + _TARGET + _RDY;
63 private static final String _B_TDN = _PORT_B + _TARGET + _DN;
64
65 private static final double QUEUE_SLOT_SPACING = 20.0;
66
67 private SignalStg clockStg;
68 private Set<SignalStg> clockControlSignals;
69 private Map<VisualXmasContact, ContactStg> contactMap;
70 private Map<VisualSourceComponent, SourceStg> sourceMap;
71 private Map<VisualSinkComponent, SinkStg> sinkMap;
72 private Map<VisualFunctionComponent, FunctionStg> functionMap;
73 private Map<VisualForkComponent, ForkStg> forkMap;
74 private Map<VisualJoinComponent, JoinStg> joinMap;
75 private Map<VisualSwitchComponent, SwitchStg> switchMap;
76 private Map<VisualMergeComponent, MergeStg> mergeMap;
77 private Map<VisualQueueComponent, QueueStg> queueMap;
5978
60 public StgGenerator(VisualXmas xmas) {79 public StgGenerator(VisualXmas xmas) {
61 this.xmas = xmas;80 super(xmas);
62 this.stg = new VisualSTG(new STG());81 }
63 convert();82
83 private VisualXmas getXmasModel() {
84 return (VisualXmas)getSrcModel();
64 }85 }
65 86
66 private void convert() {87 @Override
88 public void convert() {
89 HashSet<VisualXmasComponent> remainingComponents = new HashSet<>();
90 remainingComponents.addAll(Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualXmasComponent.class));
67 try {91 try {
68 for(VisualSourceComponent component : Hierarchy.getDescendantsOfType(xmas.getRoot(), VisualSourceComponent.class)) {92 {
69 SourceStg sourceStg = generateSourceStg(component);93 clockStg = generateClockStg();
70 sourceMap.put(component, sourceStg);94 clockControlSignals = new HashSet<>();
71 }95 groupComponentStg(clockStg);
72 for(VisualSinkComponent component : Hierarchy.getDescendantsOfType(xmas.getRoot(), VisualSinkComponent.class)) {96 }
73 SinkStg sinkStg = generateSinkStg(component);97 for(VisualSourceComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualSourceComponent.class)) {
74 sinkMap.put(component, sinkStg);98 SourceStg stg = generateSourceStg(component);
75 }99 groupComponentStg(stg);
76 for(VisualFunctionComponent component : Hierarchy.getDescendantsOfType(xmas.getRoot(), VisualFunctionComponent.class)) {100 putSourceStg(component, stg);
77 FunctionStg functionStg = generateFunctionStg(component);101 remainingComponents.remove(component);
78 functionMap.put(component, functionStg);102 }
79 }103 for(VisualSinkComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualSinkComponent.class)) {
80 for(VisualForkComponent component : Hierarchy.getDescendantsOfType(xmas.getRoot(), VisualForkComponent.class)) {104 SinkStg stg = generateSinkStg(component);
81 ForkStg forkStg = generateForkStg(component);105 groupComponentStg(stg);
82 forkMap.put(component, forkStg);106 putSinkStg(component, stg);
83 }107 remainingComponents.remove(component);
84 for(VisualJoinComponent component : Hierarchy.getDescendantsOfType(xmas.getRoot(), VisualJoinComponent.class)) {108 }
85 JoinStg joinStg = generateJoinStg(component);109 for(VisualFunctionComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualFunctionComponent.class)) {
86 joinMap.put(component, joinStg);110 FunctionStg stg = generateFunctionStg(component);
87 }111 groupComponentStg(stg);
88 for(VisualQueueComponent component : Hierarchy.getDescendantsOfType(xmas.getRoot(), VisualQueueComponent.class)) {112 putFunctionStg(component, stg);
89 QueueStg queueStg = generateQueueStg(component);113 remainingComponents.remove(component);
90 queueMap.put(component, queueStg);114 }
115 for(VisualForkComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualForkComponent.class)) {
116 ForkStg stg = generateForkStg(component);
117 groupComponentStg(stg);
118 putForkStg(component, stg);
119 remainingComponents.remove(component);
120 }
121 for(VisualJoinComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualJoinComponent.class)) {
122 JoinStg stg = generateJoinStg(component);
123 groupComponentStg(stg);
124 putJoinStg(component, stg);
125 remainingComponents.remove(component);
126 }
127 for(VisualSwitchComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualSwitchComponent.class)) {
128 SwitchStg stg = generateSwitchStg(component);
129 groupComponentStg(stg);
130 putSwitchStg(component, stg);
131 remainingComponents.remove(component);
132 }
133 for(VisualMergeComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualMergeComponent.class)) {
134 MergeStg stg = generateMergeStg(component);
135 groupComponentStg(stg);
136 putMergeStg(component, stg);
137 remainingComponents.remove(component);
138 }
139 for(VisualQueueComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualQueueComponent.class)) {
140 QueueStg stg = generateQueueStg(component);
141 groupComponentStg(stg);
142 putQueueStg(component, stg);
143 remainingComponents.remove(component);
91 }144 }
92145
93 for(VisualSourceComponent component : Hierarchy.getDescendantsOfType(xmas.getRoot(), VisualSourceComponent.class)) {146 connectClockStg();
147 for(VisualSourceComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualSourceComponent.class)) {
94 connectSourceStg(component);148 connectSourceStg(component);
95 }149 }
96 for(VisualSinkComponent component : Hierarchy.getDescendantsOfType(xmas.getRoot(), VisualSinkComponent.class)) {150 for(VisualSinkComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualSinkComponent.class)) {
97 connectSinkStg(component);151 connectSinkStg(component);
98 }152 }
99 for(VisualFunctionComponent component : Hierarchy.getDescendantsOfType(xmas.getRoot(), VisualFunctionComponent.class)) {153 for(VisualFunctionComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualFunctionComponent.class)) {
100 connectFunctionStg(component);154 connectFunctionStg(component);
101 }155 }
102 for(VisualForkComponent component : Hierarchy.getDescendantsOfType(xmas.getRoot(), VisualForkComponent.class)) {156 for(VisualForkComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualForkComponent.class)) {
103 connectForkStg(component);157 connectForkStg(component);
104 }158 }
105 for(VisualJoinComponent component : Hierarchy.getDescendantsOfType(xmas.getRoot(), VisualJoinComponent.class)) {159 for(VisualJoinComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualJoinComponent.class)) {
106 connectJoinStg(component);160 connectJoinStg(component);
107 }161 }
108 for(VisualQueueComponent component : Hierarchy.getDescendantsOfType(xmas.getRoot(), VisualQueueComponent.class)) {162 for(VisualSwitchComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualSwitchComponent.class)) {
163 connectSwitchStg(component);
164 }
165 for(VisualMergeComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualMergeComponent.class)) {
166 connectMergeStg(component);
167 }
168 for(VisualQueueComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualQueueComponent.class)) {
109 connectQueueStg(component);169 connectQueueStg(component);
110 }170 }
111 } catch (InvalidConnectionException e) {171 } catch (InvalidConnectionException e) {
112 throw new RuntimeException(e);172 throw new RuntimeException(e);
113 }173 }
114 stg.selectNone();174 for (VisualComponent component: remainingComponents) {
115 }175 String name = getXmasModel().getNodeMathReference(component);
116 176 System.out.println("ERROR: Cannot derive an STG for xMAS component '" + name +"' of type " + component.getClass().getName());
117 public VisualSTG getStg() {177 }
118 return stg;178 getXmasModel().selectNone();
119 }179 }
120180
121 static void setPosition(Movable node, double x, double y) {181 private void createReplicaReadArcBetweenDoneSignals(SignalStg from, SignalStg to, double yOffset) throws InvalidConnectionException {
122 TransformHelper.applyTransform(node, AffineTransform.getTranslateInstance(x, y));182 double xT = to.fallList.get(0).getRootSpaceX();
123 }183 double xP = to.one.getRootSpaceX();
124 184 double yZero = to.zero.getRootSpaceY();
125 private void createConsumingArc(VisualPlace p, VisualSignalTransition t) throws InvalidConnectionException {185 double yOne = to.one.getRootSpaceY();
126 if (p != null && t != null) {186 double xFall = ((xT > xP) ? xT + 6.0 : xT - 6.0);
127 stg.connect(p, t);187 double yFall = yZero;
128 }188 double xRise = ((xT < xP) ? xT + 6.0 : xT - 6.0);
129 }189 double yRise = ((yOne > yZero) ? yOne + 1.0 : yOne - 1.0);
130 190 createReplicaReadArcs(from.zero, to.fallList, new Point2D.Double(xFall, yFall + yOffset));
131 private void createProducingArc(VisualSignalTransition t, VisualPlace p) throws InvalidConnectionException {191 createReplicaReadArcs(from.one, to.riseList, new Point2D.Double(xRise, yRise + yOffset));
132 if (p != null && t != null) {192 }
133 stg.connect(t, p);193
134 }194
135 }195 private void createReplicaReadArcsFromDoneToClock(SignalStg dn) throws InvalidConnectionException {
136 196 clockControlSignals.add(dn);
137 private void createReadArc(VisualPlace p, VisualSignalTransition t) throws InvalidConnectionException {197 int cnt = clockControlSignals.size();
138 if (p != null && t != null) {198 double dx = 4.0;
139 stg.connectUndirected(p, t);199 int dy = (cnt % 2 == 0 ? 1 : -1) * cnt / 2;
140 }200 for (VisualSignalTransition t: clockStg.fallList) {
141 }201 createReplicaReadArc(dn.zero, t, dx, dy);
142 202 }
143 private void createReplicaReadArc(VisualPlace p, VisualSignalTransition t, Point2D replicaPosition) throws InvalidConnectionException {203 for (VisualSignalTransition t: clockStg.riseList) {
144 if (p != null && t != null) {204 createReplicaReadArc(dn.one, t, -dx, dy);
145 Container container = Hierarchy.getNearestContainer(t);205 }
146 VisualReplicaPlace replicaPlace = stg.createVisualReplica(p, container, VisualReplicaPlace.class);206 }
147 if (replicaPosition != null) {207
148 replicaPlace.setRootSpacePosition(replicaPosition);208 private void createReplicaReadArcsFromClockToDone(SignalStg dn) throws InvalidConnectionException {
149 }209 double xt = 0.0;
150 stg.connectUndirected(replicaPlace, t);210 for (VisualSignalTransition t: dn.getAllTransitions()) {
151 }211 xt += t.getRootSpaceX();
152 }212 }
153213 xt /= dn.getAllTransitions().size();
154 private SignalStg generateInputContactStg(String signalName, double x, double y) throws InvalidConnectionException {214 double xp = 0.0;
155 return generateInputContactStg(signalName, x, y, false, Type.INTERNAL, 1, 1);215 for (VisualPlace p: dn.getAllPlaces()) {
156 }216 xp += p.getRootSpaceX();
157 217 }
158 private SignalStg generateInputContactStg(String signalName, double x, double y, boolean initToOne, 218 xp /= dn.getAllPlaces().size();
159 SignalTransition.Type type, int fallCount, int riseCount) throws InvalidConnectionException {219 Point2D centerPos = getSignalCenterPosition(dn);
160220 Point2D clk1Pos = centerPos;
161 VisualPlace zero = stg.createPlace(signalName + name0, null);221 if (dn.fallList.size() > 1) {
162 zero.setNamePositioning(Positioning.BOTTOM);222 clk1Pos = new Point2D.Double(centerPos.getX() + (xt - xp), centerPos.getY());
163 zero.setLabelPositioning(Positioning.TOP);223 }
164 setPosition(zero, x - 4.0, y + 1.0);224 Point2D clk0Pos = new Point2D.Double(centerPos.getX() + (xt - xp) / 2.0, centerPos.getY());
165225 createReplicaReadArcs(clockStg.one, dn.fallList, clk1Pos);
166 VisualPlace one = stg.createPlace(signalName + name1, null);226 createReplicaReadArcs(clockStg.zero, dn.riseList, clk0Pos);
167 one.setNamePositioning(Positioning.TOP);227 }
168 one.setLabelPositioning(Positioning.BOTTOM);228
169 setPosition(one, x - 4.0, y - 1.0);229 private void createReplicaReadArcFromSignalToOracle(SignalStg signal, SignalStg oracle) throws InvalidConnectionException {
170230 double x = oracle.fallList.get(0).getRootSpaceX();
171 if (initToOne) {231 double yFall = oracle.fallList.get(0).getRootSpaceY();
172 one.getReferencedPlace().setTokens(1);232 double yRise = oracle.riseList.get(0).getRootSpaceY();
173 zero.getReferencedPlace().setTokens(0);233 double y = ((yFall > yRise) ? yFall + 2.0 : yFall - 2.0);
174 } else {234 createReplicaReadArcs(signal.one, oracle.fallList, new Point2D.Double(x, y));
175 one.getReferencedPlace().setTokens(0);235 }
176 zero.getReferencedPlace().setTokens(1);236
177 }237 private void createReplicaReadArcsFromClockToCombinational(SignalStg rdy) throws InvalidConnectionException {
178238 double xt = 0.0;
179 ArrayList<VisualSignalTransition> fallList = new ArrayList<>(fallCount);239 for (VisualSignalTransition t: rdy.getAllTransitions()) {
180 for (int i = 0; i < fallCount; i++) {240 xt += t.getRootSpaceX();
181 VisualSignalTransition fall = stg.createSignalTransition(signalName, type, SignalTransition.Direction.MINUS, null);241 }
182 createConsumingArc(one, fall);242 xt /= rdy.getAllTransitions().size();
183 createProducingArc(fall, zero);243 double xp = 0.0;
184 setPosition(fall, x + 0.0, y + 1.0 + i);244 double yp = 0.0;
185 fallList.add(fall);245 for (VisualPlace p: rdy.getAllPlaces()) {
186 }246 xp += p.getRootSpaceX();
187 247 yp += p.getRootSpaceY();
188 ArrayList<VisualSignalTransition> riseList = new ArrayList<>(riseCount);248 }
189 for (int i = 0; i < riseCount; i++) {249 xp /= rdy.getAllPlaces().size();
190 VisualSignalTransition rise = stg.createSignalTransition(signalName, type, SignalTransition.Direction.PLUS, null);250 yp /= rdy.getAllPlaces().size();
191 createConsumingArc(zero, rise);251 Point2D clk0Pos = new Point2D.Double(xt + (xt - xp) / 2.0, yp);
192 createProducingArc(rise, one);252 createReplicaReadArcs(clockStg.zero, rdy.getAllTransitions(), clk0Pos);
193 setPosition(rise, x + 0.0, y - 1.0 - i);253 }
194 riseList.add(rise);254
195 }255 private void createReplicaReadArcsFromClockToSequential(SignalStg rdy) throws InvalidConnectionException {
196 256 createReplicaReadArcs(clockStg.one, rdy.getAllTransitions(), getSignalCenterPosition(rdy));
197 return new SignalStg(zero, one, fallList, riseList);257 }
198 }258
199259 private SignalStg generateSignalStg(XmasStgType xmasSignalType, String signalName, double x, double y) throws InvalidConnectionException {
200 private SignalStg generateOutputContactStg(String signalName, double x, double y) throws InvalidConnectionException {260 return generateSignalStg(xmasSignalType, signalName, new Point2D.Double(x, y), 1, 1);
201 return generateOutputContactStg(signalName, x, y, false, Type.INTERNAL, 1, 1);261 }
202 }262
203 263 private SignalStg generateSignalStg(XmasStgType xmasSignalType, String signalName, double x, double y, int fallCount, int riseCount) throws InvalidConnectionException {
204 private SignalStg generateOutputContactStg(String signalName, double x, double y, boolean initToOne, 264 return generateSignalStg(xmasSignalType, signalName, new Point2D.Double(x, y), fallCount, riseCount);
205 SignalTransition.Type type, int fallCount, int riseCount) throws InvalidConnectionException {265 }
206266
207 VisualPlace zero = stg.createPlace(signalName + name0, null);267 private SignalStg generateSignalStg(XmasStgType xmasSignalType, String signalName, Point2D pos, int fallCount, int riseCount) throws InvalidConnectionException {
208 zero.setNamePositioning(Positioning.BOTTOM);268 SignalLayoutType layoutType = SignalLayoutType.LEFT_TO_RIGHT;
209 zero.setLabelPositioning(Positioning.TOP);269 SignalTransition.Type type = Type.INTERNAL;
210 setPosition(zero, x + 4.0, y + 1.0);270 switch (xmasSignalType) {
211271 case IDN:
212 VisualPlace one = stg.createPlace(signalName + name1, null);272 layoutType = SignalLayoutType.LEFT_TO_RIGHT_INVERTED;
213 one.setNamePositioning(Positioning.TOP);273 type = Type.OUTPUT;
214 one.setLabelPositioning(Positioning.BOTTOM);274 break;
215 setPosition(one, x + 4.0, y - 1.0);275 case IORACLE:
216276 layoutType = SignalLayoutType.LEFT_TO_RIGHT;
217 if (initToOne) {277 type = Type.INPUT;
218 one.getReferencedPlace().setTokens(1);278 break;
219 zero.getReferencedPlace().setTokens(0);279 case IRDY:
220 } else {280 layoutType = SignalLayoutType.LEFT_TO_RIGHT;
221 one.getReferencedPlace().setTokens(0);281 type = Type.INTERNAL;
222 zero.getReferencedPlace().setTokens(1);282 break;
223 }283 case TDN:
224284 layoutType = SignalLayoutType.RIGHT_TO_LEFT;
225 ArrayList<VisualSignalTransition> fallList = new ArrayList<>(fallCount);285 type = Type.OUTPUT;
226 for (int i = 0; i < fallCount; i++) {286 break;
227 VisualSignalTransition fall = stg.createSignalTransition(signalName, type, SignalTransition.Direction.MINUS, null);287 case TORACLE:
228 createConsumingArc(one, fall);288 layoutType = SignalLayoutType.RIGHT_TO_LEFT_INVERTED;
229 createProducingArc(fall, zero);289 type = Type.INPUT;
230 setPosition(fall, x - 0.0, y + 1.0 + i);290 break;
231 fallList.add(fall);291 case TRDY:
232 }292 layoutType = SignalLayoutType.RIGHT_TO_LEFT_INVERTED;
233 293 type = Type.INTERNAL;
234 ArrayList<VisualSignalTransition> riseList = new ArrayList<>(riseCount);294 break;
235 for (int i = 0; i < riseCount; i++) {295 default:
236 VisualSignalTransition rise = stg.createSignalTransition(signalName, type, SignalTransition.Direction.PLUS, null);296 layoutType = SignalLayoutType.LEFT_TO_RIGHT;
237 createConsumingArc(zero, rise);297 type = Type.INTERNAL;
238 createProducingArc(rise, one);298 break;
239 setPosition(rise, x - 0.0, y - 1.0 - i);299 }
240 riseList.add(rise);300 return generateSignalStg(layoutType, signalName, pos, type, fallCount, riseCount);
241 }301 }
242 302
243 return new SignalStg(zero, one, fallList, riseList);303 public ContactStg getContactStg(VisualXmasContact contact) {
244 }304 return ((contactMap == null) ? null : contactMap.get(contact));
245305 }
246 private SignalStg generateSignalStg(String signalName, double x, double y, boolean initToOne, SignalTransition.Type type) throws InvalidConnectionException {306
247 VisualPlace zero = stg.createPlace(signalName + name0, null);307 private void putContactStg(VisualXmasContact contact, ContactStg s) {
248 zero.setNamePositioning(Positioning.BOTTOM);308 if (contactMap == null) {
249 zero.setLabelPositioning(Positioning.TOP);309 contactMap = new HashMap<>();
250 setPosition(zero, x + 0.0, y + 2.0);310 }
251311 contactMap.put(contact, s);
252 VisualPlace one = stg.createPlace(signalName + name1, null);312 }
253 one.setNamePositioning(Positioning.TOP);313
254 one.setLabelPositioning(Positioning.BOTTOM);314 private SignalStg generateClockStg() throws InvalidConnectionException {
255 setPosition(one, x + 0.0, y - 2.0);315 String name = "clk";
256316 SignalStg clockStg = generateBasicSignalStg(name, 60.0, 25.0, Type.INPUT);
257 if (initToOne) {317 setSignalInitialState(clockStg, true);
258 one.getReferencedPlace().setTokens(1);318 return clockStg;
259 zero.getReferencedPlace().setTokens(0);319 }
260 } else {320
261 one.getReferencedPlace().setTokens(0);321 private void connectClockStg() throws InvalidConnectionException {
262 zero.getReferencedPlace().setTokens(1);322 for(VisualSourceComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualSourceComponent.class)) {
263 }323 SourceStg sourceStg = getSourceStg(component);
264324 if (sourceStg != null) {
265 VisualSignalTransition fall = stg.createSignalTransition(signalName, type, SignalTransition.Direction.MINUS, null);325 createReplicaReadArcsFromDoneToClock(sourceStg.o.dn);
266 createConsumingArc(one, fall);326 }
267 createProducingArc(fall, zero);327 }
268 setPosition(fall, x + 3.0, y + 0.0);328 for(VisualSinkComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualSinkComponent.class)) {
269 329 SinkStg sinkStg = getSinkStg(component);
270 VisualSignalTransition rise = stg.createSignalTransition(signalName, type, SignalTransition.Direction.PLUS, null);330 if (sinkStg != null) {
271 createConsumingArc(zero, rise);331 createReplicaReadArcsFromDoneToClock(sinkStg.i.dn);
272 createProducingArc(rise, one);332 }
273 setPosition(rise, x - 3.0, y - 0.0);333 }
274 334 for(VisualFunctionComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualFunctionComponent.class)) {
275 return new SignalStg(zero, one, fall, rise);335 FunctionStg funcStg = getFunctionStg(component);
276 }336 if (funcStg != null) {
277337 createReplicaReadArcsFromDoneToClock(funcStg.i.dn);
278 338 createReplicaReadArcsFromDoneToClock(funcStg.o.dn);
279 public SignalStg getContactStg(VisualXmasContact contact) {339 }
280 return contactMap.get(contact);340 }
281 }341 for(VisualForkComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualForkComponent.class)) {
282 342 ForkStg forkStg = getForkStg(component);
283 private Point2D getComponentPosition(VisualXmasComponent component) {343 if (forkStg != null) {
284 AffineTransform transform = TransformHelper.getTransformToRoot(component);344 createReplicaReadArcsFromDoneToClock(forkStg.i.dn);
285 double x = xScaling * (transform.getTranslateX() + component.getX());345 createReplicaReadArcsFromDoneToClock(forkStg.a.dn);
286 double y = yScaling * (transform.getTranslateY() + component.getY());346 createReplicaReadArcsFromDoneToClock(forkStg.b.dn);
287 return new Point2D.Double(x, y);347 }
288 }348 }
289349 for(VisualJoinComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualJoinComponent.class)) {
290 private void groupComponentStg(NodeStg nodeStg) {350 JoinStg joinStg = getJoinStg(component);
291 stg.select(nodeStg.getAllNodes());351 if (joinStg != null) {
292 stg.groupSelection();352 createReplicaReadArcsFromDoneToClock(joinStg.a.dn);
293 }353 createReplicaReadArcsFromDoneToClock(joinStg.b.dn);
294354 createReplicaReadArcsFromDoneToClock(joinStg.o.dn);
295 355 }
356 }
357 for(VisualSwitchComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualSwitchComponent.class)) {
358 SwitchStg switchStg = getSwitchStg(component);
359 if (switchStg != null) {
360 createReplicaReadArcsFromDoneToClock(switchStg.i.dn);
361 createReplicaReadArcsFromDoneToClock(switchStg.a.dn);
362 createReplicaReadArcsFromDoneToClock(switchStg.b.dn);
363 }
364 }
365 for(VisualMergeComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualMergeComponent.class)) {
366 MergeStg mergeStg = getMergeStg(component);
367 if (mergeStg != null) {
368 createReplicaReadArcsFromDoneToClock(mergeStg.a.dn);
369 createReplicaReadArcsFromDoneToClock(mergeStg.b.dn);
370 createReplicaReadArcsFromDoneToClock(mergeStg.o.dn);
371 }
372 }
373 for(VisualQueueComponent component : Hierarchy.getDescendantsOfType(getXmasModel().getRoot(), VisualQueueComponent.class)) {
374 QueueStg queueStg = getQueueStg(component);
375 if (queueStg != null) {
376 createReplicaReadArcsFromDoneToClock(queueStg.i.dn);
377 createReplicaReadArcsFromDoneToClock(queueStg.o.dn);
378 }
379 }
380 }
381
382 public SignalStg getClockStg() {
383 return clockStg;
384 }
385
386
296 private SourceStg generateSourceStg(VisualSourceComponent component) throws InvalidConnectionException {387 private SourceStg generateSourceStg(VisualSourceComponent component) throws InvalidConnectionException {
297 String name = xmas.getMathName(component);388 String name = getXmasModel().getMathName(component);
298 Point2D pos = getComponentPosition(component);389 Point2D pos = getComponentPosition(component);
299 SignalStg oracleStg = generateOutputContactStg(name + nameOracle, pos.getX() - 4.0, pos.getY(), false, Type.INPUT, 1, 1);390 SignalStg oracle = generateSignalStg(XmasStgType.IORACLE, name + _ORACLE, pos.getX() - 10.0, pos.getY());
300 SignalStg oStg = null;391 ContactStg o = null;
301 for (VisualXmasContact contact: component.getContacts()) {392 for (VisualXmasContact contact: component.getContacts()) {
302 if (contact.isOutput()) {393 if (contact.isOutput()) {
303 oStg = generateOutputContactStg(name + nameOirdy, pos.getX() + 4.0, pos.getY());394 SignalStg rdy = generateSignalStg(XmasStgType.IRDY, name + _O_IRDY, pos.getX() + 0.0, pos.getY());
304 contactMap.put(contact, oStg);395 SignalStg dn = generateSignalStg(XmasStgType.IDN, name + _O_IDN, pos.getX() + 0.0, pos.getY() - 8.0, 1, 2);
305 }396 o = new ContactStg(rdy, dn);
306 }397 putContactStg(contact, o);
307 if ((oStg != null) && (oracleStg != null)) {398 }
308 createReadArc(oracleStg.zero, oStg.fallList.get(0));399 }
309 createReadArc(oracleStg.one, oStg.riseList.get(0));400 if (o != null) {
310 }401 if (oracle != null) {
311 SourceStg sourceStg = new SourceStg(oStg, oracleStg);402 createReadArc(oracle.zero, o.rdy.fallList.get(0));
312 groupComponentStg(sourceStg);403 createReadArc(oracle.one, o.rdy.riseList.get(0));
313 return sourceStg;404 createReadArc(oracle.zero, o.dn.riseList.get(0));
405 createReadArc(oracle.one, o.dn.riseList.get(1));
406 }
407 createReadArc(o.rdy.zero, o.dn.riseList.get(0));
408 createReadArc(o.rdy.one, o.dn.riseList.get(1));
409 }
410 return new SourceStg(o, oracle);
314 }411 }
315412
316 private void connectSourceStg(VisualSourceComponent component) throws InvalidConnectionException {413 private void connectSourceStg(VisualSourceComponent component) throws InvalidConnectionException {
317 VisualXmasContact oContact = null;
318 for (VisualXmasContact contact: component.getContacts()) {
319 if (contact.isOutput()) {
320 oContact = XmasUtils.getConnectedContact(xmas, contact);
321 }
322 }
323 SourceStg sourceStg = getSourceStg(component);414 SourceStg sourceStg = getSourceStg(component);
324 if ((sourceStg != null) && (oContact != null)) {415 if (sourceStg != null) {
325 SignalStg oStg = getContactStg(oContact);416 VisualXmasContact oContact = null;
326 createReadArc(oStg.one, sourceStg.oracle.fallList.get(0));417 for (VisualXmasContact contact: component.getContacts()) {
418 if (contact.isOutput()) {
419 oContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
420 }
421 }
422 if (oContact != null) {
423 ContactStg o = getContactStg(oContact);
424 if (o != null) {
425 createReplicaReadArcFromSignalToOracle(o.rdy, sourceStg.oracle);
426 }
427 if (clockStg != null) {
428 createReplicaReadArcsFromClockToSequential(sourceStg.oracle);
429 createReplicaReadArcsFromClockToCombinational(sourceStg.o.rdy);
430 createReplicaReadArcsFromClockToDone(sourceStg.o.dn);
431 }
432 }
327 }433 }
328 }434 }
329435
330 public SourceStg getSourceStg(VisualSourceComponent component) {436 public SourceStg getSourceStg(VisualSourceComponent component) {
331 return sourceMap.get(component);437 return ((sourceMap == null) ? null : sourceMap.get(component));
438 }
439
440 public void putSourceStg(VisualSourceComponent component, SourceStg stg) {
441 if (sourceMap == null) {
442 sourceMap = new HashMap<>();
443 }
444 sourceMap.put(component, stg);
332 }445 }
333446
334447
335 private SinkStg generateSinkStg(VisualSinkComponent component) throws InvalidConnectionException {448 private SinkStg generateSinkStg(VisualSinkComponent component) throws InvalidConnectionException {
336 String name = xmas.getMathName(component);449 String name = getXmasModel().getMathName(component);
337 Point2D pos = getComponentPosition(component);450 Point2D pos = getComponentPosition(component);
338 SignalStg oracleStg = generateInputContactStg(name + nameOracle, pos.getX() + 4.0, pos.getY(), false, Type.INPUT, 1, 1);451 SignalStg oracle = generateSignalStg(XmasStgType.TORACLE, name + _ORACLE, pos.getX() + 10.0, pos.getY());
339 SignalStg iStg = null;452 ContactStg i = null;
340 for (VisualXmasContact contact: component.getContacts()) {453 for (VisualXmasContact contact: component.getContacts()) {
341 if (contact.isInput()) {454 if (contact.isInput()) {
342 iStg = generateInputContactStg(name + nameItrdy, pos.getX() - 4.0, pos.getY());455 SignalStg rdy = generateSignalStg(XmasStgType.TRDY, name + _I_TRDY, pos.getX() - 0.0, pos.getY());
343 contactMap.put(contact, iStg);456 SignalStg dn = generateSignalStg(XmasStgType.TDN, name + _I_TDN, pos.getX() - 0.0, pos.getY() + 8.0, 1, 2);
344 }457 i = new ContactStg(rdy, dn);
345 }458 putContactStg(contact, i);
346 if ((iStg != null) && (oracleStg != null)) {459 }
347 createReadArc(oracleStg.zero, iStg.fallList.get(0));460 }
348 createReadArc(oracleStg.one, iStg.riseList.get(0));461 if (i != null) {
349 }462 if (oracle != null) {
350 SinkStg sinkStg = new SinkStg(iStg, oracleStg);463 createReadArc(oracle.zero, i.rdy.fallList.get(0));
351 groupComponentStg(sinkStg);464 createReadArc(oracle.one, i.rdy.riseList.get(0));
352 return sinkStg;465 createReadArc(oracle.zero, i.dn.riseList.get(0));
466 createReadArc(oracle.one, i.dn.riseList.get(1));
467 }
468 createReadArc(i.rdy.zero, i.dn.riseList.get(0));
469 createReadArc(i.rdy.one, i.dn.riseList.get(1));
470 }
471 return new SinkStg(i, oracle);
353 }472 }
354473
355 private void connectSinkStg(VisualSinkComponent component) throws InvalidConnectionException {474 private void connectSinkStg(VisualSinkComponent component) throws InvalidConnectionException {
356 VisualXmasContact iContact = null;
357 for (VisualXmasContact contact: component.getContacts()) {
358 if (contact.isInput()) {
359 iContact = XmasUtils.getConnectedContact(xmas, contact);
360 }
361 }
362 SinkStg sinkStg = getSinkStg(component);475 SinkStg sinkStg = getSinkStg(component);
363 if (iContact != null) {476 if (sinkStg != null) {
364 SignalStg iStg = getContactStg(iContact);477 VisualXmasContact iContact = null;
365 if ((sinkStg != null) && (iStg !=null)) {478 for (VisualXmasContact contact: component.getContacts()) {
366 createReadArc(iStg.one, sinkStg.oracle.fallList.get(0));479 if (contact.isInput()) {
480 iContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
481 }
482 }
483 if (iContact != null) {
484 ContactStg i = getContactStg(iContact);
485 if (i != null) {
486 createReplicaReadArcFromSignalToOracle(i.rdy, sinkStg.oracle);
487 }
488 if (clockStg != null) {
489 createReplicaReadArcsFromClockToSequential(sinkStg.oracle);
490 createReplicaReadArcsFromClockToCombinational(sinkStg.i.rdy);
491 createReplicaReadArcsFromClockToDone(sinkStg.i.dn);
492 }
367 }493 }
368 }494 }
369 }495 }
370496
371 public SinkStg getSinkStg(VisualSinkComponent component) {497 public SinkStg getSinkStg(VisualSinkComponent component) {
372 return sinkMap.get(component);498 return ((sinkMap == null) ? null : sinkMap.get(component));
499 }
500
501 public void putSinkStg(VisualSinkComponent component, SinkStg stg) {
502 if (sinkMap == null) {
503 sinkMap = new HashMap<>();
504 }
505 sinkMap.put(component, stg);
373 }506 }
374507
375 508
376 private FunctionStg generateFunctionStg(VisualFunctionComponent component) throws InvalidConnectionException {509 private FunctionStg generateFunctionStg(VisualFunctionComponent component) throws InvalidConnectionException {
377 String name = xmas.getMathName(component);510 String name = getXmasModel().getMathName(component);
378 Point2D pos = getComponentPosition(component);511 Point2D pos = getComponentPosition(component);
379 SignalStg iStg = null;512 ContactStg i = null;
380 SignalStg oStg = null;513 ContactStg o = null;
381 for (VisualXmasContact contact: component.getContacts()) {514 for (VisualXmasContact contact: component.getContacts()) {
382 if (contact.isInput()) {515 if (contact.isInput()) {
383 iStg = generateInputContactStg(name + nameItrdy, pos.getX(), pos.getY() + 3.0);516 SignalStg rdy = generateSignalStg(XmasStgType.TRDY, name + _I_TRDY, pos.getX(), pos.getY() + 4.0);
384 contactMap.put(contact, iStg);517 SignalStg dn = generateSignalStg(XmasStgType.TDN, name + _I_TDN, pos.getX(), pos.getY() + 12.0, 1, 2);
518 i = new ContactStg(rdy, dn);
519 putContactStg(contact, i);
385 } else {520 } else {
386 oStg = generateOutputContactStg(name + nameOirdy, pos.getX(), pos.getY() - 3.0);521 SignalStg rdy = generateSignalStg(XmasStgType.IRDY, name + _O_IRDY, pos.getX(), pos.getY() - 4.0);
387 contactMap.put(contact, oStg);522 SignalStg dn = generateSignalStg(XmasStgType.IDN, name + _O_IDN, pos.getX(), pos.getY() - 12.0, 1, 2);
523 o = new ContactStg(rdy, dn);
524 putContactStg(contact, o);
388 }525 }
389 }526 }
390 FunctionStg functionStg = new FunctionStg(iStg, oStg);527 if (i != null) {
391 groupComponentStg(functionStg);528 createReadArc(i.rdy.zero, i.dn.riseList.get(0));
392 return functionStg;529 createReadArc(i.rdy.one, i.dn.riseList.get(1));
530 }
531 if (o != null) {
532 createReadArc(o.rdy.zero, o.dn.riseList.get(0));
533 createReadArc(o.rdy.one, o.dn.riseList.get(1));
534 }
535 return new FunctionStg(i, o);
393 }536 }
394537
395 private void connectFunctionStg(VisualFunctionComponent component) throws InvalidConnectionException {538 private void connectFunctionStg(VisualFunctionComponent component) throws InvalidConnectionException {
396 VisualXmasContact iContact = null;
397 VisualXmasContact oContact = null;
398 for (VisualXmasContact contact: component.getContacts()) {
399 if (contact.isInput()) {
400 iContact = XmasUtils.getConnectedContact(xmas, contact);
401 } else {
402 oContact = XmasUtils.getConnectedContact(xmas, contact);
403 }
404 }
405 FunctionStg functionStg = getFunctionStg(component);539 FunctionStg functionStg = getFunctionStg(component);
406 if (iContact != null) {540 if (functionStg != null) {
407 SignalStg iStg = getContactStg(iContact);541 VisualXmasContact iContact = null;
408 if ((functionStg != null) && (iStg != null)) {542 VisualXmasContact oContact = null;
409 createReadArc(iStg.zero, functionStg.o.fallList.get(0));543 for (VisualXmasContact contact: component.getContacts()) {
410 createReadArc(iStg.one, functionStg.o.riseList.get(0));544 if (contact.isInput()) {
411 }545 iContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
412 }546 } else {
413 if (oContact != null) {547 oContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
414 SignalStg oStg = getContactStg(oContact);548 }
415 if ((functionStg != null) && (oStg != null)) {549 }
416 createReadArc(oStg.zero, functionStg.i.fallList.get(0));550 if (iContact != null) {
417 createReadArc(oStg.one, functionStg.i.riseList.get(0));551 ContactStg i = getContactStg(iContact);
418 }552 if (i != null) {
419 }553 createReplicaReadArcBetweenSignals(i.rdy, functionStg.o.rdy);
554 createReplicaReadArcBetweenDoneSignals(i.dn, functionStg.o.dn, 0.0);
555 createReplicaReadArc(i.rdy.zero, functionStg.o.dn.riseList.get(0));
556 createReplicaReadArc(i.rdy.one, functionStg.o.dn.riseList.get(1));
557 }
558 }
559 if (oContact != null) {
560 ContactStg o = getContactStg(oContact);
561 if (o != null) {
562 createReplicaReadArcBetweenSignals(o.rdy, functionStg.i.rdy);
563 createReplicaReadArcBetweenDoneSignals(o.dn, functionStg.i.dn, 0.0);
564 createReplicaReadArc(o.rdy.zero, functionStg.i.dn.riseList.get(0));
565 createReplicaReadArc(o.rdy.one, functionStg.i.dn.riseList.get(1));
566 }
567 }
568 if (clockStg != null) {
569 createReplicaReadArcsFromClockToDone(functionStg.i.dn);
570 createReplicaReadArcsFromClockToCombinational(functionStg.i.rdy);
571 createReplicaReadArcsFromClockToDone(functionStg.o.dn);
572 createReplicaReadArcsFromClockToCombinational(functionStg.o.rdy);
573 }
574 }
575
420 }576 }
421577
422 public FunctionStg getFunctionStg(VisualFunctionComponent component) {578 public FunctionStg getFunctionStg(VisualFunctionComponent component) {
423 return functionMap.get(component);579 return ((functionMap == null) ? null : functionMap.get(component));
580 }
581
582 public void putFunctionStg(VisualFunctionComponent component, FunctionStg stg) {
583 if (functionMap == null) {
584 functionMap = new HashMap<>();
585 }
586 functionMap.put(component, stg);
424 }587 }
425588
426 589
427 private ForkStg generateForkStg(VisualForkComponent component) throws InvalidConnectionException {590 private ForkStg generateForkStg(VisualForkComponent component) throws InvalidConnectionException {
428 String name = xmas.getMathName(component);591 String name = getXmasModel().getMathName(component);
429 Point2D pos = getComponentPosition(component);592 Point2D pos = getComponentPosition(component);
430 SignalStg iStg = null;593 ContactStg i = null;
431 SignalStg aStg = null;594 ContactStg a = null;
432 SignalStg bStg = null;595 ContactStg b = null;
433 for (VisualXmasContact contact: component.getContacts()) {596 for (VisualXmasContact contact: component.getContacts()) {
434 if (contact.isInput()) {597 if (contact.isInput()) {
435 iStg = generateInputContactStg(name + nameItrdy, pos.getX(), pos.getY(), false, Type.INTERNAL, 2, 1);598 SignalStg rdy = generateSignalStg(XmasStgType.TRDY, name + _I_TRDY, pos.getX(), pos.getY() - 4.0, 2, 1);
436 contactMap.put(contact, iStg);599 SignalStg dn = generateSignalStg(XmasStgType.TDN, name + _I_TDN, pos.getX(), pos.getY() + 4.0, 1, 3);
437 } else if (aStg == null) {600 i = new ContactStg(rdy, dn);
438 aStg = generateOutputContactStg(name + nameAirdy, pos.getX(), pos.getY() - 5.0, false, Type.INTERNAL, 2, 1);601 putContactStg(contact, i);
439 contactMap.put(contact, aStg);602 } else if (a == null) {
603 SignalStg rdy = generateSignalStg(XmasStgType.IRDY, name + _A_IRDY, pos.getX(), pos.getY() - 12.0, 2, 1);
604 SignalStg dn = generateSignalStg(XmasStgType.IDN, name + _A_IDN, pos.getX(), pos.getY() - 20.0, 1, 3);
605 a = new ContactStg(rdy, dn);
606 putContactStg(contact, a);
440 } else {607 } else {
441 bStg = generateOutputContactStg(name + nameBirdy, pos.getX(), pos.getY() + 5.0, false, Type.INTERNAL, 2, 1);608 SignalStg rdy = generateSignalStg(XmasStgType.IRDY, name + _B_IRDY, pos.getX(), pos.getY() + 20.0, 2, 1);
442 contactMap.put(contact, bStg);609 SignalStg dn = generateSignalStg(XmasStgType.IDN, name + _B_IDN, pos.getX(), pos.getY() + 12.0, 1, 3);
610 b = new ContactStg(rdy, dn);
611 putContactStg(contact, b);
443 }612 }
444 }613 }
445 ForkStg forkStg = new ForkStg(iStg, aStg, bStg);614 if (i != null) {
446 groupComponentStg(forkStg);615 createReadArc(i.rdy.zero, i.dn.riseList.get(0));
447 return forkStg;616 createReadArc(i.rdy.zero, i.dn.riseList.get(1));
617 createReadArc(i.rdy.one, i.dn.riseList.get(2));
618 }
619 if (a != null) {
620 createReadArc(a.rdy.zero, a.dn.riseList.get(0));
621 createReadArc(a.rdy.zero, a.dn.riseList.get(1));
622 createReadArc(a.rdy.one, a.dn.riseList.get(2));
623 }
624 if (b != null) {
625 createReadArc(b.rdy.zero, b.dn.riseList.get(0));
626 createReadArc(b.rdy.zero, b.dn.riseList.get(1));
627 createReadArc(b.rdy.one, b.dn.riseList.get(2));
628 }
629 return new ForkStg(i, a, b);
448 }630 }
449631
450 private void connectForkStg(VisualForkComponent component) throws InvalidConnectionException {632 private void connectForkStg(VisualForkComponent component) throws InvalidConnectionException {
451 VisualXmasContact iContact = null;
452 VisualXmasContact aContact = null;
453 VisualXmasContact bContact = null;
454 for (VisualXmasContact contact: component.getContacts()) {
455 if (contact.isInput()) {
456 iContact = XmasUtils.getConnectedContact(xmas, contact);
457 } else if (aContact == null) {
458 aContact = XmasUtils.getConnectedContact(xmas, contact);
459 } else {
460 bContact = XmasUtils.getConnectedContact(xmas, contact);
461 }
462 }
463 ForkStg forkStg = getForkStg(component);633 ForkStg forkStg = getForkStg(component);
464 if (iContact != null) {634 if (forkStg != null) {
465 SignalStg iStg = getContactStg(iContact);635 VisualXmasContact iContact = null;
466 if ((forkStg != null) && (iStg != null)) {636 VisualXmasContact aContact = null;
467 createReadArc(iStg.zero, forkStg.a.fallList.get(0));637 VisualXmasContact bContact = null;
468 createReadArc(iStg.zero, forkStg.b.fallList.get(0));638 for (VisualXmasContact contact: component.getContacts()) {
469 createReadArc(iStg.one, forkStg.a.riseList.get(0));639 if (contact.isInput()) {
470 createReadArc(iStg.one, forkStg.b.riseList.get(0));640 iContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
471 }641 } else if (aContact == null) {
472 }642 aContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
473 if (aContact != null) {643 } else {
474 SignalStg aStg = getContactStg(aContact);644 bContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
475 if ((forkStg != null) && (aStg != null)) {645 }
476 createReadArc(aStg.zero, forkStg.i.fallList.get(0));646 }
477 createReadArc(aStg.zero, forkStg.b.fallList.get(1));647 if (iContact != null) {
478 createReadArc(aStg.one, forkStg.i.riseList.get(0));648 ContactStg i = getContactStg(iContact);
479 createReadArc(aStg.one, forkStg.b.riseList.get(0));649 if (i != null) {
480 }650 createReplicaReadArc(i.rdy.zero, forkStg.a.rdy.fallList.get(1), -6.0, 0.0);
481 }651 createReplicaReadArc(i.rdy.zero, forkStg.b.rdy.fallList.get(1), -6.0, 0.0);
482 if (bContact != null) {652 createReplicaReadArc(i.rdy.one, forkStg.a.rdy.riseList.get(0), -6.0, 0.0);
483 SignalStg bStg = getContactStg(bContact);653 createReplicaReadArc(i.rdy.one, forkStg.b.rdy.riseList.get(0), -6.0, 0.0);
484 if ((forkStg != null) && (bStg != null)) {654 createReplicaReadArcBetweenDoneSignals(i.dn, forkStg.a.dn, 0.0);
485 createReadArc(bStg.zero, forkStg.i.fallList.get(1));655 createReplicaReadArcBetweenDoneSignals(i.dn, forkStg.b.dn, 0.0);
486 createReadArc(bStg.zero, forkStg.a.fallList.get(1));656 createReplicaReadArc(i.rdy.zero, forkStg.a.dn.riseList.get(1), -6.0, 0.0);
487 createReadArc(bStg.one, forkStg.i.riseList.get(0));657 createReplicaReadArc(i.rdy.one, forkStg.a.dn.riseList.get(2), -6.0, -1.0);
488 createReadArc(bStg.one, forkStg.a.riseList.get(0));658 createReplicaReadArc(i.rdy.zero, forkStg.b.dn.riseList.get(1), -6.0, 0.0);
659 createReplicaReadArc(i.rdy.one, forkStg.b.dn.riseList.get(2), -6.0, -1.0);
660 }
661 }
662 if (aContact != null) {
663 ContactStg a = getContactStg(aContact);
664 if (a != null) {
665 createReplicaReadArc(a.rdy.zero, forkStg.i.rdy.fallList.get(0), +6.0, 0.0);
666 createReplicaReadArc(a.rdy.zero, forkStg.b.rdy.fallList.get(0), -6.0, 0.0);
667 createReplicaReadArc(a.rdy.one, forkStg.i.rdy.riseList.get(0), +6.0, -1.0);
668 createReplicaReadArc(a.rdy.one, forkStg.b.rdy.riseList.get(0), -6.0, +1.0);
669 createReplicaReadArcBetweenDoneSignals(a.dn, forkStg.i.dn, -1.0);
670 createReplicaReadArc(a.rdy.zero, forkStg.b.dn.riseList.get(0), -6.0, 0.0);
671 createReplicaReadArc(a.rdy.one, forkStg.b.dn.riseList.get(2), -6.0, 0.0);
672 createReplicaReadArc(a.rdy.zero, forkStg.i.dn.riseList.get(0), +6.0, 0.0);
673 createReplicaReadArc(a.rdy.one, forkStg.i.dn.riseList.get(2), +6.0, 0.0);
674 }
675 }
676 if (bContact != null) {
677 ContactStg b = getContactStg(bContact);
678 if (b != null) {
679 createReplicaReadArc(b.rdy.zero, forkStg.i.rdy.fallList.get(1), +6.0, 0.0);
680 createReplicaReadArc(b.rdy.zero, forkStg.a.rdy.fallList.get(0), -6.0, 0.0);
681 createReplicaReadArc(b.rdy.one, forkStg.i.rdy.riseList.get(0), +6.0, 0.0);
682 createReplicaReadArc(b.rdy.one, forkStg.a.rdy.riseList.get(0), -6.0, +1.0);
683 createReplicaReadArcBetweenDoneSignals(b.dn, forkStg.i.dn, 0.0);
684 createReplicaReadArc(b.rdy.zero, forkStg.a.dn.riseList.get(0), -6.0, 0.0);
685 createReplicaReadArc(b.rdy.one, forkStg.a.dn.riseList.get(2), -6.0, 0.0);
686 createReplicaReadArc(b.rdy.zero, forkStg.i.dn.riseList.get(1), +6.0, 0.0);
687 createReplicaReadArc(b.rdy.one, forkStg.i.dn.riseList.get(2), +6.0, +1.0);
688 }
689 }
690 if (clockStg != null) {
691 createReplicaReadArcsFromClockToDone(forkStg.i.dn);
692 createReplicaReadArcsFromClockToCombinational(forkStg.i.rdy);
693 createReplicaReadArcsFromClockToDone(forkStg.a.dn);
694 createReplicaReadArcsFromClockToCombinational(forkStg.a.rdy);
695 createReplicaReadArcsFromClockToDone(forkStg.b.dn);
696 createReplicaReadArcsFromClockToCombinational(forkStg.b.rdy);
489 }697 }
490 }698 }
491 }699 }
492700
493 public ForkStg getForkStg(VisualForkComponent component) {701 public ForkStg getForkStg(VisualForkComponent component) {
494 return forkMap.get(component);702 return ((forkMap == null) ? null : forkMap.get(component));
703 }
704
705 public void putForkStg(VisualForkComponent component, ForkStg stg) {
706 if (forkMap == null) {
707 forkMap = new HashMap<>();
708 }
709 forkMap.put(component, stg);
495 }710 }
496711
497 712
498 private JoinStg generateJoinStg(VisualJoinComponent component) throws InvalidConnectionException {713 private JoinStg generateJoinStg(VisualJoinComponent component) throws InvalidConnectionException {
499 String name = xmas.getMathName(component);714 String name = getXmasModel().getMathName(component);
500 Point2D pos = getComponentPosition(component);715 Point2D pos = getComponentPosition(component);
501 SignalStg aStg = null;716 ContactStg a = null;
502 SignalStg bStg = null;717 ContactStg b = null;
503 SignalStg oStg = null;718 ContactStg o = null;
504 for (VisualXmasContact contact: component.getContacts()) {719 for (VisualXmasContact contact: component.getContacts()) {
505 if (contact.isOutput()) {720 if (contact.isOutput()) {
506 oStg = generateOutputContactStg(name + nameOirdy, pos.getX(), pos.getY(), false, Type.INTERNAL, 2, 1);721 SignalStg rdy = generateSignalStg(XmasStgType.IRDY, name + _O_IRDY, pos.getX(), pos.getY() + 4.0, 2, 1);
507 contactMap.put(contact, oStg);722 SignalStg dn = generateSignalStg(XmasStgType.IDN, name + _O_IDN, pos.getX(), pos.getY() - 4.0, 1, 3);
508 } else if (aStg == null) {723 o = new ContactStg(rdy, dn);
509 aStg = generateInputContactStg(name + nameAtrdy, pos.getX(), pos.getY() - 5.0, false, Type.INTERNAL, 2, 1);724 putContactStg(contact, o);
510 contactMap.put(contact, aStg);725 } else if (a == null) {
726 SignalStg rdy = generateSignalStg(XmasStgType.TRDY, name + _A_TRDY, pos.getX(), pos.getY() - 20.0, 2, 1);
727 SignalStg dn = generateSignalStg(XmasStgType.TDN, name + _A_TDN, pos.getX(), pos.getY() - 12.0, 1, 3);
728 a = new ContactStg(rdy, dn);
729 putContactStg(contact, a);
511 } else {730 } else {
512 bStg = generateInputContactStg(name + nameBtrdy, pos.getX(), pos.getY() + 5.0, false, Type.INTERNAL, 2, 1);731 SignalStg rdy = generateSignalStg(XmasStgType.TRDY, name + _B_TRDY, pos.getX(), pos.getY() + 12.0, 2, 1);
513 contactMap.put(contact, bStg);732 SignalStg dn = generateSignalStg(XmasStgType.TDN, name + _B_TDN, pos.getX(), pos.getY() + 20.0, 1, 3);
733 b = new ContactStg(rdy, dn);
734 putContactStg(contact, b);
514 }735 }
515 }736 }
516 JoinStg joinStg = new JoinStg(aStg, bStg, oStg);737 if (a != null) {
517 groupComponentStg(joinStg);738 createReadArc(a.rdy.zero, a.dn.riseList.get(0));
518 return joinStg;739 createReadArc(a.rdy.zero, a.dn.riseList.get(1));
740 createReadArc(a.rdy.one, a.dn.riseList.get(2));
741 }
742 if (b != null) {
743 createReadArc(b.rdy.zero, b.dn.riseList.get(0));
744 createReadArc(b.rdy.zero, b.dn.riseList.get(1));
745 createReadArc(b.rdy.one, b.dn.riseList.get(2));
746 }
747 if (o != null) {
748 createReadArc(o.rdy.zero, o.dn.riseList.get(0));
749 createReadArc(o.rdy.zero, o.dn.riseList.get(1));
750 createReadArc(o.rdy.one, o.dn.riseList.get(2));
751 }
752 return new JoinStg(a, b, o);
519 }753 }
520754
521 private void connectJoinStg(VisualJoinComponent component) throws InvalidConnectionException {755 private void connectJoinStg(VisualJoinComponent component) throws InvalidConnectionException {
522 VisualXmasContact aContact = null;
523 VisualXmasContact bContact = null;
524 VisualXmasContact oContact = null;
525 for (VisualXmasContact contact: component.getContacts()) {
526 if (contact.isOutput()) {
527 oContact = XmasUtils.getConnectedContact(xmas, contact);
528 } else if (aContact == null) {
529 aContact = XmasUtils.getConnectedContact(xmas, contact);
530 } else {
531 bContact = XmasUtils.getConnectedContact(xmas, contact);
532 }
533 }
534 JoinStg joinStg = getJoinStg(component);756 JoinStg joinStg = getJoinStg(component);
535 if (aContact != null) {757 if (joinStg != null) {
536 SignalStg aStg = getContactStg(aContact);758 VisualXmasContact aContact = null;
537 if ((joinStg != null) && (aStg != null)) {759 VisualXmasContact bContact = null;
538 createReadArc(aStg.zero, joinStg.b.fallList.get(1));760 VisualXmasContact oContact = null;
539 createReadArc(aStg.zero, joinStg.o.fallList.get(0));761 for (VisualXmasContact contact: component.getContacts()) {
540 createReadArc(aStg.one, joinStg.b.riseList.get(0));762 if (contact.isOutput()) {
541 createReadArc(aStg.one, joinStg.o.riseList.get(0));763 oContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
542 }764 } else if (aContact == null) {
543 }765 aContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
544 if (bContact != null) {766 } else {
545 SignalStg bStg = getContactStg(bContact);767 bContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
546 if ((joinStg != null) && (bStg != null)) {768 }
547 createReadArc(bStg.zero, joinStg.a.fallList.get(1));769 }
548 createReadArc(bStg.zero, joinStg.o.fallList.get(1));770 if (aContact != null) {
549 createReadArc(bStg.one, joinStg.a.riseList.get(0));771 ContactStg a = getContactStg(aContact);
550 createReadArc(bStg.one, joinStg.o.riseList.get(0));772 if (a != null) {
551 }773 createReplicaReadArc(a.rdy.zero, joinStg.b.rdy.fallList.get(0), +6.0, 0.0);
552 }774 createReplicaReadArc(a.rdy.zero, joinStg.o.rdy.fallList.get(1), -6.0, 0.0);
553 if (oContact != null) {775 createReplicaReadArc(a.rdy.one, joinStg.b.rdy.riseList.get(0), +6.0, -1.0);
554 SignalStg oStg = getContactStg(oContact);776 createReplicaReadArc(a.rdy.one, joinStg.o.rdy.riseList.get(0), -6.0, 0.0);
555 if ((joinStg != null) && (oStg != null)) {777 createReplicaReadArcBetweenDoneSignals(a.dn, joinStg.o.dn, 0.0);
556 createReadArc(oStg.zero, joinStg.a.fallList.get(0));778 createReplicaReadArc(a.rdy.zero, joinStg.o.dn.riseList.get(1), -6.0, 0.0);
557 createReadArc(oStg.zero, joinStg.b.fallList.get(0));779 createReplicaReadArc(a.rdy.one, joinStg.o.dn.riseList.get(2), -6.0, -1.0);
558 createReadArc(oStg.one, joinStg.a.riseList.get(0));780 createReplicaReadArc(a.rdy.zero, joinStg.b.dn.riseList.get(0), +6.0, 0.0);
559 createReadArc(oStg.one, joinStg.b.riseList.get(0));781 createReplicaReadArc(a.rdy.one, joinStg.b.dn.riseList.get(2), +6.0, 0.0);
782 }
783 }
784 if (bContact != null) {
785 ContactStg b = getContactStg(bContact);
786 if (b != null) {
787 createReplicaReadArc(b.rdy.zero, joinStg.a.rdy.fallList.get(1), +6.0, 0.0);
788 createReplicaReadArc(b.rdy.zero, joinStg.o.rdy.fallList.get(0), -6.0, 0.0);
789 createReplicaReadArc(b.rdy.one, joinStg.a.rdy.riseList.get(0), +6.0, 0.0);
790 createReplicaReadArc(b.rdy.one, joinStg.o.rdy.riseList.get(0), -6.0, +1.0);
791 createReplicaReadArcBetweenDoneSignals(b.dn, joinStg.o.dn, +1.0);
792 createReplicaReadArc(b.rdy.zero, joinStg.o.dn.riseList.get(0), -6.0, 0.0);
793 createReplicaReadArc(b.rdy.one, joinStg.o.dn.riseList.get(2), -6.0, 0.0);
794 createReplicaReadArc(b.rdy.zero, joinStg.a.dn.riseList.get(1), +6.0, 0.0);
795 createReplicaReadArc(b.rdy.one, joinStg.a.dn.riseList.get(2), +6.0, +1.0);
796 }
797 }
798 if (oContact != null) {
799 ContactStg o = getContactStg(oContact);
800 if (o != null) {
801 createReplicaReadArc(o.rdy.zero, joinStg.a.rdy.fallList.get(0), +6.0, 0.0);
802 createReplicaReadArc(o.rdy.zero, joinStg.b.rdy.fallList.get(1), +6.0, 0.0);
803 createReplicaReadArc(o.rdy.one, joinStg.a.rdy.riseList.get(0), +6.0, -1.0);
804 createReplicaReadArc(o.rdy.one, joinStg.b.rdy.riseList.get(0), +6.0, 0.0);
805 createReplicaReadArcBetweenDoneSignals(o.dn, joinStg.a.dn, 0.0);
806 createReplicaReadArcBetweenDoneSignals(o.dn, joinStg.b.dn, 0.0);
807 createReplicaReadArc(o.rdy.zero, joinStg.a.dn.riseList.get(0), +6.0, 0.0);
808 createReplicaReadArc(o.rdy.one, joinStg.a.dn.riseList.get(2), +6.0, 0.0);
809 createReplicaReadArc(o.rdy.zero, joinStg.b.dn.riseList.get(1), +6.0, 0.0);
810 createReplicaReadArc(o.rdy.one, joinStg.b.dn.riseList.get(2), +6.0, +1.0);
811 }
560 }812 }
561 }813 }
562 }814 }
563815
564 public JoinStg getJoinStg(VisualJoinComponent component) {816 public JoinStg getJoinStg(VisualJoinComponent component) {
565 return joinMap.get(component);817 return ((joinMap == null) ? null : joinMap.get(component));
818 }
819
820 public void putJoinStg(VisualJoinComponent component, JoinStg stg) {
821 if (joinMap == null) {
822 joinMap = new HashMap<>();
823 }
824 joinMap.put(component, stg);
825 }
826
827
828 private SwitchStg generateSwitchStg(VisualSwitchComponent component) throws InvalidConnectionException {
829 String name = getXmasModel().getMathName(component);
830 Point2D pos = getComponentPosition(component);
831 ContactStg i = null;
832 ContactStg a = null;
833 ContactStg b = null;
834 SignalStg oracle = generateSignalStg(XmasStgType.IORACLE, name + _ORACLE, pos.getX() + 12.0, pos.getY());
835 for (VisualXmasContact contact: component.getContacts()) {
836 if (contact.isInput()) {
837 SignalStg rdy = generateSignalStg(XmasStgType.TRDY, name + _I_TRDY, pos.getX(), pos.getY() - 4.0, 1, 2);
838 SignalStg dn = generateSignalStg(XmasStgType.TDN, name + _I_TDN, pos.getX(), pos.getY() + 4.0, 1, 3);
839 i = new ContactStg(rdy, dn);
840 putContactStg(contact, i);
841 } else if (a == null) {
842 SignalStg rdy = generateSignalStg(XmasStgType.IRDY, name + _A_IRDY, pos.getX(), pos.getY() - 12.0, 2, 1);
843 SignalStg dn = generateSignalStg(XmasStgType.IDN, name + _A_IDN, pos.getX(), pos.getY() - 20.0, 1, 3);
844 a = new ContactStg(rdy, dn);
845 putContactStg(contact, a);
846 } else {
847 SignalStg rdy = generateSignalStg(XmasStgType.IRDY, name + _B_IRDY, pos.getX(), pos.getY() + 20.0, 2, 1);
848 SignalStg dn = generateSignalStg(XmasStgType.IDN, name + _B_IDN, pos.getX(), pos.getY() + 12.0, 1, 3);
849 b = new ContactStg(rdy, dn);
850 putContactStg(contact, b);
851 }
852 }
853 if (i != null) {
854 createReadArc(i.rdy.zero, i.dn.riseList.get(0));
855 createReadArc(i.rdy.one, i.dn.riseList.get(1));
856 createReadArc(i.rdy.one, i.dn.riseList.get(2));
857 }
858 if (a != null) {
859 createReadArc(a.rdy.zero, a.dn.riseList.get(0));
860 createReadArc(a.rdy.zero, a.dn.riseList.get(1));
861 createReadArc(a.rdy.one, a.dn.riseList.get(2));
862 }
863 if (b != null) {
864 createReadArc(b.rdy.zero, b.dn.riseList.get(0));
865 createReadArc(b.rdy.zero, b.dn.riseList.get(1));
866 createReadArc(b.rdy.one, b.dn.riseList.get(2));
867 }
868 if ((oracle != null) && (a != null) && (b != null)) {
869 createReadArcs(a.rdy.zero, oracle.getAllTransitions());
870 createReadArcs(b.rdy.zero, oracle.getAllTransitions());
871 createReplicaReadArc(oracle.zero, a.rdy.fallList.get(1), -6.0, 0.0);
872 createReplicaReadArc(oracle.zero, a.dn.riseList.get(1), -6.0, 0.0);
873 createReplicaReadArc(oracle.zero, b.rdy.riseList.get(0), -6.0, +1.0);
874 createReplicaReadArc(oracle.zero, b.dn.riseList.get(2), -6.0, -1.0);
875 createReplicaReadArc(oracle.one, a.rdy.riseList.get(0), -6.0, +1.0);
876 createReplicaReadArc(oracle.one, a.dn.riseList.get(2), -6.0, -1.0);
877 createReplicaReadArc(oracle.one, b.rdy.fallList.get(1), -6.0, 0.0);
878 createReplicaReadArc(oracle.one, b.dn.riseList.get(1), -6.0, 0.0);
879 }
880 return new SwitchStg(i, a, b, oracle);
881 }
882
883 private void connectSwitchStg(VisualSwitchComponent component) throws InvalidConnectionException {
884 SwitchStg switchStg = getSwitchStg(component);
885 if (switchStg != null) {
886 VisualXmasContact iContact = null;
887 VisualXmasContact aContact = null;
888 VisualXmasContact bContact = null;
889 for (VisualXmasContact contact: component.getContacts()) {
890 if (contact.isInput()) {
891 iContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
892 } else if (aContact == null) {
893 aContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
894 } else {
895 bContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
896 }
897 }
898 if (iContact != null) {
899 ContactStg i = getContactStg(iContact);
900 if (i != null) {
901 createReplicaReadArc(i.rdy.zero, switchStg.a.rdy.fallList.get(0), -6.0, 0.0);
902 createReplicaReadArc(i.rdy.one, switchStg.a.rdy.riseList.get(0), -6.0, 0.0);
903 createReplicaReadArc(i.rdy.zero, switchStg.b.rdy.fallList.get(0), -6.0, 0.0);
904 createReplicaReadArc(i.rdy.one, switchStg.b.rdy.riseList.get(0), -6.0, 0.0);
905 createReplicaReadArcBetweenDoneSignals(i.dn, switchStg.a.dn, 0.0);
906 createReplicaReadArcBetweenDoneSignals(i.dn, switchStg.b.dn, 0.0);
907 createReplicaReadArc(i.rdy.zero, switchStg.a.dn.riseList.get(0), -6.0, 0.0);
908 createReplicaReadArc(i.rdy.one, switchStg.a.dn.riseList.get(2), -6.0, 0.0);
909 createReplicaReadArc(i.rdy.zero, switchStg.b.dn.riseList.get(0), -6.0, 0.0);
910 createReplicaReadArc(i.rdy.one, switchStg.b.dn.riseList.get(2), -6.0, 0.0);
911 }
912 }
913 if (aContact != null) {
914 ContactStg a = getContactStg(aContact);
915 if (a != null) {
916 createReplicaReadArc(a.rdy.zero, switchStg.i.rdy.fallList.get(0), +6.0, 0.0);
917 createReplicaReadArc(a.rdy.one, switchStg.i.rdy.riseList.get(1), +6.0, 0.0);
918 createReplicaReadArcBetweenDoneSignals(a.dn, switchStg.i.dn, -1.0);
919 createReplicaReadArc(a.rdy.zero, switchStg.i.dn.riseList.get(0), +6.0, 0.0);
920 createReplicaReadArc(a.rdy.one, switchStg.i.dn.riseList.get(1), +6.0, +1.0);
921 }
922 }
923 if (bContact != null) {
924 ContactStg b = getContactStg(bContact);
925 if (b != null) {
926 createReplicaReadArc(b.rdy.zero, switchStg.i.rdy.fallList.get(0), +6.0, +1.0);
927 createReplicaReadArc(b.rdy.one, switchStg.i.rdy.riseList.get(0), +6.0, 0.0);
928 createReplicaReadArcBetweenDoneSignals(b.dn, switchStg.i.dn, 0.0);
929 createReplicaReadArc(b.rdy.zero, switchStg.i.dn.riseList.get(0), +6.0, +1.0);
930 createReplicaReadArc(b.rdy.one, switchStg.i.dn.riseList.get(2), +6.0, +1.0);
931 }
932 }
933 if (clockStg != null) {
934 createReplicaReadArcsFromClockToDone(switchStg.i.dn);
935 createReplicaReadArcsFromClockToCombinational(switchStg.i.rdy);
936 createReplicaReadArcsFromClockToDone(switchStg.a.dn);
937 createReplicaReadArcsFromClockToCombinational(switchStg.a.rdy);
938 createReplicaReadArcsFromClockToDone(switchStg.b.dn);
939 createReplicaReadArcsFromClockToCombinational(switchStg.b.rdy);
940 createReplicaReadArcsFromClockToSequential(switchStg.oracle);
941 }
942 }
943 }
944
945 public SwitchStg getSwitchStg(VisualSwitchComponent component) {
946 return ((switchMap == null) ? null : switchMap.get(component));
947 }
948
949 public void putSwitchStg(VisualSwitchComponent component, SwitchStg stg) {
950 if (switchMap == null) {
951 switchMap = new HashMap<>();
952 }
953 switchMap.put(component, stg);
954 }
955
956
957 private MergeStg generateMergeStg(VisualMergeComponent component) throws InvalidConnectionException {
958 String name = getXmasModel().getMathName(component);
959 Point2D pos = getComponentPosition(component);
960 ContactStg a = null;
961 ContactStg b = null;
962 ContactStg o = null;
963 for (VisualXmasContact contact: component.getContacts()) {
964 if (contact.isOutput()) {
965 SignalStg rdy = generateSignalStg(XmasStgType.IRDY, name + _O_IRDY, pos.getX(), pos.getY() + 4.0, 1, 2);
966 SignalStg dn = generateSignalStg(XmasStgType.IDN, name + _O_IDN, pos.getX(), pos.getY() - 4.0, 1, 3);
967 o = new ContactStg(rdy, dn);
968 putContactStg(contact, o);
969 } else if (a == null) {
970 SignalStg rdy = generateSignalStg(XmasStgType.TRDY, name + _A_TRDY, pos.getX(), pos.getY() - 20.0, 2, 1);
971 SignalStg dn = generateSignalStg(XmasStgType.TDN, name + _A_TDN, pos.getX(), pos.getY() - 12.0, 1, 3);
972 a = new ContactStg(rdy, dn);
973 putContactStg(contact, a);
974 } else {
975 SignalStg rdy = generateSignalStg(XmasStgType.TRDY, name + _B_TRDY, pos.getX(), pos.getY() + 12.0, 2, 1);
976 SignalStg dn = generateSignalStg(XmasStgType.TDN, name + _B_TDN, pos.getX(), pos.getY() + 20.0, 1, 3);
977 b = new ContactStg(rdy, dn);
978 putContactStg(contact, b);
979 }
980 }
981 if (a != null) {
982 createReadArc(a.rdy.zero, a.dn.riseList.get(0));
983 createReadArc(a.rdy.zero, a.dn.riseList.get(1));
984 createReadArc(a.rdy.one, a.dn.riseList.get(2));
985 }
986 if (b != null) {
987 createReadArc(b.rdy.zero, b.dn.riseList.get(0));
988 createReadArc(b.rdy.zero, b.dn.riseList.get(1));
989 createReadArc(b.rdy.one, b.dn.riseList.get(2));
990 }
991 if (o != null) {
992 createReadArc(o.rdy.zero, o.dn.riseList.get(0));
993 createReadArc(o.rdy.one, o.dn.riseList.get(1));
994 createReadArc(o.rdy.one, o.dn.riseList.get(2));
995 }
996 return new MergeStg(a, b, o);
997 }
998
999 private void connectMergeStg(VisualMergeComponent component) throws InvalidConnectionException {
1000 MergeStg mergeStg = getMergeStg(component);
1001 if (mergeStg != null) {
1002 VisualXmasContact aContact = null;
1003 VisualXmasContact bContact = null;
1004 VisualXmasContact oContact = null;
1005 for (VisualXmasContact contact: component.getContacts()) {
1006 if (contact.isOutput()) {
1007 oContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
1008 } else if (aContact == null) {
1009 aContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
1010 } else {
1011 bContact = XmasUtils.getConnectedContact(getXmasModel(), contact);
1012 }
1013 }
1014 if (aContact != null) {
1015 ContactStg a = getContactStg(aContact);
1016 if (a != null) {
1017 createReplicaReadArc(a.rdy.zero, mergeStg.a.rdy.fallList.get(1), +6.0, 0.0);
1018 createReplicaReadArc(a.rdy.zero, mergeStg.o.rdy.fallList.get(0), -6.0, -1.0);
1019 createReplicaReadArc(a.rdy.one, mergeStg.a.rdy.riseList.get(0), +6.0, 0.0);
1020 createReplicaReadArc(a.rdy.one, mergeStg.o.rdy.riseList.get(0), -6.0, 0.0);
1021 createReplicaReadArcBetweenDoneSignals(a.dn, mergeStg.a.dn, -1.0);
1022 createReplicaReadArcBetweenDoneSignals(a.dn, mergeStg.o.dn, 0.0);
1023 createReplicaReadArc(a.rdy.zero, mergeStg.a.dn.riseList.get(1), +6.0, 0.0);
1024 createReplicaReadArc(a.rdy.zero, mergeStg.o.dn.riseList.get(0), -6.0, -1.0);
1025 createReplicaReadArc(a.rdy.one, mergeStg.a.dn.riseList.get(2), +6.0, +1.0);
1026 createReplicaReadArc(a.rdy.one, mergeStg.o.dn.riseList.get(2), -6.0, -1.0);
1027 }
1028 }
1029 if (bContact != null) {
1030 ContactStg b = getContactStg(bContact);
1031 if (b != null) {
1032 createReplicaReadArc(b.rdy.zero, mergeStg.b.rdy.fallList.get(1), +6.0, 0.0);
1033 createReplicaReadArc(b.rdy.zero, mergeStg.o.rdy.fallList.get(0), -6.0, 0.0);
1034 createReplicaReadArc(b.rdy.one, mergeStg.b.rdy.riseList.get(0), +6.0, 0.0);
1035 createReplicaReadArc(b.rdy.one, mergeStg.o.rdy.riseList.get(1), -6.0, 0.0);
1036 createReplicaReadArcBetweenDoneSignals(b.dn, mergeStg.b.dn, -1.0);
1037 createReplicaReadArcBetweenDoneSignals(b.dn, mergeStg.o.dn, +1.0);
1038 createReplicaReadArc(b.rdy.zero, mergeStg.b.dn.riseList.get(1), +6.0, 0.0);
1039 createReplicaReadArc(b.rdy.zero, mergeStg.o.dn.riseList.get(0), -6.0, 0.0);
1040 createReplicaReadArc(b.rdy.one, mergeStg.b.dn.riseList.get(2), +6.0, +1.0);
1041 createReplicaReadArc(b.rdy.one, mergeStg.o.dn.riseList.get(1), -6.0, -1.0);
1042 }
1043 }
1044 if (oContact != null) {
1045 ContactStg o = getContactStg(oContact);
1046 if (o != null) {
1047 createReplicaReadArc(o.rdy.zero, mergeStg.a.rdy.fallList.get(0), +6.0, 0.0);
1048 createReplicaReadArc(o.rdy.zero, mergeStg.b.rdy.fallList.get(0), +6.0, 0.0);
1049 createReplicaReadArc(o.rdy.one, mergeStg.a.rdy.riseList.get(0), +6.0, -1.0);
1050 createReplicaReadArc(o.rdy.one, mergeStg.b.rdy.riseList.get(0), +6.0, -1.0);
1051 createReplicaReadArcBetweenDoneSignals(o.dn, mergeStg.a.dn, 0.0);
1052 createReplicaReadArcBetweenDoneSignals(o.dn, mergeStg.b.dn, 0.0);
1053 createReplicaReadArc(o.rdy.zero, mergeStg.a.dn.riseList.get(0), +6.0, 0.0);
1054 createReplicaReadArc(o.rdy.zero, mergeStg.b.dn.riseList.get(0), +6.0, 0.0);
1055 createReplicaReadArc(o.rdy.one, mergeStg.a.dn.riseList.get(2), +6.0, 0.0);
1056 createReplicaReadArc(o.rdy.one, mergeStg.b.dn.riseList.get(2), +6.0, 0.0);
1057 }
1058 }
1059 }
1060 }
1061
1062 public MergeStg getMergeStg(VisualMergeComponent component) {
1063 return ((mergeMap == null) ? null : mergeMap.get(component));
1064 }
1065
1066 public void putMergeStg(VisualMergeComponent component, MergeStg stg) {
1067 if (mergeMap == null) {
1068 mergeMap = new HashMap<>();
1069 }
1070 mergeMap.put(component, stg);
566 }1071 }
5671072
568 1073
569 private QueueStg generateQueueStg(VisualQueueComponent component) throws InvalidConnectionException {1074 private QueueStg generateQueueStg(VisualQueueComponent component) throws InvalidConnectionException {
570 String name = xmas.getMathName(component);1075 String name = getXmasModel().getMathName(component);
571 Point2D pos = getComponentPosition(component);1076 Point2D pos = getComponentPosition(component);
572 int capacity = component.getReferencedQueueComponent().getCapacity();1077 int capacity = component.getReferencedQueueComponent().getCapacity();
573 SignalStg iStg = null;1078 ContactStg i = null;
574 SignalStg oStg = null;1079 ContactStg o = null;
575 ArrayList<SignalStg> memList = new ArrayList<>(capacity);1080 ArrayList<SlotStg> slotList = new ArrayList<>(capacity);
576 ArrayList<SignalStg> headList = new ArrayList<>(capacity);1081 double xContact = 0.5 * QUEUE_SLOT_SPACING * (capacity + 1);
577 ArrayList<SignalStg> tailList = new ArrayList<>(capacity);
578 double xContact = 5.0 * capacity + 5.0;
579 for (VisualXmasContact contact: component.getContacts()) {1082 for (VisualXmasContact contact: component.getContacts()) {
580 if (contact.isOutput()) {1083 if (contact.isOutput()) {
581 oStg = generateOutputContactStg(name + nameOirdy, pos.getX() + xContact, pos.getY() - 5.0, false, Type.INTERNAL, 1, capacity);1084 SignalStg rdy = generateSignalStg(XmasStgType.IRDY, name + _O_IRDY, pos.getX() + xContact, pos.getY(), 1, capacity);
582 contactMap.put(contact, oStg);1085 SignalStg dn = generateSignalStg(XmasStgType.IDN, name + _O_IDN, pos.getX() + xContact, pos.getY() - 12.0, 1, capacity + 1);
1086 o = new ContactStg(rdy, dn);
1087 putContactStg(contact, o);
583 } else {1088 } else {
584 iStg = generateInputContactStg(name + nameItrdy, pos.getX() - xContact, pos.getY() + 5.0, true, Type.INTERNAL, 1, capacity);1089 SignalStg rdy = generateSignalStg(XmasStgType.TRDY, name + _I_TRDY, pos.getX() - xContact, pos.getY(), 1, capacity);
585 contactMap.put(contact, iStg);1090 setSignalInitialState(rdy, true);
586 }1091 SignalStg dn = generateSignalStg(XmasStgType.TDN, name + _I_TDN, pos.getX() - xContact, pos.getY() + 12.0, 1, capacity + 1);
587 }1092 i = new ContactStg(rdy, dn);
588 for (int i = 0; i < capacity; i++) {1093 putContactStg(contact, i);
589 double xSlot = 10.0 * (i - 0.5 * (capacity - 1));1094 }
590 char c = (char)i;1095 }
591 c += 'A';1096 for (int idx = 0; idx < capacity; idx++) {
592 SignalStg memStg = generateSignalStg(name + nameMem + c, pos.getX() + xSlot, pos.getY(), false, SignalTransition.Type.INPUT);1097 double xSlot = QUEUE_SLOT_SPACING * (idx - 0.5 * (capacity - 1));
593 SignalStg headStg = generateSignalStg(name + nameHead + c, pos.getX() + xSlot, pos.getY() - 8.0, (i == 0), SignalTransition.Type.INTERNAL);1098 char suffix = (char)idx;
594 SignalStg tailStg = generateSignalStg(name + nameTail + c, pos.getX() + xSlot, pos.getY() + 8.0, false, SignalTransition.Type.INTERNAL);1099 suffix += 'A';
595 memList.add(memStg);1100 SignalStg mem = generateBasicSignalStg(name + _MEM + suffix, pos.getX() + xSlot, pos.getY(), SignalTransition.Type.INPUT);
596 headList.add(headStg);1101 ContactStg hd = null;
597 tailList.add(tailStg);1102 {
598 }1103 SignalStg rdy = generateSignalStg(XmasStgType.IRDY, name + _HEAD + suffix +_RDY, pos.getX() + xSlot, pos.getY() - 8.0);
599 // Internal connections1104 SignalStg dn = generateSignalStg(XmasStgType.IDN, name + _HEAD + suffix + _DN, pos.getX() + xSlot, pos.getY() - 16.0, 4, 3);
600 for (int i = 0; i < capacity; i++) {1105 hd = new ContactStg(rdy, dn);
601 SignalStg mem = memList.get(i);1106 }
602 createReadArc(iStg.one, mem.riseList.get(0));1107 ContactStg tl = null;
603 createReadArc(oStg.one, mem.fallList.get(0));1108 {
604 createReadArc(mem.one, iStg.fallList.get(0));1109 SignalStg rdy = generateSignalStg(XmasStgType.TRDY, name + _TAIL + suffix +_RDY, pos.getX() + xSlot, pos.getY() + 8.0);
605 createReadArc(mem.one, oStg.riseList.get(i));1110 SignalStg dn = generateSignalStg(XmasStgType.TDN, name + _TAIL + suffix + _DN, pos.getX() + xSlot, pos.getY() + 16.0, 4, 3);
606 createReadArc(mem.zero, iStg.riseList.get(i));1111 setSignalInitialState(rdy, (idx == 0));
607 createReadArc(mem.zero, oStg.fallList.get(0));1112 tl = new ContactStg(rdy, dn);
608 for (int j = 0; j < capacity; j++) {1113 }
609 SignalStg head = headList.get(j);1114 SlotStg slot = new SlotStg(mem, hd, tl);
610 SignalStg tail = tailList.get(j);1115 slotList.add(slot);
611 if (i == j) {1116 // Connections of head within slot
612 createReadArc(mem.one, head.fallList.get(0));1117 createReplicaReadArc(slot.hd.rdy.one, slot.mem.fallList.get(0), 0.0, -2.0);
613 createReadArc(mem.one, tail.riseList.get(0));1118 createReplicaReadArc(slot.mem.zero, slot.hd.rdy.fallList.get(0), -6.0, 0.0);
614 createReadArc(mem.zero, head.riseList.get(0));1119 createReplicaReadArc(slot.mem.one, slot.hd.rdy.riseList.get(0), -6.0, 0.0);
615 createReadArc(mem.zero, tail.fallList.get(0));1120 createReplicaReadArc(slot.mem.zero, slot.hd.dn.fallList.get(1), +6.0, -1.0);
616 createReadArc(head.one, mem.riseList.get(0));1121 createReplicaReadArc(slot.mem.zero, slot.hd.dn.riseList.get(0), -6.0, 0.0);
617 createReadArc(tail.one, mem.fallList.get(0));1122 createReplicaReadArcs(slot.mem.one, Arrays.asList(slot.hd.dn.riseList.get(2), slot.hd.dn.riseList.get(1)), -6.0, 0.0);
618 } else {1123 createReplicaReadArc(slot.mem.one, slot.hd.dn.fallList.get(0), -6.0, 0.0);
619 createReadArc(mem.one, head.riseList.get(0));1124 createReplicaReadArc(slot.mem.one, slot.hd.dn.fallList.get(2), -6.0, 0.0);
620 createReadArc(mem.zero, tail.riseList.get(0));1125 createReadArc(slot.hd.rdy.zero, slot.hd.dn.riseList.get(0));
621 }1126 createReadArc(slot.hd.rdy.zero, slot.hd.dn.fallList.get(3));
622 }1127 createReadArc(slot.hd.rdy.one, slot.hd.dn.riseList.get(2));
623 }1128 createReadArc(slot.hd.rdy.one, slot.hd.dn.fallList.get(2));
624 QueueStg queueStg = new QueueStg(iStg, oStg, memList, headList, tailList);1129 createReadArc(slot.hd.rdy.one, slot.hd.dn.fallList.get(1));
625 groupComponentStg(queueStg);1130 createReadArc(slot.hd.rdy.one, slot.hd.dn.fallList.get(0));
626 return queueStg;1131 // Connection of tail within slot
1132 createReplicaReadArc(slot.tl.rdy.one, slot.mem.riseList.get(0), 0.0, +2.0);
1133 createReplicaReadArc(slot.mem.zero, slot.tl.rdy.riseList.get(0), +6.0, 0.0);
1134 createReplicaReadArc(slot.mem.one, slot.tl.rdy.fallList.get(0), +6.0, 0.0);
1135 createReplicaReadArc(slot.mem.one, slot.tl.dn.fallList.get(1), -6.0, +1.0);
1136 createReplicaReadArc(slot.mem.one, slot.tl.dn.riseList.get(0), +6.0, 0.0);
1137 createReplicaReadArcs(slot.mem.zero, Arrays.asList(slot.tl.dn.riseList.get(2), slot.tl.dn.riseList.get(1)), +6.0, 0.0);
1138 createReplicaReadArc(slot.mem.zero, slot.tl.dn.fallList.get(0), +6.0, 0.0);
1139 createReplicaReadArc(slot.mem.zero, slot.tl.dn.fallList.get(2), +6.0, 0.0);
1140 createReadArc(slot.tl.rdy.zero, slot.tl.dn.riseList.get(0));
1141 createReadArc(slot.tl.rdy.zero, slot.tl.dn.fallList.get(3));
1142 createReadArc(slot.tl.rdy.one, slot.tl.dn.riseList.get(2));
1143 createReadArc(slot.tl.rdy.one, slot.tl.dn.fallList.get(2));
1144 createReadArc(slot.tl.rdy.one, slot.tl.dn.fallList.get(1));
1145 createReadArc(slot.tl.rdy.one, slot.tl.dn.fallList.get(0));
1146 }
1147 for (int idx = 0; idx < capacity; idx++) {
1148 SlotStg slot = slotList.get(idx);
1149 // Connections with input port
1150 createReplicaReadArc(i.rdy.one, slot.mem.riseList.get(0), -6.0, -1.0);
1151 createReplicaReadArc(i.rdy.one, slot.tl.dn.fallList.get(1), -6.0, 0.0);
1152 createReplicaReadArc(i.rdy.zero, slot.tl.dn.fallList.get(2), +6.0, -1.0);
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches