1   /* Copyright 2002-2012 Space Applications Services
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  package org.orekit.files.general;
18  
19  import java.util.Collection;
20  import java.util.List;
21  
22  import org.orekit.time.AbsoluteDate;
23  
24  /** Interface for orbit file representations.
25   * @author Thomas Neidhart
26   */
27  public interface OrbitFile {
28  
29      /** Time system used throughout this orbit file. */
30      enum TimeSystem {
31          /** Greenwich Mean Sidereal Time. */
32          GMST,
33          /** Global Positioning System. */
34          GPS,
35          /** GLONASS. */
36          GLO,
37          /** GALILEO. */
38          GAL,
39          /** International Atomic Time. */
40          TAI,
41          /** Coordinated Universal Time. */
42          UTC,
43          /** Universal Time 1. */
44          UT1,
45          /** Terrestrial Time. */
46          TT,
47          /** Geocentric Coordinate Time. */
48          TCG,
49          /** Barycentric Dynamic Time. */
50          TDB,
51          /** Barycentric Coordinate Time. */
52          TCB,
53          /** Quasi-Zenith System. */
54          QZS,
55          /** Mission Elapsed Time. */
56          MET,
57          /** Mission Relative Time. */
58          MRT;
59      }
60  
61      /** Returns the start epoch of the orbit file.
62       * @return the start epoch
63       */
64      AbsoluteDate getEpoch();
65  
66      /** Returns the time interval between epochs (in seconds).
67       * @return the time interval between epochs
68       */
69      double getEpochInterval();
70  
71      /** Returns the number of epochs contained in this orbit file.
72       * @return the number of epochs
73       */
74      int getNumberOfEpochs();
75  
76      /** Returns the coordinate system of the entries in this orbit file.
77       * @return the coordinate system
78       */
79      String getCoordinateSystem();
80  
81      /** Returns the {@link TimeSystem} used to time-stamp position entries.
82       * @return the {@link TimeSystem} of the orbit file
83       */
84      TimeSystem getTimeSystem();
85  
86      /** Returns a {@link Collection} of {@link SatelliteInformation} objects for
87       * all satellites contained in this orbit file.
88       * @return a {@link Collection} of {@link SatelliteInformation} objects
89       */
90      Collection<SatelliteInformation> getSatellites();
91  
92      /** Get the number of satellites contained in this orbit file.
93       * @return the number of satellites
94       */
95      int getSatelliteCount();
96  
97      /** Get additional information about a satellite.
98       * @param satId the satellite id
99       * @return a {@link SatelliteInformation} object describing the satellite if
100      *         present, <code>null</code> otherwise
101      */
102     SatelliteInformation getSatellite(final String satId);
103 
104     /** Tests whether a satellite with the given id is contained in this orbit
105      * file.
106      * @param satId the satellite id
107      * @return <code>true</code> if the satellite is contained in the file,
108      *         <code>false</code> otherwise
109      */
110     boolean containsSatellite(final String satId);
111 
112     /** Get the time coordinates for the given satellite.
113      * @param satId the satellite id
114      * @return a {@link List} of {@link SatelliteTimeCoordinate} entries for
115      *         this satellite
116      */
117     List<SatelliteTimeCoordinate> getSatelliteCoordinates(final String satId);
118 }