public class SegmentListPropagator extends SegmentPropagator
SegmentPropagator for SegmentList.  Each 
 SegmentPropagator in the list will be propagated sequentially and 
 a SegmentListResults will be returned.  Note that there are several 
 virtual methods on this type that must be overridden if you are extending this type.| Modifier | Constructor and Description | 
|---|---|
  | 
SegmentListPropagator(SegmentDefinition previousSegment,
                     SegmentList segmentDefinition,
                     EvaluatorGroup group)
Initializes a new instance. 
 | 
protected  | 
SegmentListPropagator(SegmentListPropagator existingInstance,
                     CopyContext context)
Initializes a new instance as a copy of an existing instance. 
 | 
| Modifier and Type | Method and Description | 
|---|---|
void | 
applyResults(SegmentResults results)
This method sets propagator's state via the input  
results. | 
Object | 
clone(CopyContext context)
Clones this object using the specified context. 
 | 
protected SegmentListConfiguration | 
createNewConfiguration()
Creates a new configuration for this segment. 
 | 
List<SegmentPropagator> | 
getSegments()
Gets the  
SegmentPropagators that will be propagated. | 
protected SegmentResults | 
propagateSegment(SegmentListResults cumulativeResults,
                SegmentConfiguration editedConfiguration,
                ITrackCalculationProgress progressTracker)
The method that actually propagates the segment. 
 | 
SegmentListResults | 
propagateSegmentList()
Propagates the segments in this  
SegmentListPropagator. | 
SegmentListResults | 
propagateSegmentList(ITimeBasedState initialState)
Propagates this starting from the  
initialState. | 
SegmentListResults | 
propagateSegmentList(SegmentListResults cumulativeResults,
                    SegmentListConfiguration configuration,
                    ITrackCalculationProgress progressTracker)
Propagates this  
propagator's list of segments. | 
static void | 
propagateSegments(SegmentListResults cumulativeResults,
                 List<SegmentPropagator> segmentsToPropagate,
                 SegmentListConfiguration configuration,
                 ITrackCalculationProgress progressTracker)
Propagates a list of segments. 
 | 
ITimeBasedState | 
propagateTo(SegmentResults results,
           JulianDate dateToPropagateTo)
    Propagates a segment to the time or independent variable specified in the  
