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