1
package dk.aau.cs.verification;
3
import java.util.ArrayList;
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;
21
public class TAPNTraceDecomposer {
22
private final TimedArcPetriNetTrace trace;
23
private final NameMapping mapping;
24
private final TimedArcPetriNetNetwork tapnNetwork;
26
public TAPNTraceDecomposer(TimedArcPetriNetTrace trace, TimedArcPetriNetNetwork tapnNetwork, NameMapping mapping) {
28
this.tapnNetwork = tapnNetwork;
29
this.mapping = mapping;
32
public TAPNNetworkTrace decompose() {
33
if (!trace.isTimedTrace()){
34
return decomposeUntimedTrace();
36
return decomposeTimedTrace();
40
private TAPNNetworkTrace decomposeUntimedTrace() {
41
UntimedTAPNNetworkTrace decomposedTrace = new UntimedTAPNNetworkTrace();
43
for (TimedArcPetriNetStep action : trace) {
44
decomposedTrace.add((TAPNNetworkTimedTransitionStep)decomposeAction(action));
47
return decomposedTrace;
50
private TAPNNetworkTrace decomposeTimedTrace() {
51
TimedTAPNNetworkTrace decomposedTrace = new TimedTAPNNetworkTrace();
53
for (TimedArcPetriNetStep action : trace) {
54
decomposedTrace.add(decomposeAction(action));
57
return decomposedTrace;
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());
68
return decomposedAction;
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());
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()));
85
return new TAPNNetworkTimedTransitionStep(transition, convertedTokens);