TdmMetadataWriter.java

  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.files.ccsds.ndm.tdm;

  18. import java.io.IOException;
  19. import java.util.List;

  20. import org.orekit.files.ccsds.definitions.TimeConverter;
  21. import org.orekit.files.ccsds.definitions.Units;
  22. import org.orekit.files.ccsds.section.AbstractWriter;
  23. import org.orekit.files.ccsds.section.KvnStructureKey;
  24. import org.orekit.files.ccsds.section.MetadataKey;
  25. import org.orekit.files.ccsds.section.XmlStructureKey;
  26. import org.orekit.files.ccsds.utils.generation.Generator;
  27. import org.orekit.utils.units.Unit;


  28. /**
  29.  * Writer for CCSDS Tracking Data Message metadata.
  30.  *
  31.  * @author Luc Maisonobe
  32.  * @since 11.0
  33.  */
  34. class TdmMetadataWriter extends AbstractWriter {

  35.     /** Metadata. */
  36.     private final TdmMetadata metadata;

  37.     /** Converter for dates. */
  38.     private final TimeConverter timeConverter;

  39.     /** Simple constructor.
  40.      * @param metadata metadata to write
  41.      * @param timeConverter converter for dates
  42.      */
  43.     TdmMetadataWriter(final TdmMetadata metadata, final TimeConverter timeConverter) {
  44.         super(XmlStructureKey.metadata.name(), KvnStructureKey.META.name());
  45.         this.metadata     = metadata;
  46.         this.timeConverter = timeConverter;
  47.     }

  48.     /** {@inheritDoc} */
  49.     @Override
  50.     protected void writeContent(final Generator generator) throws IOException {

  51.         generator.writeComments(metadata.getComments());

  52.         generator.writeEntry(TdmMetadataKey.TRACK_ID.name(), metadata.getTrackId(), null, false);
  53.         final List<ObservationType> dataTypes = metadata.getDataTypes();
  54.         if (dataTypes != null && !dataTypes.isEmpty()) {
  55.             final StringBuilder dataTypesNames = new StringBuilder();
  56.             for (int i = 0; i < dataTypes.size(); ++i) {
  57.                 if (i > 0) {
  58.                     dataTypesNames.append(',');
  59.                 }
  60.                 dataTypesNames.append(dataTypes.get(i).name());
  61.             }
  62.             generator.writeEntry(TdmMetadataKey.DATA_TYPES.name(), dataTypesNames.toString(), null, false);
  63.         }

  64.         // time
  65.         generator.writeEntry(MetadataKey.TIME_SYSTEM.name(),                  metadata.getTimeSystem(), true);
  66.         generator.writeEntry(TdmMetadataKey.START_TIME.name(), timeConverter, metadata.getStartTime(),  false, false);
  67.         generator.writeEntry(TdmMetadataKey.STOP_TIME.name(),  timeConverter, metadata.getStopTime(),   false, false);

  68.         // participants
  69.         generator.writeEntry(TdmMetadataKey.PARTICIPANT_1.name(), metadata.getParticipants().get(1), null, true);
  70.         generator.writeEntry(TdmMetadataKey.PARTICIPANT_2.name(), metadata.getParticipants().get(2), null, false);
  71.         generator.writeEntry(TdmMetadataKey.PARTICIPANT_3.name(), metadata.getParticipants().get(3), null, false);
  72.         generator.writeEntry(TdmMetadataKey.PARTICIPANT_4.name(), metadata.getParticipants().get(4), null, false);
  73.         generator.writeEntry(TdmMetadataKey.PARTICIPANT_5.name(), metadata.getParticipants().get(5), null, false);

  74.         final TrackingMode mode = metadata.getMode();
  75.         generator.writeEntry(TdmMetadataKey.MODE.name(), mode, false);
  76.         if (mode == TrackingMode.SEQUENTIAL) {
  77.             generator.writeEntry(TdmMetadataKey.PATH.name(), intArrayToString(metadata.getPath()),  null, true);
  78.         } else if (mode == TrackingMode.SINGLE_DIFF) {
  79.             generator.writeEntry(TdmMetadataKey.PATH_1.name(), intArrayToString(metadata.getPath1()), null, true);
  80.             generator.writeEntry(TdmMetadataKey.PATH_2.name(), intArrayToString(metadata.getPath2()), null, true);
  81.         }

  82.         generator.writeEntry(TdmMetadataKey.EPHEMERIS_NAME_1.name(),       metadata.getEphemerisNames().get(1), null, false);
  83.         generator.writeEntry(TdmMetadataKey.EPHEMERIS_NAME_2.name(),       metadata.getEphemerisNames().get(2), null, false);
  84.         generator.writeEntry(TdmMetadataKey.EPHEMERIS_NAME_3.name(),       metadata.getEphemerisNames().get(3), null, false);
  85.         generator.writeEntry(TdmMetadataKey.EPHEMERIS_NAME_4.name(),       metadata.getEphemerisNames().get(4), null, false);
  86.         generator.writeEntry(TdmMetadataKey.EPHEMERIS_NAME_5.name(),       metadata.getEphemerisNames().get(5), null, false);

  87.         generator.writeEntry(TdmMetadataKey.TRANSMIT_BAND.name(),          metadata.getTransmitBand(), null, false);
  88.         generator.writeEntry(TdmMetadataKey.RECEIVE_BAND.name(),           metadata.getReceiveBand(),  null, false);
  89.         if (metadata.getTurnaroundNumerator() != 0 || metadata.getTurnaroundDenominator() != 0) {
  90.             generator.writeEntry(TdmMetadataKey.TURNAROUND_NUMERATOR.name(),   metadata.getTurnaroundNumerator(),   false);
  91.             generator.writeEntry(TdmMetadataKey.TURNAROUND_DENOMINATOR.name(), metadata.getTurnaroundDenominator(), false);
  92.         }
  93.         generator.writeEntry(TdmMetadataKey.TIMETAG_REF.name(),            metadata.getTimetagRef(),                       false);
  94.         generator.writeEntry(TdmMetadataKey.INTEGRATION_INTERVAL.name(),   metadata.getIntegrationInterval(), Unit.SECOND, false);
  95.         generator.writeEntry(TdmMetadataKey.INTEGRATION_REF.name(),        metadata.getIntegrationRef(),                   false);
  96.         generator.writeEntry(TdmMetadataKey.FREQ_OFFSET.name(),            metadata.getFreqOffset(),          Unit.HERTZ,  false);
  97.         generator.writeEntry(TdmMetadataKey.RANGE_MODE.name(),             metadata.getRangeMode(),                        false);
  98.         if (metadata.getRawRangeModulus() != 0) {
  99.             generator.writeEntry(TdmMetadataKey.RANGE_MODULUS.name(),      metadata.getRawRangeModulus(),     Unit.ONE,    false);
  100.         }
  101.         generator.writeEntry(TdmMetadataKey.RANGE_UNITS.name(),            metadata.getRangeUnits(),                       false);
  102.         generator.writeEntry(TdmMetadataKey.ANGLE_TYPE.name(),             metadata.getAngleType(),                        false);
  103.         if (metadata.getReferenceFrame() != null) {
  104.             generator.writeEntry(TdmMetadataKey.REFERENCE_FRAME.name(),    metadata.getReferenceFrame().getName(), null, false);
  105.         }

  106.         // interpolation
  107.         if (metadata.getInterpolationMethod() != null) {
  108.             generator.writeEntry(TdmMetadataKey.INTERPOLATION.name(),
  109.                                  metadata.getInterpolationMethod(),
  110.                                  null, true);
  111.             generator.writeEntry(TdmMetadataKey.INTERPOLATION_DEGREE.name(),
  112.                                  Integer.toString(metadata.getInterpolationDegree()),
  113.                                  null, true);
  114.         }

  115.         // Doppler
  116.         if (metadata.getDopplerCountBias() != 0) {
  117.             generator.writeEntry(TdmMetadataKey.DOPPLER_COUNT_BIAS.name(),  metadata.getDopplerCountBias(),  Unit.HERTZ, false);
  118.         }
  119.         if (metadata.getDopplerCountScale() != 1) {
  120.             generator.writeEntry(TdmMetadataKey.DOPPLER_COUNT_SCALE.name(), metadata.getDopplerCountScale(), Unit.ONE,   false);
  121.         }
  122.         if (metadata.hasDopplerCountRollover()) {
  123.             generator.writeEntry(TdmMetadataKey.DOPPLER_COUNT_BIAS.name(),  metadata.hasDopplerCountRollover() ? "YES" : "NO", null, false);
  124.         }

  125.         generator.writeEntry(TdmMetadataKey.TRANSMIT_DELAY_1.name(),       metadata.getTransmitDelays().get(1), Unit.SECOND, false);
  126.         generator.writeEntry(TdmMetadataKey.TRANSMIT_DELAY_2.name(),       metadata.getTransmitDelays().get(2), Unit.SECOND, false);
  127.         generator.writeEntry(TdmMetadataKey.TRANSMIT_DELAY_3.name(),       metadata.getTransmitDelays().get(3), Unit.SECOND, false);
  128.         generator.writeEntry(TdmMetadataKey.TRANSMIT_DELAY_4.name(),       metadata.getTransmitDelays().get(4), Unit.SECOND, false);
  129.         generator.writeEntry(TdmMetadataKey.TRANSMIT_DELAY_5.name(),       metadata.getTransmitDelays().get(5), Unit.SECOND, false);
  130.         generator.writeEntry(TdmMetadataKey.RECEIVE_DELAY_1.name(),        metadata.getReceiveDelays().get(1),  Unit.SECOND, false);
  131.         generator.writeEntry(TdmMetadataKey.RECEIVE_DELAY_2.name(),        metadata.getReceiveDelays().get(2),  Unit.SECOND, false);
  132.         generator.writeEntry(TdmMetadataKey.RECEIVE_DELAY_3.name(),        metadata.getReceiveDelays().get(3),  Unit.SECOND, false);
  133.         generator.writeEntry(TdmMetadataKey.RECEIVE_DELAY_4.name(),        metadata.getReceiveDelays().get(4),  Unit.SECOND, false);
  134.         generator.writeEntry(TdmMetadataKey.RECEIVE_DELAY_5.name(),        metadata.getReceiveDelays().get(5),  Unit.SECOND, false);
  135.         generator.writeEntry(TdmMetadataKey.DATA_QUALITY.name(),           metadata.getDataQuality(),                        false);
  136.         if (metadata.getCorrectionAngle1() != 0) {
  137.             generator.writeEntry(TdmMetadataKey.CORRECTION_ANGLE_1.name(),  metadata.getCorrectionAngle1(), Unit.DEGREE,     false);
  138.         }
  139.         if (metadata.getCorrectionAngle2() != 0) {
  140.             generator.writeEntry(TdmMetadataKey.CORRECTION_ANGLE_2.name(),  metadata.getCorrectionAngle2(), Unit.DEGREE,     false);
  141.         }
  142.         if (metadata.getCorrectionDoppler() != 0) {
  143.             generator.writeEntry(TdmMetadataKey.CORRECTION_DOPPLER.name(),  metadata.getCorrectionDoppler(), Units.KM_PER_S, false);
  144.         }
  145.         if (metadata.getCorrectionMagnitude() != 0) {
  146.             generator.writeEntry(TdmMetadataKey.CORRECTION_MAG.name(),      metadata.getCorrectionMagnitude(), Unit.ONE,     false);
  147.         }
  148.         if (metadata.getRawCorrectionRange() != 0) {
  149.             generator.writeEntry(TdmMetadataKey.CORRECTION_RANGE.name(),    metadata.getRawCorrectionRange(), Unit.ONE,      false);
  150.         }
  151.         if (metadata.getCorrectionRcs() != 0) {
  152.             generator.writeEntry(TdmMetadataKey.CORRECTION_RCS.name(),      metadata.getCorrectionRcs(),      Units.M2,      false);
  153.         }
  154.         if (metadata.getCorrectionReceive() != 0) {
  155.             generator.writeEntry(TdmMetadataKey.CORRECTION_RECEIVE.name(),  metadata.getCorrectionReceive(), Unit.HERTZ,     false);
  156.         }
  157.         if (metadata.getCorrectionTransmit() != 0) {
  158.             generator.writeEntry(TdmMetadataKey.CORRECTION_TRANSMIT.name(), metadata.getCorrectionTransmit(), Unit.HERTZ,    false);
  159.         }
  160.         if (metadata.getCorrectionAberrationYearly() != 0) {
  161.             generator.writeEntry(TdmMetadataKey.CORRECTION_ABERRATION_YEARLY.name(), metadata.getCorrectionAberrationYearly(), Unit.DEGREE,    false);
  162.         }
  163.         if (metadata.getCorrectionAberrationDiurnal() != 0) {
  164.             generator.writeEntry(TdmMetadataKey.CORRECTION_ABERRATION_DIURNAL.name(), metadata.getCorrectionAberrationDiurnal(), Unit.DEGREE,    false);
  165.         }
  166.         generator.writeEntry(TdmMetadataKey.CORRECTIONS_APPLIED.name(),     metadata.getCorrectionsApplied(),                false);

  167.     }

  168. }