1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.ccsds.ndm.odm.opm;
18
19 import java.util.Collections;
20 import java.util.List;
21 import java.util.Optional;
22
23 import org.orekit.annotation.Nullable;
24 import org.orekit.files.ccsds.ndm.odm.CartesianCovariance;
25 import org.orekit.files.ccsds.ndm.odm.KeplerianElements;
26 import org.orekit.files.ccsds.ndm.odm.KeplerianElementsKey;
27 import org.orekit.files.ccsds.ndm.odm.SpacecraftParameters;
28 import org.orekit.files.ccsds.ndm.odm.StateVector;
29 import org.orekit.files.ccsds.ndm.odm.UserDefined;
30 import org.orekit.files.ccsds.section.Data;
31 import org.orekit.files.ccsds.utils.Initializer;
32
33
34
35
36
37
38 public class OpmData implements Data {
39
40
41 private final StateVector stateVectorBlock;
42
43
44 @Nullable
45 private final KeplerianElements keplerianElementsBlock;
46
47
48 @Nullable
49 private final SpacecraftParameters spacecraftParametersBlock;
50
51
52 @Nullable
53 private final CartesianCovariance covarianceBlock;
54
55
56 private final List<Maneuver> maneuverBlocks;
57
58
59 @Nullable
60 private final UserDefined userDefinedBlock;
61
62
63 private final double mass;
64
65
66
67
68
69
70
71
72
73
74 public OpmData(final StateVector stateVectorBlock,
75 final KeplerianElements keplerianElementsBlock,
76 final SpacecraftParameters spacecraftParametersBlock,
77 final CartesianCovariance covarianceBlock,
78 final List<Maneuver> maneuverBlocks,
79 final UserDefined userDefinedBlock,
80 final double mass) {
81 this.stateVectorBlock = stateVectorBlock;
82 this.keplerianElementsBlock = keplerianElementsBlock;
83 this.spacecraftParametersBlock = spacecraftParametersBlock;
84 this.covarianceBlock = covarianceBlock;
85 this.maneuverBlocks = Initializer.emptyListIfNull(maneuverBlocks);
86 this.userDefinedBlock = userDefinedBlock;
87 this.mass = mass;
88 }
89
90
91 @Override
92 public void validate(final double version) {
93 stateVectorBlock.validate(version);
94 if (keplerianElementsBlock != null) {
95 keplerianElementsBlock.validate(version);
96
97 keplerianElementsBlock.checkNotNaN(keplerianElementsBlock.getA().orElse(Double.NaN),
98 KeplerianElementsKey.SEMI_MAJOR_AXIS.name());
99 }
100 if (spacecraftParametersBlock != null) {
101 spacecraftParametersBlock.validate(version);
102 }
103 if (covarianceBlock != null) {
104 covarianceBlock.setEpoch(stateVectorBlock.getEpoch());
105 covarianceBlock.validate(version);
106 }
107 maneuverBlocks.forEach(maneuver -> maneuver.validate(version));
108 if (userDefinedBlock != null) {
109 userDefinedBlock.validate(version);
110 }
111 }
112
113
114
115
116 public StateVector getStateVectorBlock() {
117 return stateVectorBlock;
118 }
119
120
121
122
123 public Optional<KeplerianElements> getKeplerianElementsBlock() {
124 return Optional.ofNullable(keplerianElementsBlock);
125 }
126
127
128
129
130 public Optional<SpacecraftParameters> getSpacecraftParametersBlock() {
131 return Optional.ofNullable(spacecraftParametersBlock);
132 }
133
134
135
136
137 public Optional<CartesianCovariance> getCovarianceBlock() {
138 return Optional.ofNullable(covarianceBlock);
139 }
140
141
142
143
144 public double getMass() {
145 return mass;
146 }
147
148
149
150
151
152 public int getNbManeuvers() {
153 return maneuverBlocks.size();
154 }
155
156
157
158
159
160 public List<Maneuver> getManeuvers() {
161 return Collections.unmodifiableList(maneuverBlocks);
162 }
163
164
165
166
167
168
169 public Maneuver getManeuver(final int index) {
170 return maneuverBlocks.get(index);
171 }
172
173
174
175
176
177
178 public boolean hasManeuvers() {
179 return !maneuverBlocks.isEmpty();
180 }
181
182
183
184
185 public Optional<UserDefined> getUserDefinedBlock() {
186 return Optional.ofNullable(userDefinedBlock);
187 }
188
189 }