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.DutyCycleType;
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 OrbitManeuverHistoryMetadataKey {
31
32
33 COMMENT((token, context, container) ->
34 token.getType() == TokenType.ENTRY ? container.addComment(token.getContentAsNormalizedString()) : true),
35
36
37 MAN_ID((token, context, container) -> token.processAsFreeTextString(container::setManID)),
38
39
40 MAN_PREV_ID((token, context, container) -> token.processAsFreeTextString(container::setManPrevID)),
41
42
43 MAN_NEXT_ID((token, context, container) -> token.processAsFreeTextString(container::setManNextID)),
44
45
46 MAN_BASIS((token, context, container) -> token.processAsEnum(ManBasis.class, container::setManBasis)),
47
48
49 MAN_BASIS_ID((token, context, container) -> token.processAsFreeTextString(container::setManBasisID)),
50
51
52 MAN_DEVICE_ID((token, context, container) -> token.processAsFreeTextString(container::setManDeviceID)),
53
54
55 MAN_PREV_EPOCH((token, context, container) -> token.processAsDate(container::setManPrevEpoch, context)),
56
57
58 MAN_NEXT_EPOCH((token, context, container) -> token.processAsDate(container::setManNextEpoch, context)),
59
60
61 MAN_PURPOSE((token, context, container) -> token.processAsFreeTextList(container::setManPurpose)),
62
63
64 MAN_PRED_SOURCE((token, context, container) -> token.processAsFreeTextString(container::setManPredSource)),
65
66
67 MAN_REF_FRAME((token, context, container) -> token.processAsFrame(container::setManReferenceFrame, context, true, true, false)),
68
69
70 MAN_FRAME_EPOCH((token, context, container) -> token.processAsDate(container::setManFrameEpoch, context)),
71
72
73 GRAV_ASSIST_NAME((token, context, container) -> token.processAsCenter(container::setGravitationalAssist,
74 context.getDataContext().getCelestialBodies())),
75
76
77 DC_TYPE((token, context, container) -> token.processAsEnum(DutyCycleType.class, container::setDcType)),
78
79
80 DC_WIN_OPEN((token, context, container) -> token.processAsDate(container::setDcWindowOpen, context)),
81
82
83 DC_WIN_CLOSE((token, context, container) -> token.processAsDate(container::setDcWindowClose, context)),
84
85
86 DC_MIN_CYCLES((token, context, container) -> token.processAsInteger(container::setDcMinCycles)),
87
88
89 DC_MAX_CYCLES((token, context, container) -> token.processAsInteger(container::setDcMaxCycles)),
90
91
92 DC_EXEC_START((token, context, container) -> token.processAsDate(container::setDcExecStart, context)),
93
94
95 DC_EXEC_STOP((token, context, container) -> token.processAsDate(container::setDcExecStop, context)),
96
97
98 DC_REF_TIME((token, context, container) -> token.processAsDate(container::setDcRefTime, context)),
99
100
101 DC_TIME_PULSE_DURATION((token, context, container) -> token.processAsDouble(Unit.SECOND, context.getParsedUnitsBehavior(),
102 container::setDcTimePulseDuration)),
103
104
105 DC_TIME_PULSE_PERIOD((token, context, container) -> token.processAsDouble(Unit.SECOND, context.getParsedUnitsBehavior(),
106 container::setDcTimePulsePeriod)),
107
108
109 DC_REF_DIR((token, context, container) -> token.processAsVector(Unit.NONE, context.getParsedUnitsBehavior(),
110 container::setDcRefDir)),
111
112
113 DC_BODY_FRAME((token, context, container) -> token.processAsFrame(f -> container.setDcBodyFrame(f.asSpacecraftBodyFrame()),
114 context, false, false, true)),
115
116
117 DC_BODY_TRIGGER((token, context, container) -> token.processAsVector(Unit.NONE, context.getParsedUnitsBehavior(),
118 container::setDcBodyTrigger)),
119
120
121 DC_PA_START_ANGLE((token, context, container) -> token.processAsDouble(Unit.DEGREE, context.getParsedUnitsBehavior(),
122 container::setDcPhaseStartAngle)),
123
124
125 DC_PA_STOP_ANGLE((token, context, container) -> token.processAsDouble(Unit.DEGREE, context.getParsedUnitsBehavior(),
126 container::setDcPhaseStopAngle)),
127
128
129 MAN_COMPOSITION((token, context, container) -> token.processAsEnumsList(ManeuverFieldType.class, container::setManComposition)),
130
131
132 MAN_UNITS((token, context, container) -> token.processAsUnitList(container::setManUnits));
133
134
135 private final transient TokenProcessor processor;
136
137
138
139
140 OrbitManeuverHistoryMetadataKey(final TokenProcessor processor) {
141 this.processor = processor;
142 }
143
144
145
146
147
148
149
150 public boolean process(final ParseToken token, final ContextBinding context, final OrbitManeuverHistoryMetadata container) {
151 return processor.process(token, context, container);
152 }
153
154
155 interface TokenProcessor {
156
157
158
159
160
161
162 boolean process(ParseToken token, ContextBinding context, OrbitManeuverHistoryMetadata container);
163 }
164
165 }