WriterBuilder.java

  1. /* Copyright 2002-2022 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.aem.AemWriter;
  21. import org.orekit.files.ccsds.ndm.adm.apm.ApmWriter;
  22. import org.orekit.files.ccsds.ndm.cdm.CdmWriter;
  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. /** Builder for all {@link NdmConstituent CCSDS Message} files writers.
  34.  * <p>
  35.  * This builder can be used for building all CCSDS Messages writers types.
  36.  * It is particularly useful in multi-threaded context as writers cannot
  37.  * be shared between threads and thus several independent writers must be
  38.  * built in this case.
  39.  * </p>
  40.  * @author Luc Maisonobe
  41.  * @since 11.0
  42.  */
  43. public class WriterBuilder extends AbstractBuilder<WriterBuilder> {

  44.     /**
  45.      * Simple constructor.
  46.      * <p>
  47.      * This constructor creates a builder with
  48.      * <ul>
  49.      *   <li>{@link #getConventions() IERS conventions} set to {@link IERSConventions#IERS_2010}</li>
  50.      *   <li>{@link #getDataContext() data context} set to {@link DataContext#getDefault() default context}</li>
  51.      *   <li>{@link #getMissionReferenceDate() mission reference date} set to {@code null}</li>
  52.      *   <li>{@link #getRangeUnitsConverter() converter for range units} set to {@link IdentityConverter}</li>
  53.      * </ul>
  54.      */
  55.     @DefaultDataContext
  56.     public WriterBuilder() {
  57.         this(DataContext.getDefault());
  58.     }

  59.     /**
  60.      * Simple constructor.
  61.      * <p>
  62.      * This constructor creates a builder with
  63.      * <ul>
  64.      *   <li>{@link #getConventions() IERS conventions} set to {@link IERSConventions#IERS_2010}</li>
  65.      *   <li>{@link #getMissionReferenceDate() mission reference date} set to {@code null}</li>
  66.      *   <li>{@link #getRangeUnitsConverter() converter for range units} set to {@link IdentityConverter}</li>
  67.      * </ul>
  68.      * @param dataContext data context used to retrieve frames, time scales, etc.
  69.      */
  70.     public WriterBuilder(final DataContext dataContext) {
  71.         this(IERSConventions.IERS_2010, dataContext, null, new IdentityConverter());
  72.     }

  73.     /** Complete constructor.
  74.      * @param conventions IERS Conventions
  75.      * @param dataContext used to retrieve frames, time scales, etc.
  76.      * @param missionReferenceDate reference date for Mission Elapsed Time or Mission Relative Time time systems
  77.      * @param rangeUnitsConverter converter for {@link RangeUnits#RU Range Units}
  78.      */
  79.     private WriterBuilder(final IERSConventions conventions, final DataContext dataContext,
  80.                           final AbsoluteDate missionReferenceDate, final RangeUnitsConverter rangeUnitsConverter) {
  81.         super(conventions, dataContext, missionReferenceDate, rangeUnitsConverter);
  82.     }

  83.     /** {@inheritDoc} */
  84.     @Override
  85.     protected WriterBuilder create(final IERSConventions newConventions, final DataContext newDataContext,
  86.                                    final AbsoluteDate newMissionReferenceDate, final RangeUnitsConverter newRangeUnitsConverter) {
  87.         return new WriterBuilder(newConventions, newDataContext, newMissionReferenceDate, newRangeUnitsConverter);
  88.     }

  89.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.Ndm Navigation Data Messages}.
  90.      * @return a new writer
  91.      */
  92.     public NdmWriter buildNdmWriter() {
  93.         return new NdmWriter(this);
  94.     }

  95.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.odm.opm.Opm Orbit Parameters Messages}.
  96.      * @return a new writer
  97.      */
  98.     public OpmWriter buildOpmWriter() {
  99.         return new OpmWriter(getConventions(), getDataContext(), getMissionReferenceDate());
  100.     }

  101.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.odm.omm.Omm Orbit Mean elements Messages}.
  102.      * @return a new writer
  103.      */
  104.     public OmmWriter buildOmmWriter() {
  105.         return new OmmWriter(getConventions(), getDataContext(), getMissionReferenceDate());
  106.     }

  107.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.odm.oem.Oem Orbit Ephemeris Messages}.
  108.      * @return a new writer
  109.      */
  110.     public OemWriter buildOemWriter() {
  111.         return new OemWriter(getConventions(), getDataContext(), getMissionReferenceDate());
  112.     }

  113.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.odm.ocm.Ocm Orbit Comprehensive Messages}.
  114.      * @return a new writer
  115.      */
  116.     public OcmWriter buildOcmWriter() {
  117.         return new OcmWriter(getConventions(), getDataContext());
  118.     }

  119.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.adm.apm.Apm Attitude Parameters Messages}.
  120.      * @return a new writer
  121.      */
  122.     public ApmWriter buildApmWriter() {
  123.         return new ApmWriter(getConventions(), getDataContext(), getMissionReferenceDate());
  124.     }

  125.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.adm.aem.Aem Attitude Ephemeris Messages}.
  126.      * @return a new writer
  127.      */
  128.     public AemWriter buildAemWriter() {
  129.         return new AemWriter(getConventions(), getDataContext(), getMissionReferenceDate());
  130.     }

  131.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.tdm.Tdm Tracking Data Messages}.
  132.      * @return a new writer
  133.      */
  134.     public TdmWriter buildTdmWriter() {
  135.         return new TdmWriter(getConventions(), getDataContext(), getRangeUnitsConverter());
  136.     }

  137.     /** Build a writer for {@link org.orekit.files.ccsds.ndm.cdm.Cdm Conjunction Data Messages}.
  138.      * @return a new writer
  139.      */
  140.     public CdmWriter buildCdmWriter() {
  141.         return new CdmWriter(getConventions(), getDataContext());
  142.     }

  143. }