Quintiq file version 2.0
#parent: #root
Method ParseMenu (Menu component) id:Method_GlobalStateTestGenerator_ParseMenu_22
{
  #keys: '[142876.9.493604446]'
  Body:
  [*
    name := '';
    title := '';
    formkey := Key::ZeroKey();
    dialogkey := Key::ZeroKey();
    
    if( component.istype( ComponentMenu ) )
    {
      name := component.astype( ComponentMenu ).GetProperty( 'ComponentType' );
      GlobalStateTestGenerator.GetFormProperties( name, title, formkey );
    }
    else
    {
      name := component.Text();
      title := '{TODO_TITLE}'; // TODO
      
      componentname := component.Display().Tokenize( '.' ).Reverse().Element( 0 );
      cd := select( ApplicationScope.Project().ComponentRegistry().GetAllComponents(),
                    Elements,
                    mcd,
                    mcd.Name() = componentname );
      
      if( not isnull( cd ) )
      {
        dialogname := '';
        traverse( cd.Responses(), Responses, response,
                  dialogname = '' )
        {
          impl := response.Implementation().astype( ModeledResponseQuillImplementation );
          dialogname := GlobalStateTestGenerator.GetDialogNameFromResponse( impl );
        }
        
        if( dialogname <> '' )
        {
          try
          {
            newdialog := construct( Dialog, dialogname );
            name := dialogname;
            dialogkey := newdialog.Key();
            title := newdialog.Title();
          }
          onerror
          {
          }
        }
      }
    }
    
    if( formkey <> Key::ZeroKey() )
    {
      try
      {
        newform := construct( Form, name );
        form := TG_UIForm::FindOrCreate( TestGenerator, name, title, formkey );
        GlobalStateTestGenerator.ParseForm( form, newform );
      }
      onerror
      {
        newdialog := construct( Dialog, name );
        dialogkey := newdialog.Key();
        
        dialog := TG_UIDialog::FindOrCreate( TestGenerator, name, title, dialogkey );
        GlobalStateTestGenerator.ParseDialog( dialog, construct( Dialog, name ) );
      }
    }
    else if( dialogkey <> Key::ZeroKey() )
    {
      dialog := TG_UIDialog::FindOrCreate( TestGenerator, name, title, dialogkey );
      GlobalStateTestGenerator.ParseDialog( dialog, construct( Dialog, name ) );
    }
    
    traverse( component, SubComponents.astype( Menu ), child )
    {
      this.ParseMenu( child );
    }
  *]
}
