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.data.DataContext;
22 import org.orekit.files.ccsds.definitions.TimeSystem;
23 import org.orekit.files.ccsds.ndm.ParsedUnitsBehavior;
24 import org.orekit.files.ccsds.section.Segment;
25 import org.orekit.files.ccsds.utils.ContextBinding;
26 import org.orekit.files.ccsds.utils.generation.AbstractMessageWriter;
27 import org.orekit.files.ccsds.utils.generation.Generator;
28 import org.orekit.utils.IERSConventions;
29
30
31
32
33
34
35
36 public class TdmWriter extends AbstractMessageWriter<TdmHeader, Segment<TdmMetadata, ObservationsBlock>, Tdm> {
37
38
39 public static final double CCSDS_TDM_VERS = 2.0;
40
41
42 public static final int KVN_PADDING_WIDTH = 29;
43
44
45 private final RangeUnitsConverter converter;
46
47
48
49
50
51
52
53
54
55
56
57
58 public TdmWriter(final IERSConventions conventions, final DataContext dataContext,
59 final RangeUnitsConverter converter) {
60 super(Tdm.ROOT, Tdm.FORMAT_VERSION_KEY, CCSDS_TDM_VERS,
61 new ContextBinding(
62 () -> conventions, () -> false, () -> dataContext,
63 () -> ParsedUnitsBehavior.STRICT_COMPLIANCE,
64 () -> null, () -> TimeSystem.UTC,
65 () -> 0.0, () -> 1.0));
66 this.converter = converter;
67 }
68
69
70 @Override
71 protected void writeSegmentContent(final Generator generator, final double formatVersion,
72 final Segment<TdmMetadata, ObservationsBlock> segment)
73 throws IOException {
74
75
76 final ContextBinding oldContext = getContext();
77 final TdmMetadata metadata = segment.getMetadata();
78 setContext(new ContextBinding(oldContext::getConventions,
79 oldContext::isSimpleEOP,
80 oldContext::getDataContext,
81 oldContext::getParsedUnitsBehavior,
82 oldContext::getReferenceDate,
83 metadata::getTimeSystem,
84 oldContext::getClockCount,
85 oldContext::getClockRate));
86 new TdmMetadataWriter(metadata, getTimeConverter()).
87 write(generator);
88
89
90 new ObservationsBlockWriter(segment.getData(), getTimeConverter(), segment.getMetadata(), converter).
91 write(generator);
92
93 }
94
95 }