1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.orekit.files.ccsds.ndm.adm.apm;
19
20 import java.io.IOException;
21
22 import org.orekit.files.ccsds.definitions.Units;
23 import org.orekit.files.ccsds.ndm.adm.AttitudeEndpoints;
24 import org.orekit.files.ccsds.section.AbstractWriter;
25 import org.orekit.files.ccsds.utils.generation.Generator;
26 import org.orekit.utils.units.Unit;
27
28
29
30
31
32 class SpinStabilizedWriter extends AbstractWriter {
33
34
35
36
37 private final double formatVersion;
38
39
40 private final SpinStabilized spinStabilized;
41
42
43
44
45
46
47
48 SpinStabilizedWriter(final double formatVersion, final String xmlTag, final String kvnTag,
49 final SpinStabilized spinStabilized) {
50 super(xmlTag, kvnTag);
51 this.formatVersion = formatVersion;
52 this.spinStabilized = spinStabilized;
53 }
54
55
56 @Override
57 protected void writeContent(final Generator generator) throws IOException {
58
59 generator.writeComments(spinStabilized.getComments());
60
61
62 if (formatVersion < 2.0) {
63 generator.writeEntry(SpinStabilizedKey.SPIN_FRAME_A.name(), spinStabilized.getEndpoints().getFrameA().getName(), null, true);
64 generator.writeEntry(SpinStabilizedKey.SPIN_FRAME_B.name(), spinStabilized.getEndpoints().getFrameB().getName(), null, true);
65 generator.writeEntry(SpinStabilizedKey.SPIN_DIR.name(),
66 spinStabilized.getEndpoints().isA2b() ? AttitudeEndpoints.A2B : AttitudeEndpoints.B2A,
67 null, true);
68 } else {
69 generator.writeEntry(SpinStabilizedKey.REF_FRAME_A.name(), spinStabilized.getEndpoints().getFrameA().getName(), null, true);
70 generator.writeEntry(SpinStabilizedKey.REF_FRAME_B.name(), spinStabilized.getEndpoints().getFrameB().getName(), null, true);
71 }
72
73
74 generator.writeEntry(SpinStabilizedKey.SPIN_ALPHA.name(), spinStabilized.getSpinAlpha(), Unit.DEGREE, true);
75 generator.writeEntry(SpinStabilizedKey.SPIN_DELTA.name(), spinStabilized.getSpinDelta(), Unit.DEGREE, true);
76 generator.writeEntry(SpinStabilizedKey.SPIN_ANGLE.name(), spinStabilized.getSpinAngle(), Unit.DEGREE, true);
77 generator.writeEntry(SpinStabilizedKey.SPIN_ANGLE_VEL.name(), spinStabilized.getSpinAngleVel(), Units.DEG_PER_S, true);
78
79 if (spinStabilized.hasMomentum()) {
80
81 generator.writeEntry(SpinStabilizedKey.MOMENTUM_ALPHA.name(), spinStabilized.getMomentumAlpha(), Unit.DEGREE, true);
82 generator.writeEntry(SpinStabilizedKey.MOMENTUM_DELTA.name(), spinStabilized.getMomentumDelta(), Unit.DEGREE, true);
83 generator.writeEntry(SpinStabilizedKey.NUTATION_VEL.name(), spinStabilized.getNutationVel(), Units.DEG_PER_S, true);
84 } else if (spinStabilized.hasNutation()) {
85
86 generator.writeEntry(SpinStabilizedKey.NUTATION.name(), spinStabilized.getNutation(), Unit.DEGREE, true);
87 generator.writeEntry(SpinStabilizedKey.NUTATION_PER.name(), spinStabilized.getNutationPeriod(), Unit.SECOND, true);
88 generator.writeEntry(SpinStabilizedKey.NUTATION_PHASE.name(), spinStabilized.getNutationPhase(), Unit.DEGREE, true);
89 }
90
91 }
92
93 }