Quintiq file version 2.0 
 | 
#parent: #root 
 | 
MethodOverride DeleteCondition (LibOpt_Task task) as Boolean 
 | 
{ 
 | 
  Description: 
 | 
  [* 
 | 
    Conditionally deletes the dataset copy that is attached to the `snapshotcopydataset` snapshot. 
 | 
    The dataset is deleted if no dataset copy has been created on any downstream component and if no dataset copy has been created after the creation of the `snapshotcopydataset` snapshot on this component. 
 | 
    Note: All dataset copies that have been created because a `LibOpt_DatasetCopyOnAnyDownstreamCopy` is attached to a component position, are ignored.  
 | 
    All dataset copies that have already been deleted (or that will be deleted), are also ignored.  
 | 
     
 | 
    Extending this method (or subclassing the `LibOpt_DatasetCopyOnAnyDownstreamCopy` type) will break the unit tests. We recommend you to create a new subclass from the `LibOpt_DatasetCopyConditional` type if you want to modify this method. 
 | 
  *] 
 | 
  TextBody: 
 | 
  [* 
 | 
    snapshotcopydataset := select( task, 
 | 
                                   SnapshotComponent.Children.astype( LibOpt_SnapshotReplannableCopyDataset ), 
 | 
                                   snapshot, 
 | 
                                   snapshot.ComponentPositionName() = this.ComponentPositionName() 
 | 
                                   ); 
 | 
       
 | 
    hascreateddownstreamsnapshot := exists( task.SnapshotComponent().Descendants(), 
 | 
                                            Elements.astype( LibOpt_SnapshotReplannableCopyDataset ), 
 | 
                                            snapshot,  
 | 
                                            not snapshot.IsDatasetDeleted()  
 | 
                                            and not snapshot.IsDatasetDeletedByOptimizer() 
 | 
                                            and not snapshot.HasToBeDeleted() 
 | 
                                            // Ignore all snapshots on the current component position that were created before snapshotcopydataset 
 | 
                                            and ( snapshot.GetComponent() <> task.Component()  
 | 
                                                  or snapshot.SequenceNr() > snapshotcopydataset.SequenceNr() ) 
 | 
                                            ); 
 | 
     
 | 
    return not hascreateddownstreamsnapshot; 
 | 
  *] 
 | 
} 
 |