dateToPropagateTo. | 
addPropagationFinishedEvent, defaultStateAdaptation, dispose, dispose, getAdapters, getIdentifier, getIsThreadSafe, getName, getOriginalConfiguration, getPropagationDirection, getStateForNextSegmentBehavior, propagate, propagate, propagate, propagate, propagate, propagate, propagate, removePropagationFinishedEvent, setOriginalConfiguration, toString, updateProgressTrackerAndReturnIfCanceledclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitclosepublic SegmentListPropagator(SegmentDefinition previousSegment, @Nonnull SegmentList segmentDefinition, @Nonnull EvaluatorGroup group)
previousSegment - The previous segment.segmentDefinition - The SegmentList that is making this.group - The EvaluatorGroup to use in making any 
    evaluators needed by the segmentDefinition.protected SegmentListPropagator(@Nonnull SegmentListPropagator 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 ICloneWithContextclone in class SegmentPropagatorcontext - The context to use to perform the copy.public static void propagateSegments(SegmentListResults cumulativeResults, @Nonnull List<SegmentPropagator> segmentsToPropagate, SegmentListConfiguration configuration, @Nullable ITrackCalculationProgress progressTracker)
SegmentListResults,
    this method will add the results to cumulativeResults.cumulativeResults - The results of the SegmentListPropagator 
    that is calling this static method.  These results must have the ParentResults (get / set) and 
    Propagator (get) set.segmentsToPropagate - The SegmentPropagators that should be propagated.configuration - The segment configuration that some 
    other segment has determined that this segment should run. If it is null then the 
    OriginalConfiguration (get / set) of the 
    Propagator (get) of the cumulativeResults will be used.progressTracker - An optional progress tracker.  
    How long the segment will take to propagate generally is not known ahead of time, so the reported 
    progress completed is set to -1.  But you can cancel propagation with the tracker.@Nonnull public final SegmentListResults propagateSegmentList()
SegmentListPropagator.SegmentListResults of the propagation.@Nonnull public SegmentListResults propagateSegmentList(ITimeBasedState initialState)
initialState.initialState - The state to propagation from.SegmentListResults of this propagation.@Nonnull public SegmentListResults propagateSegmentList(@Nullable SegmentListResults cumulativeResults, SegmentListConfiguration configuration, @Nullable ITrackCalculationProgress progressTracker)
propagator's list of segments.cumulativeResults - The overall results 
    of propagation up to this point.  This may be null if this segment is the top level segment.configuration - The segment configuration that some 
    other segment has determined that this segment should run. If it is null then the 
    OriginalConfiguration (get / set) will be used.progressTracker - An optional progress tracker.  
    How long the segment will take to propagate generally is not known ahead of time, so the reported 
    progress completed is set to -1.  A tracker is useful to cancel propagation if such an operation is desired.SegmentListResults of this propagation.protected SegmentResults propagateSegment(SegmentListResults cumulativeResults, SegmentConfiguration editedConfiguration, ITrackCalculationProgress progressTracker)
SegmentPropagator.propagate() method most appropriate to your problem.propagateSegment in class SegmentPropagatorcumulativeResults - The results of the SegmentListPropagator that contains this segment. This may
    be null if this segment is being propagated independent of a 
    SegmentListPropagator. In the simple case, this is only needed to provide the 
    StateForNextSegment (get) that this SegmentPropagator should 
    start propagating from. However, if the concrete SegmentPropagator will propagate multiple segments, 
    then the StateForNextSegment (get) must be set after each individual SegmentPropagator 
    is propagated. You may also need to maintain the SegmentResults (get) collection to 
    avoid having the same SegmentResults included twice (the SegmentResults for each SegmentPropagator 
    gets added automatically to the cumulativeResults when it is propagated). Also, if there is even 
    the possibility of the SegmentPropagator needing to back up into a previous segment, the 
    SegmentListResults.regenerateEphemerisForOverallTrajectory() method after each child SegmentPropagator is 
    propagated.editedConfiguration - The segment configuration that some 
    other segment has determined that this segment should run. If it is null then use the 
    segments OriginalConfiguration (get / set).progressTracker - An optional progress tracker. 
    How long the segment will take to propagate generally is not known ahead of time, so the reported 
    progress completed is set to -1. However you can cancel propagation with the tracker.segments propagation results. This method must fill in all of the relevant 
    properties in the returned results. See the documentation of the 
    derived type to determine if these SegmentResults may be cast to a more specific type.public ITimeBasedState propagateTo(SegmentResults results, @Nonnull JulianDate dateToPropagateTo)
    Propagates a segment to the time or independent variable specified in the dateToPropagateTo. 
    This method is needed to assist the case when segments might 
    overlap. If a later segment realizes that it needs to find a different
    final state from this SegmentPropagator, this method should be used to find that new final state.
    
Consider calling SegmentListResults.propagateToAssumingTimeBasedStates(agi.foundation.time.JulianDate, agi.foundation.segmentpropagation.SegmentResults, agi.foundation.segmentpropagation.SegmentListResults) instead of this method directly.
    For segments that happen instantaneously then this should 
    just return the state computed (although generally this method should never 
    need to be called on such segments since there is no "when" to propagate to, you can pull the state from the 
    results directly). For a segment that produces 
    an ephemeris, this should find the state right before the offset's independent variable and take one step 
    to that independent variable. If the segment returns 
    two states at the same time, PropagationDirection (get) should be checked, and if propagation is 
    IntegrationSense#INCREASING the final state should be returned, or the initial state 
    if propagation is backwards.
    
propagateTo in class SegmentPropagatorresults - The results previously computed by this 
    SegmentPropagator. When used with a SegmentListPropagator, the results of the actual 
    nested SegmentPropagator should be passed in.dateToPropagateTo - The date of the returned state.state at dateToPropagateTo.public void applyResults(SegmentResults results)
results.
    For SegmentPropagators that have 
    state, there may be times when that state should be manually set (sometimes 
    for performance considerations, when the propagator will be called multiple times and it should 
    start from where it left off).applyResults in class SegmentPropagatorresults - The results to apply.@Nonnull protected SegmentListConfiguration createNewConfiguration()
SegmentListConfiguration.@Nonnull public final List<SegmentPropagator> getSegments()
SegmentPropagators that will be propagated.