WriterBuilder.java

  1. /* Copyright 2002-2024 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. import org.orekit.annotation.DefaultDataContext;
  19. import org.orekit.data.DataContext;
  20. import org.orekit.files.ccsds.ndm.adm.acm.AcmWriter;
  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.cdm.CdmWriter;
  24. import org.orekit.files.ccsds.ndm.odm.ocm.OcmWriter;
  25. import org.orekit.files.ccsds.ndm.odm.oem.OemWriter;
  26. import org.orekit.files.ccsds.ndm.odm.omm.OmmWriter;
  27. import org.orekit.files.ccsds.ndm.odm.opm.OpmWriter;
  28. import org.orekit.files.ccsds.ndm.tdm.IdentityConverter;
  29. import org.orekit.files.ccsds.ndm.tdm.RangeUnits;
  30. import org.orekit.files.ccsds.ndm.tdm.RangeUnitsConverter;
  31. import org.orekit.files.ccsds.ndm.tdm.TdmWriter;
  32. import org.orekit.time.AbsoluteDate;
  33. import org.orekit.utils.IERSConventions;

  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.      * Simple constructor.
  47.      * <p>
  48.      * This constructor creates a builder with
  49.      * <ul>
  50.      *   <li>{@link #getConventions() IERS conventions} set to {@link IERSConventions#IERS_2010}</li>
  51.      *   <li>{@link #getEquatorialRadius() central body equatorial radius} set to {@code Double.NaN}</li>
  52.      *   <li>{@link #getFlattening() central body flattening} set to {@code Double.NaN}</li>
  53.      *   <li>{@link #getDataContext() data context} set to {@link DataContext#getDefault() default context}</li>
  54.      *   <li>{@link #getMissionReferenceDate() mission reference date} set to {@code null}</li>
  55.      *   <li>{@link #getRangeUnitsConverter() converter for range units} set to {@link IdentityConverter}</li>
  56.      * </ul>
  57.      */
  58.     @DefaultDataContext
  59.     public WriterBuilder() {
  60.         this(DataContext.getDefault());
  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 #getEquatorialRadius() central body equatorial radius} set to {@code Double.NaN}</li>
  69.      *   <li>{@link #getFlattening() central body flattening} set to {@code Double.NaN}</li>
  70.      *   <li>{@link #getMissionReferenceDate() mission reference date} set to {@code null}</li>
  71.      *   <li>{@link #getRangeUnitsConverter() converter for range units} set to {@link IdentityConverter}</li>
  72.      * </ul>
  73.      * @param dataContext data context used to retrieve frames, time scales, etc.
  74.      */
  75.     public WriterBuilder(final DataContext dataContext) {
  76.         this(IERSConventions.IERS_2010, Double.NaN, Double.NaN, dataContext, null, new IdentityConverter());
  77.     }

  78.     /** Complete constructor.
  79.      * @param conventions IERS Conventions
  80.      * @param equatorialRadius central body equatorial radius
  81.      * @param flattening central body flattening
  82.      * @param dataContext used to retrieve frames, time scales, etc.
  83.      * @param missionReferenceDate reference date for Mission Elapsed Time or Mission Relative Time time systems
  84.      * @param rangeUnitsConverter converter for {@link RangeUnits#RU Range Units}
  85.      */
  86.     private WriterBuilder(final IERSConventions conventions,
  87.                           final double equatorialRadius, final double flattening,
  88.                           final DataContext dataContext,
  89.                           final AbsoluteDate missionReferenceDate, final RangeUnitsConverter rangeUnitsConverter) {
  90.         super(conventions, equatorialRadius, flattening, dataContext, missionReferenceDate, rangeUnitsConverter);
  91.     }

  92.     /** {@inheritDoc} */
  93.     @Override
  94.     protected WriterBuilder create(final IERSConventions newConventions,
  95.                                    final double newEquatorialRadius, final double newFlattening,
  96.                                    final DataContext newDataContext,
  97.                                    final AbsoluteDate newMissionReferenceDate, final RangeUnitsConverter newRangeUnitsConverter) {
  98.         return new WriterBuilder(newConventions, newEquatorialRadius, newFlattening, newDataContext,
  99.                                  newMissionReferenceDate, newRangeUnitsConverter);
  100.     }

  101.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.Ndm Navigation Data Messages}.
  102.      * @return a new writer
  103.      */
  104.     public NdmWriter buildNdmWriter() {
  105.         return new NdmWriter(this);
  106.     }

  107.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.odm.opm.Opm Orbit Parameters Messages}.
  108.      * @return a new writer
  109.      */
  110.     public OpmWriter buildOpmWriter() {
  111.         return new OpmWriter(getConventions(), getDataContext(), getMissionReferenceDate());
  112.     }

  113.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.odm.omm.Omm Orbit Mean elements Messages}.
  114.      * @return a new writer
  115.      */
  116.     public OmmWriter buildOmmWriter() {
  117.         return new OmmWriter(getConventions(), getDataContext(), getMissionReferenceDate());
  118.     }

  119.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.odm.oem.Oem Orbit Ephemeris Messages}.
  120.      * @return a new writer
  121.      */
  122.     public OemWriter buildOemWriter() {
  123.         return new OemWriter(getConventions(), getDataContext(), getMissionReferenceDate());
  124.     }

  125.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.odm.ocm.Ocm Orbit Comprehensive Messages}.
  126.      * @return a new writer
  127.      */
  128.     public OcmWriter buildOcmWriter() {
  129.         return new OcmWriter(getConventions(), getEquatorialRadius(), getFlattening(), getDataContext());
  130.     }

  131.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.adm.apm.Apm Attitude Parameters Messages}.
  132.      * @return a new writer
  133.      */
  134.     public ApmWriter buildApmWriter() {
  135.         return new ApmWriter(getConventions(), getDataContext(), getMissionReferenceDate());
  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.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.adm.acm.Acm Attitude Comprehensive Messages}.
  144.      * @return a new writer
  145.      * @since 12.0
  146.      */
  147.     public AcmWriter buildAcmWriter() {
  148.         return new AcmWriter(getConventions(), getDataContext());
  149.     }

  150.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.tdm.Tdm Tracking Data Messages}.
  151.      * @return a new writer
  152.      */
  153.     public TdmWriter buildTdmWriter() {
  154.         return new TdmWriter(getConventions(), getDataContext(), getRangeUnitsConverter());
  155.     }

  156.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.cdm.Cdm Conjunction Data Messages}.
  157.      * @return a new writer
  158.      */
  159.     public CdmWriter buildCdmWriter() {
  160.         return new CdmWriter(getConventions(), getDataContext());
  161.     }

  162. }