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