1 package org.sim0mq.message.types;
2
3 import java.io.Serializable;
4
5 import org.djunits.value.vdouble.scalar.Duration;
6 import org.djunits.value.vfloat.scalar.FloatDuration;
7 import org.sim0mq.Sim0MQException;
8
9
10
11
12
13
14
15
16
17
18
19
20 public class NumberDuration extends Number implements Serializable
21 {
22
23 private static final long serialVersionUID = 20170424L;
24
25
26 private final Number duration;
27
28
29 private final Duration doubleScalar;
30
31
32 private final FloatDuration floatScalar;
33
34
35
36
37
38 public NumberDuration(final Number duration)
39 {
40 this.duration = duration;
41 this.doubleScalar = null;
42 this.floatScalar = null;
43 }
44
45
46
47
48
49 public NumberDuration(final Duration duration)
50 {
51 this.duration = null;
52 this.doubleScalar = duration;
53 this.floatScalar = null;
54 }
55
56
57
58
59
60 public NumberDuration(final FloatDuration duration)
61 {
62 this.duration = null;
63 this.doubleScalar = null;
64 this.floatScalar = duration;
65 }
66
67
68
69
70
71
72
73 public static NumberDuration instantiate(final Object value) throws Sim0MQException
74 {
75 if (value instanceof Duration)
76 {
77 return new NumberDuration((Duration) value);
78 }
79 else if (value instanceof FloatDuration)
80 {
81 return new NumberDuration((FloatDuration) value);
82 }
83 else if (value instanceof Number)
84 {
85 return new NumberDuration((Number) value);
86 }
87 else
88 {
89 throw new Sim0MQException("value should be Number, Duration or FloatDuration");
90 }
91 }
92
93 @Override
94 public int intValue()
95 {
96 return this.duration.intValue();
97 }
98
99 @Override
100 public long longValue()
101 {
102 return this.duration.longValue();
103 }
104
105 @Override
106 public float floatValue()
107 {
108 return this.duration.floatValue();
109 }
110
111 @Override
112 public double doubleValue()
113 {
114 return this.duration.doubleValue();
115 }
116
117
118
119
120
121 public Object getObject()
122 {
123 if (this.duration != null)
124 {
125 return this.duration;
126 }
127 else if (this.doubleScalar != null)
128 {
129 return this.doubleScalar;
130 }
131 else if (this.floatScalar != null)
132 {
133 return this.floatScalar;
134 }
135 else
136 {
137
138 throw new RuntimeException("NumberDuration is neither Number, nor Duration, nor FloatDuration");
139 }
140 }
141
142
143
144
145 public Number getNumber()
146 {
147 if (this.duration != null)
148 {
149 return this.duration;
150 }
151 else if (this.doubleScalar != null)
152 {
153 return this.doubleScalar;
154 }
155 else if (this.floatScalar != null)
156 {
157 return this.floatScalar;
158 }
159 else
160 {
161
162 throw new RuntimeException("NumberDuration is neither Number, nor Duration, nor FloatDuration");
163 }
164 }
165
166
167
168
169 public Duration getDuration()
170 {
171 if (this.duration != null)
172 {
173 return Duration.instantiateSI(this.duration.doubleValue());
174 }
175 else if (this.doubleScalar != null)
176 {
177 return this.doubleScalar;
178 }
179 else if (this.floatScalar != null)
180 {
181 return new Duration(this.floatScalar.getInUnit(), this.floatScalar.getDisplayUnit());
182 }
183 else
184 {
185
186 throw new RuntimeException("NumberDuration is neither Number, nor Duration, nor FloatDuration");
187 }
188 }
189
190
191
192
193 public FloatDuration getFloatDuration()
194 {
195 if (this.duration != null)
196 {
197 return FloatDuration.instantiateSI(this.duration.floatValue());
198 }
199 else if (this.doubleScalar != null)
200 {
201 return new FloatDuration((float) this.doubleScalar.getInUnit(), this.doubleScalar.getDisplayUnit());
202 }
203 else if (this.floatScalar != null)
204 {
205 return this.floatScalar;
206 }
207 else
208 {
209
210 throw new RuntimeException("NumberDuration is neither Number, nor Duration, nor FloatDuration");
211 }
212 }
213 }