1
2
3
4 package org.opentrafficsim.water.demand;
5
6 import java.io.Serializable;
7
8 import org.djunits.value.vdouble.scalar.Time;
9 import org.opentrafficsim.water.role.Company;
10 import org.opentrafficsim.water.role.ShippingLine;
11 import org.opentrafficsim.water.statistics.ContainerTransportCO2BreakdownEnum;
12 import org.opentrafficsim.water.statistics.ContainerTransportCostBreakdownEnum;
13 import org.opentrafficsim.water.statistics.ContainerTransportFeeBreakdownEnum;
14 import org.opentrafficsim.water.statistics.ContainerTransportTimeBreakdownEnum;
15 import org.opentrafficsim.water.statistics.FullEmptyEnum;
16 import org.opentrafficsim.water.transfer.Terminal;
17
18 import nl.tudelft.simulation.dsol.simulators.DEVSSimulatorInterface;
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public class Container implements Serializable
37 {
38
39 private static final long serialVersionUID = 1L;
40
41
42 private final DEVSSimulatorInterface.TimeDoubleUnit simulator;
43
44
45 private Terminal terminalFrom;
46
47
48 private Terminal terminalTo;
49
50
51 private Terminal terminalLastStacked;
52
53
54 private boolean empty;
55
56
57 private ShippingLine shippingLine;
58
59
60 private Time creationTime;
61
62
63 private Time stackArrivalTime;
64
65
66 private Time onShipTime;
67
68
69 private float[] transportCosts = new float[ContainerTransportCostBreakdownEnum.values().length];
70
71
72 private float[] transportFee = new float[ContainerTransportFeeBreakdownEnum.values().length];
73
74
75 private float[] transportKgCO2 = new float[ContainerTransportCO2BreakdownEnum.values().length];
76
77
78 private float[] transportTime = new float[ContainerTransportTimeBreakdownEnum.values().length];
79
80
81
82
83
84
85
86
87 public Container(final DEVSSimulatorInterface.TimeDoubleUnit simulator, final Terminal terminalFrom,
88 final Terminal terminalTo, final boolean empty, final ShippingLine shippingLine)
89 {
90 this.simulator = simulator;
91 this.terminalFrom = terminalFrom;
92 this.terminalLastStacked = terminalFrom;
93 this.terminalTo = terminalTo;
94 this.empty = empty;
95 this.shippingLine = shippingLine;
96 this.creationTime = this.simulator.getSimulatorTime();
97 for (int i = 0; i < ContainerTransportCostBreakdownEnum.values().length; i++)
98 {
99 this.transportCosts[i] = 0.0f;
100 }
101 for (int i = 0; i < ContainerTransportFeeBreakdownEnum.values().length; i++)
102 {
103 this.transportFee[i] = 0.0f;
104 }
105 for (int i = 0; i < ContainerTransportCO2BreakdownEnum.values().length; i++)
106 {
107 this.transportKgCO2[i] = 0.0f;
108 }
109 for (int i = 0; i < ContainerTransportTimeBreakdownEnum.values().length; i++)
110 {
111 this.transportTime[i] = 0.0f;
112 }
113 }
114
115
116
117
118
119 public final void addTransportCost(final ContainerTransportCostBreakdownEnum costEnum, final double cost)
120 {
121 this.transportCosts[costEnum.ordinal()] += cost;
122 }
123
124
125
126
127
128 public final void addTransportFee(final ContainerTransportFeeBreakdownEnum feeEnum, final double fee)
129 {
130 this.transportFee[feeEnum.ordinal()] += fee;
131 }
132
133
134
135
136
137 public final void addTransportKgCO2(final ContainerTransportCO2BreakdownEnum co2Enum, final double kgCO2)
138 {
139 this.transportKgCO2[co2Enum.ordinal()] += kgCO2;
140 }
141
142
143
144
145
146 public final void addTransportTime(final ContainerTransportTimeBreakdownEnum timeEnum, final double time)
147 {
148 this.transportTime[timeEnum.ordinal()] += time;
149 }
150
151
152
153
154
155 public final double getTransportCost(final ContainerTransportCostBreakdownEnum costEnum)
156 {
157 return this.transportCosts[costEnum.ordinal()];
158 }
159
160
161
162
163
164 public final double getTransportFee(final ContainerTransportFeeBreakdownEnum feeEnum)
165 {
166 return this.transportFee[feeEnum.ordinal()];
167 }
168
169
170
171
172
173 public final double getTransportKgCO2(final ContainerTransportCO2BreakdownEnum co2Enum)
174 {
175 return this.transportKgCO2[co2Enum.ordinal()];
176 }
177
178
179
180
181
182 public final double getTransportTime(final ContainerTransportTimeBreakdownEnum timeEnum)
183 {
184 return this.transportTime[timeEnum.ordinal()];
185 }
186
187
188
189
190 public final double getSumTransportCost()
191 {
192 double sum = 0.0;
193 for (int i = 0; i < ContainerTransportCostBreakdownEnum.values().length; i++)
194 {
195 sum += this.transportCosts[i];
196 }
197 return sum;
198 }
199
200
201
202
203 public final double getSumTransportFee()
204 {
205 double sum = 0.0;
206 for (int i = 0; i < ContainerTransportFeeBreakdownEnum.values().length; i++)
207 {
208 sum += this.transportFee[i];
209 }
210 return sum;
211 }
212
213
214
215
216 public final double getSumTransportKgCO2()
217 {
218 double sum = 0.0;
219 for (int i = 0; i < ContainerTransportCO2BreakdownEnum.values().length; i++)
220 {
221 sum += this.transportKgCO2[i];
222 }
223 return sum;
224 }
225
226
227
228
229 public final double getSumTransportTime()
230 {
231 double sum = 0.0;
232 for (int i = 0; i < ContainerTransportTimeBreakdownEnum.values().length; i++)
233 {
234 sum += this.transportTime[i];
235 }
236 return sum;
237 }
238
239
240
241
242 @SuppressWarnings("checkstyle:needbraces")
243 public final void collectTerminalStatisticsAtContainerDestination()
244 {
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294 }
295
296
297
298
299 public final Terminal getTerminalFrom()
300 {
301 return this.terminalFrom;
302 }
303
304
305
306
307 public final Terminal getTerminalTo()
308 {
309 return this.terminalTo;
310 }
311
312
313
314
315 public final Terminal getTerminalLastStacked()
316 {
317 return this.terminalLastStacked;
318 }
319
320
321
322
323 public final void setTerminalFrom(final Terminal terminalFrom)
324 {
325 this.terminalFrom = terminalFrom;
326 }
327
328
329
330
331 public final void setTerminalTo(final Terminal terminalTo)
332 {
333 this.terminalTo = terminalTo;
334 }
335
336
337
338
339 public final void setTerminalLastStacked(final Terminal terminalLastStacked)
340 {
341 this.terminalLastStacked = terminalLastStacked;
342 }
343
344
345
346
347 public final boolean isEmpty()
348 {
349 return this.empty;
350 }
351
352
353
354
355 public final FullEmptyEnum fullEmpty()
356 {
357 if (this.empty)
358 {
359 return FullEmptyEnum.EMPTY;
360 }
361 return FullEmptyEnum.FULL;
362 }
363
364
365
366
367 public final Company getOwner()
368 {
369 return this.shippingLine;
370 }
371
372
373
374
375 public final ShippingLine getShippingLine()
376 {
377 return this.shippingLine;
378 }
379
380
381 @Override
382 public final String toString()
383 {
384 String full = this.empty ? "[EMPTY]" : "[FULL]";
385 return "Container from " + this.terminalFrom.getName() + " to " + this.terminalTo.getName() + " at "
386 + this.terminalLastStacked.getName() + " (owner " + this.shippingLine.getCode() + ") " + full;
387 }
388
389
390
391
392 public final String toShortString()
393 {
394 String full = this.empty ? "[E]" : "[F]";
395 return this.terminalFrom.getName() + "->" + this.terminalTo.getName() + "@" + this.terminalLastStacked.getName() + full;
396 }
397
398
399
400
401 public final Time getStackArrivalTime()
402 {
403 return this.stackArrivalTime;
404 }
405
406
407
408
409 public final void setStackArrivalTime()
410 {
411 this.stackArrivalTime = this.simulator.getSimulatorTime();
412 }
413
414
415
416
417 public final Time getCreationTime()
418 {
419 return this.creationTime;
420 }
421
422
423
424
425 public final Time getOnShipTime()
426 {
427 return this.onShipTime;
428 }
429
430
431
432
433 public final void setOnShipTime()
434 {
435 this.onShipTime = this.simulator.getSimulatorTime();
436 }
437
438 }