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 SpinStabilizedKey {
30
31
32 COMMENT((token, context, container) ->
33 token.getType() == TokenType.ENTRY ? container.addComment(token.getContentAsNormalizedString()) : true),
34
35
36 SPIN_FRAME_A((token, context, container) -> token.processAsFrame(container.getEndpoints()::setFrameA, context, true, true, true)),
37
38
39 SPIN_FRAME_B((token, context, container) -> {
40 if (token.getType() == TokenType.ENTRY) {
41 container.checkNotNull(container.getEndpoints().getFrameA(), SPIN_FRAME_A);
42 final boolean aIsSpaceraftBody = container.getEndpoints().getFrameA().asSpacecraftBodyFrame() != null;
43 return token.processAsFrame(container.getEndpoints()::setFrameB, context,
44 aIsSpaceraftBody, aIsSpaceraftBody, !aIsSpaceraftBody);
45 }
46 return true;
47 }),
48
49
50 SPIN_DIR((token, context, container) -> {
51 if (token.getType() == TokenType.ENTRY) {
52 container.getEndpoints().setA2b(token.getContentAsUppercaseCharacter() == 'A');
53 }
54 return true;
55 }),
56
57
58 SPIN_ALPHA((token, context, container) -> token.processAsDouble(Unit.DEGREE, context.getParsedUnitsBehavior(),
59 container::setSpinAlpha)),
60
61
62 SPIN_DELTA((token, context, container) -> token.processAsDouble(Unit.DEGREE, context.getParsedUnitsBehavior(),
63 container::setSpinDelta)),
64
65
66 SPIN_ANGLE((token, context, container) -> token.processAsDouble(Unit.DEGREE, context.getParsedUnitsBehavior(),
67 container::setSpinAngle)),
68
69
70 SPIN_ANGLE_VEL((token, context, container) -> token.processAsDouble(Units.DEG_PER_S, context.getParsedUnitsBehavior(),
71 container::setSpinAngleVel)),
72
73
74 NUTATION((token, context, container) -> token.processAsDouble(Unit.DEGREE, context.getParsedUnitsBehavior(),
75 container::setNutation)),
76
77
78 NUTATION_PER((token, context, container) -> token.processAsDouble(Unit.SECOND, context.getParsedUnitsBehavior(),
79 container::setNutationPeriod)),
80
81
82 NUTATION_PHASE((token, context, container) -> token.processAsDouble(Unit.DEGREE, context.getParsedUnitsBehavior(),
83 container::setNutationPhase));
84
85
86 private final TokenProcessor processor;
87
88
89
90
91 SpinStabilizedKey(final TokenProcessor processor) {
92 this.processor = processor;
93 }
94
95
96
97
98
99
100
101 public boolean process(final ParseToken token, final ContextBinding context, final SpinStabilized container) {
102 return processor.process(token, context, container);
103 }
104
105
106 interface TokenProcessor {
107
108
109
110
111
112
113 boolean process(ParseToken token, ContextBinding context, SpinStabilized container);
114 }
115
116 }