ContextBinding.java
- /* Copyright 2002-2023 CS GROUP
- * Licensed to CS GROUP (CS) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * CS licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.orekit.files.ccsds.utils;
- import java.util.function.BooleanSupplier;
- import java.util.function.DoubleSupplier;
- import java.util.function.Supplier;
- import org.orekit.data.DataContext;
- import org.orekit.files.ccsds.definitions.TimeSystem;
- import org.orekit.files.ccsds.ndm.ParsedUnitsBehavior;
- import org.orekit.time.AbsoluteDate;
- import org.orekit.utils.IERSConventions;
- /** Context for parsing/writing Navigation Data Message.
- * <p>
- * This class is a facade providing late binding access to data.
- * Late binding is mainly useful at parse time as it allows some data to be set up
- * during parsing itself. This is used for example to access {@link #getTimeSystem()
- * time system} that is generally parsed from metadata block, and used later on
- * within the same metadata block.
- * </p>
- * @author Luc Maisonobe
- * @since 11.0
- */
- public class ContextBinding {
- /** Behavior adopted for units that have been parsed from a CCSDS message. */
- private final Supplier<ParsedUnitsBehavior> behaviorSupplier;
- /** Supplier for IERS conventions to use. */
- private final Supplier<IERSConventions> conventionsSupplier;
- /** Supplier for simple or accurate EOP interpolation indicator. */
- private final BooleanSupplier simpleEOPSupplier;
- /** Supplier for data context. */
- private final Supplier<DataContext> dataContextSupplier;
- /** Supplier for reference date for mission elapsed time (MET), mission relative time (MRT),
- * or spacecraft clock (SCLK) time systems. */
- private final Supplier<AbsoluteDate> referenceDateSupplier;
- /** Supplier for reference system for interpreting dates. */
- private final Supplier<TimeSystem> timeSystemSupplier;
- /** Supplier for clock count at reference date in spacecraft clock (SCLK) time system. */
- private final DoubleSupplier clockCountSupplier;
- /** Supplier for clock rate in spacecraft clock (SCLK) time system. */
- private final DoubleSupplier clockRateSupplier;
- /** Create a new context.
- * @param conventionsSupplier supplier for IERS conventions to use
- * @param simpleEOPSupplier supplier for simple or accurate EOP interpolation indicator
- * @param dataContextSupplier supplier for data context to use
- * @param behaviorSupplier supplier for behavior to adopt on unit
- * @param referenceDateSupplier supplier for reference date for mission elapsed time (MET),
- * mission relative time (MRT), or spacecraft clock (SCLK) time systems
- * @param timeSystemSupplier supplier for reference system for interpreting dates
- * @param clockCountSupplier supplier for clock count at reference date in spacecraft clock (SCLK) time system
- * @param clockRateSupplier supplier for clock rate in spacecraft clock (SCLK) time system
- */
- public ContextBinding(final Supplier<IERSConventions> conventionsSupplier,
- final BooleanSupplier simpleEOPSupplier,
- final Supplier<DataContext> dataContextSupplier,
- final Supplier<ParsedUnitsBehavior> behaviorSupplier,
- final Supplier<AbsoluteDate> referenceDateSupplier,
- final Supplier<TimeSystem> timeSystemSupplier,
- final DoubleSupplier clockCountSupplier,
- final DoubleSupplier clockRateSupplier) {
- this.behaviorSupplier = behaviorSupplier;
- this.conventionsSupplier = conventionsSupplier;
- this.simpleEOPSupplier = simpleEOPSupplier;
- this.dataContextSupplier = dataContextSupplier;
- this.referenceDateSupplier = referenceDateSupplier;
- this.timeSystemSupplier = timeSystemSupplier;
- this.clockCountSupplier = clockCountSupplier;
- this.clockRateSupplier = clockRateSupplier;
- }
- /** Get the behavior to adopt for handling parsed units.
- * @return behavior to adopt for handling parsed units
- */
- public ParsedUnitsBehavior getParsedUnitsBehavior() {
- return behaviorSupplier.get();
- }
- /** Get IERS conventions.
- * @return IERS conventions to use while parsing
- */
- public IERSConventions getConventions() {
- return conventionsSupplier.get();
- }
- /** Get EOP interpolation method.
- * @return true if tidal effects are ignored when interpolating EOP
- */
- public boolean isSimpleEOP() {
- return simpleEOPSupplier.getAsBoolean();
- }
- /** Get the data context used for getting frames, time scales, and celestial bodies.
- * @return the data context.
- */
- public DataContext getDataContext() {
- return dataContextSupplier.get();
- }
- /** Get initial date.
- * @return reference date to use while parsing
- */
- public AbsoluteDate getReferenceDate() {
- return referenceDateSupplier.get();
- }
- /** Get the time system.
- * @return time system
- */
- public TimeSystem getTimeSystem() {
- return timeSystemSupplier.get();
- }
- /** Get clock count.
- * @return clock count at reference date
- */
- public double getClockCount() {
- return clockCountSupplier.getAsDouble();
- }
- /** Get clock rate.
- * @return clock rate (in clock ticks per SI second)
- */
- public double getClockRate() {
- return clockRateSupplier.getAsDouble();
- }
- }