1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.ccsds.ndm;
18
19 import java.io.IOException;
20
21 import org.orekit.errors.OrekitException;
22 import org.orekit.errors.OrekitInternalError;
23 import org.orekit.errors.OrekitMessages;
24 import org.orekit.files.ccsds.ndm.adm.acm.Acm;
25 import org.orekit.files.ccsds.ndm.adm.aem.Aem;
26 import org.orekit.files.ccsds.ndm.adm.apm.Apm;
27 import org.orekit.files.ccsds.ndm.odm.ocm.Ocm;
28 import org.orekit.files.ccsds.ndm.odm.oem.Oem;
29 import org.orekit.files.ccsds.ndm.odm.omm.Omm;
30 import org.orekit.files.ccsds.ndm.odm.opm.Opm;
31 import org.orekit.files.ccsds.ndm.tdm.Tdm;
32 import org.orekit.files.ccsds.section.Header;
33 import org.orekit.files.ccsds.section.Segment;
34 import org.orekit.files.ccsds.utils.generation.Generator;
35 import org.orekit.files.ccsds.utils.generation.MessageWriter;
36
37
38
39
40
41
42
43 public class NdmWriter {
44
45
46 private final WriterBuilder builder;
47
48
49 private boolean started;
50
51
52 private int count;
53
54
55
56
57
58
59
60
61
62 public NdmWriter(final WriterBuilder builder) {
63 this.builder = builder;
64 this.started = false;
65 this.count = 0;
66 }
67
68
69
70
71
72
73 public void writeMessage(final Generator generator, final Ndm message)
74 throws IOException {
75
76
77 for (final String comment : message.getComments()) {
78 writeComment(generator, comment);
79 }
80
81
82 for (final NdmConstituent<?, ?> constituent : message.getConstituents()) {
83 writeConstituent(generator, constituent);
84 }
85
86 }
87
88
89
90
91
92 private void startMessageIfNeeded(final Generator generator) throws IOException {
93 if (!started) {
94 generator.enterSection(NdmStructureKey.ndm.name());
95 started = true;
96 }
97 }
98
99
100
101
102
103
104
105
106
107
108
109 public void writeComment(final Generator generator, final String comment) throws IOException {
110
111 startMessageIfNeeded(generator);
112
113
114 if (count > 0) {
115 throw new OrekitException(OrekitMessages.ATTEMPT_TO_GENERATE_MALFORMED_FILE, generator.getOutputName());
116 }
117
118 generator.writeEntry(NdmStructureKey.COMMENT.name(), comment, null, false);
119
120 }
121
122
123
124
125
126
127
128
129
130 public <H extends Header, S extends Segment<?, ?>, F extends NdmConstituent<H, S>>
131 void writeConstituent(final Generator generator, final F constituent) throws IOException {
132
133
134 startMessageIfNeeded(generator);
135
136
137 final MessageWriter<H, S, F> writer = buildWriter(constituent);
138 writer.writeMessage(generator, constituent);
139
140
141 ++count;
142
143 }
144
145
146
147
148
149
150
151
152
153 @SuppressWarnings("unchecked")
154 private <H extends Header, S extends Segment<?, ?>, F extends NdmConstituent<H, S>>
155 MessageWriter<H, S, F> buildWriter(final F constituent) throws IOException {
156 if (constituent instanceof Tdm) {
157 return (MessageWriter<H, S, F>) builder.buildTdmWriter();
158 } else if (constituent instanceof Opm) {
159 return (MessageWriter<H, S, F>) builder.buildOpmWriter();
160 } else if (constituent instanceof Omm) {
161 return (MessageWriter<H, S, F>) builder.buildOmmWriter();
162 } else if (constituent instanceof Oem) {
163 return (MessageWriter<H, S, F>) builder.buildOemWriter();
164 } else if (constituent instanceof Ocm) {
165 return (MessageWriter<H, S, F>) builder.buildOcmWriter();
166 } else if (constituent instanceof Apm) {
167 return (MessageWriter<H, S, F>) builder.buildApmWriter();
168 } else if (constituent instanceof Aem) {
169 return (MessageWriter<H, S, F>) builder.buildAemWriter();
170 } else if (constituent instanceof Acm) {
171 return (MessageWriter<H, S, F>) builder.buildAcmWriter();
172 } else {
173
174 throw new OrekitInternalError(null);
175 }
176 }
177
178 }