1 package org.opentrafficsim.core.perception;
2
3 import org.djunits.value.vdouble.scalar.Time;
4 import org.opentrafficsim.base.parameters.ParameterException;
5 import org.opentrafficsim.base.parameters.ParameterSet;
6 import org.opentrafficsim.base.parameters.ParameterType;
7 import org.opentrafficsim.base.parameters.Parameters;
8 import org.opentrafficsim.core.perception.HistoricalParameters.ParameterEvent;
9 import org.opentrafficsim.core.perception.HistoricalParameters.ParameterValueSet;
10
11
12
13
14
15
16
17
18
19
20
21
22 public class HistoricalParameters extends AbstractHistorical<ParameterValueSet, ParameterEvent> implements Parameters
23 {
24
25
26 private final Parameters params;
27
28
29
30
31
32
33 public HistoricalParameters(final HistoryManager manager, final Parameters parameters)
34 {
35 super(manager);
36 this.params = parameters;
37 }
38
39
40
41
42
43 public Parameters getParameters()
44 {
45 return new ParameterSet(this.params);
46 }
47
48
49
50
51
52
53 public Parameters getParameters(final Time time)
54 {
55 Parameters parameters = getParameters();
56 for (ParameterEvent event : getEvents(time))
57 {
58 event.resetEvent(parameters);
59 }
60 return parameters;
61 }
62
63
64 @Override
65 public <T> void setParameter(final ParameterType<T> parameterType, final T value) throws ParameterException
66 {
67 addEvent(new ParameterEvent(now().si, parameterType, this.params));
68 this.params.setParameter(parameterType, value);
69 }
70
71
72 @Override
73 public <T> void setParameterResettable(final ParameterType<T> parameterType, final T value) throws ParameterException
74 {
75 addEvent(new ParameterEvent(now().si, parameterType, this.params));
76 this.params.setParameterResettable(parameterType, value);
77 }
78
79
80 @Override
81 public void resetParameter(final ParameterType<?> parameterType) throws ParameterException
82 {
83 addEvent(new ParameterEvent(now().si, parameterType, this.params));
84 this.params.resetParameter(parameterType);
85 }
86
87
88 @Override
89 public <T> T getParameter(final ParameterType<T> parameterType) throws ParameterException
90 {
91 return this.params.getParameter(parameterType);
92 }
93
94
95 @Override
96 public <T> T getParameterOrNull(final ParameterType<T> parameterType)
97 {
98 return this.params.getParameterOrNull(parameterType);
99 }
100
101
102 @Override
103 public boolean contains(final ParameterType<?> parameterType)
104 {
105 return this.params.contains(parameterType);
106 }
107
108
109 @Override
110 public void setAllIn(final Parameters parameters)
111 {
112 this.params.setAllIn(parameters);
113 }
114
115
116
117
118
119
120
121
122
123
124
125
126
127 public static class ParameterValueSet
128 {
129
130
131 private final ParameterType<?> parameter;
132
133
134 private final Object value;
135
136
137
138
139
140
141 public <T> ParameterValueSet(final ParameterType<T> parameter, final T value)
142 {
143 this.value = value;
144 this.parameter = parameter;
145 }
146
147
148
149
150 public Object getValue()
151 {
152 return this.value;
153 }
154
155
156
157
158 public ParameterType<?> getParameter()
159 {
160 return this.parameter;
161 }
162
163
164 @Override
165 public String toString()
166 {
167 return "ParameterValueSet [parameter=" + this.parameter + ", value=" + this.value + "]";
168 }
169
170 }
171
172
173
174
175
176
177
178
179
180
181
182
183
184 public static class ParameterEvent extends AbstractHistorical.EventValue<ParameterValueSet>
185 {
186
187
188
189
190
191
192
193
194 public <T> ParameterEvent(final double time, final ParameterType<T> parameterType, final Parameters parameters)
195 {
196 super(time, new ParameterValueSet(parameterType, parameters.getParameterOrNull(parameterType)));
197 }
198
199
200
201
202
203
204 @SuppressWarnings("unchecked")
205 public final <T> void resetEvent(final Parameters parameters)
206 {
207 try
208 {
209 parameters.setParameter((ParameterType<T>) getValue().getParameter(), (T) getValue().getValue());
210 }
211 catch (ParameterException exception)
212 {
213
214 throw new RuntimeException(exception);
215 }
216 }
217
218
219 @Override
220 public String toString()
221 {
222 return "ParameterEvent []";
223 }
224
225 }
226
227
228 @Override
229 public String toString()
230 {
231 return "HistoricalParameters [params=" + this.params + "]";
232 }
233
234 }