Package com.eviware.soapui.impl.wsdl.panels.project

Source Code of com.eviware.soapui.impl.wsdl.panels.project.WsdlProjectTestSuitesTabPanel$TearDownScriptGroovyEditorModel

/*
*  soapUI, copyright (C) 2004-2011 eviware.com
*
*  soapUI is free software; you can redistribute it and/or modify it under the
*  terms of version 2.1 of the GNU Lesser General Public License as published by
*  the Free Software Foundation.
*
*  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
*  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*  See the GNU Lesser General Public License for more details at gnu.org.
*/

package com.eviware.soapui.impl.wsdl.panels.project;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ButtonGroup;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JToggleButton;

import com.eviware.soapui.impl.support.actions.ShowOnlineHelpAction;
import com.eviware.soapui.impl.wsdl.WsdlProject;
import com.eviware.soapui.impl.wsdl.actions.project.AddNewTestSuiteAction;
import com.eviware.soapui.impl.wsdl.panels.support.MockProjectRunner;
import com.eviware.soapui.impl.wsdl.panels.testcase.JTestRunLog;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.AbstractGroovyEditorModel;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.impl.wsdl.testcase.WsdlProjectRunner;
import com.eviware.soapui.model.support.ProjectListenerAdapter;
import com.eviware.soapui.model.testsuite.ProjectRunContext;
import com.eviware.soapui.model.testsuite.ProjectRunListener;
import com.eviware.soapui.model.testsuite.ProjectRunner;
import com.eviware.soapui.model.testsuite.TestSuite;
import com.eviware.soapui.model.testsuite.TestSuite.TestSuiteRunType;
import com.eviware.soapui.model.testsuite.TestSuiteRunner;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.action.swing.SwingActionDelegate;
import com.eviware.soapui.support.components.GroovyEditorComponent;
import com.eviware.soapui.support.components.GroovyEditorInspector;
import com.eviware.soapui.support.components.JComponentInspector;
import com.eviware.soapui.support.components.JInspectorPanel;
import com.eviware.soapui.support.components.JInspectorPanelFactory;
import com.eviware.soapui.support.components.JXToolBar;
import com.eviware.soapui.support.types.StringToObjectMap;

public class WsdlProjectTestSuitesTabPanel extends JPanel
{
  private final WsdlProject project;
  private JProgressBar progressBar;
  private JProjectTestSuiteList testSuiteList;
  private RunAction runAction = new RunAction();
  private CancelAction cancelAction = new CancelAction();
  private JToggleButton sequentialButton;
  private JToggleButton parallellButton;
  private final InternalProjectListener testSuiteListener = new InternalProjectListener();
  private final InternalTestSuiteRunListener testSuiteRunListener = new InternalTestSuiteRunListener();
  private JTestRunLog testRunLog;
  private GroovyEditorComponent tearDownGroovyEditor;
  private GroovyEditorComponent setupGroovyEditor;
  private JInspectorPanel testSuiteListInspectorPanel;
  private JInspectorPanel inspectorPanel;
  private WsdlProjectRunner projectRunner;

  public WsdlProjectTestSuitesTabPanel( WsdlProject project )
  {
    super( new BorderLayout() );
    this.project = project;

    buildUI();
    project.addProjectRunListener( testSuiteRunListener );
    project.addProjectListener( testSuiteListener );
  }

  public WsdlProject getProject()
  {
    return project;
  }

  private void buildUI()
  {
    add( buildToolbar(), BorderLayout.NORTH );
    add( buildContent(), BorderLayout.CENTER );

    setPreferredSize( new Dimension( 500, 500 ) );
  }

  private JComponent buildContent()
  {
    inspectorPanel = JInspectorPanelFactory.build( buildTabs() );
    addInspectors( inspectorPanel );

    return inspectorPanel.getComponent();
  }

  protected void addInspectors( JInspectorPanel inspectorPanel )
  {
    inspectorPanel.addInspector( new JComponentInspector<JComponent>( buildRunLog(), "TestSuite Log",
        "Log of executed TestSuites, TestCases and TestSteps", true ) );
  }

  private JComponent buildRunLog()
  {
    testRunLog = new JTestRunLog( project.getSettings() );
    return testRunLog;
  }

  protected JProjectTestSuiteList getTestSuiteList()
  {
    return testSuiteList;
  }

  private JComponent buildToolbar()
  {
    cancelAction.setEnabled( false );
    runAction.setEnabled( project.getTestSuiteCount() > 0 );

    JXToolBar toolbar = UISupport.createToolbar();

    addToolbarActions( toolbar );
    toolbar.addGlue();
    toolbar.add( UISupport.createToolbarButton( new ShowOnlineHelpAction( HelpUrls.TESTSUITE_HELP_URL ) ) );

    progressBar = new JProgressBar( 0, project.getTestSuiteCount() );
    JPanel progressPanel = UISupport.createProgressBarPanel( progressBar, 10, false );

    JPanel panel = new JPanel( new BorderLayout() );

    panel.add( toolbar, BorderLayout.PAGE_START );
    panel.add( progressPanel, BorderLayout.CENTER );

    return panel;
  }

