1 /* Copyright 2002-2024 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 }