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

« back to all changes in this revision

Viewing changes to src/dk/aau/cs/verification/TAPNTraceDecomposer.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.verification;
 
2
 
 
3
import java.util.ArrayList;
 
4
 
 
5
import dk.aau.cs.model.tapn.TimedArcPetriNetNetwork;
 
6
import dk.aau.cs.model.tapn.TimedPlace;
 
7
import dk.aau.cs.model.tapn.TimedToken;
 
8
import dk.aau.cs.model.tapn.TimedTransition;
 
9
import dk.aau.cs.model.tapn.simulation.TAPNNetworkTimeDelayStep;
 
10
import dk.aau.cs.model.tapn.simulation.TAPNNetworkTimedTransitionStep;
 
11
import dk.aau.cs.model.tapn.simulation.TAPNNetworkTrace;
 
12
import dk.aau.cs.model.tapn.simulation.TAPNNetworkTraceStep;
 
13
import dk.aau.cs.model.tapn.simulation.TimeDelayStep;
 
14
import dk.aau.cs.model.tapn.simulation.TimedArcPetriNetStep;
 
15
import dk.aau.cs.model.tapn.simulation.TimedArcPetriNetTrace;
 
16
import dk.aau.cs.model.tapn.simulation.TimedTAPNNetworkTrace;
 
17
import dk.aau.cs.model.tapn.simulation.TimedTransitionStep;
 
18
import dk.aau.cs.model.tapn.simulation.UntimedTAPNNetworkTrace;
 
19
import dk.aau.cs.util.Tuple;
 
20
 
 
21
public class TAPNTraceDecomposer {
 
22
        private final TimedArcPetriNetTrace trace;
 
23
        private final NameMapping mapping;
 
24
        private final TimedArcPetriNetNetwork tapnNetwork;
 
25
 
 
26
        public TAPNTraceDecomposer(TimedArcPetriNetTrace trace, TimedArcPetriNetNetwork tapnNetwork, NameMapping mapping) {
 
27
                this.trace = trace;
 
28
                this.tapnNetwork = tapnNetwork;
 
29
                this.mapping = mapping;
 
30
        }
 
31
 
 
32
        public TAPNNetworkTrace decompose() {
 
33
                if (!trace.isTimedTrace()){
 
34
                        return decomposeUntimedTrace();
 
35
                } else {
 
36
                        return decomposeTimedTrace();
 
37
                }
 
38
        }
 
39
 
 
40
        private TAPNNetworkTrace decomposeUntimedTrace() {
 
41
                UntimedTAPNNetworkTrace decomposedTrace = new UntimedTAPNNetworkTrace();
 
42
 
 
43
                for (TimedArcPetriNetStep action : trace) {
 
44
                        decomposedTrace.add((TAPNNetworkTimedTransitionStep)decomposeAction(action));
 
45
                }
 
46
 
 
47
                return decomposedTrace;
 
48
        }
 
49
 
 
50
        private TAPNNetworkTrace decomposeTimedTrace() {
 
51
                TimedTAPNNetworkTrace decomposedTrace = new TimedTAPNNetworkTrace();
 
52
 
 
53
                for (TimedArcPetriNetStep action : trace) {
 
54
                        decomposedTrace.add(decomposeAction(action));
 
55
                }
 
56
 
 
57
                return decomposedTrace;
 
58
        }
 
59
 
 
60
        private TAPNNetworkTraceStep decomposeAction(TimedArcPetriNetStep action) {
 
61
                TAPNNetworkTraceStep decomposedAction = null;
 
62
                if (action instanceof TimedTransitionStep) {
 
63
                        TimedTransitionStep transitionFiring = (TimedTransitionStep) action;
 
64
                        decomposedAction = decomposeTransitionFiring(transitionFiring);
 
65
                } else if (action instanceof TimeDelayStep) {
 
66
                        decomposedAction = new TAPNNetworkTimeDelayStep(((TimeDelayStep) action).delay());
 
67
                }
 
68
                return decomposedAction;
 
69
        }
 
70
 
 
71
        private TAPNNetworkTraceStep decomposeTransitionFiring(TimedTransitionStep transitionFiring) {
 
72
                Tuple<String, String> originalName = mapping.map(transitionFiring.transition().name());
 
73
                TimedTransition transition = tapnNetwork.getTAPNByName(originalName.value1()).getTransitionByName(originalName.value2());
 
74
 
 
75
                ArrayList<TimedToken> convertedTokens = null;
 
76
                if(trace.isTimedTrace()){
 
77
                        convertedTokens = new ArrayList<TimedToken>(transitionFiring.consumedTokens().size());
 
78
                        for (TimedToken token : transitionFiring.consumedTokens()) {
 
79
                                Tuple<String, String> remappedName = mapping.map(token.place().name());
 
80
                                TimedPlace place = tapnNetwork.getTAPNByName(remappedName.value1()).getPlaceByName(remappedName.value2());
 
81
                                convertedTokens.add(new TimedToken(place, token.age()));
 
82
                        }
 
83
                }
 
84
 
 
85
                return new TAPNNetworkTimedTransitionStep(transition, convertedTokens);
 
86
        }
 
87
}