OcmMetadata.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.odm.ocm;

  18. import java.util.List;

  19. import org.orekit.data.DataContext;
  20. import org.orekit.files.ccsds.definitions.TimeSystem;
  21. import org.orekit.files.ccsds.ndm.odm.OdmMetadata;
  22. import org.orekit.files.ccsds.section.MetadataKey;
  23. import org.orekit.time.AbsoluteDate;

  24. /** Meta-data for {@link OcmMetadata Orbit Comprehensive Message}.
  25.  * @since 11.0
  26.  */
  27. public class OcmMetadata extends OdmMetadata {

  28.     /** Default interpolation method for EOP and Space Weather data. */
  29.     private static final String DEFAULT_INTERPOLATION_METHOD = "LINEAR";

  30.     /** Classification for this message. */
  31.     private String classification;

  32.     /** International designator for the object as assigned by the UN Committee
  33.      * on Space Research (COSPAR) and the US National Space Science Data Center (NSSDC). */
  34.     private String internationalDesignator;

  35.     /** Specification of satellite catalog source. */
  36.     private String catalogName;

  37.     /** Unique satellite identification designator for the object. */
  38.     private String objectDesignator;

  39.     /** Alternate names for this space object. */
  40.     private List<String> alternateNames;

  41.     /** Programmatic Point Of Contact at originator. */
  42.     private String originatorPOC;

  43.     /** Position of Programmatic Point Of Contact at originator. */
  44.     private String originatorPosition;

  45.     /** Phone number of Programmatic Point Of Contact at originator. */
  46.     private String originatorPhone;

  47.     /** Email address of Programmatic Point Of Contact at originator.
  48.      * @since 11.2
  49.      */
  50.     private String originatorEmail;

  51.     /** Address of Programmatic Point Of Contact at originator. */
  52.     private String originatorAddress;

  53.     /** Creating agency or operator. */
  54.     private String techOrg;

  55.     /** Technical Point Of Contact at originator. */
  56.     private String techPOC;

  57.     /** Position of Technical Point Of Contact at originator. */
  58.     private String techPosition;

  59.     /** Phone number of Technical Point Of Contact at originator. */
  60.     private String techPhone;

  61.     /** Email address of Technical Point Of Contact at originator.
  62.      * @since 11.2
  63.      */
  64.     private String techEmail;

  65.     /** Address of Technical Point Of Contact at originator. */
  66.     private String techAddress;

  67.     /** Unique ID identifying previous message from a given originator. */
  68.     private String previousMessageID;

  69.     /** Unique ID identifying next message from a given originator. */
  70.     private String nextMessageID;

  71.     /** Unique identifier of Attitude Data Message linkrd to this Orbit Data Message. */
  72.     private String admMessageLink;

  73.     /** Unique identifier of Conjunction Data Message linkrd to this Orbit Data Message. */
  74.     private String cdmMessageLink;

  75.     /** Unique identifier of Pointing Request Message linkrd to this Orbit Data Message. */
  76.     private String prmMessageLink;

  77.     /** Unique identifier of Reentry Data Messages linked to this Orbit Data Message. */
  78.     private String rdmMessageLink;

  79.     /** Unique identifier of Tracking Data Messages linked to this Orbit Data Message. */
  80.     private String tdmMessageLink;

  81.     /** Operator of the space object. */
  82.     private String operator;

  83.     /** Owner of the space object. */
  84.     private String owner;

  85.     /** Name of the country where the space object owner is based. */
  86.     private String country;

  87.     /** Name of the constellation this space object belongs to. */
  88.     private String constellation;

  89.     /** Type of object. */
  90.     private ObjectType objectType;

  91.     /** Epoch to which <em>all</em> relative times are referenced in data blocks;
  92.      * unless overridden by block-specific {@code EPOCH_TZERO} values. */
  93.     private AbsoluteDate epochT0;

  94.     /** Operational status. */
  95.     private OpsStatus opsStatus;

  96.     /** Orbit catgory. */
  97.     private OrbitCategory orbitCategory;

  98.     /** List of elements of information data blocks included in this message. */
  99.     private List<String> ocmDataElements;

  100.     /** Spacecraft clock count at {@link #getEpochT0()}. */
  101.     private double sclkOffsetAtEpoch;

  102.     /** Number of spacecraft clock seconds occurring during one SI second. */
  103.     private double sclkSecPerSISec;

  104.     /** Creation date of previous message from a given originator. */
  105.     private AbsoluteDate previousMessageEpoch;

  106.     /** Creation date of next message from a given originator. */
  107.     private AbsoluteDate nextMessageEpoch;

  108.     /** Time of the earliest data contained in the OCM. */
  109.     private AbsoluteDate startTime;

  110.     /** Time of the latest data contained in the OCM. */
  111.     private AbsoluteDate stopTime;

  112.     /** Span of time that the OCM covers. */
  113.     private double timeSpan;

  114.     /** Difference (TAI – UTC) in seconds at epoch {@link #epochT0}. */
  115.     private double taimutcT0;

  116.     /** Epoch of next leap second.
  117.      * @since 11.2
  118.      */
  119.     private AbsoluteDate nextLeapEpoch;

  120.     /** Difference (TAI – UTC) in seconds incorporated at {@link #nextLeapEpoch}.
  121.      * @since 11.2
  122.      */
  123.     private double nextLeapTaimutc;

  124.     /** Difference (UT1 – UTC) in seconds at epoch {@link #epochT0}. */
  125.     private double ut1mutcT0;

  126.     /** Source and version of Earth Orientation Parameters. */
  127.     private String eopSource;

  128.     /** Interpolation method for Earth Orientation Parameters. */
  129.     private String interpMethodEOP;

  130.     /** Source and version of celestial body (e.g. Sun/Earth/Planetary). */
  131.     private String celestialSource;

  132.     /** Create a new meta-data.
  133.      * @param dataContext data context
  134.      */
  135.     OcmMetadata(final DataContext dataContext) {

  136.         // set up the few fields that have default values as per CCSDS standard
  137.         super(TimeSystem.UTC);
  138.         catalogName       = "CSPOC";
  139.         sclkOffsetAtEpoch = 0.0;
  140.         sclkSecPerSISec   = 1.0;
  141.         nextLeapTaimutc   = Double.NaN;
  142.         interpMethodEOP   = DEFAULT_INTERPOLATION_METHOD;

  143.     }

  144.     /** {@inheritDoc} */
  145.     @Override
  146.     public void validate(final double version) {
  147.         // we don't call super.checkMandatoryEntries() because
  148.         // all of the parameters considered mandatory at ODM level
  149.         // for OPM, OMM and OEM are in fact optional in OCM
  150.         // only TIME_SYSTEM and EPOCH_TZERO are mandatory
  151.         checkNotNull(getTimeSystem(), MetadataKey.TIME_SYSTEM);
  152.         checkNotNull(epochT0,         OcmMetadataKey.EPOCH_TZERO);
  153.         if (nextLeapEpoch != null) {
  154.             checkNotNaN(nextLeapTaimutc, OcmMetadataKey.NEXT_LEAP_TAIMUTC);
  155.         }
  156.     }

  157.     /** Get the message classification.
  158.      * @return message classification.
  159.      */
  160.     public String getClassification() {
  161.         return classification;
  162.     }

  163.     /** Set the message classification.
  164.      * @param classification message classification
  165.      */
  166.     public void setClassification(final String classification) {
  167.         refuseFurtherComments();
  168.         this.classification = classification;
  169.     }

  170.     /** Get the international designator for the object.
  171.      * @return international designator for the object
  172.      */
  173.     public String getInternationalDesignator() {
  174.         return internationalDesignator;
  175.     }

  176.     /** Set the international designator for the object.
  177.      * @param internationalDesignator international designator for the object
  178.      */
  179.     public void setInternationalDesignator(final String internationalDesignator) {
  180.         refuseFurtherComments();
  181.         this.internationalDesignator = internationalDesignator;
  182.     }

  183.     /** Get the specification of satellite catalog source.
  184.      * @return specification of satellite catalog source
  185.      */
  186.     public String getCatalogName() {
  187.         return catalogName;
  188.     }

  189.     /** Set the specification of satellite catalog source.
  190.      * @param catalogName specification of satellite catalog source
  191.      */
  192.     public void setCatalogName(final String catalogName) {
  193.         refuseFurtherComments();
  194.         this.catalogName = catalogName;
  195.     }

  196.     /** Get the unique satellite identification designator for the object.
  197.      * @return unique satellite identification designator for the object.
  198.      */
  199.     public String getObjectDesignator() {
  200.         return objectDesignator;
  201.     }

  202.     /** Set the unique satellite identification designator for the object.
  203.      * @param objectDesignator unique satellite identification designator for the object
  204.      */
  205.     public void setObjectDesignator(final String objectDesignator) {
  206.         refuseFurtherComments();
  207.         this.objectDesignator = objectDesignator;
  208.     }

  209.     /** Get the alternate names for this space object.
  210.      * @return alternate names
  211.      */
  212.     public List<String> getAlternateNames() {
  213.         return alternateNames;
  214.     }

  215.     /** Set the alternate names for this space object.
  216.      * @param alternateNames alternate names
  217.      */
  218.     public void setAlternateNames(final List<String> alternateNames) {
  219.         refuseFurtherComments();
  220.         this.alternateNames = alternateNames;
  221.     }

  222.     /** Get the programmatic Point Of Contact at originator.
  223.      * @return programmatic Point Of Contact at originator
  224.      */
  225.     public String getOriginatorPOC() {
  226.         return originatorPOC;
  227.     }

  228.     /** Set the programmatic Point Of Contact at originator.
  229.      * @param originatorPOC programmatic Point Of Contact at originator
  230.      */
  231.     public void setOriginatorPOC(final String originatorPOC) {
  232.         refuseFurtherComments();
  233.         this.originatorPOC = originatorPOC;
  234.     }

  235.     /** Get the position of Programmatic Point Of Contact at originator.
  236.      * @return position of Programmatic Point Of Contact at originator
  237.      */
  238.     public String getOriginatorPosition() {
  239.         return originatorPosition;
  240.     }

  241.     /** Set the position of Programmatic Point Of Contact at originator.
  242.      * @param originatorPosition position of Programmatic Point Of Contact at originator
  243.      */
  244.     public void setOriginatorPosition(final String originatorPosition) {
  245.         refuseFurtherComments();
  246.         this.originatorPosition = originatorPosition;
  247.     }

  248.     /** Get the phone number of Programmatic Point Of Contact at originator.
  249.      * @return phone number of Programmatic Point Of Contact at originator
  250.      */
  251.     public String getOriginatorPhone() {
  252.         return originatorPhone;
  253.     }

  254.     /** Set the phone number of Programmatic Point Of Contact at originator.
  255.      * @param originatorPhone phone number of Programmatic Point Of Contact at originator
  256.      */
  257.     public void setOriginatorPhone(final String originatorPhone) {
  258.         refuseFurtherComments();
  259.         this.originatorPhone = originatorPhone;
  260.     }

  261.     /** Get the email address of Programmatic Point Of Contact at originator.
  262.      * @return email address of Programmatic Point Of Contact at originator
  263.      * @since 11.2
  264.      */
  265.     public String getOriginatorEmail() {
  266.         return originatorEmail;
  267.     }

  268.     /** Set the email address of Programmatic Point Of Contact at originator.
  269.      * @param originatorEmail email address of Programmatic Point Of Contact at originator
  270.      * @since 11.2
  271.      */
  272.     public void setOriginatorEmail(final String originatorEmail) {
  273.         refuseFurtherComments();
  274.         this.originatorEmail = originatorEmail;
  275.     }

  276.     /** Get the address of Programmatic Point Of Contact at originator.
  277.      * @return address of Programmatic Point Of Contact at originator
  278.      */
  279.     public String getOriginatorAddress() {
  280.         return originatorAddress;
  281.     }

  282.     /** Set the address of Programmatic Point Of Contact at originator.
  283.      * @param originatorAddress address of Programmatic Point Of Contact at originator
  284.      */
  285.     public void setOriginatorAddress(final String originatorAddress) {
  286.         refuseFurtherComments();
  287.         this.originatorAddress = originatorAddress;
  288.     }

  289.     /** Get the creating agency or operator.
  290.      * @return creating agency or operator
  291.      */
  292.     public String getTechOrg() {
  293.         return techOrg;
  294.     }

  295.     /** Set the creating agency or operator.
  296.      * @param techOrg creating agency or operator
  297.      */
  298.     public void setTechOrg(final String techOrg) {
  299.         refuseFurtherComments();
  300.         this.techOrg = techOrg;
  301.     }

  302.     /** Get the Technical Point Of Contact at originator.
  303.      * @return Technical Point Of Contact at originator
  304.      */
  305.     public String getTechPOC() {
  306.         return techPOC;
  307.     }

  308.     /** Set the Technical Point Of Contact at originator.
  309.      * @param techPOC Technical Point Of Contact at originator
  310.      */
  311.     public void setTechPOC(final String techPOC) {
  312.         refuseFurtherComments();
  313.         this.techPOC = techPOC;
  314.     }

  315.     /** Get the position of Technical Point Of Contact at originator.
  316.      * @return position of Technical Point Of Contact at originator
  317.      */
  318.     public String getTechPosition() {
  319.         return techPosition;
  320.     }

  321.     /** Set the position of Technical Point Of Contact at originator.
  322.      * @param techPosition position of Technical Point Of Contact at originator
  323.      */
  324.     public void setTechPosition(final String techPosition) {
  325.         refuseFurtherComments();
  326.         this.techPosition = techPosition;
  327.     }

  328.     /** Get the phone number of Technical Point Of Contact at originator.
  329.      * @return phone number of Technical Point Of Contact at originator
  330.      */
  331.     public String getTechPhone() {
  332.         return techPhone;
  333.     }

  334.     /** Set the phone number of Technical Point Of Contact at originator.
  335.      * @param techPhone phone number of Technical Point Of Contact at originator
  336.      */
  337.     public void setTechPhone(final String techPhone) {
  338.         refuseFurtherComments();
  339.         this.techPhone = techPhone;
  340.     }

  341.     /** Get the email address of Technical Point Of Contact at originator.
  342.      * @return email address of Technical Point Of Contact at originator
  343.      * @since 11.2
  344.      */
  345.     public String getTechEmail() {
  346.         return techEmail;
  347.     }

  348.     /** Set the email address of Technical Point Of Contact at originator.
  349.      * @param techEmail email address of Technical Point Of Contact at originator
  350.      * @since 11.2
  351.      */
  352.     public void setTechEmail(final String techEmail) {
  353.         refuseFurtherComments();
  354.         this.techEmail = techEmail;
  355.     }

  356.     /** Get the address of Technical Point Of Contact at originator.
  357.      * @return address of Technical Point Of Contact at originator
  358.      */
  359.     public String getTechAddress() {
  360.         return techAddress;
  361.     }

  362.     /** Set the address of Technical Point Of Contact at originator.
  363.      * @param techAddress address of Technical Point Of Contact at originator
  364.      */
  365.     public void setTechAddress(final String techAddress) {
  366.         refuseFurtherComments();
  367.         this.techAddress = techAddress;
  368.     }

  369.     /** Get the unique ID identifying previous message from a given originator.
  370.      * @return unique ID identifying previous message from a given originator
  371.      */
  372.     public String getPreviousMessageID() {
  373.         return previousMessageID;
  374.     }

  375.     /** Set the unique ID identifying previous message from a given originator.
  376.      * @param previousMessageID unique ID identifying previous message from a given originator
  377.      */
  378.     public void setPreviousMessageID(final String previousMessageID) {
  379.         refuseFurtherComments();
  380.         this.previousMessageID = previousMessageID;
  381.     }

  382.     /** Get the unique ID identifying next message from a given originator.
  383.      * @return unique ID identifying next message from a given originator
  384.      */
  385.     public String getNextMessageID() {
  386.         return nextMessageID;
  387.     }

  388.     /** Set the unique ID identifying next message from a given originator.
  389.      * @param nextMessageID unique ID identifying next message from a given originator
  390.      */
  391.     public void setNextMessageID(final String nextMessageID) {
  392.         refuseFurtherComments();
  393.         this.nextMessageID = nextMessageID;
  394.     }

  395.     /** Get the Unique identifier of Attitude Data Message linked to this Orbit Data Message.
  396.      * @return Unique identifier of Attitude Data Message linked to this Orbit Data Message
  397.      */
  398.     public String getAdmMessageLink() {
  399.         return admMessageLink;
  400.     }

  401.     /** Set the Unique identifier of Attitude Data Message linked to this Orbit Data Message.
  402.      * @param admMessageLink Unique identifier of Attitude Data Message linked to this Orbit Data Message
  403.      */
  404.     public void setAdmMessageLink(final String admMessageLink) {
  405.         refuseFurtherComments();
  406.         this.admMessageLink = admMessageLink;
  407.     }

  408.     /** Get the Unique identifier of Conjunction Data Message linked to this Orbit Data Message.
  409.      * @return Unique identifier of Conjunction Data Message linked to this Orbit Data Message
  410.      */
  411.     public String getCdmMessageLink() {
  412.         return cdmMessageLink;
  413.     }

  414.     /** Set the Unique identifier of Conjunction Data Message linked to this Orbit Data Message.
  415.      * @param cdmMessageLink Unique identifier of Conjunction Data Message linked to this Orbit Data Message
  416.      */
  417.     public void setCdmMessageLink(final String cdmMessageLink) {
  418.         refuseFurtherComments();
  419.         this.cdmMessageLink = cdmMessageLink;
  420.     }

  421.     /** Get the Unique identifier of Pointing Request Message linked to this Orbit Data Message.
  422.      * @return Unique identifier of Pointing Request Message linked to this Orbit Data Message
  423.      */
  424.     public String getPrmMessageLink() {
  425.         return prmMessageLink;
  426.     }

  427.     /** Set the Unique identifier of Pointing Request Message linked to this Orbit Data Message.
  428.      * @param prmMessageLink Unique identifier of Pointing Request Message linked to this Orbit Data Message
  429.      */
  430.     public void setPrmMessageLink(final String prmMessageLink) {
  431.         refuseFurtherComments();
  432.         this.prmMessageLink = prmMessageLink;
  433.     }

  434.     /** Get the Unique identifier of Reentry Data Message linked to this Orbit Data Message.
  435.      * @return Unique identifier of Reentry Data Message linked to this Orbit Data Message
  436.      */
  437.     public String getRdmMessageLink() {
  438.         return rdmMessageLink;
  439.     }

  440.     /** Set the Unique identifier of Reentry Data Message linked to this Orbit Data Message.
  441.      * @param rdmMessageLink Unique identifier of Reentry Data Message linked to this Orbit Data Message
  442.      */
  443.     public void setRdmMessageLink(final String rdmMessageLink) {
  444.         refuseFurtherComments();
  445.         this.rdmMessageLink = rdmMessageLink;
  446.     }

  447.     /** Get the Unique identifier of Tracking Data Message linked to this Orbit Data Message.
  448.      * @return Unique identifier of Tracking Data Message linked to this Orbit Data Message
  449.      */
  450.     public String getTdmMessageLink() {
  451.         return tdmMessageLink;
  452.     }

  453.     /** Set the Unique identifier of Tracking Data Message linked to this Orbit Data Message.
  454.      * @param tdmMessageLink Unique identifier of Tracking Data Message linked to this Orbit Data Message
  455.      */
  456.     public void setTdmMessageLink(final String tdmMessageLink) {
  457.         refuseFurtherComments();
  458.         this.tdmMessageLink = tdmMessageLink;
  459.     }

  460.     /** Get the operator of the space object.
  461.      * @return operator of the space object
  462.      */
  463.     public String getOperator() {
  464.         return operator;
  465.     }

  466.     /** Set the operator of the space object.
  467.      * @param operator operator of the space object
  468.      */
  469.     public void setOperator(final String operator) {
  470.         refuseFurtherComments();
  471.         this.operator = operator;
  472.     }

  473.     /** Get the owner of the space object.
  474.      * @return owner of the space object
  475.      */
  476.     public String getOwner() {
  477.         return owner;
  478.     }

  479.     /** Set the owner of the space object.
  480.      * @param owner owner of the space object
  481.      */
  482.     public void setOwner(final String owner) {
  483.         refuseFurtherComments();
  484.         this.owner = owner;
  485.     }

  486.     /** Get the name of the country where the space object owner is based.
  487.      * @return name of the country where the space object owner is based
  488.      */
  489.     public String getCountry() {
  490.         return country;
  491.     }

  492.     /** Set the name of the country where the space object owner is based.
  493.      * @param country name of the country where the space object owner is based
  494.      */
  495.     public void setCountry(final String country) {
  496.         refuseFurtherComments();
  497.         this.country = country;
  498.     }

  499.     /** Get the name of the constellation this space object belongs to.
  500.      * @return name of the constellation this space object belongs to
  501.      */
  502.     public String getConstellation() {
  503.         return constellation;
  504.     }

  505.     /** Set the name of the constellation this space object belongs to.
  506.      * @param constellation name of the constellation this space object belongs to
  507.      */
  508.     public void setConstellation(final String constellation) {
  509.         refuseFurtherComments();
  510.         this.constellation = constellation;
  511.     }

  512.     /** Get the type of object.
  513.      * @return type of object
  514.      */
  515.     public ObjectType getObjectType() {
  516.         return objectType;
  517.     }

  518.     /** Set the type of object.
  519.      * @param objectType type of object
  520.      */
  521.     public void setObjectType(final ObjectType objectType) {
  522.         refuseFurtherComments();
  523.         this.objectType = objectType;
  524.     }

  525.     /** Get the epoch to which <em>all</em> relative times are referenced in data blocks.
  526.      * @return epoch to which <em>all</em> relative times are referenced in data blocks
  527.      */
  528.     public AbsoluteDate getEpochT0() {
  529.         return epochT0;
  530.     }

  531.     /** Set the epoch to which <em>all</em> relative times are referenced in data blocks.
  532.      * @param epochT0 epoch to which <em>all</em> relative times are referenced in data blocks
  533.      */
  534.     public void setEpochT0(final AbsoluteDate epochT0) {
  535.         refuseFurtherComments();
  536.         this.epochT0 = epochT0;
  537.     }

  538.     /** Get the operational status.
  539.      * @return operational status
  540.      */
  541.     public OpsStatus getOpsStatus() {
  542.         return opsStatus;
  543.     }

  544.     /** Set the operational status.
  545.      * @param opsStatus operational status
  546.      */
  547.     public void setOpsStatus(final OpsStatus opsStatus) {
  548.         refuseFurtherComments();
  549.         this.opsStatus = opsStatus;
  550.     }

  551.     /** Get the orbit category.
  552.      * @return orbit category
  553.      */
  554.     public OrbitCategory getOrbitCategory() {
  555.         return orbitCategory;
  556.     }

  557.     /** Set the orbit category.
  558.      * @param orbitCategory orbit category
  559.      */
  560.     public void setOrbitCategory(final OrbitCategory orbitCategory) {
  561.         refuseFurtherComments();
  562.         this.orbitCategory = orbitCategory;
  563.     }

  564.     /** Get the list of elements of information data blocks included in this message.
  565.      * @return list of elements of information data blocks included in this message
  566.      */
  567.     public List<String> getOcmDataElements() {
  568.         return ocmDataElements;
  569.     }

  570.     /** Set the list of elements of information data blocks included in this message.
  571.      * @param ocmDataElements list of elements of information data blocks included in this message
  572.      */
  573.     public void setOcmDataElements(final List<String> ocmDataElements) {
  574.         refuseFurtherComments();
  575.         this.ocmDataElements = ocmDataElements;
  576.     }

  577.     /** Get the spacecraft clock count at {@link #getEpochT0()}.
  578.      * @return spacecraft clock count at {@link #getEpochT0()}
  579.      */
  580.     public double getSclkOffsetAtEpoch() {
  581.         return sclkOffsetAtEpoch;
  582.     }

  583.     /** Set the spacecraft clock count at {@link #getEpochT0()}.
  584.      * @param sclkOffsetAtEpoch spacecraft clock count at {@link #getEpochT0()}
  585.      */
  586.     public void setSclkOffsetAtEpoch(final double sclkOffsetAtEpoch) {
  587.         refuseFurtherComments();
  588.         this.sclkOffsetAtEpoch = sclkOffsetAtEpoch;
  589.     }

  590.     /** Get the number of spacecraft clock seconds occurring during one SI second.
  591.      * @return number of spacecraft clock seconds occurring during one SI second
  592.      */
  593.     public double getSclkSecPerSISec() {
  594.         return sclkSecPerSISec;
  595.     }

  596.     /** Set the number of spacecraft clock seconds occurring during one SI second.
  597.      * @param secClockPerSISec number of spacecraft clock seconds occurring during one SI second
  598.      */
  599.     public void setSclkSecPerSISec(final double secClockPerSISec) {
  600.         refuseFurtherComments();
  601.         this.sclkSecPerSISec = secClockPerSISec;
  602.     }

  603.     /** Get the creation date of previous message from a given originator.
  604.      * @return creation date of previous message from a given originator
  605.      */
  606.     public AbsoluteDate getPreviousMessageEpoch() {
  607.         return previousMessageEpoch;
  608.     }

  609.     /** Set the creation date of previous message from a given originator.
  610.      * @param previousMessageEpoch creation date of previous message from a given originator
  611.      */
  612.     public void setPreviousMessageEpoch(final AbsoluteDate previousMessageEpoch) {
  613.         refuseFurtherComments();
  614.         this.previousMessageEpoch = previousMessageEpoch;
  615.     }

  616.     /** Get the creation date of next message from a given originator.
  617.      * @return creation date of next message from a given originator
  618.      */
  619.     public AbsoluteDate getNextMessageEpoch() {
  620.         return nextMessageEpoch;
  621.     }

  622.     /** Set the creation date of next message from a given originator.
  623.      * @param nextMessageEpoch creation date of next message from a given originator
  624.      */
  625.     public void setNextMessageEpoch(final AbsoluteDate nextMessageEpoch) {
  626.         refuseFurtherComments();
  627.         this.nextMessageEpoch = nextMessageEpoch;
  628.     }

  629.     /** Get the time of the earliest data contained in the OCM.
  630.      * @return time of the earliest data contained in the OCM
  631.      */
  632.     public AbsoluteDate getStartTime() {
  633.         return startTime;
  634.     }

  635.     /** Set the time of the earliest data contained in the OCM.
  636.      * @param startTime time of the earliest data contained in the OCM
  637.      */
  638.     public void setStartTime(final AbsoluteDate startTime) {
  639.         refuseFurtherComments();
  640.         this.startTime = startTime;
  641.     }

  642.     /** Get the time of the latest data contained in the OCM.
  643.      * @return time of the latest data contained in the OCM
  644.      */
  645.     public AbsoluteDate getStopTime() {
  646.         return stopTime;
  647.     }

  648.     /** Set the time of the latest data contained in the OCM.
  649.      * @param stopTime time of the latest data contained in the OCM
  650.      */
  651.     public void setStopTime(final AbsoluteDate stopTime) {
  652.         refuseFurtherComments();
  653.         this.stopTime = stopTime;
  654.     }

  655.     /** Get the span of time in seconds that the OCM covers.
  656.      * @return span of time in seconds that the OCM covers
  657.      */
  658.     public double getTimeSpan() {
  659.         return timeSpan;
  660.     }

  661.     /** Set the span of time in seconds that the OCM covers.
  662.      * @param timeSpan span of time in seconds that the OCM covers
  663.      */
  664.     public void setTimeSpan(final double timeSpan) {
  665.         refuseFurtherComments();
  666.         this.timeSpan = timeSpan;
  667.     }

  668.     /** Get the difference (TAI – UTC) in seconds at epoch {@link #getEpochT0()}.
  669.      * @return difference (TAI – UTC) in seconds at epoch {@link #getEpochT0()}
  670.      */
  671.     public double getTaimutcT0() {
  672.         return taimutcT0;
  673.     }

  674.     /** Set the difference (TAI – UTC) in seconds at epoch {@link #getEpochT0()}.
  675.      * @param taimutcT0 difference (TAI – UTC) in seconds at epoch {@link #getEpochT0()}
  676.      */
  677.     public void setTaimutcT0(final double taimutcT0) {
  678.         refuseFurtherComments();
  679.         this.taimutcT0 = taimutcT0;
  680.     }

  681.     /** Get the epoch of next leap second.
  682.      * @return epoch of next leap second
  683.      * @since 11.2
  684.      */
  685.     public AbsoluteDate getNextLeapEpoch() {
  686.         return nextLeapEpoch;
  687.     }

  688.     /** Set the epoch of next leap second.
  689.      * @param nextLeapEpoch epoch of next leap second
  690.      * @since 11.2
  691.      */
  692.     public void setNextLeapEpoch(final AbsoluteDate nextLeapEpoch) {
  693.         refuseFurtherComments();
  694.         this.nextLeapEpoch = nextLeapEpoch;
  695.     }

  696.     /** Get the difference (TAI – UTC) in seconds incorporated at epoch {@link #getNextLeapEpoch()}.
  697.      * @return difference (TAI – UTC) in seconds incorporated at epoch {@link #getNextLeapEpoch()}
  698.      * @since 11.2
  699.      */
  700.     public double getNextLeapTaimutc() {
  701.         return nextLeapTaimutc;
  702.     }

  703.     /** Set the difference (TAI – UTC) in seconds incorporated at epoch {@link #getNextLeapEpoch()}.
  704.      * @param nextLeapTaimutc difference (TAI – UTC) in seconds incorporated at epoch {@link #getNextLeapEpoch()}
  705.      * @since 11.2
  706.      */
  707.     public void setNextLeapTaimutc(final double nextLeapTaimutc) {
  708.         refuseFurtherComments();
  709.         this.nextLeapTaimutc = nextLeapTaimutc;
  710.     }

  711.     /** Get the difference (UT1 – UTC) in seconds at epoch {@link #getEpochT0()}.
  712.      * @return difference (UT1 – UTC) in seconds at epoch {@link #getEpochT0()}
  713.      */
  714.     public double getUt1mutcT0() {
  715.         return ut1mutcT0;
  716.     }

  717.     /** Set the difference (UT1 – UTC) in seconds at epoch {@link #getEpochT0()}.
  718.      * @param ut1mutcT0 difference (UT1 – UTC) in seconds at epoch {@link #getEpochT0()}
  719.      */
  720.     public void setUt1mutcT0(final double ut1mutcT0) {
  721.         refuseFurtherComments();
  722.         this.ut1mutcT0 = ut1mutcT0;
  723.     }

  724.     /** Get the source and version of Earth Orientation Parameters.
  725.      * @return source and version of Earth Orientation Parameters
  726.      */
  727.     public String getEopSource() {
  728.         return eopSource;
  729.     }

  730.     /** Set the source and version of Earth Orientation Parameters.
  731.      * @param eopSource source and version of Earth Orientation Parameters
  732.      */
  733.     public void setEopSource(final String eopSource) {
  734.         refuseFurtherComments();
  735.         this.eopSource = eopSource;
  736.     }

  737.     /** Get the interpolation method for Earth Orientation Parameters.
  738.      * @return interpolation method for Earth Orientation Parameters
  739.      */
  740.     public String getInterpMethodEOP() {
  741.         return interpMethodEOP;
  742.     }

  743.     /** Set the interpolation method for Earth Orientation Parameters.
  744.      * @param interpMethodEOP interpolation method for Earth Orientation Parameters
  745.      */
  746.     public void setInterpMethodEOP(final String interpMethodEOP) {
  747.         refuseFurtherComments();
  748.         this.interpMethodEOP = interpMethodEOP;
  749.     }

  750.     /** Get the source and version of celestial body (e.g. Sun/Earth/Planetary).
  751.      * @return source and version of celestial body (e.g. Sun/Earth/Planetary)
  752.      */
  753.     public String getCelestialSource() {
  754.         return celestialSource;
  755.     }

  756.     /** Set the source and version of celestial body (e.g. Sun/Earth/Planetary).
  757.      * @param celestialSource source and version of celestial body (e.g. Sun/Earth/Planetary)
  758.      */
  759.     public void setCelestialSource(final String celestialSource) {
  760.         refuseFurtherComments();
  761.         this.celestialSource = celestialSource;
  762.     }

  763. }