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 XYZCovariance CDM covariance matrix} entries.
25   */
26  public enum XYZCovarianceKey {
27  
28      /** Comment entry. */
29      COMMENT((token, context, container) ->
30              token.getType() == TokenType.ENTRY ? container.addComment(token.getContentAsNormalizedString()) : true),
31  
32      /** Object covariance matrix [1,1]. */
33      CX_X((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
34                                                               container::setCxx)),
35      /** Object covariance matrix [2,1]. */
36      CY_X((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
37                                                               container::setCyx)),
38      /** Object covariance matrix [2,2]. */
39      CY_Y((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
40                                                               container::setCyy)),
41      /** Object covariance matrix [3,1]. */
42      CZ_X((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
43                                                               container::setCzx)),
44      /** Object covariance matrix [3,2]. */
45      CZ_Y((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
46                                                               container::setCzy)),
47      /** Object covariance matrix [3,3]. */
48      CZ_Z((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
49                                                               container::setCzz)),
50      /** Object covariance matrix [4,1]. */
51      CXDOT_X((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
52                                                               container::setCxdotx)),
53      /** Object covariance matrix [4,2]. */
54      CXDOT_Y((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
55                                                               container::setCxdoty)),
56      /** Object covariance matrix [4,3]. */
57      CXDOT_Z((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
58                                                               container::setCxdotz)),
59      /** Object covariance matrix [4,4]. */
60      CXDOT_XDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
61                                                               container::setCxdotxdot)),
62      /** Object covariance matrix [5,1]. */
63      CYDOT_X((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
64                                                               container::setCydotx)),
65      /** Object covariance matrix [5,2]. */
66      CYDOT_Y((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
67                                                               container::setCydoty)),
68      /** Object covariance matrix [5,3]. */
69      CYDOT_Z((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
70                                                               container::setCydotz)),
71      /** Object covariance matrix [5,4]. */
72      CYDOT_XDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
73                                                               container::setCydotxdot)),
74      /** Object covariance matrix [5,5]. */
75      CYDOT_YDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
76                                                               container::setCydotydot)),
77      /** Object covariance matrix [6,1]. */
78      CZDOT_X((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
79                                                               container::setCzdotx)),
80      /** Object covariance matrix [6,2]. */
81      CZDOT_Y((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
82                                                               container::setCzdoty)),
83      /** Object covariance matrix [6,3]. */
84      CZDOT_Z((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
85                                                               container::setCzdotz)),
86      /** Object covariance matrix [6,4]. */
87      CZDOT_XDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
88                                                               container::setCzdotxdot)),
89      /** Object covariance matrix [6,5]. */
90      CZDOT_YDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
91                                                               container::setCzdotydot)),
92      /** Object covariance matrix [6,6]. */
93      CZDOT_ZDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
94                                                               container::setCzdotzdot)),
95      /** Object covariance matrix [7,1]. */
96      CDRG_X((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
97                                                               container::setCdrgx)),
98      /** Object covariance matrix [7,2]. */
99      CDRG_Y((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
100                                                              container::setCdrgy)),
101     /** Object covariance matrix [7,3]. */
102     CDRG_Z((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
103                                                              container::setCdrgz)),
104     /** Object covariance matrix [7,4]. */
105     CDRG_XDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
106                                                              container::setCdrgxdot)),
107     /** Object covariance matrix [7,5]. */
108     CDRG_YDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
109                                                              container::setCdrgydot)),
110     /** Object covariance matrix [7,6]. */
111     CDRG_ZDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
112                                                              container::setCdrgzdot)),
113     /** Object covariance matrix [7,7]. */
114     CDRG_DRG((token, context, container) -> token.processAsDouble(Units.M4_PER_KG2, context.getParsedUnitsBehavior(),
115                                                              container::setCdrgdrg)),
116     /** Object covariance matrix [8,1]. */
117     CSRP_X((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
118                                                              container::setCsrpx)),
119     /** Object covariance matrix [8,2]. */
120     CSRP_Y((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
121                                                              container::setCsrpy)),
122     /** Object covariance matrix [8,3]. */
123     CSRP_Z((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
124                                                              container::setCsrpz)),
125     /** Object covariance matrix [8,4]. */
126     CSRP_XDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
127                                                              container::setCsrpxdot)),
128     /** Object covariance matrix [8,5]. */
129     CSRP_YDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
130                                                              container::setCsrpydot)),
131     /** Object covariance matrix [8,6]. */
132     CSRP_ZDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
133                                                              container::setCsrpzdot)),
134     /** Object covariance matrix [8,7]. */
135     CSRP_DRG((token, context, container) -> token.processAsDouble(Units.M4_PER_KG2, context.getParsedUnitsBehavior(),
136                                                              container::setCsrpdrg)),
137     /** Object covariance matrix [8,9]. */
138     CSRP_SRP((token, context, container) -> token.processAsDouble(Units.M4_PER_KG2, context.getParsedUnitsBehavior(),
139                                                              container::setCsrpsrp)),
140     /** Object covariance matrix [9,1]. */
141     CTHR_X((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
142                                                              container::setCthrx)),
143     /** Object covariance matrix [9,2]. */
144     CTHR_Y((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
145                                                              container::setCthry)),
146     /** Object covariance matrix [9,3]. */
147     CTHR_Z((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
148                                                              container::setCthrz)),
149     /** Object covariance matrix [9,4]. */
150     CTHR_XDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S3, context.getParsedUnitsBehavior(),
151                                                              container::setCthrxdot)),
152     /** Object covariance matrix [9,5]. */
153     CTHR_YDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S3, context.getParsedUnitsBehavior(),
154                                                              container::setCthrydot)),
155     /** Object covariance matrix [9,6]. */
156     CTHR_ZDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S3, context.getParsedUnitsBehavior(),
157                                                              container::setCthrzdot)),
158     /** Object covariance matrix [9,7]. */
159     CTHR_DRG((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS2, context.getParsedUnitsBehavior(),
160                                                              container::setCthrdrg)),
161     /** Object covariance matrix [9,8]. */
162     CTHR_SRP((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS2, context.getParsedUnitsBehavior(),
163                                                              container::setCthrsrp)),
164     /** Object covariance matrix [9,9]. */
165     CTHR_THR((token, context, container) -> token.processAsDouble(Units.M2_PER_S4, context.getParsedUnitsBehavior(),
166                                                              container::setCthrthr));
167 
168     /** Processing method. */
169     private final transient TokenProcessor processor;
170 
171     /** Simple constructor.
172      * @param processor processing method
173      */
174     XYZCovarianceKey(final TokenProcessor processor) {
175         this.processor = processor;
176     }
177 
178     /** Process one token.
179      * @param token token to process
180      * @param context context binding
181      * @param container container to fill
182      * @return true of token was accepted
183      */
184     public boolean process(final ParseToken token, final ContextBinding context, final XYZCovariance container) {
185         return processor.process(token, context, container);
186     }
187 
188     /** Interface for processing one token. */
189     interface TokenProcessor {
190         /** Process one token.
191          * @param token token to process
192          * @param context context binding
193          * @param container container to fill
194          * @return true of token was accepted
195          */
196         boolean process(ParseToken token, ContextBinding context, XYZCovariance container);
197     }
198 
199 }