  protected void addToolbarActions( JXToolBar toolbar )
  {
    toolbar.add( UISupport.createToolbarButton( runAction ) );
    toolbar.add( UISupport.createToolbarButton( cancelAction ) );

    toolbar.addRelatedGap();

    ButtonGroup buttonGroup = new ButtonGroup();

    sequentialButton = new JToggleButton( UISupport.createImageIcon( "/sequential.gif" ), true );
    sequentialButton.setToolTipText( "The selected TestCases are run in sequence" );
    sequentialButton.setPreferredSize( UISupport.getPreferredButtonSize() );
    sequentialButton.setSelected( project.getRunType() == TestSuiteRunType.SEQUENTIAL );
    sequentialButton.addActionListener( new ActionListener()
    {
      public void actionPerformed( ActionEvent e )
      {
        project.setRunType( TestSuiteRunType.SEQUENTIAL );
      }
    } );

    buttonGroup.add( sequentialButton );

    parallellButton = new JToggleButton( UISupport.createImageIcon( "/parallell.gif" ) );
    parallellButton.setToolTipText( "The selected TestCases are run in parallel" );
    parallellButton.setPreferredSize( UISupport.getPreferredButtonSize() );
    parallellButton.setSelected( project.getRunType() == TestSuiteRunType.PARALLEL );
    parallellButton.addActionListener( new ActionListener()
    {

      public void actionPerformed( ActionEvent e )
      {
        project.setRunType( TestSuiteRunType.PARALLEL );
      }
    } );

    buttonGroup.add( parallellButton );

    toolbar.addUnrelatedGap();
    toolbar.add( sequentialButton );
    toolbar.addRelatedGap();
    toolbar.add( parallellButton );
  }

  private JComponent buildTabs()
  {
    JTabbedPane tabs = new JTabbedPane( JTabbedPane.TOP );
    testSuiteListInspectorPanel = JInspectorPanelFactory.build( buildTestSuiteList( project ) );

    tabs.addTab( "TestSuites", testSuiteListInspectorPanel.getComponent() );

    addTabs( tabs, testSuiteListInspectorPanel );
    tabs.setTabLayoutPolicy( JTabbedPane.SCROLL_TAB_LAYOUT );

    return UISupport.createTabPanel( tabs, true );
  }

  protected void addTabs( JTabbedPane tabs, JInspectorPanel inspectorPanel )
  {
    inspectorPanel.addInspector( new GroovyEditorInspector( buildSetupScriptPanel(), "Setup Script",
        "Script to run before running TestSuites" ) );
    inspectorPanel.addInspector( new GroovyEditorInspector( buildTearDownScriptPanel(), "TearDown Script",
        "Script to run after running TestSuites" ) );
  }

  protected GroovyEditorComponent buildTearDownScriptPanel()
  {
    tearDownGroovyEditor = new GroovyEditorComponent( new TearDownScriptGroovyEditorModel(), null );
    return tearDownGroovyEditor;
  }

  protected GroovyEditorComponent buildSetupScriptPanel()
  {
    setupGroovyEditor = new GroovyEditorComponent( new SetupScriptGroovyEditorModel(), null );
    return setupGroovyEditor;
  }

  protected JComponent buildTestSuiteList( WsdlProject testSuite )
  {
    testSuiteList = new JProjectTestSuiteList( testSuite );

    JPanel p = new JPanel( new BorderLayout() );

    p.add( buildTestCaseListToolbar(), BorderLayout.NORTH );
    p.add( new JScrollPane( testSuiteList ), BorderLayout.CENTER );

    return p;
  }

  private Component buildTestCaseListToolbar()
  {
    JXToolBar toolbar = UISupport.createToolbar();
    toolbar.add( UISupport.createToolbarButton( SwingActionDelegate.createDelegate(
        AddNewTestSuiteAction.SOAPUI_ACTION_ID, project, null, "/testSuite.gif" ) ) );
    toolbar.addGlue();
    toolbar.add( UISupport.createToolbarButton( new ShowOnlineHelpAction( HelpUrls.TESTSUITELIST_HELP_URL ) ) );
    return toolbar;
  }

  public void release()
  {
    inspectorPanel.release();
    testSuiteListInspectorPanel.release();

    setupGroovyEditor.release();
    tearDownGroovyEditor.release();

    testRunLog.release();
    project.removeProjectRunListener( testSuiteRunListener );
    project.removeProjectListener( testSuiteListener );
  }

  protected void runProject()
  {
    projectRunner = project.run( new StringToObjectMap(), true );
  }

  protected void beforeRun()
  {
    runAction.setEnabled( false );
    cancelAction.setEnabled( true );
    testSuiteList.setEnabled( false );
    progressBar.setForeground( Color.GREEN.darker() );
  }

  protected void afterRun()
  {
    runAction.setEnabled( true );
    cancelAction.setEnabled( false );
    testSuiteList.setEnabled( true );

    progressBar.setString( projectRunner.getStatus().toString() );
    progressBar.setForeground( projectRunner.isFailed() ? Color.RED : Color.GREEN.darker() );
  }

