1 /* Copyright 2002-2023 CS GROUP
2 * Licensed to CS GROUP (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.gnss;
18
19 import java.util.HashMap;
20 import java.util.Map;
21
22 import org.orekit.errors.OrekitIllegalArgumentException;
23 import org.orekit.errors.OrekitMessages;
24
25 /**
26 * Enumerate for satellite system.
27 *
28 * @author Luc Maisonobe
29 * @since 9.2
30 */
31 public enum SatelliteSystem {
32
33 /** User-defined system A.
34 * @since 12.0
35 */
36 USER_DEFINED_A('A', null),
37
38 /** User-defined system B.
39 * @since 12.0
40 */
41 USER_DEFINED_B('B', null),
42
43 /** Beidou system. */
44 BEIDOU('C', ObservationTimeScale.BDT),
45
46 /** User-defined system D.
47 * @since 12.0
48 */
49 USER_DEFINED_D('D', null),
50
51 /** Galileo system. */
52 GALILEO('E', ObservationTimeScale.GAL),
53
54 /** User-defined system F.
55 * @since 12.0
56 */
57 USER_DEFINED_F('F', null),
58
59 /** GPS system. */
60 GPS('G', ObservationTimeScale.GPS),
61
62 /** User-defined system H.
63 * @since 12.0
64 */
65 USER_DEFINED_H('H', null),
66
67 /** Indian Regional Navigation Satellite System system (NavIC). */
68 IRNSS('I', ObservationTimeScale.IRN),
69
70 /** Quasi-Zenith Satellite System system. */
71 QZSS('J', ObservationTimeScale.QZS),
72
73 /** User-defined system K.
74 * @since 12.0
75 */
76 USER_DEFINED_K('K', null),
77
78 /** User-defined system L.
79 * @since 12.0
80 */
81 USER_DEFINED_L('L', null),
82
83 /** Mixed system. */
84 MIXED('M', null),
85
86 /** User-defined system N.
87 * @since 12.0
88 */
89 USER_DEFINED_N('N', null),
90
91 /** User-defined system O.
92 * @since 12.0
93 */
94 USER_DEFINED_O('O', null),
95
96 /** User-defined system P.
97 * @since 12.0
98 */
99 USER_DEFINED_P('P', null),
100
101 /** User-defined system Q.
102 * @since 12.0
103 */
104 USER_DEFINED_Q('Q', null),
105
106 /** GLONASS system. */
107 GLONASS('R', ObservationTimeScale.GLO),
108
109 /** SBAS system. */
110 SBAS('S', null),
111
112 /** User-defined system T.
113 * @since 12.0
114 */
115 USER_DEFINED_T('T', null),
116
117 /** User-defined system U.
118 * @since 12.0
119 */
120 USER_DEFINED_U('U', null),
121
122 /** User-defined system V.
123 * @since 12.0
124 */
125 USER_DEFINED_V('V', null),
126
127 /** User-defined system W.
128 * @since 12.0
129 */
130 USER_DEFINED_W('W', null),
131
132 /** User-defined system X.
133 * @since 12.0
134 */
135 USER_DEFINED_X('X', null),
136
137 /** User-defined system Y.
138 * @since 12.0
139 */
140 USER_DEFINED_Y('Y', null),
141
142 /** User-defined system Z.
143 * @since 12.0
144 */
145 USER_DEFINED_Z('Z', null);
146
147 /** Parsing map. */
148 private static final Map<Character, SatelliteSystem> KEYS_MAP = new HashMap<>();
149 static {
150 for (final SatelliteSystem satelliteSystem : values()) {
151 KEYS_MAP.put(satelliteSystem.getKey(), satelliteSystem);
152 }
153 }
154
155 /** Key for the system. */
156 private final char key;
157
158 /** Observation time scale.
159 * @since 12.0
160 */
161 private final ObservationTimeScale observationTimeScale;
162
163 /** Simple constructor.
164 * @param key key letter
165 * @param observationTimeScale observation time scale (may be null)
166 */
167 SatelliteSystem(final char key, final ObservationTimeScale observationTimeScale) {
168 this.key = key;
169 this.observationTimeScale = observationTimeScale;
170 }
171
172 /** Get the key for the system.
173 * @return key for the system
174 */
175 public char getKey() {
176 return key;
177 }
178
179 /** Parse a string to get the satellite system.
180 * <p>
181 * The string first character must be the satellite system.
182 * </p>
183 * @param s string to parse
184 * @return the satellite system
185 * @exception OrekitIllegalArgumentException if the string does not correspond to a satellite system key
186 */
187 public static SatelliteSystem parseSatelliteSystem(final String s)
188 throws OrekitIllegalArgumentException {
189 final SatelliteSystem satelliteSystem = KEYS_MAP.get(s.charAt(0));
190 if (satelliteSystem == null) {
191 throw new OrekitIllegalArgumentException(OrekitMessages.UNKNOWN_SATELLITE_SYSTEM, s.charAt(0));
192 }
193 return satelliteSystem;
194 }
195
196 /** Parse a string to get the satellite system.
197 * <p>
198 * The string first character must be the satellite system, or empty to get GPS as default
199 * </p>
200 * @param s string to parse
201 * @return the satellite system
202 * @since 12.0
203 */
204 public static SatelliteSystem parseSatelliteSystemWithGPSDefault(final String s) {
205 return s.isEmpty() ? SatelliteSystem.GPS : parseSatelliteSystem(s);
206 }
207
208 /** Get observation time scale for satellite system.
209 * @return observation time scale, null if there are not
210 * @since 12.0
211 */
212 public ObservationTimeScale getObservationTimeScale() {
213 return observationTimeScale;
214 }
215
216 }