1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.ccsds.ndm.cdm;
18
19 import java.util.List;
20
21 import org.orekit.annotation.DefaultDataContext;
22 import org.orekit.bodies.CelestialBody;
23 import org.orekit.bodies.CelestialBodyFactory;
24 import org.orekit.data.DataContext;
25 import org.orekit.errors.OrekitException;
26 import org.orekit.errors.OrekitMessages;
27 import org.orekit.files.ccsds.definitions.YesNoUnknown;
28 import org.orekit.files.ccsds.definitions.BodyFacade;
29 import org.orekit.files.ccsds.definitions.FrameFacade;
30 import org.orekit.files.ccsds.definitions.CelestialBodyFrame;
31 import org.orekit.files.ccsds.definitions.ModifiedFrame;
32 import org.orekit.files.ccsds.definitions.TimeSystem;
33 import org.orekit.files.ccsds.ndm.odm.ocm.ObjectType;
34 import org.orekit.files.ccsds.section.Metadata;
35 import org.orekit.frames.Frame;
36
37
38
39
40
41
42 public class CdmMetadata extends Metadata {
43
44
45 private CdmRelativeMetadata relativeMetadata;
46
47
48 private String object;
49
50
51 private String objectDesignator;
52
53
54 private String catalogName;
55
56
57 private String objectName;
58
59
60
61 private String internationalDesignator;
62
63
64 private ObjectType objectType;
65
66
67 private String operatorContact;
68
69
70 private String operatorOrganization;
71
72
73 private String operatorPhone;
74
75
76 private String operatorEmail;
77
78
79 private String odmMsgLink;
80
81
82 private String admMsgLink;
83
84
85 private String ephemName;
86
87
88
89 private YesNoUnknown obsBeforeNextMessage;
90
91
92 private CovarianceMethod covarianceMethod;
93
94
95 private Maneuvrable maneuverable;
96
97
98 private BodyFacade orbitCenter;
99
100
101 private FrameFacade refFrame;
102
103
104 private String gravityModel;
105
106
107 private int gravityDegree;
108
109
110 private int gravityOrder;
111
112
113 private String atmosphericModel;
114
115
116 private List<BodyFacade> nBodyPerturbations;
117
118
119 private YesNoUnknown isSolarRadPressure;
120
121
122 private YesNoUnknown isEarthTides;
123
124
125 private YesNoUnknown isIntrackThrustModeled;
126
127
128 private String covarianceSource;
129
130
131 private AltCovarianceType altCovType;
132
133
134 private FrameFacade altCovRefFrame;
135
136
137
138 @DefaultDataContext
139 public CdmMetadata() {
140 super(null);
141 orbitCenter = new BodyFacade(CelestialBodyFactory.EARTH.toUpperCase(), CelestialBodyFactory.getEarth());
142 }
143
144
145
146
147
148 public CdmMetadata(final DataContext dataContext) {
149 super(null);
150 final CelestialBody earth = dataContext.getCelestialBodies().getEarth();
151 orbitCenter = new BodyFacade(earth.getName().toUpperCase(), earth);
152 }
153
154
155 @Override
156 public void validate(final double version) {
157
158 checkNotNull(object, CdmMetadataKey.OBJECT.name());
159 checkNotNull(objectDesignator, CdmMetadataKey.OBJECT_DESIGNATOR.name());
160 checkNotNull(catalogName, CdmMetadataKey.CATALOG_NAME.name());
161 checkNotNull(objectName, CdmMetadataKey.OBJECT_NAME.name());
162 checkNotNull(internationalDesignator, CdmMetadataKey.INTERNATIONAL_DESIGNATOR.name());
163 checkNotNull(ephemName, CdmMetadataKey.EPHEMERIS_NAME.name());
164 checkNotNull(covarianceMethod, CdmMetadataKey.COVARIANCE_METHOD.name());
165 checkNotNull(maneuverable, CdmMetadataKey.MANEUVERABLE.name());
166 checkNotNull(refFrame, CdmMetadataKey.REF_FRAME.name());
167 }
168
169
170
171
172
173 public CdmRelativeMetadata getRelativeMetadata() {
174 return relativeMetadata;
175 }
176
177
178
179
180
181 public void setRelativeMetadata(final CdmRelativeMetadata relativeMetadata) {
182 this.relativeMetadata = relativeMetadata;
183 }
184
185
186
187
188
189 public String getObject() {
190 return object;
191 }
192
193
194
195
196
197 public void setObject(final String object) {
198 this.setTimeSystem(TimeSystem.UTC);
199 refuseFurtherComments();
200 this.object = object;
201 }
202
203
204
205
206
207 public String getObjectDesignator() {
208 return objectDesignator;
209 }
210
211
212
213
214
215 public void setObjectDesignator(final String objectDesignator) {
216 refuseFurtherComments();
217 this.objectDesignator = objectDesignator;
218 }
219
220
221
222
223
224 public String getCatalogName() {
225 return catalogName;
226 }
227
228
229
230
231
232 public void setCatalogName(final String catalogName) {
233 refuseFurtherComments();
234 this.catalogName = catalogName;
235 }
236
237
238
239
240
241 public String getObjectName() {
242 return objectName;
243 }
244
245
246
247
248
249 public void setObjectName(final String objectName) {
250 refuseFurtherComments();
251 this.objectName = objectName;
252 }
253
254
255
256
257
258 public String getInternationalDes() {
259 return internationalDesignator;
260 }
261
262
263
264
265
266 public void setInternationalDes(final String internationalDes) {
267 refuseFurtherComments();
268 this.internationalDesignator = internationalDes;
269 }
270
271
272
273
274
275 public ObjectType getObjectType() {
276 return objectType;
277 }
278
279
280
281
282
283 public void setObjectType(final ObjectType objectType) {
284 refuseFurtherComments();
285 this.objectType = objectType;
286 }
287
288
289
290
291
292 public String getOperatorContactPosition() {
293 return operatorContact;
294 }
295
296
297
298
299
300 public void setOperatorContactPosition(final String opContact) {
301 refuseFurtherComments();
302 this.operatorContact = opContact;
303 }
304
305
306
307
308
309 public String getOperatorOrganization() {
310 return operatorOrganization;
311 }
312
313
314
315
316
317 public void setOperatorOrganization(final String operatorOrganization) {
318 refuseFurtherComments();
319 this.operatorOrganization = operatorOrganization;
320 }
321
322
323
324
325
326 public String getOperatorPhone() {
327 return operatorPhone;
328 }
329
330
331
332
333
334 public void setOperatorPhone(final String operatorPhone) {
335 refuseFurtherComments();
336 this.operatorPhone = operatorPhone;
337 }
338
339
340
341
342
343 public String getOperatorEmail() {
344 return operatorEmail;
345 }
346
347
348
349
350
351 public void setOperatorEmail(final String operatorEmail) {
352 refuseFurtherComments();
353 this.operatorEmail = operatorEmail;
354 }
355
356
357
358
359
360 public String getEphemName() {
361 return ephemName;
362 }
363
364
365
366
367
368 public void setEphemName(final String ephemName) {
369 refuseFurtherComments();
370 this.ephemName = ephemName;
371 }
372
373
374
375
376
377 public CovarianceMethod getCovarianceMethod() {
378 return covarianceMethod;
379 }
380
381
382
383
384
385 public void setCovarianceMethod(final CovarianceMethod covarianceMethod) {
386 refuseFurtherComments();
387 this.covarianceMethod = covarianceMethod;
388 }
389
390
391
392
393
394 public Maneuvrable getManeuverable() {
395 return maneuverable;
396 }
397
398
399
400
401
402 public void setManeuverable(final Maneuvrable maneuverable) {
403 refuseFurtherComments();
404 this.maneuverable = maneuverable;
405 }
406
407
408
409
410
411 public BodyFacade getOrbitCenter() {
412 return orbitCenter;
413 }
414
415
416
417
418
419 public void setOrbitCenter(final BodyFacade orbitCenter) {
420 refuseFurtherComments();
421 this.orbitCenter = orbitCenter;
422 }
423
424
425
426
427
428
429
430 public Frame getFrame() {
431 if (orbitCenter == null || orbitCenter.getBody() == null) {
432 throw new OrekitException(OrekitMessages.NO_DATA_LOADED_FOR_CELESTIAL_BODY, "No Orbit center name");
433 }
434 if (refFrame == null) {
435 throw new OrekitException(OrekitMessages.CCSDS_INVALID_FRAME, "No reference frame");
436 }
437 else {
438 if (refFrame.asFrame() == null) {
439 throw new OrekitException(OrekitMessages.CCSDS_INVALID_FRAME, refFrame.getName());
440 }
441 }
442
443
444 final boolean isMci = refFrame.asCelestialBodyFrame() == CelestialBodyFrame.MCI;
445 final boolean isIcrf = refFrame.asCelestialBodyFrame() == CelestialBodyFrame.ICRF;
446 final boolean isSolarSystemBarycenter =
447 CelestialBodyFactory.SOLAR_SYSTEM_BARYCENTER.equals(orbitCenter.getBody().getName());
448 if (!(isMci || isIcrf) && CelestialBodyFactory.EARTH.equals(orbitCenter.getBody().getName()) ||
449 isMci && CelestialBodyFactory.MARS.equals(orbitCenter.getBody().getName()) ||
450 isIcrf && isSolarSystemBarycenter) {
451 return refFrame.asFrame();
452 }
453
454 return new ModifiedFrame(refFrame.asFrame(), refFrame.asCelestialBodyFrame(),
455 orbitCenter.getBody(), orbitCenter.getName());
456 }
457
458
459
460
461
462
463
464 public FrameFacade getRefFrame() {
465 return refFrame;
466 }
467
468
469
470
471
472 public void setRefFrame(final FrameFacade refFrame) {
473 refuseFurtherComments();
474 this.refFrame = refFrame;
475 }
476
477
478
479
480 public String getGravityModel() {
481 return gravityModel;
482 }
483
484
485
486
487 public int getGravityDegree() {
488 return gravityDegree;
489 }
490
491
492
493
494 public int getGravityOrder() {
495 return gravityOrder;
496 }
497
498
499
500
501
502
503 public void setGravityModel(final String name, final int degree, final int order) {
504 refuseFurtherComments();
505 this.gravityModel = name;
506 this.gravityDegree = degree;
507 this.gravityOrder = order;
508 }
509
510
511
512
513 public String getAtmosphericModel() {
514 return atmosphericModel;
515 }
516
517
518
519
520 public void setAtmosphericModel(final String atmosphericModel) {
521 refuseFurtherComments();
522 this.atmosphericModel = atmosphericModel;
523 }
524
525
526
527
528 public List<BodyFacade> getNBodyPerturbations() {
529 return nBodyPerturbations;
530 }
531
532
533
534
535 public void setNBodyPerturbations(final List<BodyFacade> nBody) {
536 refuseFurtherComments();
537 this.nBodyPerturbations = nBody;
538 }
539
540
541
542
543
544 public YesNoUnknown getSolarRadiationPressure() {
545 return isSolarRadPressure;
546 }
547
548
549
550
551
552 public void setSolarRadiationPressure(final YesNoUnknown isSolRadPressure) {
553 refuseFurtherComments();
554 this.isSolarRadPressure = isSolRadPressure;
555 }
556
557
558
559
560
561 public YesNoUnknown getEarthTides() {
562 return isEarthTides;
563 }
564
565
566
567
568
569 public void setEarthTides(final YesNoUnknown EarthTides) {
570 refuseFurtherComments();
571 this.isEarthTides = EarthTides;
572 }
573
574
575
576
577
578 public YesNoUnknown getIntrackThrust() {
579 return isIntrackThrustModeled;
580 }
581
582
583
584
585
586 public void setIntrackThrust(final YesNoUnknown IntrackThrustModeled) {
587 refuseFurtherComments();
588 this.isIntrackThrustModeled = IntrackThrustModeled;
589 }
590
591
592
593
594 public String getCovarianceSource() {
595 return covarianceSource;
596 }
597
598
599
600
601 public void setCovarianceSource(final String covarianceSource) {
602 refuseFurtherComments();
603 this.covarianceSource = covarianceSource;
604 }
605
606
607
608
609 public AltCovarianceType getAltCovType() {
610 return altCovType;
611 }
612
613
614
615
616 public void setAltCovType(final AltCovarianceType altCovType) {
617 refuseFurtherComments();
618 this.altCovType = altCovType;
619 }
620
621
622
623
624
625 public FrameFacade getAltCovRefFrame() {
626 return altCovRefFrame;
627 }
628
629
630
631
632
633 public void setAltCovRefFrame(final FrameFacade altCovRefFrame) {
634 refuseFurtherComments();
635
636 if (getAltCovType() == null) {
637 throw new OrekitException(OrekitMessages.CCSDS_MISSING_KEYWORD, CdmMetadataKey.ALT_COV_TYPE);
638 }
639
640 if (altCovRefFrame.asFrame() == null) {
641 throw new OrekitException(OrekitMessages.CCSDS_INVALID_FRAME, altCovRefFrame.getName());
642 }
643
644
645 if ( altCovRefFrame.asCelestialBodyFrame() == CelestialBodyFrame.GCRF ||
646 altCovRefFrame.asCelestialBodyFrame() == CelestialBodyFrame.EME2000 ||
647 altCovRefFrame.asCelestialBodyFrame().name().contains("ITRF") ) {
648 this.altCovRefFrame = altCovRefFrame;
649 } else {
650 throw new OrekitException(OrekitMessages.CCSDS_INVALID_FRAME, altCovRefFrame.getName());
651 }
652 }
653
654
655
656
657 public String getOdmMsgLink() {
658 return odmMsgLink;
659 }
660
661
662
663
664 public void setOdmMsgLink(final String odmMsgLink) {
665 refuseFurtherComments();
666 this.odmMsgLink = odmMsgLink;
667 }
668
669
670
671
672 public String getAdmMsgLink() {
673 return admMsgLink;
674 }
675
676
677
678
679 public void setAdmMsgLink(final String admMsgLink) {
680 refuseFurtherComments();
681 this.admMsgLink = admMsgLink;
682 }
683
684
685
686
687
688 public YesNoUnknown getObsBeforeNextMessage() {
689 return obsBeforeNextMessage;
690 }
691
692
693
694
695
696 public void setObsBeforeNextMessage(final YesNoUnknown obsBeforeNextMessage) {
697 refuseFurtherComments();
698 this.obsBeforeNextMessage = obsBeforeNextMessage;
699 }
700 }