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 }