1 package nl.tudelft.simulation.dsol.experiment;
2
3 import java.util.Objects;
4
5 import org.djutils.exceptions.Throw;
6
7 import nl.tudelft.simulation.dsol.simtime.SimTime;
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public class RunControl<T extends Number & Comparable<T>> implements Treatment<T>
22 {
23
24 private static final long serialVersionUID = 20210409L;
25
26
27 private final String id;
28
29
30 private String description;
31
32
33 private final T startTime;
34
35
36 private final T endTime;
37
38
39 private final T warmupTime;
40
41
42
43
44
45
46
47
48
49
50
51
52 public RunControl(final String id, final T startTime, final T warmupPeriod, final T runLength)
53 {
54 Throw.whenNull(id, "id should not be null");
55 Throw.whenNull(startTime, "startTime should not be null");
56 Throw.whenNull(warmupPeriod, "warmupPeriod should not be null");
57 Throw.whenNull(runLength, "runLength should not be null");
58 Throw.when(warmupPeriod.doubleValue() < 0.0, IllegalArgumentException.class, "warmup period should not be negative");
59 Throw.when(runLength.doubleValue() <= 0.0, IllegalArgumentException.class, "run length should not be zero or negative");
60 Throw.when(warmupPeriod.compareTo(runLength) >= 0, IllegalArgumentException.class,
61 "the warmup time is longer than or equal to the runlength");
62
63 this.id = id;
64 this.description = id;
65 this.startTime = startTime;
66 this.endTime = SimTime.plus(startTime, runLength);
67 this.warmupTime = SimTime.plus(startTime, warmupPeriod);
68 }
69
70
71 @Override
72 public RunControl<T> getRunControl()
73 {
74 return this;
75 }
76
77
78 @Override
79 public String getId()
80 {
81 return this.id;
82 }
83
84
85 @Override
86 public void setDescription(final String description)
87 {
88 this.description = description;
89 }
90
91
92 @Override
93 public String getDescription()
94 {
95 return this.description;
96 }
97
98
99 @Override
100 public T getStartTime()
101 {
102 return this.startTime;
103 }
104
105
106 @Override
107 public T getEndTime()
108 {
109 return this.endTime;
110 }
111
112
113 @Override
114 public T getWarmupTime()
115 {
116 return this.warmupTime;
117 }
118
119
120 @Override
121 public int hashCode()
122 {
123 return Objects.hash(this.endTime, this.id, this.startTime, this.warmupTime);
124 }
125
126
127 @Override
128 public boolean equals(final Object obj)
129 {
130 if (this == obj)
131 return true;
132 if (obj == null)
133 return false;
134 if (getClass() != obj.getClass())
135 return false;
136 RunControl<?> other = (RunControl<?>) obj;
137 return Objects.equals(this.endTime, other.endTime) && Objects.equals(this.id, other.id)
138 && Objects.equals(this.startTime, other.startTime) && Objects.equals(this.warmupTime, other.warmupTime);
139 }
140
141
142 @Override
143 public String toString()
144 {
145 return "RunControl [id=" + this.id + ", startTime=" + this.startTime + ", warmupTime=" + this.warmupTime + ", endTime="
146 + this.endTime + "]";
147 }
148
149 }