1 /* Copyright 2002-2026 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
18 package org.orekit.files.ccsds.ndm.odm.ocm;
19
20 import java.util.List;
21
22 import org.orekit.data.DataContext;
23 import org.orekit.files.ccsds.definitions.CcsdsFrameMapper;
24 import org.orekit.files.ccsds.definitions.TimeSystem;
25 import org.orekit.files.ccsds.ndm.odm.OdmMetadata;
26 import org.orekit.files.ccsds.section.MetadataKey;
27 import org.orekit.frames.Frame;
28 import org.orekit.time.AbsoluteDate;
29
30 /** Meta-data for {@link OcmMetadata Orbit Comprehensive Message}.
31 * @since 11.0
32 */
33 public class OcmMetadata extends OdmMetadata {
34
35 /** Default value for SCLK_OFFSET_AT_EPOCH.
36 * @since 12.0
37 */
38 public static final double DEFAULT_SCLK_OFFSET_AT_EPOCH = 0.0;
39
40 /** Default value for SCLK_SEC_PER_SI_SEC.
41 * @since 12.0
42 */
43 public static final double DEFAULT_SCLK_SEC_PER_SI_SEC = 1.0;
44
45 /** International designator for the object as assigned by the UN Committee
46 * on Space Research (COSPAR) and the US National Space Science Data Center (NSSDC). */
47 private String internationalDesignator;
48
49 /** Specification of satellite catalog source. */
50 private String catalogName;
51
52 /** Unique satellite identification designator for the object. */
53 private String objectDesignator;
54
55 /** Alternate names for this space object. */
56 private List<String> alternateNames;
57
58 /** Programmatic Point Of Contact at originator. */
59 private String originatorPOC;
60
61 /** Position of Programmatic Point Of Contact at originator. */
62 private String originatorPosition;
63
64 /** Phone number of Programmatic Point Of Contact at originator. */
65 private String originatorPhone;
66
67 /** Email address of Programmatic Point Of Contact at originator.
68 * @since 11.2
69 */
70 private String originatorEmail;
71
72 /** Address of Programmatic Point Of Contact at originator. */
73 private String originatorAddress;
74
75 /** Creating agency or operator. */
76 private String techOrg;
77
78 /** Technical Point Of Contact at originator. */
79 private String techPOC;
80
81 /** Position of Technical Point Of Contact at originator. */
82 private String techPosition;
83
84 /** Phone number of Technical Point Of Contact at originator. */
85 private String techPhone;
86
87 /** Email address of Technical Point Of Contact at originator.
88 * @since 11.2
89 */
90 private String techEmail;
91
92 /** Address of Technical Point Of Contact at originator. */
93 private String techAddress;
94
95 /** Unique ID identifying previous message from a given originator. */
96 private String previousMessageID;
97
98 /** Unique ID identifying next message from a given originator. */
99 private String nextMessageID;
100
101 /** Unique identifier of Attitude Data Message linked to this Orbit Data Message. */
102 private String admMessageLink;
103
104 /** Unique identifier of Conjunction Data Message linked to this Orbit Data Message. */
105 private String cdmMessageLink;
106
107 /** Unique identifier of Pointing Request Message linked to this Orbit Data Message. */
108 private String prmMessageLink;
109
110 /** Unique identifier of Reentry Data Messages linked to this Orbit Data Message. */
111 private String rdmMessageLink;
112
113 /** Unique identifier of Tracking Data Messages linked to this Orbit Data Message. */
114 private String tdmMessageLink;
115
116 /** Operator of the space object. */
117 private String operator;
118
119 /** Owner of the space object. */
120 private String owner;
121
122 /** Name of the country where the space object owner is based. */
123 private String country;
124
125 /** Name of the constellation this space object belongs to. */
126 private String constellation;
127
128 /** Type of object. */
129 private ObjectType objectType;
130
131 /** Epoch to which <em>all</em> relative times are referenced in data blocks;
132 * unless overridden by block-specific {@code EPOCH_TZERO} values. */
133 private AbsoluteDate epochT0;
134
135 /** Operational status. */
136 private OpsStatus opsStatus;
137
138 /** Orbit category. */
139 private OrbitCategory orbitCategory;
140
141 /** List of elements of information data blocks included in this message. */
142 private List<OcmElements> ocmDataElements;
143
144 /** Spacecraft clock count at {@link #getEpochT0()}. */
145 private double sclkOffsetAtEpoch;
146
147 /** Number of spacecraft clock seconds occurring during one SI second. */
148 private double sclkSecPerSISec;
149
150 /** Creation date of previous message from a given originator. */
151 private AbsoluteDate previousMessageEpoch;
152
153 /** Creation date of next message from a given originator. */
154 private AbsoluteDate nextMessageEpoch;
155
156 /** Time of the earliest data contained in the OCM. */
157 private AbsoluteDate startTime;
158
159 /** Time of the latest data contained in the OCM. */
160 private AbsoluteDate stopTime;
161
162 /** Span of time that the OCM covers. */
163 private double timeSpan;
164
165 /** Difference (TAI – UTC) in seconds at epoch {@link #epochT0}. */
166 private double taimutcT0;
167
168 /** Epoch of next leap second.
169 * @since 11.2
170 */
171 private AbsoluteDate nextLeapEpoch;
172
173 /** Difference (TAI – UTC) in seconds incorporated at {@link #nextLeapEpoch}.
174 * @since 11.2
175 */
176 private double nextLeapTaimutc;
177
178 /** Difference (UT1 – UTC) in seconds at epoch {@link #epochT0}. */
179 private double ut1mutcT0;
180
181 /** Source and version of Earth Orientation Parameters. */
182 private String eopSource;
183
184 /** Interpolation method for Earth Orientation Parameters. */
185 private String interpMethodEOP;
186
187 /** Source and version of celestial body (e.g. Sun/Earth/Planetary). */
188 private String celestialSource;
189
190 /** Data context.
191 * @since 12.0
192 */
193 private final DataContext dataContext;
194
195 /**
196 * Create a new meta-data.
197 *
198 * @param dataContext data context
199 * @param frameMapper for creating an Orekit {@link Frame}.
200 * @since 13.1.5
201 */
202 public OcmMetadata(final DataContext dataContext,
203 final CcsdsFrameMapper frameMapper) {
204
205 // set up the few fields that have default values as per CCSDS standard
206 super(TimeSystem.UTC, frameMapper);
207 sclkOffsetAtEpoch = DEFAULT_SCLK_OFFSET_AT_EPOCH;
208 sclkSecPerSISec = DEFAULT_SCLK_SEC_PER_SI_SEC;
209 timeSpan = Double.NaN;
210 taimutcT0 = Double.NaN;
211 ut1mutcT0 = Double.NaN;
212 nextLeapTaimutc = Double.NaN;
213 this.dataContext = dataContext;
214
215 }
216
217 /** {@inheritDoc} */
218 @Override
219 public void validate(final double version) {
220 // we don't call super.checkMandatoryEntries() because
221 // all of the parameters considered mandatory at ODM level
222 // for OPM, OMM and OEM are in fact optional in OCM
223 // only TIME_SYSTEM and EPOCH_TZERO are mandatory
224 checkNotNull(getTimeSystem(), MetadataKey.TIME_SYSTEM.name());
225 checkNotNull(epochT0, OcmMetadataKey.EPOCH_TZERO.name());
226 if (nextLeapEpoch != null) {
227 checkNotNaN(nextLeapTaimutc, OcmMetadataKey.NEXT_LEAP_TAIMUTC.name());
228 }
229 }
230
231 /** Get the international designator for the object.
232 * @return international designator for the object
233 */
234 public String getInternationalDesignator() {
235 return internationalDesignator;
236 }
237
238 /** Set the international designator for the object.
239 * @param internationalDesignator international designator for the object
240 */
241 public void setInternationalDesignator(final String internationalDesignator) {
242 refuseFurtherComments();
243 this.internationalDesignator = internationalDesignator;
244 }
245
246 /** Get the specification of satellite catalog source.
247 * @return specification of satellite catalog source
248 */
249 public String getCatalogName() {
250 return catalogName;
251 }
252
253 /** Set the specification of satellite catalog source.
254 * @param catalogName specification of satellite catalog source
255 */
256 public void setCatalogName(final String catalogName) {
257 refuseFurtherComments();
258 this.catalogName = catalogName;
259 }
260
261 /** Get the unique satellite identification designator for the object.
262 * @return unique satellite identification designator for the object.
263 */
264 public String getObjectDesignator() {
265 return objectDesignator;
266 }
267
268 /** Set the unique satellite identification designator for the object.
269 * @param objectDesignator unique satellite identification designator for the object
270 */
271 public void setObjectDesignator(final String objectDesignator) {
272 refuseFurtherComments();
273 this.objectDesignator = objectDesignator;
274 }
275
276 /** Get the alternate names for this space object.
277 * @return alternate names
278 */
279 public List<String> getAlternateNames() {
280 return alternateNames;
281 }
282
283 /** Set the alternate names for this space object.
284 * @param alternateNames alternate names
285 */
286 public void setAlternateNames(final List<String> alternateNames) {
287 refuseFurtherComments();
288 this.alternateNames = alternateNames;
289 }
290
291 /** Get the programmatic Point Of Contact at originator.
292 * @return programmatic Point Of Contact at originator
293 */
294 public String getOriginatorPOC() {
295 return originatorPOC;
296 }
297
298 /** Set the programmatic Point Of Contact at originator.
299 * @param originatorPOC programmatic Point Of Contact at originator
300 */
301 public void setOriginatorPOC(final String originatorPOC) {
302 refuseFurtherComments();
303 this.originatorPOC = originatorPOC;
304 }
305
306 /** Get the position of Programmatic Point Of Contact at originator.
307 * @return position of Programmatic Point Of Contact at originator
308 */
309 public String getOriginatorPosition() {
310 return originatorPosition;
311 }
312
313 /** Set the position of Programmatic Point Of Contact at originator.
314 * @param originatorPosition position of Programmatic Point Of Contact at originator
315 */
316 public void setOriginatorPosition(final String originatorPosition) {
317 refuseFurtherComments();
318 this.originatorPosition = originatorPosition;
319 }
320
321 /** Get the phone number of Programmatic Point Of Contact at originator.
322 * @return phone number of Programmatic Point Of Contact at originator
323 */
324 public String getOriginatorPhone() {
325 return originatorPhone;
326 }
327
328 /** Set the phone number of Programmatic Point Of Contact at originator.
329 * @param originatorPhone phone number of Programmatic Point Of Contact at originator
330 */
331 public void setOriginatorPhone(final String originatorPhone) {
332 refuseFurtherComments();
333 this.originatorPhone = originatorPhone;
334 }
335
336 /** Get the email address of Programmatic Point Of Contact at originator.
337 * @return email address of Programmatic Point Of Contact at originator
338 * @since 11.2
339 */
340 public String getOriginatorEmail() {
341 return originatorEmail;
342 }
343
344 /** Set the email address of Programmatic Point Of Contact at originator.
345 * @param originatorEmail email address of Programmatic Point Of Contact at originator
346 * @since 11.2
347 */
348 public void setOriginatorEmail(final String originatorEmail) {
349 refuseFurtherComments();
350 this.originatorEmail = originatorEmail;
351 }
352
353 /** Get the address of Programmatic Point Of Contact at originator.
354 * @return address of Programmatic Point Of Contact at originator
355 */
356 public String getOriginatorAddress() {
357 return originatorAddress;
358 }
359
360 /** Set the address of Programmatic Point Of Contact at originator.
361 * @param originatorAddress address of Programmatic Point Of Contact at originator
362 */
363 public void setOriginatorAddress(final String originatorAddress) {
364 refuseFurtherComments();
365 this.originatorAddress = originatorAddress;
366 }
367
368 /** Get the creating agency or operator.
369 * @return creating agency or operator
370 */
371 public String getTechOrg() {
372 return techOrg;
373 }
374
375 /** Set the creating agency or operator.
376 * @param techOrg creating agency or operator
377 */
378 public void setTechOrg(final String techOrg) {
379 refuseFurtherComments();
380 this.techOrg = techOrg;
381 }
382
383 /** Get the Technical Point Of Contact at originator.
384 * @return Technical Point Of Contact at originator
385 */
386 public String getTechPOC() {
387 return techPOC;
388 }
389
390 /** Set the Technical Point Of Contact at originator.
391 * @param techPOC Technical Point Of Contact at originator
392 */
393 public void setTechPOC(final String techPOC) {
394 refuseFurtherComments();
395 this.techPOC = techPOC;
396 }
397
398 /** Get the position of Technical Point Of Contact at originator.
399 * @return position of Technical Point Of Contact at originator
400 */
401 public String getTechPosition() {
402 return techPosition;
403 }
404
405 /** Set the position of Technical Point Of Contact at originator.
406 * @param techPosition position of Technical Point Of Contact at originator
407 */
408 public void setTechPosition(final String techPosition) {
409 refuseFurtherComments();
410 this.techPosition = techPosition;
411 }
412
413 /** Get the phone number of Technical Point Of Contact at originator.
414 * @return phone number of Technical Point Of Contact at originator
415 */
416 public String getTechPhone() {
417 return techPhone;
418 }
419
420 /** Set the phone number of Technical Point Of Contact at originator.
421 * @param techPhone phone number of Technical Point Of Contact at originator
422 */
423 public void setTechPhone(final String techPhone) {
424 refuseFurtherComments();
425 this.techPhone = techPhone;
426 }
427
428 /** Get the email address of Technical Point Of Contact at originator.
429 * @return email address of Technical Point Of Contact at originator
430 * @since 11.2
431 */
432 public String getTechEmail() {
433 return techEmail;
434 }
435
436 /** Set the email address of Technical Point Of Contact at originator.
437 * @param techEmail email address of Technical Point Of Contact at originator
438 * @since 11.2
439 */
440 public void setTechEmail(final String techEmail) {
441 refuseFurtherComments();
442 this.techEmail = techEmail;
443 }
444
445 /** Get the address of Technical Point Of Contact at originator.
446 * @return address of Technical Point Of Contact at originator
447 */
448 public String getTechAddress() {
449 return techAddress;
450 }
451
452 /** Set the address of Technical Point Of Contact at originator.
453 * @param techAddress address of Technical Point Of Contact at originator
454 */
455 public void setTechAddress(final String techAddress) {
456 refuseFurtherComments();
457 this.techAddress = techAddress;
458 }
459
460 /** Get the unique ID identifying previous message from a given originator.
461 * @return unique ID identifying previous message from a given originator
462 */
463 public String getPreviousMessageID() {
464 return previousMessageID;
465 }
466
467 /** Set the unique ID identifying previous message from a given originator.
468 * @param previousMessageID unique ID identifying previous message from a given originator
469 */
470 public void setPreviousMessageID(final String previousMessageID) {
471 refuseFurtherComments();
472 this.previousMessageID = previousMessageID;
473 }
474
475 /** Get the unique ID identifying next message from a given originator.
476 * @return unique ID identifying next message from a given originator
477 */
478 public String getNextMessageID() {
479 return nextMessageID;
480 }
481
482 /** Set the unique ID identifying next message from a given originator.
483 * @param nextMessageID unique ID identifying next message from a given originator
484 */
485 public void setNextMessageID(final String nextMessageID) {
486 refuseFurtherComments();
487 this.nextMessageID = nextMessageID;
488 }
489
490 /** Get the Unique identifier of Attitude Data Message linked to this Orbit Data Message.
491 * @return Unique identifier of Attitude Data Message linked to this Orbit Data Message
492 */
493 public String getAdmMessageLink() {
494 return admMessageLink;
495 }
496
497 /** Set the Unique identifier of Attitude Data Message linked to this Orbit Data Message.
498 * @param admMessageLink Unique identifier of Attitude Data Message linked to this Orbit Data Message
499 */
500 public void setAdmMessageLink(final String admMessageLink) {
501 refuseFurtherComments();
502 this.admMessageLink = admMessageLink;
503 }
504
505 /** Get the Unique identifier of Conjunction Data Message linked to this Orbit Data Message.
506 * @return Unique identifier of Conjunction Data Message linked to this Orbit Data Message
507 */
508 public String getCdmMessageLink() {
509 return cdmMessageLink;
510 }
511
512 /** Set the Unique identifier of Conjunction Data Message linked to this Orbit Data Message.
513 * @param cdmMessageLink Unique identifier of Conjunction Data Message linked to this Orbit Data Message
514 */
515 public void setCdmMessageLink(final String cdmMessageLink) {
516 refuseFurtherComments();
517 this.cdmMessageLink = cdmMessageLink;
518 }
519
520 /** Get the Unique identifier of Pointing Request Message linked to this Orbit Data Message.
521 * @return Unique identifier of Pointing Request Message linked to this Orbit Data Message
522 */
523 public String getPrmMessageLink() {
524 return prmMessageLink;
525 }
526
527 /** Set the Unique identifier of Pointing Request Message linked to this Orbit Data Message.
528 * @param prmMessageLink Unique identifier of Pointing Request Message linked to this Orbit Data Message
529 */
530 public void setPrmMessageLink(final String prmMessageLink) {
531 refuseFurtherComments();
532 this.prmMessageLink = prmMessageLink;
533 }
534
535 /** Get the Unique identifier of Reentry Data Message linked to this Orbit Data Message.
536 * @return Unique identifier of Reentry Data Message linked to this Orbit Data Message
537 */
538 public String getRdmMessageLink() {
539 return rdmMessageLink;
540 }
541
542 /** Set the Unique identifier of Reentry Data Message linked to this Orbit Data Message.
543 * @param rdmMessageLink Unique identifier of Reentry Data Message linked to this Orbit Data Message
544 */
545 public void setRdmMessageLink(final String rdmMessageLink) {
546 refuseFurtherComments();
547 this.rdmMessageLink = rdmMessageLink;
548 }
549
550 /** Get the Unique identifier of Tracking Data Message linked to this Orbit Data Message.
551 * @return Unique identifier of Tracking Data Message linked to this Orbit Data Message
552 */
553 public String getTdmMessageLink() {
554 return tdmMessageLink;
555 }
556
557 /** Set the Unique identifier of Tracking Data Message linked to this Orbit Data Message.
558 * @param tdmMessageLink Unique identifier of Tracking Data Message linked to this Orbit Data Message
559 */
560 public void setTdmMessageLink(final String tdmMessageLink) {
561 refuseFurtherComments();
562 this.tdmMessageLink = tdmMessageLink;
563 }
564
565 /** Get the operator of the space object.
566 * @return operator of the space object
567 */
568 public String getOperator() {
569 return operator;
570 }
571
572 /** Set the operator of the space object.
573 * @param operator operator of the space object
574 */
575 public void setOperator(final String operator) {
576 refuseFurtherComments();
577 this.operator = operator;
578 }
579
580 /** Get the owner of the space object.
581 * @return owner of the space object
582 */
583 public String getOwner() {
584 return owner;
585 }
586
587 /** Set the owner of the space object.
588 * @param owner owner of the space object
589 */
590 public void setOwner(final String owner) {
591 refuseFurtherComments();
592 this.owner = owner;
593 }
594
595 /** Get the name of the country where the space object owner is based.
596 * @return name of the country where the space object owner is based
597 */
598 public String getCountry() {
599 return country;
600 }
601
602 /** Set the name of the country where the space object owner is based.
603 * @param country name of the country where the space object owner is based
604 */
605 public void setCountry(final String country) {
606 refuseFurtherComments();
607 this.country = country;
608 }
609
610 /** Get the name of the constellation this space object belongs to.
611 * @return name of the constellation this space object belongs to
612 */
613 public String getConstellation() {
614 return constellation;
615 }
616
617 /** Set the name of the constellation this space object belongs to.
618 * @param constellation name of the constellation this space object belongs to
619 */
620 public void setConstellation(final String constellation) {
621 refuseFurtherComments();
622 this.constellation = constellation;
623 }
624
625 /** Get the type of object.
626 * @return type of object
627 */
628 public ObjectType getObjectType() {
629 return objectType;
630 }
631
632 /** Set the type of object.
633 * @param objectType type of object
634 */
635 public void setObjectType(final ObjectType objectType) {
636 refuseFurtherComments();
637 this.objectType = objectType;
638 }
639
640 /** Get the epoch to which <em>all</em> relative times are referenced in data blocks.
641 * @return epoch to which <em>all</em> relative times are referenced in data blocks
642 */
643 public AbsoluteDate getEpochT0() {
644 return epochT0;
645 }
646
647 /** Set the epoch to which <em>all</em> relative times are referenced in data blocks.
648 * @param epochT0 epoch to which <em>all</em> relative times are referenced in data blocks
649 */
650 public void setEpochT0(final AbsoluteDate epochT0) {
651 refuseFurtherComments();
652 this.epochT0 = epochT0;
653 }
654
655 /** Get the operational status.
656 * @return operational status
657 */
658 public OpsStatus getOpsStatus() {
659 return opsStatus;
660 }
661
662 /** Set the operational status.
663 * @param opsStatus operational status
664 */
665 public void setOpsStatus(final OpsStatus opsStatus) {
666 refuseFurtherComments();
667 this.opsStatus = opsStatus;
668 }
669
670 /** Get the orbit category.
671 * @return orbit category
672 */
673 public OrbitCategory getOrbitCategory() {
674 return orbitCategory;
675 }
676
677 /** Set the orbit category.
678 * @param orbitCategory orbit category
679 */
680 public void setOrbitCategory(final OrbitCategory orbitCategory) {
681 refuseFurtherComments();
682 this.orbitCategory = orbitCategory;
683 }
684
685 /** Get the list of elements of information data blocks included in this message.
686 * @return list of elements of information data blocks included in this message
687 */
688 public List<OcmElements> getOcmDataElements() {
689 return ocmDataElements;
690 }
691
692 /** Set the list of elements of information data blocks included in this message.
693 * @param ocmDataElements list of elements of information data blocks included in this message
694 */
695 public void setOcmDataElements(final List<OcmElements> ocmDataElements) {
696 refuseFurtherComments();
697 this.ocmDataElements = ocmDataElements;
698 }
699
700 /** Get the spacecraft clock count at {@link #getEpochT0()}.
701 * @return spacecraft clock count at {@link #getEpochT0()}
702 */
703 public double getSclkOffsetAtEpoch() {
704 return sclkOffsetAtEpoch;
705 }
706
707 /** Set the spacecraft clock count at {@link #getEpochT0()}.
708 * @param sclkOffsetAtEpoch spacecraft clock count at {@link #getEpochT0()}
709 */
710 public void setSclkOffsetAtEpoch(final double sclkOffsetAtEpoch) {
711 refuseFurtherComments();
712 this.sclkOffsetAtEpoch = sclkOffsetAtEpoch;
713 }
714
715 /** Get the number of spacecraft clock seconds occurring during one SI second.
716 * @return number of spacecraft clock seconds occurring during one SI second
717 */
718 public double getSclkSecPerSISec() {
719 return sclkSecPerSISec;
720 }
721
722 /** Set the number of spacecraft clock seconds occurring during one SI second.
723 * @param secClockPerSISec number of spacecraft clock seconds occurring during one SI second
724 */
725 public void setSclkSecPerSISec(final double secClockPerSISec) {
726 refuseFurtherComments();
727 this.sclkSecPerSISec = secClockPerSISec;
728 }
729
730 /** Get the creation date of previous message from a given originator.
731 * @return creation date of previous message from a given originator
732 */
733 public AbsoluteDate getPreviousMessageEpoch() {
734 return previousMessageEpoch;
735 }
736
737 /** Set the creation date of previous message from a given originator.
738 * @param previousMessageEpoch creation date of previous message from a given originator
739 */
740 public void setPreviousMessageEpoch(final AbsoluteDate previousMessageEpoch) {
741 refuseFurtherComments();
742 this.previousMessageEpoch = previousMessageEpoch;
743 }
744
745 /** Get the creation date of next message from a given originator.
746 * @return creation date of next message from a given originator
747 */
748 public AbsoluteDate getNextMessageEpoch() {
749 return nextMessageEpoch;
750 }
751
752 /** Set the creation date of next message from a given originator.
753 * @param nextMessageEpoch creation date of next message from a given originator
754 */
755 public void setNextMessageEpoch(final AbsoluteDate nextMessageEpoch) {
756 refuseFurtherComments();
757 this.nextMessageEpoch = nextMessageEpoch;
758 }
759
760 /** Get the time of the earliest data contained in the OCM.
761 * @return time of the earliest data contained in the OCM
762 */
763 public AbsoluteDate getStartTime() {
764 return startTime;
765 }
766
767 /** Set the time of the earliest data contained in the OCM.
768 * @param startTime time of the earliest data contained in the OCM
769 */
770 public void setStartTime(final AbsoluteDate startTime) {
771 refuseFurtherComments();
772 this.startTime = startTime;
773 }
774
775 /** Get the time of the latest data contained in the OCM.
776 * @return time of the latest data contained in the OCM
777 */
778 public AbsoluteDate getStopTime() {
779 return stopTime;
780 }
781
782 /** Set the time of the latest data contained in the OCM.
783 * @param stopTime time of the latest data contained in the OCM
784 */
785 public void setStopTime(final AbsoluteDate stopTime) {
786 refuseFurtherComments();
787 this.stopTime = stopTime;
788 }
789
790 /** Get the span of time in seconds that the OCM covers.
791 * @return span of time in seconds that the OCM covers
792 */
793 public double getTimeSpan() {
794 return timeSpan;
795 }
796
797 /** Set the span of time in seconds that the OCM covers.
798 * @param timeSpan span of time in seconds that the OCM covers
799 */
800 public void setTimeSpan(final double timeSpan) {
801 refuseFurtherComments();
802 this.timeSpan = timeSpan;
803 }
804
805 /** Get the difference (TAI – UTC) in seconds at epoch {@link #getEpochT0()}.
806 * @return difference (TAI – UTC) in seconds at epoch {@link #getEpochT0()}
807 */
808 public double getTaimutcT0() {
809 return taimutcT0;
810 }
811
812 /** Set the difference (TAI – UTC) in seconds at epoch {@link #getEpochT0()}.
813 * @param taimutcT0 difference (TAI – UTC) in seconds at epoch {@link #getEpochT0()}
814 */
815 public void setTaimutcT0(final double taimutcT0) {
816 refuseFurtherComments();
817 this.taimutcT0 = taimutcT0;
818 }
819
820 /** Get the epoch of next leap second.
821 * @return epoch of next leap second
822 * @since 11.2
823 */
824 public AbsoluteDate getNextLeapEpoch() {
825 return nextLeapEpoch;
826 }
827
828 /** Set the epoch of next leap second.
829 * @param nextLeapEpoch epoch of next leap second
830 * @since 11.2
831 */
832 public void setNextLeapEpoch(final AbsoluteDate nextLeapEpoch) {
833 refuseFurtherComments();
834 this.nextLeapEpoch = nextLeapEpoch;
835 }
836
837 /** Get the difference (TAI – UTC) in seconds incorporated at epoch {@link #getNextLeapEpoch()}.
838 * @return difference (TAI – UTC) in seconds incorporated at epoch {@link #getNextLeapEpoch()}
839 * @since 11.2
840 */
841 public double getNextLeapTaimutc() {
842 return nextLeapTaimutc;
843 }
844
845 /** Set the difference (TAI – UTC) in seconds incorporated at epoch {@link #getNextLeapEpoch()}.
846 * @param nextLeapTaimutc difference (TAI – UTC) in seconds incorporated at epoch {@link #getNextLeapEpoch()}
847 * @since 11.2
848 */
849 public void setNextLeapTaimutc(final double nextLeapTaimutc) {
850 refuseFurtherComments();
851 this.nextLeapTaimutc = nextLeapTaimutc;
852 }
853
854 /** Get the difference (UT1 – UTC) in seconds at epoch {@link #getEpochT0()}.
855 * @return difference (UT1 – UTC) in seconds at epoch {@link #getEpochT0()}
856 */
857 public double getUt1mutcT0() {
858 return ut1mutcT0;
859 }
860
861 /** Set the difference (UT1 – UTC) in seconds at epoch {@link #getEpochT0()}.
862 * @param ut1mutcT0 difference (UT1 – UTC) in seconds at epoch {@link #getEpochT0()}
863 */
864 public void setUt1mutcT0(final double ut1mutcT0) {
865 refuseFurtherComments();
866 this.ut1mutcT0 = ut1mutcT0;
867 }
868
869 /** Get the source and version of Earth Orientation Parameters.
870 * @return source and version of Earth Orientation Parameters
871 */
872 public String getEopSource() {
873 return eopSource;
874 }
875
876 /** Set the source and version of Earth Orientation Parameters.
877 * @param eopSource source and version of Earth Orientation Parameters
878 */
879 public void setEopSource(final String eopSource) {
880 refuseFurtherComments();
881 this.eopSource = eopSource;
882 }
883
884 /** Get the interpolation method for Earth Orientation Parameters.
885 * @return interpolation method for Earth Orientation Parameters
886 */
887 public String getInterpMethodEOP() {
888 return interpMethodEOP;
889 }
890
891 /** Set the interpolation method for Earth Orientation Parameters.
892 * @param interpMethodEOP interpolation method for Earth Orientation Parameters
893 */
894 public void setInterpMethodEOP(final String interpMethodEOP) {
895 refuseFurtherComments();
896 this.interpMethodEOP = interpMethodEOP;
897 }
898
899 /** Get the source and version of celestial body (e.g. Sun/Earth/Planetary).
900 * @return source and version of celestial body (e.g. Sun/Earth/Planetary)
901 */
902 public String getCelestialSource() {
903 return celestialSource;
904 }
905
906 /** Set the source and version of celestial body (e.g. Sun/Earth/Planetary).
907 * @param celestialSource source and version of celestial body (e.g. Sun/Earth/Planetary)
908 */
909 public void setCelestialSource(final String celestialSource) {
910 refuseFurtherComments();
911 this.celestialSource = celestialSource;
912 }
913
914 /** Copy the instance, making sure mandatory fields have been initialized.
915 * <p>
916 * Message ID, previous/next references, start and stop times are not copied.
917 * </p>
918 * @param version format version
919 * @return a new copy
920 * @since 12.0
921 */
922 public OcmMetadata copy(final double version) {
923
924 validate(version);
925
926 // allocate new instance
927 final OcmMetadata copy = new OcmMetadata(dataContext, getFrameMapper());
928
929 // copy comments
930 for (String comment : getComments()) {
931 copy.addComment(comment);
932 }
933
934 // copy metadata
935 copy.setInternationalDesignator(getInternationalDesignator());
936 copy.setCatalogName(getCatalogName());
937 copy.setObjectDesignator(getObjectDesignator());
938 copy.setAlternateNames(getAlternateNames());
939 copy.setOriginatorPOC(getOriginatorPOC());
940 copy.setOriginatorPosition(getOriginatorPosition());
941 copy.setOriginatorPhone(getOriginatorPhone());
942 copy.setOriginatorEmail(getOriginatorEmail());
943 copy.setOriginatorAddress(getOriginatorAddress());
944 copy.setTechOrg(getTechOrg());
945 copy.setTechPOC(getTechPOC());
946 copy.setTechPosition(getTechPosition());
947 copy.setTechPhone(getTechPhone());
948 copy.setTechEmail(getTechEmail());
949 copy.setTechAddress(getTechAddress());
950 copy.setAdmMessageLink(getAdmMessageLink());
951 copy.setCdmMessageLink(getCdmMessageLink());
952 copy.setPrmMessageLink(getPrmMessageLink());
953 copy.setRdmMessageLink(getRdmMessageLink());
954 copy.setTdmMessageLink(getTdmMessageLink());
955 copy.setOperator(getOperator());
956 copy.setOwner(getOwner());
957 copy.setCountry(getCountry());
958 copy.setConstellation(getConstellation());
959 copy.setObjectType(getObjectType());
960 copy.setEpochT0(getEpochT0());
961 copy.setOpsStatus(getOpsStatus());
962 copy.setOrbitCategory(getOrbitCategory());
963 copy.setOcmDataElements(getOcmDataElements());
964 copy.setSclkOffsetAtEpoch(getSclkOffsetAtEpoch());
965 copy.setSclkSecPerSISec(getSclkSecPerSISec());
966 copy.setTaimutcT0(getTaimutcT0());
967 copy.setNextLeapEpoch(getNextLeapEpoch());
968 copy.setNextLeapTaimutc(getNextLeapTaimutc());
969 copy.setUt1mutcT0(getUt1mutcT0());
970 copy.setEopSource(getEopSource());
971 copy.setInterpMethodEOP(getInterpMethodEOP());
972 copy.setCelestialSource(getCelestialSource());
973
974 return copy;
975
976 }
977
978 }