1 /* Copyright 2002-2025 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;
18
19 import org.orekit.annotation.DefaultDataContext;
20 import org.orekit.data.DataContext;
21 import org.orekit.files.ccsds.ndm.adm.acm.AcmWriter;
22 import org.orekit.files.ccsds.ndm.adm.aem.AemWriter;
23 import org.orekit.files.ccsds.ndm.adm.apm.ApmWriter;
24 import org.orekit.files.ccsds.ndm.cdm.CdmWriter;
25 import org.orekit.files.ccsds.ndm.odm.ocm.OcmWriter;
26 import org.orekit.files.ccsds.ndm.odm.oem.OemWriter;
27 import org.orekit.files.ccsds.ndm.odm.omm.OmmWriter;
28 import org.orekit.files.ccsds.ndm.odm.opm.OpmWriter;
29 import org.orekit.files.ccsds.ndm.tdm.IdentityConverter;
30 import org.orekit.files.ccsds.ndm.tdm.RangeUnits;
31 import org.orekit.files.ccsds.ndm.tdm.RangeUnitsConverter;
32 import org.orekit.files.ccsds.ndm.tdm.TdmWriter;
33 import org.orekit.time.AbsoluteDate;
34 import org.orekit.utils.IERSConventions;
35
36 /** Builder for all {@link NdmConstituent CCSDS Message} files writers.
37 * <p>
38 * This builder can be used for building all CCSDS Messages writers types.
39 * It is particularly useful in multi-threaded context as writers cannot
40 * be shared between threads and thus several independent writers must be
41 * built in this case.
42 * </p>
43 * @author Luc Maisonobe
44 * @since 11.0
45 */
46 public class WriterBuilder extends AbstractBuilder<WriterBuilder> {
47
48 /**
49 * Simple constructor.
50 * <p>
51 * This constructor creates a builder with
52 * <ul>
53 * <li>{@link #getConventions() IERS conventions} set to {@link IERSConventions#IERS_2010}</li>
54 * <li>{@link #getEquatorialRadius() central body equatorial radius} set to {@code Double.NaN}</li>
55 * <li>{@link #getFlattening() central body flattening} set to {@code Double.NaN}</li>
56 * <li>{@link #getDataContext() data context} set to {@link DataContext#getDefault() default context}</li>
57 * <li>{@link #getMissionReferenceDate() mission reference date} set to {@code null}</li>
58 * <li>{@link #getRangeUnitsConverter() converter for range units} set to {@link IdentityConverter}</li>
59 * </ul>
60 */
61 @DefaultDataContext
62 public WriterBuilder() {
63 this(DataContext.getDefault());
64 }
65
66 /**
67 * Simple constructor.
68 * <p>
69 * This constructor creates a builder with
70 * <ul>
71 * <li>{@link #getConventions() IERS conventions} set to {@link IERSConventions#IERS_2010}</li>
72 * <li>{@link #getEquatorialRadius() central body equatorial radius} set to {@code Double.NaN}</li>
73 * <li>{@link #getFlattening() central body flattening} set to {@code Double.NaN}</li>
74 * <li>{@link #getMissionReferenceDate() mission reference date} set to {@code null}</li>
75 * <li>{@link #getRangeUnitsConverter() converter for range units} set to {@link IdentityConverter}</li>
76 * </ul>
77 * @param dataContext data context used to retrieve frames, time scales, etc.
78 */
79 public WriterBuilder(final DataContext dataContext) {
80 this(IERSConventions.IERS_2010, Double.NaN, Double.NaN, dataContext, null, new IdentityConverter());
81 }
82
83 /** Complete constructor.
84 * @param conventions IERS Conventions
85 * @param equatorialRadius central body equatorial radius
86 * @param flattening central body flattening
87 * @param dataContext used to retrieve frames, time scales, etc.
88 * @param missionReferenceDate reference date for Mission Elapsed Time or Mission Relative Time time systems
89 * @param rangeUnitsConverter converter for {@link RangeUnits#RU Range Units}
90 */
91 private WriterBuilder(final IERSConventions conventions,
92 final double equatorialRadius, final double flattening,
93 final DataContext dataContext,
94 final AbsoluteDate missionReferenceDate, final RangeUnitsConverter rangeUnitsConverter) {
95 super(conventions, equatorialRadius, flattening, dataContext, missionReferenceDate, rangeUnitsConverter);
96 }
97
98 /** {@inheritDoc} */
99 @Override
100 protected WriterBuilder create(final IERSConventions newConventions,
101 final double newEquatorialRadius, final double newFlattening,
102 final DataContext newDataContext,
103 final AbsoluteDate newMissionReferenceDate, final RangeUnitsConverter newRangeUnitsConverter) {
104 return new WriterBuilder(newConventions, newEquatorialRadius, newFlattening, newDataContext,
105 newMissionReferenceDate, newRangeUnitsConverter);
106 }
107
108 /** Build a writer for {@link org.orekit.files.ccsds.ndm.Ndm Navigation Data Messages}.
109 * @return a new writer
110 */
111 public NdmWriter buildNdmWriter() {
112 return new NdmWriter(this);
113 }
114
115 /** Build a writer for {@link org.orekit.files.ccsds.ndm.odm.opm.Opm Orbit Parameters Messages}.
116 * @return a new writer
117 */
118 public OpmWriter buildOpmWriter() {
119 return new OpmWriter(getConventions(), getDataContext(), getMissionReferenceDate());
120 }
121
122 /** Build a writer for {@link org.orekit.files.ccsds.ndm.odm.omm.Omm Orbit Mean elements Messages}.
123 * @return a new writer
124 */
125 public OmmWriter buildOmmWriter() {
126 return new OmmWriter(getConventions(), getDataContext(), getMissionReferenceDate());
127 }
128
129 /** Build a writer for {@link org.orekit.files.ccsds.ndm.odm.oem.Oem Orbit Ephemeris Messages}.
130 * @return a new writer
131 */
132 public OemWriter buildOemWriter() {
133 return new OemWriter(getConventions(), getDataContext(), getMissionReferenceDate());
134 }
135
136 /** Build a writer for {@link org.orekit.files.ccsds.ndm.odm.ocm.Ocm Orbit Comprehensive Messages}.
137 * @return a new writer
138 */
139 public OcmWriter buildOcmWriter() {
140 return new OcmWriter(getConventions(), getEquatorialRadius(), getFlattening(), getDataContext());
141 }
142
143 /** Build a writer for {@link org.orekit.files.ccsds.ndm.adm.apm.Apm Attitude Parameters Messages}.
144 * @return a new writer
145 */
146 public ApmWriter buildApmWriter() {
147 return new ApmWriter(getConventions(), getDataContext(), getMissionReferenceDate());
148 }
149
150 /** Build a writer for {@link org.orekit.files.ccsds.ndm.adm.aem.Aem Attitude Ephemeris Messages}.
151 * @return a new writer
152 */
153 public AemWriter buildAemWriter() {
154 return new AemWriter(getConventions(), getDataContext(), getMissionReferenceDate());
155 }
156
157 /** Build a writer for {@link org.orekit.files.ccsds.ndm.adm.acm.Acm Attitude Comprehensive Messages}.
158 * @return a new writer
159 * @since 12.0
160 */
161 public AcmWriter buildAcmWriter() {
162 return new AcmWriter(getConventions(), getDataContext());
163 }
164
165 /** Build a writer for {@link org.orekit.files.ccsds.ndm.tdm.Tdm Tracking Data Messages}.
166 * @return a new writer
167 */
168 public TdmWriter buildTdmWriter() {
169 return new TdmWriter(getConventions(), getDataContext(), getRangeUnitsConverter());
170 }
171
172 /** Build a writer for {@link org.orekit.files.ccsds.ndm.cdm.Cdm Conjunction Data Messages}.
173 * @return a new writer
174 */
175 public CdmWriter buildCdmWriter() {
176 return new CdmWriter(getConventions(), getDataContext());
177 }
178
179 }