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;
19
20 import org.orekit.bodies.CelestialBodyFactory;
21 import org.orekit.errors.OrekitException;
22 import org.orekit.errors.OrekitMessages;
23 import org.orekit.files.ccsds.definitions.BodyFacade;
24 import org.orekit.files.ccsds.definitions.CelestialBodyFrame;
25 import org.orekit.files.ccsds.definitions.FrameFacade;
26 import org.orekit.files.ccsds.definitions.ModifiedFrame;
27 import org.orekit.files.ccsds.utils.ContextBinding;
28 import org.orekit.frames.Frame;
29 import org.orekit.time.AbsoluteDate;
30
31
32
33
34
35 public class OdmCommonMetadata extends OdmMetadata {
36
37
38 private String objectID;
39
40
41 private BodyFacade center;
42
43
44
45 private FrameFacade referenceFrame;
46
47
48
49 private String frameEpochString;
50
51
52
53 private AbsoluteDate frameEpoch;
54
55
56
57 public OdmCommonMetadata() {
58 super(null);
59 }
60
61
62 @Override
63 public void validate(final double version) {
64 super.validate(version);
65 checkNotNull(getObjectName(), OdmMetadataKey.OBJECT_NAME.name());
66 checkNotNull(objectID, CommonMetadataKey.OBJECT_ID.name());
67 checkNotNull(center, CommonMetadataKey.CENTER_NAME.name());
68 checkNotNull(referenceFrame, CommonMetadataKey.REF_FRAME.name());
69 }
70
71
72
73
74
75
76
77
78
79 public void finalizeMetadata(final ContextBinding context) {
80 if (frameEpochString != null) {
81 frameEpoch = context.getTimeSystem().getConverter(context).parse(frameEpochString);
82 }
83 }
84
85
86
87
88 public String getObjectID() {
89 return objectID;
90 }
91
92
93
94
95 public void setObjectID(final String objectID) {
96 refuseFurtherComments();
97 this.objectID = objectID;
98 }
99
100
101
102
103 public int getLaunchYear() {
104 return getLaunchYear(objectID);
105 }
106
107
108
109
110 public int getLaunchNumber() {
111 return getLaunchNumber(objectID);
112 }
113
114
115
116
117 public String getLaunchPiece() {
118 return getLaunchPiece(objectID);
119 }
120
121
122
123
124 public BodyFacade getCenter() {
125 return center;
126 }
127
128
129
130
131 public void setCenter(final BodyFacade center) {
132 refuseFurtherComments();
133 this.center = center;
134 }
135
136
137
138
139
140
141
142 public Frame getFrame() {
143 if (center.getBody() == null) {
144 throw new OrekitException(OrekitMessages.NO_DATA_LOADED_FOR_CELESTIAL_BODY, center.getName());
145 }
146 if (referenceFrame.asFrame() == null) {
147 throw new OrekitException(OrekitMessages.CCSDS_INVALID_FRAME, referenceFrame.getName());
148 }
149
150
151 final boolean isMci = referenceFrame.asCelestialBodyFrame() == CelestialBodyFrame.MCI;
152 final boolean isIcrf = referenceFrame.asCelestialBodyFrame() == CelestialBodyFrame.ICRF;
153 final boolean isSolarSystemBarycenter =
154 CelestialBodyFactory.SOLAR_SYSTEM_BARYCENTER.equals(center.getBody().getName());
155 if (!(isMci || isIcrf) && CelestialBodyFactory.EARTH.equals(center.getBody().getName()) ||
156 isMci && CelestialBodyFactory.MARS.equals(center.getBody().getName()) ||
157 isIcrf && isSolarSystemBarycenter) {
158 return referenceFrame.asFrame();
159 }
160
161 return new ModifiedFrame(referenceFrame.asFrame(), referenceFrame.asCelestialBodyFrame(),
162 center.getBody(), center.getName());
163 }
164
165
166
167
168
169
170
171
172
173 public FrameFacade getReferenceFrame() {
174 return referenceFrame;
175 }
176
177
178
179
180
181 public void setReferenceFrame(final FrameFacade referenceFrame) {
182 refuseFurtherComments();
183 this.referenceFrame = referenceFrame;
184 }
185
186
187
188
189
190 public void setFrameEpochString(final String frameEpochString) {
191 refuseFurtherComments();
192 this.frameEpochString = frameEpochString;
193 }
194
195
196
197
198
199 public AbsoluteDate getFrameEpoch() {
200 return frameEpoch;
201 }
202
203
204
205
206
207 public void setFrameEpoch(final AbsoluteDate frameEpoch) {
208 refuseFurtherComments();
209 this.frameEpoch = frameEpoch;
210 }
211
212 }