1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.ccsds.ndm.odm.ocm;
18
19 import org.orekit.files.ccsds.definitions.OdMethodFacade;
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
30 public enum OrbitDeterminationKey {
31
32
33 COMMENT((token, context, container) ->
34 token.getType() == TokenType.ENTRY ? container.addComment(token.getContentAsNormalizedString()) : true),
35
36
37 OD_ID((token, context, container) -> token.processAsNormalizedString(container::setId)),
38
39
40 OD_PREV_ID((token, context, container) -> token.processAsNormalizedString(container::setPrevId)),
41
42
43 OD_METHOD((token, context, container) -> {
44 if (token.getType() == TokenType.ENTRY) {
45 container.setMethod(OdMethodFacade.parse(token.getContentAsNormalizedString()));
46 }
47 return true;
48 }),
49
50
51 OD_EPOCH((token, context, container) -> token.processAsDate(container::setEpoch, context)),
52
53
54 DAYS_SINCE_FIRST_OBS((token, context, container) -> token.processAsDouble(Unit.DAY, context.getParsedUnitsBehavior(),
55 container::setTimeSinceFirstObservation)),
56
57
58 DAYS_SINCE_LAST_OBS((token, context, container) -> token.processAsDouble(Unit.DAY, context.getParsedUnitsBehavior(),
59 container::setTimeSinceLastObservation)),
60
61
62 RECOMMENDED_OD_SPAN((token, context, container) -> token.processAsDouble(Unit.DAY, context.getParsedUnitsBehavior(),
63 container::setRecommendedOdSpan)),
64
65
66 ACTUAL_OD_SPAN((token, context, container) -> token.processAsDouble(Unit.DAY, context.getParsedUnitsBehavior(),
67 container::setActualOdSpan)),
68
69
70 OBS_AVAILABLE((token, context, container) -> token.processAsInteger(container::setObsAvailable)),
71
72
73 OBS_USED((token, context, container) -> token.processAsInteger(container::setObsUsed)),
74
75
76 TRACKS_AVAILABLE((token, context, container) -> token.processAsInteger(container::setTracksAvailable)),
77
78
79 TRACKS_USED((token, context, container) -> token.processAsInteger(container::setTracksUsed)),
80
81
82 MAXIMUM_OBS_GAP((token, context, container) -> token.processAsDouble(Unit.DAY, context.getParsedUnitsBehavior(),
83 container::setMaximumObsGap)),
84
85
86 OD_EPOCH_EIGMAJ((token, context, container) -> token.processAsDouble(Unit.METRE, context.getParsedUnitsBehavior(),
87 container::setEpochEigenMaj)),
88
89
90 OD_EPOCH_EIGMED((token, context, container) -> token.processAsDouble(Unit.METRE, context.getParsedUnitsBehavior(),
91 container::setEpochEigenMed)),
92
93
94 OD_EPOCH_EIGMIN((token, context, container) -> token.processAsDouble(Unit.METRE, context.getParsedUnitsBehavior(),
95 container::setEpochEigenMin)),
96
97
98 OD_MAX_PRED_EIGMAJ((token, context, container) -> token.processAsDouble(Unit.METRE, context.getParsedUnitsBehavior(),
99 container::setMaxPredictedEigenMaj)),
100
101
102 OD_MIN_PRED_EIGMIN((token, context, container) -> token.processAsDouble(Unit.METRE, context.getParsedUnitsBehavior(),
103 container::setMinPredictedEigenMin)),
104
105
106 OD_CONFIDENCE((token, context, container) -> token.processAsDouble(Unit.PERCENT, context.getParsedUnitsBehavior(),
107 container::setConfidence)),
108
109
110 GDOP((token, context, container) -> token.processAsDouble(Unit.ONE, context.getParsedUnitsBehavior(), container::setGdop)),
111
112
113 SOLVE_N((token, context, container) -> token.processAsInteger(container::setSolveN)),
114
115
116 SOLVE_STATES((token, context, container) -> token.processAsNormalizedList(container::setSolveStates)),
117
118
119 CONSIDER_N((token, context, container) -> token.processAsInteger(container::setConsiderN)),
120
121
122 CONSIDER_PARAMS((token, context, container) -> token.processAsNormalizedList(container::setConsiderParameters)),
123
124
125 SENSORS_N((token, context, container) -> token.processAsInteger(container::setSensorsN)),
126
127
128 SENSORS((token, context, container) -> token.processAsNormalizedList(container::setSensors)),
129
130
131 WEIGHTED_RMS((token, context, container) -> token.processAsDouble(Unit.ONE, context.getParsedUnitsBehavior(),
132 container::setWeightedRms)),
133
134
135 DATA_TYPES((token, context, container) -> token.processAsNormalizedList(container::setDataTypes));
136
137
138 private final TokenProcessor processor;
139
140
141
142
143 OrbitDeterminationKey(final TokenProcessor processor) {
144 this.processor = processor;
145 }
146
147
148
149
150
151
152
153 public boolean process(final ParseToken token, final ContextBinding context, final OrbitDetermination container) {
154 return processor.process(token, context, container);
155 }
156
157
158 interface TokenProcessor {
159
160
161
162
163
164
165 boolean process(ParseToken token, ContextBinding context, OrbitDetermination container);
166 }
167
168 }