-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTransport.obs
136 lines (108 loc) · 3.42 KB
/
Transport.obs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import "Leg.obs"
import "LinkedList.obs"
contract Transport {
state Load;
state InTransport {
Leg@InTransit currentLeg;
}
state Unload {
string destinationPort;
};
string transportName;
string transportType;
string originPort;
LinkedList[Leg]@Owned legList;
Transport@Load(string pTransportName, string pTransportType, string pOriginPort, string date) {
transportName = pTransportName;
transportType = pTransportType;
originPort = pOriginPort;
legList = new LinkedList[Leg]();
->Load;
IO io = new IO();
io.println("");
io.print("* ");
io.print(date);
io.print(" - transport [Load] on [");
io.print(pTransportName);
io.print("], type [");
io.print(pTransportType);
io.print("] at port [");
io.print(pOriginPort);
io.println("]");
}
transaction getTransportName(Transport this) returns string {
return transportName;
}
transaction getTransportType(Transport this) returns string {
return transportType;
}
transaction getOriginPort(Transport this) returns string {
return originPort;
}
transaction getDestinationPort(Transport@Unload this) returns string {
return destinationPort;
}
transaction depart(Transport@Load >> InTransport this, string pdepartureDate, string port) {
Leg newLeg = new Leg(this, pdepartureDate, port);
[newLeg @ InTransit];
->InTransport(currentLeg = newLeg);
IO io = new IO();
io.println("");
io.print("* ");
io.print(pdepartureDate);
io.print(" - leg [InTransit]. port [");
io.print(port);
io.println("]");
io.print("* ");
io.print(pdepartureDate);
io.print(" - transport [InTransport]. port [");
io.print(port);
io.println("]");
}
transaction stopOver(Transport@InTransport this, string parrivalDate, string port) {
currentLeg.setArrival(parrivalDate, port);
[currentLeg @ Arrived];
legList.append(currentLeg);
[currentLeg @ Unowned];
currentLeg = new Leg(this, "", "");
IO io = new IO();
io.println("");
io.print("* ");
io.print(parrivalDate);
io.print(" - leg [Arrived]. port [");
io.print(port);
io.println("]");
io.println("");
}
transaction layoverDepart(Transport@ InTransport this, string date, string port) {
Leg newLeg = new Leg(this, date, port);
->InTransport(currentLeg = newLeg);
IO io = new IO();
io.println("");
io.print("* ");
io.print(date);
io.print(" - leg [InTransit]. port [");
io.print(port);
io.println("]");
io.println("");
}
transaction arrive(Transport@InTransport >> Unload this, string date, string port) {
currentLeg.setArrival(date, port);
[currentLeg @ Arrived];
legList.append(currentLeg);
[currentLeg @ Unowned];
->Unload(destinationPort = port);
IO io = new IO();
io.println("");
io.print("* ");
io.print(date);
io.print(" - leg [Arrived]. port [");
io.print(port);
io.println("]");
io.print("* ");
io.print(date);
io.print(" - transport [Unload]. port [");
io.print(port);
io.println("]");
}
}