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 java.io.IOException;
20  
21  import org.orekit.files.ccsds.definitions.TimeConverter;
22  import org.orekit.files.ccsds.section.AbstractWriter;
23  import org.orekit.files.ccsds.utils.generation.Generator;
24  import org.orekit.utils.units.Unit;
25  
26  /**
27   * Writer for OD parameters data block for CCSDS Conjunction Data Messages.
28   *
29   * @author Melina Vanel
30   * @since 11.2
31   */
32  public class ODParametersWriter extends AbstractWriter {
33  
34      /** OD parameters block. */
35      private final ODParameters ODparameters;
36  
37      /** Converter for dates. */
38      private final TimeConverter timeConverter;
39  
40      /** Create a writer.
41       * @param xmlTag name of the XML tag surrounding the section
42       * @param kvnTag name of the KVN tag surrounding the section (may be null)
43       * @param ODParameters OD parameters data to write
44       * @param timeConverter converter for dates
45       */
46      ODParametersWriter(final String xmlTag, final String kvnTag,
47                         final ODParameters ODParameters, final TimeConverter timeConverter) {
48          super(xmlTag, kvnTag);
49          this.ODparameters  = ODParameters;
50          this.timeConverter = timeConverter;
51      }
52  
53      /** {@inheritDoc} */
54      @Override
55      protected void writeContent(final Generator generator) throws IOException {
56  
57          generator.writeComments(ODparameters.getComments());
58          // OD parameters
59          generator.writeEntry(ODParametersKey.TIME_LASTOB_START.name(),   timeConverter, ODparameters.getTimeLastObsStart(),  true, false);
60          generator.writeEntry(ODParametersKey.TIME_LASTOB_END.name(),     timeConverter, ODparameters.getTimeLastObsEnd(),    true, false);
61          generator.writeEntry(ODParametersKey.RECOMMENDED_OD_SPAN.name(), ODparameters.getRecommendedOdSpan(), Unit.DAY,      false);
62          generator.writeEntry(ODParametersKey.ACTUAL_OD_SPAN.name(),      ODparameters.getActualOdSpan(),      Unit.DAY,      false);
63          generator.writeEntry(ODParametersKey.OBS_AVAILABLE.name(),       ODparameters.getObsAvailable(),                     false);
64          generator.writeEntry(ODParametersKey.OBS_USED.name(),            ODparameters.getObsUsed(),                          false);
65          generator.writeEntry(ODParametersKey.TRACKS_AVAILABLE.name(),    ODparameters.getTracksAvailable(),                  false);
66          generator.writeEntry(ODParametersKey.TRACKS_USED.name(),         ODparameters.getTracksUsed(),                       false);
67          generator.writeEntry(ODParametersKey.RESIDUALS_ACCEPTED.name(),  ODparameters.getResidualsAccepted(), Unit.PERCENT,  false);
68          generator.writeEntry(ODParametersKey.WEIGHTED_RMS.name(),        ODparameters.getWeightedRMS(),       Unit.ONE,      false);
69  
70      }
71  
72  }