1
package dk.aau.cs.model.tapn;
3
import java.util.ArrayList;
6
import dk.aau.cs.util.Require;
8
public class TimedInputArc extends TAPNElement {
9
private TimedPlace source;
10
private TimeInterval interval;
11
private TimedTransition destination;
13
public TimedInputArc(TimedPlace source, TimedTransition destination, TimeInterval interval) {
14
Require.that(source != null, "A timed input arc cannot have a null source place");
15
Require.that(destination != null, "A timed input arc cannot have a null destination transition");
16
Require.that(!source.isShared() || !destination.isShared(), "You cannot draw an arc between a shared transition and shared place.");
19
this.destination = destination;
20
setTimeInterval(interval);
23
public TimedPlace source() {
27
public TimeInterval interval() {
31
public void setTimeInterval(TimeInterval interval) {
32
Require.that(interval != null, "A timed input arc cannot have a null interval");
34
this.interval = interval;
37
public TimedTransition destination() {
41
public boolean isEnabled() {
42
return getElligibleTokens().size() > 0;
45
public boolean isEnabledBy(TimedToken token) {
46
Require.that(source.equals(token.place()), "This token is from a different place");
47
return interval.isIncluded(token.age());
50
public List<TimedToken> getElligibleTokens(){
51
ArrayList<TimedToken> elligbleTokens = new ArrayList<TimedToken>();
52
List<TimedToken> tokens = source.tokens();
54
for (TimedToken t : tokens) {
55
if (isEnabledBy(t)) elligbleTokens.add(t);
58
return elligbleTokens;
61
public void delete() {
65
public TimedInputArc copy(TimedArcPetriNet tapn) {
66
return new TimedInputArc(tapn.getPlaceByName(source.name()), tapn.getTransitionByName(destination.name()), interval.copy());
69
// This method should ONLY be called in relation to sharing/unsharing a place
70
public void setSource(TimedPlace place) {
71
Require.that(place != null, "place cannot be null");
76
public String toString() {
77
return "From " + source.name() + " to " + destination.name() + " with interval " + interval().toString();