Quintiq file version 2.0
#parent: #root
Method SelectScenario (
  ScenarioMP scenario
) as Boolean id:Method_ApplicationMacroPlanner_SelectScenario
{
  #keys: '[137862.0.9024813]'
  Body:
  [*
    // Select the active MacroPlan based on passed in scenario
    // Set active MacroPlan to the application
    // ComponentMDS::Create( Application ) is not available in Editor -- still finding, if exist, all this code will be moved.
    status := false;
    
    if( not isnull( scenario ) )
    {
      editor := ExternalMDSEditor::Editor();
      allinfo := editor.ObjectInfos();
    
      mdsInfo := select ( allinfo, Elements, oinfo,
                          oinfo.MDSID().MDSKey() = scenario.DatasetMDSID()
                          or oinfo.Name() = scenario.DatasetName());
    
      if ( not isnull( mdsInfo ) )
      {
      
        if( not mdsInfo.IsLoaded() )
        {
          scenario.SetAvailable( '' );
        }
      
        loop := true;
        p := Progress::Level( 'Loading scenario...', 10 );
      
        // changed the operation in "p.Current() < p.Maximum()" from <= to < as p.Maximum will never be reached
        // causing an infinite loop when a dataset is no longer available
        while( loop and p.Current() < p.Maximum() )
        {
          componentmds := ApplicationScope.ComponentMDS();
          mdsinstance := select( componentmds, ComponentMDSKinds.ComponentMDSInstances, m, m.MDSID().MDSKey() = scenario.DatasetMDSID() );
      
          if( not isnull( mdsinstance ) )
          {
            mdsinstance.ComponentMDSKind().SelectInstance( mdsinstance );
            componentmds.Apply();
            // To set the data holder if only a scenario has changed.
            if( DataHolderActiveScenario.Data() <> scenario )
            {
              DataHolderActiveScenario.Data( scenario );
              /*Setting the dataholder manually so that it can trigger the ondatachange for other dataholders that depend on it. When, this 
              dataholder is bind to extractor to retrieve MacroPlan automatically, it failed to trigger other dataholder ondatachange response when the MacroPlan first created.
              */
              DataHolderMacroPlanner.Data( MacroPlan );
            }
            status := true;
            loop := false;
          }
          p.Increment();
        }
      } 
    }
    
    return status;
  *]
}