  private final class InternalProjectListener extends ProjectListenerAdapter
  {
    public void testSuiteAdded( TestSuite testSuite )
    {
      runAction.setEnabled( project.getTestSuiteCount() > 0 );
    }

    public void testSuiteRemoved( TestSuite testSuite )
    {
      runAction.setEnabled( project.getTestSuiteCount() > 0 );
    }
  }

  private class RunAction extends AbstractAction
  {
    public RunAction()
    {
      putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/run_testcase.gif" ) );
      putValue( Action.SHORT_DESCRIPTION, "Runs the selected TestCases" );
    }

    public void actionPerformed( ActionEvent e )
    {
      runProject();
    }
  }

  private class CancelAction extends AbstractAction
  {
    public CancelAction()
    {
      putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/stop_testcase.gif" ) );
      putValue( Action.SHORT_DESCRIPTION, "Cancels ongoing TestCase runs" );
    }

    public void actionPerformed( ActionEvent e )
    {
      projectRunner.cancel( "Cancelled from UI" );
    }
  }

  private class SetupScriptGroovyEditorModel extends AbstractGroovyEditorModel
  {
    public SetupScriptGroovyEditorModel()
    {
      super( new String[] { "log", "runner", "context", "project" }, project, "Setup" );
    }

    public String getScript()
    {
      return project.getBeforeRunScript();
    }

    public void setScript( String text )
    {
      project.setBeforeRunScript( text );
    }

    @Override
    public Action createRunAction()
    {
      return new AbstractAction()
      {

        public void actionPerformed( ActionEvent e )
        {
          try
          {
            MockProjectRunner runner = new MockProjectRunner( project );
            project.runBeforeRunScript( ( ProjectRunContext )runner.getRunContext(), runner );
          }
          catch( Exception e1 )
          {
            UISupport.showErrorMessage( e1 );
          }
        }
      };
    }
  }

  private class TearDownScriptGroovyEditorModel extends AbstractGroovyEditorModel
  {
    public TearDownScriptGroovyEditorModel()
    {
      super( new String[] { "log", "runner", "context", "project" }, project, "TearDown" );
    }

    public String getScript()
    {
      return project.getAfterRunScript();
    }

    public void setScript( String text )
    {
      project.setAfterRunScript( text );
    }

    @Override
    public Action createRunAction()
    {
      return new AbstractAction()
      {

        public void actionPerformed( ActionEvent e )
        {
          try
          {
            MockProjectRunner runner = new MockProjectRunner( project );
            project.runAfterRunScript( ( ProjectRunContext )runner.getRunContext(), runner );
          }
          catch( Exception e1 )
          {
            UISupport.showErrorMessage( e1 );
          }
        }
      };
    }
  }

  private class InternalTestSuiteRunListener implements ProjectRunListener
  {
    private TestRunLogTestSuiteRunListener runLogListener;
    private int finishCount;

    public void afterRun( ProjectRunner testScenarioRunner, ProjectRunContext runContext )
    {
      if( testScenarioRunner != projectRunner )
        return;

      WsdlProjectTestSuitesTabPanel.this.afterRun();
    }

    public void afterTestSuite( ProjectRunner testScenarioRunner, ProjectRunContext runContext,
        TestSuiteRunner testRunner )
    {
      if( testScenarioRunner != projectRunner )
        return;

      progressBar.setValue( ++finishCount );

      if( project.getRunType() == TestSuiteRunType.SEQUENTIAL )
        testRunner.getTestSuite().removeTestSuiteRunListener( runLogListener );
    }

    public void beforeRun( ProjectRunner testScenarioRunner, ProjectRunContext runContext )
    {
      if( testScenarioRunner != projectRunner )
        return;

      WsdlProjectTestSuitesTabPanel.this.beforeRun();

      testSuiteList.reset();

      progressBar.setMaximum( project.getTestSuiteCount() );
      progressBar.setValue( 0 );
      progressBar.setString( "" );
      finishCount = 0;

      if( runLogListener == null )
        runLogListener = new TestRunLogTestSuiteRunListener( testRunLog, false );

      testRunLog.clear();

      if( project.getRunType() == TestSuiteRunType.PARALLEL )
        testRunLog.addText( "<log disabled during parallell execution>" );
    }

    public void beforeTestSuite( ProjectRunner testScenarioRunner, ProjectRunContext runContext,
        TestSuite testRunnable )
    {
      if( testScenarioRunner != projectRunner )
        return;

      progressBar.setString( "Running " + testRunnable.getName() );

      if( project.getRunType() == TestSuiteRunType.SEQUENTIAL )
        testRunnable.addTestSuiteRunListener( runLogListener );
    }
  }

  public WsdlProjectRunner getProjectRunner()
  {
    return projectRunner;
  }
}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.panels.project.WsdlProjectTestSuitesTabPanel$TearDownScriptGroovyEditorModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.