1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.events.handlers;
18
19 import org.hipparchus.CalculusFieldElement;
20 import org.hipparchus.Field;
21 import org.hipparchus.ode.events.Action;
22 import org.orekit.propagation.FieldSpacecraftState;
23 import org.orekit.propagation.events.FieldEventDetector;
24 import org.orekit.time.AbsoluteDate;
25 import org.orekit.time.FieldAbsoluteDate;
26
27
28
29
30
31
32
33
34
35
36 public class FieldRecallLastOccurrence<T extends CalculusFieldElement<T>> implements FieldEventHandler<T> {
37
38
39 private final FieldEventHandler<T> wrappedHandler;
40
41
42 private FieldAbsoluteDate<T> lastOccurrence;
43
44
45
46
47 public FieldRecallLastOccurrence(final FieldEventHandler<T> wrappedHandler) {
48 this.wrappedHandler = wrappedHandler;
49 }
50
51
52
53
54 public FieldAbsoluteDate<T> getLastOccurrence() {
55 return lastOccurrence;
56 }
57
58
59 @Override
60 public void init(final FieldSpacecraftState<T> initialState, final FieldAbsoluteDate<T> target,
61 final FieldEventDetector<T> detector) {
62 final boolean isForward = target.isAfter(initialState.getDate());
63 final Field<T> field = target.getField();
64 final AbsoluteDate date = isForward ? AbsoluteDate.PAST_INFINITY : AbsoluteDate.FUTURE_INFINITY;
65 lastOccurrence = new FieldAbsoluteDate<>(field, date);
66 wrappedHandler.init(initialState, target, detector);
67 }
68
69
70 @Override
71 public Action eventOccurred(final FieldSpacecraftState<T> s, final FieldEventDetector<T> detector,
72 final boolean increasing) {
73 lastOccurrence = s.getDate();
74 return wrappedHandler.eventOccurred(s, detector, increasing);
75 }
76
77
78 @Override
79 public FieldSpacecraftState<T> resetState(final FieldEventDetector<T> detector,
80 final FieldSpacecraftState<T> oldState) {
81 return wrappedHandler.resetState(detector, oldState);
82 }
83
84
85 @Override
86 public void finish(final FieldSpacecraftState<T> finalState, final FieldEventDetector<T> detector) {
87 wrappedHandler.finish(finalState, detector);
88 }
89 }