1 /* Copyright 2002-2016 CS Systèmes d'Information
2 * Licensed to CS Systèmes d'Information (CS) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * CS licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.orekit.files.ccsds;
19
20 import java.util.ArrayList;
21 import java.util.Collections;
22 import java.util.List;
23
24 import org.orekit.errors.OrekitException;
25 import org.orekit.errors.OrekitMessages;
26 import org.orekit.files.general.OrbitFile;
27 import org.orekit.files.general.SatelliteTimeCoordinate;
28 import org.orekit.time.AbsoluteDate;
29 import org.orekit.utils.IERSConventions;
30
31 /**
32 * The ODMFile (Orbit Data Message) class represents any of the three orbit messages used by the CCSDS,
33 * i.e. the Orbit Parameter Message (OPM), the Mean-Elements Message (OMM) and the Orbit Ephemeris Message (OEM).
34 * It contains the information of the message's header and configuration data (set in the parser).
35 * @author sports
36 * @since 6.1
37 */
38 public abstract class ODMFile implements OrbitFile {
39
40 /** CCSDS Format version. */
41 private double formatVersion;
42
43 /** Header comments. The list contains a string for each line of comment. */
44 private List<String> headerComment;
45
46 /** File creation date and time in UTC. */
47 private AbsoluteDate creationDate;
48
49 /** Creating agency or operator. */
50 private String originator;
51
52 /** Gravitational coefficient set by the user in the parser. */
53 private double muSet;
54
55 /** Gravitational coefficient parsed in the ODM File. */
56 private double muParsed;
57
58 /** Gravitational coefficient created from the knowledge of the central body. */
59 private double muCreated;
60
61 /** IERS conventions used. */
62 private IERSConventions conventions;
63
64 /** Final gravitational coefficient (used for the public methods that need such a parameter, ex: generateCartesianOrbit).
65 * In order of decreasing priority, finalMU is equal to: the coefficient parsed in the file, the coefficient set by the
66 * user with the parser's method setMu, the coefficient created from the knowledge of the central body.
67 */
68 private double muUsed;
69
70 /** Initial Date for MET or MRT time systems. */
71 private AbsoluteDate missionReferenceDate;
72
73 /** ODMFile constructor. */
74 public ODMFile() {
75 muSet = Double.NaN;
76 muParsed = Double.NaN;
77 muCreated = Double.NaN;
78 muUsed = Double.NaN;
79 }
80
81 /**
82 * Get the gravitational coefficient set by the user.
83 * @return the coefficient
84 */
85 public double getMuSet() {
86 return muSet;
87 }
88
89 /**
90 * Set the gravitational coefficient set by the user.
91 * @param muSet the coefficient to be set
92 */
93 void setMuSet(final double muSet) {
94 this.muSet = muSet;
95 }
96
97 /**
98 * Get the gravitational coefficient parsed in the ODM File.
99 * @return the coefficient
100 */
101 public double getMuParsed() {
102 return muParsed;
103 }
104
105 /**
106 * Set the gravitational coefficient parsed in the ODM File.
107 * @param muParsed the coefficient to be set
108 */
109 void setMuParsed(final double muParsed) {
110 this.muParsed = muParsed;
111 }
112
113 /**
114 * Get the gravitational coefficient created from the knowledge of the central body.
115 * @return the coefficient
116 */
117 public double getMuCreated() {
118 return muCreated;
119 }
120
121 /**
122 * Set the gravitational coefficient created from the knowledge of the central body.
123 * @param muCreated the coefficient to be set
124 */
125 void setMuCreated(final double muCreated) {
126 this.muCreated = muCreated;
127 }
128
129 /**
130 * Get the used gravitational coefficient.
131 * @return the coefficient
132 */
133 public double getMuUsed() {
134 return muUsed;
135 }
136
137 /**
138 * Set the gravitational coefficient created from the knowledge of the central body.
139 * In order of decreasing priority, finalMU is set equal to:
140 * <ol>
141 * <li>the coefficient parsed in the file,</li>
142 * <li>the coefficient set by the user with the parser's method setMu,</li>
143 * <li>the coefficient created from the knowledge of the central body.</li>
144 * </ol>
145 * @throws OrekitException if no gravitational coefficient can be found
146 */
147 protected void setMuUsed() throws OrekitException {
148 if (!Double.isNaN(muParsed)) {
149 muUsed = muParsed;
150 } else if (!Double.isNaN(muSet)) {
151 muUsed = muSet;
152 } else if (!Double.isNaN(muCreated)) {
153 muUsed = muCreated;
154 } else {
155 throw new OrekitException(OrekitMessages.CCSDS_UNKNOWN_GM);
156 }
157 }
158
159 /** Get IERS conventions.
160 * @return conventions IERS conventions
161 * @exception OrekitException if no IERS conventions have been set
162 */
163 public IERSConventions getConventions() throws OrekitException {
164 if (conventions != null) {
165 return conventions;
166 } else {
167 throw new OrekitException(OrekitMessages.CCSDS_UNKNOWN_CONVENTIONS);
168 }
169 }
170
171 /** Set IERS conventions.
172 * @param conventions IERS conventions to be set
173 */
174 void setConventions(final IERSConventions conventions) {
175 this.conventions = conventions;
176 }
177
178 /** Get reference date for Mission Elapsed Time and Mission Relative Time time systems.
179 * @return the reference date
180 */
181 public AbsoluteDate getMissionReferenceDate() {
182 return missionReferenceDate;
183 }
184
185 /** Set reference date for Mission Elapsed Time and Mission Relative Time time systems.
186 * @param missionReferenceDate reference date for Mission Elapsed Time and Mission Relative Time time systems.
187 */
188 void setMissionReferenceDate(final AbsoluteDate missionReferenceDate) {
189 this.missionReferenceDate = missionReferenceDate;
190 }
191
192 /** Get the CCSDS ODM (OPM, OMM or OEM) format version.
193 * @return format version
194 */
195 public double getFormatVersion() {
196 return formatVersion;
197 }
198
199 /** Set the CCSDS ODM (OPM, OMM or OEM) format version.
200 * @param formatVersion the format version to be set
201 */
202 void setFormatVersion(final double formatVersion) {
203 this.formatVersion = formatVersion;
204 }
205
206 /** Get the header comment.
207 * @return header comment
208 */
209 public List<String> getHeaderComment() {
210 return headerComment;
211 }
212
213 /** Set the header comment.
214 * @param headerComment header comment
215 */
216 void setHeaderComment(final List<String> headerComment) {
217 this.headerComment = new ArrayList<String>(headerComment);
218 }
219
220 /** Get the file creation date and time in UTC.
221 * @return the file creation date and time in UTC.
222 */
223 public AbsoluteDate getCreationDate() {
224 return creationDate;
225 }
226
227 /** Set the file creation date and time in UTC.
228 * @param creationDate the creation date to be set
229 */
230 void setCreationDate(final AbsoluteDate creationDate) {
231 this.creationDate = creationDate;
232 }
233
234 /** Get the file originator.
235 * @return originator the file originator.
236 */
237 public String getOriginator() {
238 return originator;
239 }
240
241 /** Set the file originator.
242 * @param originator the originator to be set
243 */
244 void setOriginator(final String originator) {
245 this.originator = originator;
246 }
247
248 /**
249 * Not supported by CCSDS orbit messages.
250 * @return always throws an {@link UnsupportedOperationException}
251 * @throws UnsupportedOperationException always
252 */
253 @Override
254 public double getEpochInterval() {
255 throw new UnsupportedOperationException();
256 }
257
258 /**
259 * Not supported by CCSDS orbit messages.
260 * @return always throws an {@link UnsupportedOperationException}
261 * @throws UnsupportedOperationException always
262 */
263 @Override
264 public int getNumberOfEpochs() {
265 throw new UnsupportedOperationException();
266 }
267
268 /** {@inheritDoc} */
269 @Override
270 public boolean containsSatellite(final String satId) {
271 return getSatellite(satId) != null;
272 }
273
274 /** {@inheritDoc} */
275 @Override
276 public List<SatelliteTimeCoordinate> getSatelliteCoordinates(final String satId) {
277 return Collections.emptyList();
278 }
279
280 }
281