admin
2025-01-22 7e31442f0e9b07764e9c6a9680d3d4aeba5fe1de
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Quintiq file version 2.0
#parent: #root
MethodOverride Delete (Boolean isDatasetEvent_i)
{
  TextBody:
  [*
    setTypeMeta   := this.SetTypeMeta();
    interestOwner := this.GetSystem();
    
    // SetType belongs to current System, there is no need to send a message to local System
    if( interestOwner.IsLocalSystem() )
    {
      // if this is the only dataset interest for this SetType, then can also remove the system level interest
      if( not setTypeMeta.HasOtherOnlineDatasetInterest( this.DatasetMDSID() ) )
      {    
        // Get current System's System-level SetTypeInterest    
        setTypeInterestFromSystem := select( setTypeMeta, SetTypeInterestFromSystem, setTypeInterestFromSystem,
                                             setTypeInterestFromSystem.SystemInterestedIn() = interestOwner );
    
        if( not isnull( setTypeInterestFromSystem ) )
        { 
          // Delete the SetInterest from System immediately  (as the 'approval' can be done locally) if there isn't dataset interest created manually in set level
          // Because SetInterest created manually in Set level will not be deleted when we delete interest at SetType level
          traverse( setTypeInterestFromSystem, SetInterestFromSystem, setInterestFromSystem, setInterestFromSystem.IsAllSetInterestOfDatasetCreatedFromSetTypeInterest() )
          {
            setInterestFromSystem.Delete(); 
          }
          
          setTypeInterestFromSystem.Delete();
        }    
        else
        {
          LibDEF_Util::LogWarning( "SetTypeInterestFromSystem for System '" + interestOwner.GUID() + "' is not found." );
        }
      }
    }
    
    else  // Set belongs to another System, we need to send a message to the other System.
    { 
      if( not setTypeMeta.HasOtherOnlineDatasetInterest( this.DatasetMDSID() ) )
      { 
        /// Send a 'SetTypeInterest-Deleted' message to the Set owner.
        this.SetTypeMeta().System().SendMetadataRequestSetTypeInterestDeleted( this, isDatasetEvent_i );
      }
    }
    
    // Delete the SetTypeInterest, if applicable.
    // When dataset is being unloaded, do not delete the dataset-level interest.
    if( not isDatasetEvent_i )
    {
      // Delete the SetInterests of the dataset that weren't created manually from Set-level (as the 'approval' can be done locally).
      traverse( this, SetInterestOfDataset, setInterestOfDataset, setInterestOfDataset.IsCreatedFromSetTypeInterest() )
      {
        setInterestOfDataset.Delete();        
      }
      
      // Delete dataset-level SetTypeInterest.
      this.Delete();    
    }
  *]
}