Quintiq file version 2.0
|
#parent: #root
|
MethodOverride Deserialize (JSON json)
|
{
|
Description:
|
[*
|
The `LibOpt_DatasetCopyConditional::HandleSuccessfulDatasetCopy` method might be executed right after all snapshots are serialized, but before all snapshots are deserialized.
|
The snapshot attributes that are set in the `LibOpt_DatasetCopyConditional::HandleSuccessfulDatasetCopy` method might therefore be overwritten by the attributes on the serialized snapshots.
|
Therefore, any snapshot attribute that is set in `LibOpt_DatasetCopyConditional::HandleSuccessfulDatasetCopy` should also be set in this `Deserialize` method.
|
*]
|
TextBody:
|
[*
|
super.Deserialize( json );
|
|
// There might exist a duplicate of this snapshot. This duplicate might contain newer information than this deserialized snapshot.
|
// We copy some attributes from the duplicate snapshot to the deserialized snapshot, before the duplicate snapshot is deleted
|
duplicatesnapshot := select( this,
|
Run.Snapshot.astype( LibOpt_SnapshotReplannableCopyDataset ),
|
snapshot,
|
snapshot.DatasetName() = this.DatasetName()
|
and snapshot <> this );
|
|
if( not isnull( duplicatesnapshot ) )
|
{
|
this.HasCreatedDataset( duplicatesnapshot.HasCreatedDataset() );
|
// The this.IsDatasetDeletedByOptimizer attribute can be set both in HandleSuccessfulDatasetCopy and in DoFinalizeDatasetCopyDelete.
|
// In both methods the dataset is irrevocably deleted. Therefore, if any of the methods sets the attribute to true, then the attribute should also be true after the rollback.
|
this.IsDatasetDeletedByOptimizer( this.IsDatasetDeletedByOptimizer()
|
or duplicatesnapshot.IsDatasetDeletedByOptimizer() );
|
|
}
|
|
// Restore the this.DatasetCopyConditional relation.
|
json_key := LibOpt_Message::Get( json,
|
typeof( LibOpt_DatasetCopyConditional ).Name()
|
+ attribute( LibOpt_DatasetCopyConditional, Key ).Name()
|
);
|
if( json_key.IsString() )
|
{
|
conditionalkey_asstring := json_key.GetString();
|
conditionalkey := [Key] conditionalkey_asstring;
|
condtional := select( this.Run().Optimization(),
|
Conditional.astype( LibOpt_DatasetCopyConditional ),
|
conditional,
|
conditional.Key() = conditionalkey
|
);
|
|
this.DatasetCopyConditional( relset, condtional );
|
}
|
*]
|
}
|