public class CcsdsOrbitEphemerisMessageFile extends DefinitionalObjectCollection<CcsdsOrbitEphemerisMessageSegment>
Reads from and writes to Orbit Ephemeris Message (OEM) files determined by the specifications of The Consultative Committee for Space Data Systems (CCSDS). CCSDS OEM files can express position, velocity, acceleration, and covariance information.
The CCSDS specifications can be found on the CCSDS website. The two supported formats for OEM files are Key-value notation (KVN) and extensible markup language (XML). The official recommended standards for KVN OEM files can be found in "Orbit Data Messages", Document CCSDS 502.0-B-2 on the above website. The official recommended standards for XML OEM files can be found in "XML Specifications for Navigation Data Messages", Document CCSDS 505.0-B-2 on the website. Both documents also contain a few useful examples of correctly formatted OEM files for their respective formats.
Each OEM file can contain several segments of ephemeris data, so this class mostly serves as a
container for CcsdsOrbitEphemerisMessageSegment
objects and as an interface for
reading and writing those objects. The actual ephemeris and covariance data is stored in the segments.
Modifier | Constructor and Description |
---|---|
|
CcsdsOrbitEphemerisMessageFile()
Initializes a new instance.
|
protected |
CcsdsOrbitEphemerisMessageFile(CcsdsOrbitEphemerisMessageFile existingInstance,
CopyContext context)
Initializes a new instance as a copy of an existing instance.
|
Modifier and Type | Method and Description |
---|---|
protected boolean |
checkForSameDefinition(CcsdsOrbitEphemerisMessageFile other)
Checks to determine if another instance has the same definition as this instance and
returns
true if it does. |
protected boolean |
checkForSameDefinition(DefinitionalObjectCollection<CcsdsOrbitEphemerisMessageSegment> other)
Checks to determine if another instance has the same definition as this instance and
returns
true if it does. |
Object |
clone(CopyContext context)
Clones this object using the specified context.
|
protected int |
computeCurrentDefinitionHashCode()
Computes a hash code based on the current properties of this object.
|
ArrayList<String> |
getComments()
Gets a collection containing comments from the header of a CCSDS OEM file.
|
GregorianDate |
getCreationDate()
Gets the file creation date and time in UTC.
|
String |
getOriginator()
Gets the creating agency or operator.
|
String |
getVersion()
Gets the ephemeris file version.
|
static CcsdsOrbitEphemerisMessageFile |
readFrom(BufferedReader reader)
Reads the CCSDS OEM file.
|
static CcsdsOrbitEphemerisMessageFile |
readFrom(String fileName)
Reads the CCSDS OEM file.
|
void |
setCreationDate(GregorianDate value)
Sets the file creation date and time in UTC.
|
void |
setOriginator(String value)
Sets the creating agency or operator.
|
void |
setVersion(String value)
Sets the ephemeris file version.
|
void |
writeTo(Writer writer)
Writes this instance to a
Writer in the CCSDS orbit ephemeris message OEM format. |
void |
writeTo(Writer writer,
CcsdsOemFileWritingOptions options)
Writes this instance to a
Writer in the CCSDS orbit ephemeris message OEM format. |
addRange, clearItems, enumerateDependencies, freeze, freezeAggregatedObjects, getDefinitionHashCode, getIsFrozen, insertItem, isSameDefinition, removeItem, setItem, throwIfFrozen
add, add, addAll, addAll, clear, contains, containsAll, get, getItems, indexOf, isEmpty, iterator, lastIndexOf, listIterator, listIterator, remove, remove, removeAll, retainAll, set, size, subList, toArray, toArray
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
equals, hashCode, replaceAll, sort, spliterator
parallelStream, removeIf, stream
public CcsdsOrbitEphemerisMessageFile()
protected CcsdsOrbitEphemerisMessageFile(@Nonnull CcsdsOrbitEphemerisMessageFile existingInstance, @Nonnull CopyContext context)
See ICloneWithContext.clone(CopyContext)
for more information about how to implement this constructor
in a derived class.
existingInstance
- The existing instance to copy.context
- A CopyContext
that controls the depth of the copy.ArgumentNullException
- Thrown when existingInstance
or context
is null
.public Object clone(CopyContext context)
This method should be implemented to call a copy constructor on the class of the
object being cloned. The copy constructor should take the CopyContext
as a parameter
in addition to the existing instance to copy. The copy constructor should first call
CopyContext.addObjectMapping(T, T)
to identify the newly constructed instance
as a copy of the existing instance. It should then copy all fields, using
CopyContext.updateReference(T)
to copy any reference fields.
A typical implementation of ICloneWithContext
:
public static class MyClass implements ICloneWithContext {
public MyClass(MyClass existingInstance, CopyContext context) {
context.addObjectMapping(existingInstance, this);
someReference = context.updateReference(existingInstance.someReference);
}
@Override
public final Object clone(CopyContext context) {
return new MyClass(this, context);
}
private Object someReference;
}
In general, all fields that are reference types should be copied with a call to
CopyContext.updateReference(T)
. There are a couple of exceptions:
If one of these exceptions applies, the CopyContext
should be given an opportunity
to update the reference before the reference is copied explicitly. Use
CopyContext.updateReference(T)
to update the reference. If CopyContext.updateReference(T)
returns
the original object, indicating that the context does not have a replacement registered,
then copy the object manually by invoking a Clone method, a copy constructor, or by manually
constructing a new instance and copying the values.
alwaysCopy = context.updateReference(existingInstance.alwaysCopy);
if (existingInstance.alwaysCopy != null && alwaysCopy == existingInstance.alwaysCopy) {
alwaysCopy = (AlwaysCopy) existingInstance.alwaysCopy.clone(context);
}
If you are implementing an evaluator (a class that implements IEvaluator
), the
IEvaluator.updateEvaluatorReferences(agi.foundation.infrastructure.CopyContext)
method shares some responsibilities with the
copy context constructor. Code duplication can be avoided by doing the following:
CopyContext.updateReference(T)
. You should still call CopyContext.updateReference(T)
on any references to
non-evaluators.
IEvaluator.updateEvaluatorReferences(agi.foundation.infrastructure.CopyContext)
as the last line in the constructor and pass it the
same CopyContext
passed to the constructor.
IEvaluator.updateEvaluatorReferences(agi.foundation.infrastructure.CopyContext)
as normal. See the reference documentation for
IEvaluator.updateEvaluatorReferences(agi.foundation.infrastructure.CopyContext)
for more information on implementing that method.
public MyClass(MyClass existingInstance, CopyContext context) {
super(existingInstance, context);
someReference = context.updateReference(existingInstance.someReference);
evaluatorReference = existingInstance.evaluatorReference;
updateEvaluatorReferences(context);
}
@Override
public void updateEvaluatorReferences(CopyContext context) {
evaluatorReference = context.updateReference(evaluatorReference);
}
@Override
public Object clone(CopyContext context) {
return new MyClass(this, context);
}
private Object someReference;
private IEvaluator evaluatorReference;
clone
in interface ICloneWithContext
clone
in class DefinitionalObjectCollection<CcsdsOrbitEphemerisMessageSegment>
context
- The context to use to perform the copy.protected final boolean checkForSameDefinition(DefinitionalObjectCollection<CcsdsOrbitEphemerisMessageSegment> other)
DefinitionalObjectCollection
true
if it does. Derived classes MUST override this method and check
all new fields introduced by the derived class for definitional equivalence. It is NOT necessary
to check base class fields because the base class will already have done that. When overriding this method,
you should NOT call the base implementation because it will return false
for all derived-class instances.
Derived classes should check the type of other
to preserve the symmetric nature of IEquatableDefinition.isSameDefinition(java.lang.Object)
.checkForSameDefinition
in class DefinitionalObjectCollection<CcsdsOrbitEphemerisMessageSegment>
other
- The other instance to compare to this one.true
if the two objects are defined equivalently; otherwise false
.protected boolean checkForSameDefinition(@Nullable CcsdsOrbitEphemerisMessageFile other)
true
if it does. Derived classes MUST override this method and check
all new fields introduced by the derived class for definitional equivalence. It is NOT necessary
to check base class fields because the base class will already have done that. When overriding this method,
you should NOT call the base implementation because it will return false
for all derived-class instances.
Derived classes should check the type of other
to preserve the symmetric nature of IEquatableDefinition.isSameDefinition(java.lang.Object)
.other
- The other instance to compare to this one.true
if the two objects are defined equivalently; otherwise false
.protected int computeCurrentDefinitionHashCode()
CcsdsOrbitEphemerisMessageFile.checkForSameDefinition(agi.foundation.infrastructure.DefinitionalObjectCollection<agi.foundation.ccsds.CcsdsOrbitEphemerisMessageSegment>)
method.computeCurrentDefinitionHashCode
in class DefinitionalObjectCollection<CcsdsOrbitEphemerisMessageSegment>
public final String getVersion()
public final void setVersion(String value)
@Nonnull public final GregorianDate getCreationDate()
public final void setCreationDate(@Nonnull GregorianDate value)
public final String getOriginator()
public final void setOriginator(String value)
@Nonnull public final ArrayList<String> getComments()
@Nonnull public static CcsdsOrbitEphemerisMessageFile readFrom(@Nonnull String fileName)
fileName
- The name of the CCSDS OEM file from which to read.segments
containing
ephemeris and covariance data from the file.ArgumentNullException
- Thrown when fileName
is null
.@Nonnull public static CcsdsOrbitEphemerisMessageFile readFrom(@Nonnull BufferedReader reader)
reader
- A reader for the CCSDS OEM file.segments
containing
ephemeris and covariance data from the file.ArgumentNullException
- Thrown when reader
is null
.public final void writeTo(@Nonnull Writer writer)
Writes this instance to a Writer
in the CCSDS orbit ephemeris message OEM format.
This overload uses the DefaultOptions
(get
) of the
CcsdsOemFileWritingOptions
, which means that the CreationDate
(get
/ set
) is
overridden by the current date and time and that the OEM will be written in the Key-Value Notation
(KVN) format.
The Writer
can be a OutputStreamWriter
for writing to a file,
a StringWriter
for writing to a string, or any number of other types.
If acceleration information is contained in the
EphemerisData
(get
/ set
) of any of the
segments
contained by this instance,
or if the CovarianceData
(get
/ set
)
of any of the segments is not empty, then the Version
(get
/ set
)
needs to be set to 2.0 or this method will throw.
writer
- The writer to which to write this instance.ArgumentNullException
- Thrown when writer
is null
.PropertyInvalidException
- Thrown when any required property is null
,
or when Version
(get
/ set
) is not 1.0 or 2.0,
or when acceleration or covariance information is available, but the Version
(get
/ set
) is 1.0.public final void writeTo(@Nonnull Writer writer, @Nonnull CcsdsOemFileWritingOptions options)
Writes this instance to a Writer
in the CCSDS orbit ephemeris message OEM format.
The Writer
can be a OutputStreamWriter
for writing to a file,
a StringWriter
for writing to a string, or any number of other types.
If acceleration information is contained in the
EphemerisData
(get
/ set
) of any of the
segments
contained by this instance,
or if the CovarianceData
(get
/ set
)
of any of the segments is not empty, then the Version
(get
/ set
)
needs to be set to 2.0 or this method will throw.
writer
- The writer to which to write this instance.options
- The output choices that are used when writing this instance.ArgumentNullException
- Thrown when writer
or options
are null
.PropertyInvalidException
- Thrown when any required property is null
,
or when Version
(get
/ set
) is not 1.0 or 2.0,
or when acceleration or covariance information is available, but the Version
(get
/ set
) is 1.0.