1   /* Copyright 2002-2025 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.files.ccsds.ndm.cdm;
18  
19  import org.orekit.files.ccsds.definitions.Units;
20  import org.orekit.files.ccsds.utils.ContextBinding;
21  import org.orekit.files.ccsds.utils.lexical.ParseToken;
22  import org.orekit.files.ccsds.utils.lexical.TokenType;
23  
24  /** Keys for {@link RTNCovariance CDM covariance matrix} entries.
25   * @author Melina Vanel
26   * @since 11.2
27   */
28  public enum RTNCovarianceKey {
29  
30      /** Comment entry. */
31      COMMENT((token, context, container) ->
32              token.getType() == TokenType.ENTRY ? container.addComment(token.getContentAsNormalizedString()) : true),
33  
34      /** Object covariance matrix [1,1]. */
35      CR_R((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
36                                                               container::setCrr)),
37      /** Object covariance matrix [2,1]. */
38      CT_R((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
39                                                               container::setCtr)),
40      /** Object covariance matrix [2,2]. */
41      CT_T((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
42                                                               container::setCtt)),
43      /** Object covariance matrix [3,1]. */
44      CN_R((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
45                                                               container::setCnr)),
46      /** Object covariance matrix [3,2]. */
47      CN_T((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
48                                                               container::setCnt)),
49      /** Object covariance matrix [3,3]. */
50      CN_N((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
51                                                               container::setCnn)),
52      /** Object covariance matrix [4,1]. */
53      CRDOT_R((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
54                                                               container::setCrdotr)),
55      /** Object covariance matrix [4,2]. */
56      CRDOT_T((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
57                                                               container::setCrdott)),
58      /** Object covariance matrix [4,3]. */
59      CRDOT_N((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
60                                                               container::setCrdotn)),
61      /** Object covariance matrix [4,4]. */
62      CRDOT_RDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
63                                                               container::setCrdotrdot)),
64      /** Object covariance matrix [5,1]. */
65      CTDOT_R((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
66                                                               container::setCtdotr)),
67      /** Object covariance matrix [5,2]. */
68      CTDOT_T((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
69                                                               container::setCtdott)),
70      /** Object covariance matrix [5,3]. */
71      CTDOT_N((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
72                                                               container::setCtdotn)),
73      /** Object covariance matrix [5,4]. */
74      CTDOT_RDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
75                                                               container::setCtdotrdot)),
76      /** Object covariance matrix [5,5]. */
77      CTDOT_TDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
78                                                               container::setCtdottdot)),
79      /** Object covariance matrix [6,1]. */
80      CNDOT_R((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
81                                                               container::setCndotr)),
82      /** Object covariance matrix [6,2]. */
83      CNDOT_T((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
84                                                               container::setCndott)),
85      /** Object covariance matrix [6,3]. */
86      CNDOT_N((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
87                                                               container::setCndotn)),
88      /** Object covariance matrix [6,4]. */
89      CNDOT_RDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
90                                                               container::setCndotrdot)),
91      /** Object covariance matrix [6,5]. */
92      CNDOT_TDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
93                                                               container::setCndottdot)),
94      /** Object covariance matrix [6,6]. */
95      CNDOT_NDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
96                                                               container::setCndotndot)),
97      /** Object covariance matrix [7,1]. */
98      CDRG_R((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
99                                                               container::setCdrgr)),
100     /** Object covariance matrix [7,2]. */
101     CDRG_T((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
102                                                              container::setCdrgt)),
103     /** Object covariance matrix [7,3]. */
104     CDRG_N((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
105                                                              container::setCdrgn)),
106     /** Object covariance matrix [7,4]. */
107     CDRG_RDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
108                                                              container::setCdrgrdot)),
109     /** Object covariance matrix [7,5]. */
110     CDRG_TDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
111                                                              container::setCdrgtdot)),
112     /** Object covariance matrix [7,6]. */
113     CDRG_NDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
114                                                              container::setCdrgndot)),
115     /** Object covariance matrix [7,7]. */
116     CDRG_DRG((token, context, container) -> token.processAsDouble(Units.M4_PER_KG2, context.getParsedUnitsBehavior(),
117                                                              container::setCdrgdrg)),
118     /** Object covariance matrix [8,1]. */
119     CSRP_R((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
120                                                              container::setCsrpr)),
121     /** Object covariance matrix [8,2]. */
122     CSRP_T((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
123                                                              container::setCsrpt)),
124     /** Object covariance matrix [8,3]. */
125     CSRP_N((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
126                                                              container::setCsrpn)),
127     /** Object covariance matrix [8,4]. */
128     CSRP_RDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
129                                                              container::setCsrprdot)),
130     /** Object covariance matrix [8,5]. */
131     CSRP_TDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
132                                                              container::setCsrptdot)),
133     /** Object covariance matrix [8,6]. */
134     CSRP_NDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
135                                                              container::setCsrpndot)),
136     /** Object covariance matrix [8,7]. */
137     CSRP_DRG((token, context, container) -> token.processAsDouble(Units.M4_PER_KG2, context.getParsedUnitsBehavior(),
138                                                              container::setCsrpdrg)),
139     /** Object covariance matrix [8,9]. */
140     CSRP_SRP((token, context, container) -> token.processAsDouble(Units.M4_PER_KG2, context.getParsedUnitsBehavior(),
141                                                              container::setCsrpsrp)),
142     /** Object covariance matrix [9,1]. */
143     CTHR_R((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
144                                                              container::setCthrr)),
145     /** Object covariance matrix [9,2]. */
146     CTHR_T((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
147                                                              container::setCthrt)),
148     /** Object covariance matrix [9,3]. */
149     CTHR_N((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
150                                                              container::setCthrn)),
151     /** Object covariance matrix [9,4]. */
152     CTHR_RDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S3, context.getParsedUnitsBehavior(),
153                                                              container::setCthrrdot)),
154     /** Object covariance matrix [9,5]. */
155     CTHR_TDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S3, context.getParsedUnitsBehavior(),
156                                                              container::setCthrtdot)),
157     /** Object covariance matrix [9,6]. */
158     CTHR_NDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S3, context.getParsedUnitsBehavior(),
159                                                              container::setCthrndot)),
160     /** Object covariance matrix [9,7]. */
161     CTHR_DRG((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS2, context.getParsedUnitsBehavior(),
162                                                              container::setCthrdrg)),
163     /** Object covariance matrix [9,8]. */
164     CTHR_SRP((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS2, context.getParsedUnitsBehavior(),
165                                                              container::setCthrsrp)),
166     /** Object covariance matrix [9,9]. */
167     CTHR_THR((token, context, container) -> token.processAsDouble(Units.M2_PER_S4, context.getParsedUnitsBehavior(),
168                                                              container::setCthrthr));
169 
170     /** Processing method. */
171     private final transient TokenProcessor processor;
172 
173     /** Simple constructor.
174      * @param processor processing method
175      */
176     RTNCovarianceKey(final TokenProcessor processor) {
177         this.processor = processor;
178     }
179 
180     /** Process one token.
181      * @param token token to process
182      * @param context context binding
183      * @param container container to fill
184      * @return true of token was accepted
185      */
186     public boolean process(final ParseToken token, final ContextBinding context, final RTNCovariance container) {
187         return processor.process(token, context, container);
188     }
189 
190     /** Interface for processing one token. */
191     interface TokenProcessor {
192         /** Process one token.
193          * @param token token to process
194          * @param context context binding
195          * @param container container to fill
196          * @return true of token was accepted
197          */
198         boolean process(ParseToken token, ContextBinding context, RTNCovariance container);
199     }
200 
201 }