1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.ccsds.ndm.adm.acm;
18
19 import org.hipparchus.geometry.euclidean.threed.Rotation;
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 AttitudeManeuverKey {
32
33
34 COMMENT((token, context, container) ->
35 token.getType() == TokenType.ENTRY ? container.addComment(token.getContentAsNormalizedString()) : true),
36
37
38 MAN_ID((token, context, container) -> token.processAsFreeTextString(container::setID)),
39
40
41 MAN_PREV_ID((token, context, container) -> token.processAsFreeTextString(container::setPrevID)),
42
43
44 MAN_PURPOSE((token, context, container) -> token.processAsFreeTextString(container::setManPurpose)),
45
46
47 MAN_BEGIN_TIME((token, context, container) -> token.processAsDouble(Unit.SECOND, context.getParsedUnitsBehavior(),
48 container::setBeginTime)),
49
50
51 MAN_END_TIME((token, context, container) -> token.processAsDouble(Unit.SECOND, context.getParsedUnitsBehavior(),
52 container::setEndTime)),
53
54
55 MAN_DURATION((token, context, container) -> token.processAsDouble(Unit.SECOND, context.getParsedUnitsBehavior(),
56 container::setDuration)),
57
58
59 ACTUATOR_USED((token, context, container) -> token.processAsFreeTextString(container::setActuatorUsed)),
60
61
62 TARGET_MOMENTUM((token, context, container) -> token.processAsVector(Units.N_M_S, context.getParsedUnitsBehavior(),
63 container::setTargetMomentum)),
64
65
66 TARGET_MOM_FRAME((token, context, container) -> token.processAsFrame(container::setTargetMomFrame, context, true, true, true)),
67
68
69 TARGET_ATTITUDE((token, context, container) -> {
70 try {
71 if (token.getType() == TokenType.ENTRY) {
72 final String[] fields = token.getRawContent().split("\\p{Space}+");
73 if (fields.length == 4) {
74 container.setTargetAttitude(new Rotation(Double.parseDouble(fields[3]),
75 Double.parseDouble(fields[0]),
76 Double.parseDouble(fields[1]),
77 Double.parseDouble(fields[2]),
78 true));
79 return true;
80 }
81 } else {
82 return true;
83 }
84 } catch (NumberFormatException nfe) {
85
86 }
87 throw token.generateException(null);
88 }),
89
90
91 TARGET_SPINRATE((token, context, container) -> token.processAsDouble(Units.DEG_PER_S, context.getParsedUnitsBehavior(),
92 container::setTargetSpinRate));
93
94
95 private final transient TokenProcessor processor;
96
97
98
99
100 AttitudeManeuverKey(final TokenProcessor processor) {
101 this.processor = processor;
102 }
103
104
105
106
107
108
109
110 public boolean process(final ParseToken token, final ContextBinding context, final AttitudeManeuver data) {
111 return processor.process(token, context, data);
112 }
113
114
115 interface TokenProcessor {
116
117
118
119
120
121
122 boolean process(ParseToken token, ContextBinding context, AttitudeManeuver data);
123 }
124
125 }