1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.ccsds.ndm.adm.apm;
18
19 import org.orekit.files.ccsds.definitions.Units;
20 import org.orekit.files.ccsds.utils.ContextBinding;
21 import org.orekit.files.ccsds.utils.lexical.ParseToken;
22 import org.orekit.files.ccsds.utils.lexical.TokenType;
23 import org.orekit.utils.units.Unit;
24
25
26
27
28
29 public enum ApmQuaternionKey {
30
31
32 quaternion((token, context, container, epochSetter) -> true),
33
34
35 quaternionRate((token, context, container, epochSetter) -> true),
36
37
38
39
40 quaternionDot((token, context, container, epochSetter) -> true),
41
42
43 COMMENT((token, context, container, epochSetter) ->
44 token.getType() == TokenType.ENTRY ? container.addComment(token.getContentAsNormalizedString()) : true),
45
46
47 EPOCH((token, context, container, epochSetter) -> token.processAsDate(epochSetter, context)),
48
49
50 Q_FRAME_A((token, context, container, epochSetter) -> token.processAsFrame(container.getEndpoints()::setFrameA, context, true, true, true)),
51
52
53
54
55 REF_FRAME_A((token, context, container, epochSetter) -> token.processAsFrame(container.getEndpoints()::setFrameA, context, true, true, true)),
56
57
58 Q_FRAME_B((token, context, container, epochSetter) -> token.processAsFrame(container.getEndpoints()::setFrameB, context, true, true, true)),
59
60
61
62
63 REF_FRAME_B((token, context, container, epochSetter) -> token.processAsFrame(container.getEndpoints()::setFrameB, context, true, true, true)),
64
65
66 Q_DIR((token, context, container, epochSetter) -> {
67 if (token.getType() == TokenType.ENTRY) {
68 container.getEndpoints().setA2b(token.getContentAsUppercaseCharacter() == 'A');
69 }
70 return true;
71 }),
72
73
74 QC((token, context, container, epochSetter) -> token.processAsIndexedDouble(0, Unit.ONE, context.getParsedUnitsBehavior(),
75 container::setQ)),
76
77
78 Q1((token, context, container, epochSetter) -> token.processAsIndexedDouble(1, Unit.ONE, context.getParsedUnitsBehavior(),
79 container::setQ)),
80
81
82 Q2((token, context, container, epochSetter) -> token.processAsIndexedDouble(2, Unit.ONE, context.getParsedUnitsBehavior(),
83 container::setQ)),
84
85
86 Q3((token, context, container, epochSetter) -> token.processAsIndexedDouble(3, Unit.ONE, context.getParsedUnitsBehavior(),
87 container::setQ)),
88
89
90 QC_DOT((token, context, container, epochSetter) -> token.processAsIndexedDouble(0, Units.ONE_PER_S, context.getParsedUnitsBehavior(),
91 container::setQDot)),
92
93
94 Q1_DOT((token, context, container, epochSetter) -> token.processAsIndexedDouble(1, Units.ONE_PER_S, context.getParsedUnitsBehavior(),
95 container::setQDot)),
96
97
98 Q2_DOT((token, context, container, epochSetter) -> token.processAsIndexedDouble(2, Units.ONE_PER_S, context.getParsedUnitsBehavior(),
99 container::setQDot)),
100
101
102 Q3_DOT((token, context, container, epochSetter) -> token.processAsIndexedDouble(3, Units.ONE_PER_S, context.getParsedUnitsBehavior(),
103 container::setQDot));
104
105
106 private final transient TokenProcessor processor;
107
108
109
110
111 ApmQuaternionKey(final TokenProcessor processor) {
112 this.processor = processor;
113 }
114
115
116
117
118
119
120
121
122 public boolean process(final ParseToken token, final ContextBinding context,
123 final ApmQuaternion container, final ParseToken.DateConsumer epochSetter) {
124 return processor.process(token, context, container, epochSetter);
125 }
126
127
128 interface TokenProcessor {
129
130
131
132
133
134
135
136 boolean process(ParseToken token, ContextBinding context,
137 ApmQuaternion container, ParseToken.DateConsumer epochSetter);
138 }
139
140 }