1   /* Copyright 2002-2022 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.odm.ocm;
18  
19  import java.io.IOException;
20  
21  import org.orekit.files.ccsds.definitions.TimeConverter;
22  import org.orekit.files.ccsds.ndm.odm.OdmMetadataKey;
23  import org.orekit.files.ccsds.section.AbstractWriter;
24  import org.orekit.files.ccsds.section.KvnStructureKey;
25  import org.orekit.files.ccsds.section.MetadataKey;
26  import org.orekit.files.ccsds.section.XmlStructureKey;
27  import org.orekit.files.ccsds.utils.generation.Generator;
28  import org.orekit.utils.units.Unit;
29  
30  /**
31   * Writer for Common metadata for CCSDS Orbit Comprehensive Messages.
32   *
33   * @author Luc Maisonobe
34   * @since 11.0
35   */
36  class OcmMetadataWriter extends AbstractWriter {
37  
38      /** Metadata. */
39      private final OcmMetadata metadata;
40  
41      /** Converter for dates. */
42      private final TimeConverter timeConverter;
43  
44      /** Simple constructor.
45       * @param metadata metadata to write
46       * @param timeConverter converter for dates
47       */
48      OcmMetadataWriter(final OcmMetadata metadata, final TimeConverter timeConverter) {
49          super(XmlStructureKey.metadata.name(), KvnStructureKey.META.name());
50          this.metadata      = metadata;
51          this.timeConverter = timeConverter;
52      }
53  
54      /** {@inheritDoc} */
55      @Override
56      protected void writeContent(final Generator generator) throws IOException {
57  
58          generator.writeComments(metadata.getComments());
59  
60          generator.writeEntry(OcmMetadataKey.CLASSIFICATION.name(),
61                               metadata.getClassification(), null, false);
62  
63          // object
64          generator.writeEntry(OdmMetadataKey.OBJECT_NAME.name(),
65                               metadata.getObjectName(), null, false);
66          generator.writeEntry(OcmMetadataKey.INTERNATIONAL_DESIGNATOR.name(),
67                               metadata.getInternationalDesignator(), null, false);
68          generator.writeEntry(OcmMetadataKey.CATALOG_NAME.name(),
69                               metadata.getCatalogName(), null, false);
70          generator.writeEntry(OcmMetadataKey.OBJECT_DESIGNATOR.name(),
71                               metadata.getObjectDesignator(), null, false);
72          generator.writeEntry(OcmMetadataKey.ALTERNATE_NAMES.name(),
73                               metadata.getAlternateNames(), false);
74  
75          // originator
76          generator.writeEntry(OcmMetadataKey.ORIGINATOR_POC.name(),
77                               metadata.getOriginatorPOC(), null, false);
78          generator.writeEntry(OcmMetadataKey.ORIGINATOR_POSITION.name(),
79                               metadata.getOriginatorPosition(), null, false);
80          generator.writeEntry(OcmMetadataKey.ORIGINATOR_PHONE.name(),
81                               metadata.getOriginatorPhone(), null, false);
82          generator.writeEntry(OcmMetadataKey.ORIGINATOR_ADDRESS.name(),
83                               metadata.getOriginatorAddress(), null, false);
84  
85          // technical
86          generator.writeEntry(OcmMetadataKey.TECH_ORG.name(),
87                               metadata.getTechOrg(), null, false);
88          generator.writeEntry(OcmMetadataKey.TECH_POC.name(),
89                               metadata.getTechPOC(), null, false);
90          generator.writeEntry(OcmMetadataKey.TECH_POSITION.name(),
91                               metadata.getTechPosition(), null, false);
92          generator.writeEntry(OcmMetadataKey.TECH_PHONE.name(),
93                               metadata.getTechPhone(), null, false);
94          generator.writeEntry(OcmMetadataKey.TECH_ADDRESS.name(),
95                               metadata.getTechAddress(), null, false);
96  
97          // messages
98          generator.writeEntry(OcmMetadataKey.PREVIOUS_MESSAGE_ID.name(),
99                               metadata.getPreviousMessageID(), null, false);
100         generator.writeEntry(OcmMetadataKey.NEXT_MESSAGE_ID.name(),
101                              metadata.getNextMessageID(), null, false);
102         generator.writeEntry(OcmMetadataKey.ADM_MESSAGE_LINK.name(),
103                              metadata.getAdmMessageLink(), null, false);
104         generator.writeEntry(OcmMetadataKey.CDM_MESSAGE_LINK.name(),
105                              metadata.getCdmMessageLink(), null, false);
106         generator.writeEntry(OcmMetadataKey.PRM_MESSAGE_LINK.name(),
107                              metadata.getPrmMessageLink(), null, false);
108         generator.writeEntry(OcmMetadataKey.RDM_MESSAGE_LINK.name(),
109                              metadata.getRdmMessageLink(), null, false);
110         generator.writeEntry(OcmMetadataKey.TDM_MESSAGE_LINK.name(),
111                              metadata.getTdmMessageLink(), null, false);
112 
113         // operator
114         generator.writeEntry(OcmMetadataKey.OPERATOR.name(),
115                              metadata.getOperator(), null, false);
116         generator.writeEntry(OcmMetadataKey.OWNER.name(),
117                              metadata.getOwner(), null, false);
118         generator.writeEntry(OcmMetadataKey.COUNTRY.name(),
119                              metadata.getCountry(), null, false);
120         generator.writeEntry(OcmMetadataKey.CONSTELLATION.name(),
121                              metadata.getConstellation(), null, false);
122         generator.writeEntry(OcmMetadataKey.OBJECT_TYPE.name(),
123                              metadata.getObjectType(), false);
124 
125         // time
126         generator.writeEntry(MetadataKey.TIME_SYSTEM.name(),
127                              metadata.getTimeSystem(), false);
128         generator.writeEntry(OcmMetadataKey.EPOCH_TZERO.name(), timeConverter,
129                              metadata.getEpochT0(), true);
130 
131         // definitions
132         generator.writeEntry(OcmMetadataKey.OPS_STATUS.name(),
133                              metadata.getOpsStatus(), false);
134         generator.writeEntry(OcmMetadataKey.ORBIT_CATEGORY.name(),
135                              metadata.getOrbitCategory(), false);
136         generator.writeEntry(OcmMetadataKey.OCM_DATA_ELEMENTS.name(),
137                              metadata.getOcmDataElements(), false);
138 
139         // other times
140         generator.writeEntry(OcmMetadataKey.SCLK_OFFSET_AT_EPOCH.name(), metadata.getSclkOffsetAtEpoch(), Unit.SECOND, false);
141         generator.writeEntry(OcmMetadataKey.SCLK_SEC_PER_SI_SEC.name(),  metadata.getSclkSecPerSISec(),   Unit.SECOND, false);
142         generator.writeEntry(OcmMetadataKey.PREVIOUS_MESSAGE_EPOCH.name(), timeConverter,
143                              metadata.getPreviousMessageEpoch(), false);
144         generator.writeEntry(OcmMetadataKey.NEXT_MESSAGE_EPOCH.name(), timeConverter,
145                              metadata.getNextMessageEpoch(), false);
146         generator.writeEntry(OcmMetadataKey.START_TIME.name(), timeConverter,
147                              metadata.getStartTime(), false);
148         generator.writeEntry(OcmMetadataKey.STOP_TIME.name(), timeConverter,
149                              metadata.getStopTime(), false);
150         generator.writeEntry(OcmMetadataKey.TIME_SPAN.name(),        metadata.getTimeSpan(),  Unit.DAY,    false);
151         generator.writeEntry(OcmMetadataKey.TAIMUTC_AT_TZERO.name(), metadata.getTaimutcT0(), Unit.SECOND, false);
152         generator.writeEntry(OcmMetadataKey.UT1MUTC_AT_TZERO.name(), metadata.getUt1mutcT0(), Unit.SECOND, false);
153 
154         // data sources
155         generator.writeEntry(OcmMetadataKey.EOP_SOURCE.name(),
156                              metadata.getEopSource(), null, false);
157         generator.writeEntry(OcmMetadataKey.INTERP_METHOD_EOP.name(),
158                              metadata.getInterpMethodEOP(), null, false);
159         generator.writeEntry(OcmMetadataKey.CELESTIAL_SOURCE.name(),
160                              metadata.getCelestialSource(), null, false);
161 
162     }
163 
164 }