1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.ccsds.ndm.adm.aem;
18
19 import org.orekit.files.ccsds.definitions.Units;
20 import org.orekit.files.ccsds.ndm.adm.AttitudeType;
21 import org.orekit.files.ccsds.utils.ContextBinding;
22 import org.orekit.files.ccsds.utils.lexical.ParseToken;
23 import org.orekit.utils.units.Unit;
24
25
26
27
28
29
30 public enum AttitudeEntryKey {
31
32
33 quaternionState((token, context, container) -> true),
34
35
36
37
38 quaternionEphemeris((token, context, container) -> true),
39
40
41 quaternionDerivative((token, context, container) -> true),
42
43
44 quaternionEulerRate((token, context, container) -> true),
45
46
47
48
49 quaternionAngVel((token, context, container) -> true),
50
51
52 eulerAngle((token, context, container) -> true),
53
54
55 eulerAngleRate((token, context, container) -> true),
56
57
58
59
60 eulerAngleDerivative((token, context, container) -> true),
61
62
63
64
65 eulerAngleAngVel((token, context, container) -> true),
66
67
68 spin((token, context, container) -> true),
69
70
71 spinNutation((token, context, container) -> true),
72
73
74
75
76 spinNutationMom((token, context, container) -> true),
77
78
79 quaternion((token, context, container) -> true),
80
81
82 quaternionRate((token, context, container) -> true),
83
84
85
86
87 quaternionDot((token, context, container) -> true),
88
89
90 rotationAngles((token, context, container) -> true),
91
92
93 rotationRates((token, context, container) -> true),
94
95
96
97
98 angVel((token, context, container) -> true),
99
100
101 EPOCH((token, context, container) -> token.processAsDate(container::setEpoch, context)),
102
103
104 Q1((token, context, container) -> token.processAsIndexedDouble(container.getMetadata().isFirst() ? 1 : 0,
105 Unit.ONE, context.getParsedUnitsBehavior(),
106 container::setComponent)),
107
108
109 Q2((token, context, container) -> token.processAsIndexedDouble(container.getMetadata().isFirst() ? 2 : 1,
110 Unit.ONE, context.getParsedUnitsBehavior(),
111 container::setComponent)),
112
113
114 Q3((token, context, container) -> token.processAsIndexedDouble(container.getMetadata().isFirst() ? 3 : 2,
115 Unit.ONE, context.getParsedUnitsBehavior(),
116 container::setComponent)),
117
118
119 QC((token, context, container) -> token.processAsIndexedDouble(container.getMetadata().isFirst() ? 0 : 3,
120 Unit.ONE, context.getParsedUnitsBehavior(),
121 container::setComponent)),
122
123
124 Q1_DOT((token, context, container) -> token.processAsIndexedDouble(container.getMetadata().isFirst() ? 5 : 4,
125 Units.ONE_PER_S, context.getParsedUnitsBehavior(),
126 container::setComponent)),
127
128
129 Q2_DOT((token, context, container) -> token.processAsIndexedDouble(container.getMetadata().isFirst() ? 6 : 5,
130 Units.ONE_PER_S, context.getParsedUnitsBehavior(),
131 container::setComponent)),
132
133
134 Q3_DOT((token, context, container) -> token.processAsIndexedDouble(container.getMetadata().isFirst() ? 7 : 6,
135 Units.ONE_PER_S, context.getParsedUnitsBehavior(),
136 container::setComponent)),
137
138
139 QC_DOT((token, context, container) -> token.processAsIndexedDouble(container.getMetadata().isFirst() ? 4 : 7,
140 Units.ONE_PER_S, context.getParsedUnitsBehavior(),
141 container::setComponent)),
142
143
144
145
146 ANGVEL_X((token, context, container) -> token.processAsIndexedDouble(container.getMetadata().getAttitudeType() == AttitudeType.QUATERNION_ANGVEL ? 4 : 3,
147 Units.DEG_PER_S, context.getParsedUnitsBehavior(),
148 container::setComponent)),
149
150
151
152
153 ANGVEL_Y((token, context, container) -> token.processAsIndexedDouble(container.getMetadata().getAttitudeType() == AttitudeType.QUATERNION_ANGVEL ? 5 : 4,
154 Units.DEG_PER_S, context.getParsedUnitsBehavior(),
155 container::setComponent)),
156
157
158
159
160 ANGVEL_Z((token, context, container) -> token.processAsIndexedDouble(container.getMetadata().getAttitudeType() == AttitudeType.QUATERNION_ANGVEL ? 6 : 5,
161 Units.DEG_PER_S, context.getParsedUnitsBehavior(),
162 container::setComponent)),
163
164
165
166
167 ANGLE_1((token, context, container) -> token.processAsIndexedDouble(0,
168 Unit.DEGREE, context.getParsedUnitsBehavior(),
169 container::setComponent)),
170
171
172
173
174 ANGLE_2((token, context, container) -> token.processAsIndexedDouble(1,
175 Unit.DEGREE, context.getParsedUnitsBehavior(),
176 container::setComponent)),
177
178
179
180
181 ANGLE_3((token, context, container) -> token.processAsIndexedDouble(2,
182 Unit.DEGREE, context.getParsedUnitsBehavior(),
183 container::setComponent)),
184
185
186
187
188 ANGLE_1_DOT((token, context, container) -> token.processAsIndexedDouble(3,
189 Units.DEG_PER_S, context.getParsedUnitsBehavior(),
190 container::setComponent)),
191
192
193
194
195 ANGLE_2_DOT((token, context, container) -> token.processAsIndexedDouble(4,
196 Units.DEG_PER_S, context.getParsedUnitsBehavior(),
197 container::setComponent)),
198
199
200
201
202 ANGLE_3_DOT((token, context, container) -> token.processAsIndexedDouble(5,
203 Units.DEG_PER_S, context.getParsedUnitsBehavior(),
204 container::setComponent)),
205
206
207 X_ANGLE((token, context, container) -> token.processAsLabeledDouble('X', Unit.DEGREE, context.getParsedUnitsBehavior(),
208 container::setLabeledAngle)),
209
210
211 Y_ANGLE((token, context, container) -> token.processAsLabeledDouble('Y', Unit.DEGREE, context.getParsedUnitsBehavior(),
212 container::setLabeledAngle)),
213
214
215 Z_ANGLE((token, context, container) -> token.processAsLabeledDouble('Z', Unit.DEGREE, context.getParsedUnitsBehavior(),
216 container::setLabeledAngle)),
217
218
219 X_RATE((token, context, container) -> token.processAsLabeledDouble('X',
220 Units.DEG_PER_S, context.getParsedUnitsBehavior(),
221 container::setLabeledRate)),
222
223
224 Y_RATE((token, context, container) -> token.processAsLabeledDouble('Y',
225 Units.DEG_PER_S, context.getParsedUnitsBehavior(),
226 container::setLabeledRate)),
227
228
229 Z_RATE((token, context, container) -> token.processAsLabeledDouble('Z',
230 Units.DEG_PER_S, context.getParsedUnitsBehavior(),
231 container::setLabeledRate)),
232
233
234 SPIN_ALPHA((token, context, container) -> token.processAsIndexedDouble(0, Unit.DEGREE, context.getParsedUnitsBehavior(),
235 container::setComponent)),
236
237
238 SPIN_DELTA((token, context, container) -> token.processAsIndexedDouble(1, Unit.DEGREE, context.getParsedUnitsBehavior(),
239 container::setComponent)),
240
241
242 SPIN_ANGLE((token, context, container) -> token.processAsIndexedDouble(2, Unit.DEGREE, context.getParsedUnitsBehavior(),
243 container::setComponent)),
244
245
246 SPIN_ANGLE_VEL((token, context, container) -> token.processAsIndexedDouble(3, Units.DEG_PER_S, context.getParsedUnitsBehavior(),
247 container::setComponent)),
248
249
250 NUTATION((token, context, container) -> token.processAsIndexedDouble(4, Unit.DEGREE, context.getParsedUnitsBehavior(),
251 container::setComponent)),
252
253
254 NUTATION_PER((token, context, container) -> token.processAsIndexedDouble(5, Unit.SECOND, context.getParsedUnitsBehavior(),
255 container::setComponent)),
256
257
258 NUTATION_PHASE((token, context, container) -> token.processAsIndexedDouble(6, Unit.DEGREE, context.getParsedUnitsBehavior(),
259 container::setComponent)),
260
261
262
263
264 MOMENTUM_ALPHA((token, context, container) -> token.processAsIndexedDouble(4, Unit.DEGREE, context.getParsedUnitsBehavior(),
265 container::setComponent)),
266
267
268
269
270 MOMENTUM_DELTA((token, context, container) -> token.processAsIndexedDouble(5, Unit.DEGREE, context.getParsedUnitsBehavior(),
271 container::setComponent)),
272
273
274
275
276 NUTATION_VEL((token, context, container) -> token.processAsIndexedDouble(6, Units.DEG_PER_S, context.getParsedUnitsBehavior(),
277 container::setComponent));
278
279
280 private final transient TokenProcessor processor;
281
282
283
284
285 AttitudeEntryKey(final TokenProcessor processor) {
286 this.processor = processor;
287 }
288
289
290
291
292
293
294
295 public boolean process(final ParseToken token, final ContextBinding context, final AttitudeEntry container) {
296 return processor.process(token, context, container);
297 }
298
299
300 interface TokenProcessor {
301
302
303
304
305
306
307 boolean process(ParseToken token, ContextBinding context, AttitudeEntry container);
308 }
309
310 }