1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.orekit.files.ccsds.ndm.odm.omm;
19
20 import java.util.Optional;
21
22 import org.orekit.annotation.Nullable;
23 import org.orekit.errors.OrekitException;
24 import org.orekit.errors.OrekitMessages;
25 import org.orekit.files.ccsds.ndm.odm.CartesianCovariance;
26 import org.orekit.files.ccsds.ndm.odm.KeplerianElements;
27 import org.orekit.files.ccsds.ndm.odm.KeplerianElementsKey;
28 import org.orekit.files.ccsds.ndm.odm.SpacecraftParameters;
29 import org.orekit.files.ccsds.ndm.odm.UserDefined;
30 import org.orekit.files.ccsds.section.Data;
31
32
33
34
35
36
37 public class OmmData implements Data {
38
39
40 private final KeplerianElements keplerianElementsBlock;
41
42
43 @Nullable
44 private final SpacecraftParameters spacecraftParameters;
45
46
47 @Nullable
48 private final OmmTle tleBlock;
49
50
51 @Nullable
52 private final CartesianCovariance covarianceBlock;
53
54
55 @Nullable
56 private final UserDefined userDefinedBlock;
57
58
59 private final double mass;
60
61
62
63
64
65
66
67
68
69 public OmmData(final KeplerianElements keplerianElementsBlock,
70 final SpacecraftParameters spacecraftParameters,
71 final OmmTle tleBlock,
72 final CartesianCovariance covarianceBlock,
73 final UserDefined userDefinedBlock,
74 final double mass) {
75 this.keplerianElementsBlock = keplerianElementsBlock;
76 this.spacecraftParameters = spacecraftParameters;
77 this.tleBlock = tleBlock;
78 this.covarianceBlock = covarianceBlock;
79 this.userDefinedBlock = userDefinedBlock;
80 this.mass = mass;
81 }
82
83
84 @Override
85 public void validate(final double version) {
86 if (keplerianElementsBlock == null) {
87 throw new OrekitException(OrekitMessages.UNINITIALIZED_VALUE_FOR_KEY,
88 KeplerianElementsKey.EPOCH);
89 }
90 keplerianElementsBlock.validate(version);
91 if (spacecraftParameters != null) {
92 spacecraftParameters.validate(version);
93 }
94 if (tleBlock == null) {
95
96 keplerianElementsBlock.checkNotNaN(keplerianElementsBlock.getA().orElse(Double.NaN),
97 KeplerianElementsKey.SEMI_MAJOR_AXIS.name());
98 } else {
99
100 keplerianElementsBlock.checkNotNaN(keplerianElementsBlock.getMeanMotion().orElse(Double.NaN),
101 KeplerianElementsKey.MEAN_MOTION.name());
102 tleBlock.validate(version);
103 }
104 if (covarianceBlock != null) {
105 covarianceBlock.setEpoch(keplerianElementsBlock.getEpoch());
106 covarianceBlock.validate(version);
107 }
108 if (userDefinedBlock != null) {
109 userDefinedBlock.validate(version);
110 }
111 }
112
113
114
115
116 public KeplerianElements getKeplerianElementsBlock() {
117 return keplerianElementsBlock;
118 }
119
120
121
122
123 public Optional<SpacecraftParameters> getSpacecraftParametersBlock() {
124 return Optional.ofNullable(spacecraftParameters);
125 }
126
127
128
129
130 public Optional<OmmTle> getTLEBlock() {
131 return Optional.ofNullable(tleBlock);
132 }
133
134
135
136
137 public Optional<CartesianCovariance> getCovarianceBlock() {
138 return Optional.ofNullable(covarianceBlock);
139 }
140
141
142
143
144 public Optional<UserDefined> getUserDefinedBlock() {
145 return Optional.ofNullable(userDefinedBlock);
146 }
147
148
149
150
151 public double getMass() {
152 return mass;
153 }
154
155 }