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 }