1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.ccsds.ndm.tdm;
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.section.KvnStructureKey;
24 import org.orekit.files.ccsds.section.XmlStructureKey;
25 import org.orekit.files.ccsds.utils.FileFormat;
26 import org.orekit.files.ccsds.utils.generation.Generator;
27 import org.orekit.time.AbsoluteDate;
28 import org.orekit.utils.units.Unit;
29
30
31
32
33
34
35
36
37 class ObservationsBlockWriter extends AbstractWriter {
38
39
40 private final ObservationsBlock observationsBlock;
41
42
43 private final TimeConverter timeConverter;
44
45
46 private final TdmMetadata metadata;
47
48
49 private final RangeUnitsConverter converter;
50
51
52
53
54
55
56
57
58 ObservationsBlockWriter(final ObservationsBlock observationsBlock, final TimeConverter timeConverter,
59 final TdmMetadata metadata, final RangeUnitsConverter converter) {
60 super(XmlStructureKey.data.name(), KvnStructureKey.DATA.name());
61 this.observationsBlock = observationsBlock;
62 this.timeConverter = timeConverter;
63 this.metadata = metadata;
64 this.converter = converter;
65 }
66
67
68 @Override
69 protected void writeContent(final Generator generator) throws IOException {
70
71 generator.writeComments(observationsBlock.getComments());
72
73
74 for (final Observation observation : observationsBlock.getObservations()) {
75 final ObservationType type = observation.getType();
76 final AbsoluteDate date = observation.getEpoch();
77 final double siValue = observation.getMeasurement();
78 final double rawValue = type.siToRaw(converter, metadata, date, siValue);
79 if (generator.getFormat() == FileFormat.KVN) {
80 final StringBuilder builder = new StringBuilder();
81 builder.append(generator.dateToString(timeConverter, date));
82 builder.append(' ');
83 builder.append(generator.doubleToString(rawValue));
84 generator.writeEntry(observation.getType().name(), builder.toString(), null, false);
85 } else {
86 generator.enterSection(TdmDataKey.observation.name());
87 generator.writeEntry(TdmDataKey.EPOCH.name(), timeConverter, date, true, true);
88 generator.writeEntry(type.name(), rawValue, Unit.ONE, true);
89 generator.exitSection();
90 }
91 }
92
93 }
94
95 }