~tapaal-contributor/tapaal/disappearing-tokens-1940098

« back to all changes in this revision

Viewing changes to src/dk/aau/cs/gui/undo/MakePlaceSharedCommand.java

  • Committer: Kenneth Yrke Jørgensen
  • Date: 2011-04-12 09:50:16 UTC
  • mfrom: (329.1.188 tapaal-1.5)
  • Revision ID: mail@yrke.dk-20110412095016-e4hqdgab5596ja09
Merged with branch addning support for new 1.5 features

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package dk.aau.cs.gui.undo;
 
2
 
 
3
import java.util.List;
 
4
 
 
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;
 
15
 
 
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;
 
21
        
 
22
        private final List<TimedToken> oldTokens;
 
23
        
 
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");
 
29
                
 
30
                this.tapn = tapn;
 
31
                this.sharedPlace = sharedPlace;
 
32
                this.place = place;
 
33
                this.placeComponent = placeComponent;
 
34
                this.oldTokens = place.tokens();
 
35
        }
 
36
        
 
37
        @Override
 
38
        public void redo() {
 
39
                updateArcs(place, sharedPlace);
 
40
                
 
41
                tapn.remove(place);
 
42
                tapn.add(sharedPlace);
 
43
                placeComponent.setUnderlyingPlace(sharedPlace);
 
44
        }
 
45
 
 
46
        @Override
 
47
        public void undo() {
 
48
                updateArcs(sharedPlace, place);
 
49
                tapn.remove(sharedPlace);
 
50
                tapn.add(place);
 
51
                place.addTokens(oldTokens);
 
52
                placeComponent.setUnderlyingPlace(place);
 
53
                
 
54
        }
 
55
        
 
56
        private void updateArcs(TimedPlace toReplace, TimedPlace replacement) {
 
57
                for(TimedInputArc arc : tapn.inputArcs()){
 
58
                        if(arc.source().equals(toReplace)){
 
59
                                arc.setSource(replacement);
 
60
                        }
 
61
                }
 
62
                
 
63
                for(TimedInhibitorArc arc : tapn.inhibitorArcs()){
 
64
                        if(arc.source().equals(toReplace)){
 
65
                                arc.setSource(replacement);
 
66
                        }
 
67
                }
 
68
                
 
69
                for(TransportArc arc : tapn.transportArcs()){
 
70
                        if(arc.source().equals(toReplace)){
 
71
                                arc.setSource(replacement);
 
72
                        }
 
73
                        
 
74
                        if(arc.destination().equals(toReplace)){
 
75
                                arc.setDestination(replacement);
 
76
                        }
 
77
                }
 
78
                
 
79
                for(TimedOutputArc arc : tapn.outputArcs()){
 
80
                        if(arc.destination().equals(toReplace)){
 
81
                                arc.setDestination(replacement);
 
82
                        }
 
83
                }
 
84
        }
 
85
}