OcmData.java
/* Copyright 2002-2026 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.ndm.odm.ocm;
import java.util.List;
import java.util.Optional;
import org.orekit.annotation.Nullable;
import org.orekit.files.ccsds.ndm.odm.UserDefined;
import org.orekit.files.ccsds.section.Data;
import org.orekit.files.ccsds.utils.Initializer;
/** Data container for Orbit Comprehensive Messages.
* @author Luc Maisonobe
* @since 11.0
*/
public class OcmData implements Data {
/** Trajectory state histories logical blocks. */
private final List<TrajectoryStateHistory> trajectoryBlocks;
/** Physical properties logical block. */
@Nullable
private final OrbitPhysicalProperties physicBlock;
/** Covariance logical blocks. */
private final List<OrbitCovarianceHistory> covarianceBlocks;
/** Maneuvers logical blocks. */
private final List<OrbitManeuverHistory> maneuverBlocks;
/** Perturbations logical block. */
@Nullable
private final Perturbations perturbationsBlock;
/** Orbit determination logical block. */
@Nullable
private final OrbitDetermination orbitDeterminationBlock;
/** User defined parameters logical block. */
@Nullable
private final UserDefined userDefinedBlock;
/** Simple constructor.
* @param trajectoryBlocks trajectory state histories logical blocks (may be empty)
* @param physicBlock physical properties logical block (may be null)
* @param covarianceBlocks covariance logical blocks (may be empty)
* @param maneuverBlocks maneuvers logical blocks (may be empty)
* @param perturbationsBlock perturbations logical block (may be null)
* @param orbitDeterminationBlock orbit determination logical block (may be null)
* @param userDefinedBlock user defined parameters logical block (may be null)
*/
public OcmData(final List<TrajectoryStateHistory> trajectoryBlocks,
final OrbitPhysicalProperties physicBlock,
final List<OrbitCovarianceHistory> covarianceBlocks,
final List<OrbitManeuverHistory> maneuverBlocks,
final Perturbations perturbationsBlock,
final OrbitDetermination orbitDeterminationBlock,
final UserDefined userDefinedBlock) {
this.trajectoryBlocks = Initializer.emptyListIfNull(trajectoryBlocks);
this.physicBlock = physicBlock;
this.covarianceBlocks = Initializer.emptyListIfNull(covarianceBlocks);
this.maneuverBlocks = Initializer.emptyListIfNull(maneuverBlocks);
this.perturbationsBlock = perturbationsBlock;
this.orbitDeterminationBlock = orbitDeterminationBlock;
this.userDefinedBlock = userDefinedBlock;
}
/** {@inheritDoc} */
@Override
public void validate(final double version) {
trajectoryBlocks.forEach(osh -> osh.getMetadata().validate(version));
if (physicBlock != null) {
physicBlock.validate(version);
}
covarianceBlocks.forEach(ch -> ch.getMetadata().validate(version));
maneuverBlocks.forEach(mh -> mh.getMetadata().validate(version));
if (perturbationsBlock != null) {
perturbationsBlock.validate(version);
}
if (orbitDeterminationBlock != null) {
orbitDeterminationBlock.validate(version);
}
if (userDefinedBlock != null) {
userDefinedBlock.validate(version);
}
}
/** Get trajectory state histories logical blocks.
* @return trajectory state histories logical blocks
* @since 12.0
*/
public List<TrajectoryStateHistory> getTrajectoryBlocks() {
return trajectoryBlocks;
}
/** Get physical properties logical block.
* @return physical properties logical block
*/
public Optional<OrbitPhysicalProperties> getPhysicBlock() {
return Optional.ofNullable(physicBlock);
}
/** Get covariance logical blocks.
* @return covariance logical blocks
*/
public List<OrbitCovarianceHistory> getCovarianceBlocks() {
return covarianceBlocks;
}
/** Get maneuvers logical blocks.
* @return maneuvers logical blocks
*/
public List<OrbitManeuverHistory> getManeuverBlocks() {
return maneuverBlocks;
}
/** Get perturbations logical block.
* @return perturbations logical block
*/
public Optional<Perturbations> getPerturbationsBlock() {
return Optional.ofNullable(perturbationsBlock);
}
/** Get orbit determination logical block.
* @return orbit determination logical block
*/
public Optional<OrbitDetermination> getOrbitDeterminationBlock() {
return Optional.ofNullable(orbitDeterminationBlock);
}
/** Get user defined parameters logical block.
* @return user defined parameters logical block
*/
public Optional<UserDefined> getUserDefinedBlock() {
return Optional.ofNullable(userDefinedBlock);
}
}