1
package dk.aau.cs.gui.undo;
5
import pipe.dataLayer.TimedPlaceComponent;
6
import dk.aau.cs.model.tapn.SharedPlace;
7
import dk.aau.cs.model.tapn.TimedArcPetriNet;
8
import dk.aau.cs.model.tapn.TimedInhibitorArc;
9
import dk.aau.cs.model.tapn.TimedInputArc;
10
import dk.aau.cs.model.tapn.TimedOutputArc;
11
import dk.aau.cs.model.tapn.TimedPlace;
12
import dk.aau.cs.model.tapn.TimedToken;
13
import dk.aau.cs.model.tapn.TransportArc;
14
import dk.aau.cs.util.Require;
16
public class MakePlaceSharedCommand extends Command {
17
private final SharedPlace sharedPlace;
18
private final TimedPlace place;
19
private final TimedArcPetriNet tapn;
20
private final TimedPlaceComponent placeComponent;
22
private final List<TimedToken> oldTokens;
24
public MakePlaceSharedCommand(TimedArcPetriNet tapn, SharedPlace sharedPlace, TimedPlace place, TimedPlaceComponent placeComponent){
25
Require.that(tapn != null, "tapn cannot be null");
26
Require.that(sharedPlace != null, "sharedPlace cannot be null");
27
Require.that(place != null, "timedPlace cannot be null");
28
Require.that(placeComponent != null, "placeComponent cannot be null");
31
this.sharedPlace = sharedPlace;
33
this.placeComponent = placeComponent;
34
this.oldTokens = place.tokens();
39
updateArcs(place, sharedPlace);
42
tapn.add(sharedPlace);
43
placeComponent.setUnderlyingPlace(sharedPlace);
48
updateArcs(sharedPlace, place);
49
tapn.remove(sharedPlace);
51
place.addTokens(oldTokens);
52
placeComponent.setUnderlyingPlace(place);
56
private void updateArcs(TimedPlace toReplace, TimedPlace replacement) {
57
for(TimedInputArc arc : tapn.inputArcs()){
58
if(arc.source().equals(toReplace)){
59
arc.setSource(replacement);
63
for(TimedInhibitorArc arc : tapn.inhibitorArcs()){
64
if(arc.source().equals(toReplace)){
65
arc.setSource(replacement);
69
for(TransportArc arc : tapn.transportArcs()){
70
if(arc.source().equals(toReplace)){
71
arc.setSource(replacement);
74
if(arc.destination().equals(toReplace)){
75
arc.setDestination(replacement);
79
for(TimedOutputArc arc : tapn.outputArcs()){
80
if(arc.destination().equals(toReplace)){
81
arc.setDestination(replacement);