1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.ccsds.ndm.adm.acm;
18
19 import java.io.IOException;
20 import java.util.stream.Collectors;
21
22 import org.orekit.files.ccsds.definitions.TimeConverter;
23 import org.orekit.files.ccsds.ndm.adm.AdmMetadataKey;
24 import org.orekit.files.ccsds.section.AbstractWriter;
25 import org.orekit.files.ccsds.section.KvnStructureKey;
26 import org.orekit.files.ccsds.section.MetadataKey;
27 import org.orekit.files.ccsds.section.XmlStructureKey;
28 import org.orekit.files.ccsds.utils.generation.Generator;
29 import org.orekit.utils.units.Unit;
30
31
32
33
34
35
36
37 class AcmMetadataWriter extends AbstractWriter {
38
39
40 private final AcmMetadata metadata;
41
42
43 private final TimeConverter timeConverter;
44
45
46
47
48
49 AcmMetadataWriter(final AcmMetadata metadata, final TimeConverter timeConverter) {
50 super(XmlStructureKey.metadata.name(), KvnStructureKey.META.name());
51 this.metadata = metadata;
52 this.timeConverter = timeConverter;
53 }
54
55
56 @Override
57 protected void writeContent(final Generator generator) throws IOException {
58
59 generator.writeComments(metadata.getComments());
60
61
62 generator.writeEntry(AdmMetadataKey.OBJECT_NAME.name(),
63 metadata.getObjectName(), null, false);
64 generator.writeEntry(AcmMetadataKey.INTERNATIONAL_DESIGNATOR.name(),
65 metadata.getInternationalDesignator(), null, false);
66 generator.writeEntry(AcmMetadataKey.CATALOG_NAME.name(),
67 metadata.getCatalogName(), null, false);
68 generator.writeEntry(AcmMetadataKey.OBJECT_DESIGNATOR.name(),
69 metadata.getObjectDesignator(), null, false);
70
71
72 generator.writeEntry(AcmMetadataKey.ORIGINATOR_POC.name(),
73 metadata.getOriginatorPOC(), null, false);
74 generator.writeEntry(AcmMetadataKey.ORIGINATOR_POSITION.name(),
75 metadata.getOriginatorPosition(), null, false);
76 generator.writeEntry(AcmMetadataKey.ORIGINATOR_PHONE.name(),
77 metadata.getOriginatorPhone(), null, false);
78 generator.writeEntry(AcmMetadataKey.ORIGINATOR_EMAIL.name(),
79 metadata.getOriginatorEmail(), null, false);
80 generator.writeEntry(AcmMetadataKey.ORIGINATOR_ADDRESS.name(),
81 metadata.getOriginatorAddress(), null, false);
82
83
84 generator.writeEntry(AcmMetadataKey.ODM_MSG_LINK.name(),
85 metadata.getOdmMessageLink(), null, false);
86
87
88 if (metadata.getCenter() != null) {
89 generator.writeEntry(AdmMetadataKey.CENTER_NAME.name(), metadata.getCenter().getName(), null, false);
90 }
91 generator.writeEntry(MetadataKey.TIME_SYSTEM.name(),
92 metadata.getTimeSystem(), false);
93 generator.writeEntry(AcmMetadataKey.EPOCH_TZERO.name(), timeConverter,
94 metadata.getEpochT0(), true, true);
95
96
97 if (metadata.getAcmDataElements() != null) {
98 generator.writeEntry(AcmMetadataKey.ACM_DATA_ELEMENTS.name(),
99 metadata.getAcmDataElements().stream().map(Enum::name).collect(Collectors.toList()), false);
100 }
101
102
103 generator.writeEntry(AcmMetadataKey.START_TIME.name(), timeConverter,
104 metadata.getStartTime(), false, false);
105 generator.writeEntry(AcmMetadataKey.STOP_TIME.name(), timeConverter,
106 metadata.getStopTime(), false, false);
107 generator.writeEntry(AcmMetadataKey.TAIMUTC_AT_TZERO.name(), metadata.getTaimutcT0(), Unit.SECOND, false);
108 if (metadata.getNextLeapEpoch() != null) {
109 generator.writeEntry(AcmMetadataKey.NEXT_LEAP_EPOCH.name(), timeConverter,
110 metadata.getNextLeapEpoch(), true, true);
111 generator.writeEntry(AcmMetadataKey.NEXT_LEAP_TAIMUTC.name(), metadata.getNextLeapTaimutc(), Unit.SECOND, true);
112 }
113
114 }
115
116 }