Package com.eviware.soapui.security.panels

Source Code of com.eviware.soapui.security.panels.SecurityTestDesktopPanel$ModelItemListDragAndDropable

/*
*  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.security.panels;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.ListModel;
import javax.swing.SwingConstants;
import javax.swing.text.Document;

import com.eviware.soapui.impl.support.actions.ShowOnlineHelpAction;
import com.eviware.soapui.impl.wsdl.panels.support.MockSecurityTestRunner;
import com.eviware.soapui.impl.wsdl.panels.testcase.actions.SetCredentialsAction;
import com.eviware.soapui.impl.wsdl.panels.testcase.actions.SetEndpointAction;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.AbstractGroovyEditorModel;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.PropertyHolderTable;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.security.SecurityScan;
import com.eviware.soapui.model.testsuite.TestCaseRunContext;
import com.eviware.soapui.model.testsuite.TestCaseRunner;
import com.eviware.soapui.model.testsuite.TestStepResult;
import com.eviware.soapui.model.testsuite.TestRunner.Status;
import com.eviware.soapui.model.testsuite.TestStepResult.TestStepStatus;
import com.eviware.soapui.security.SecurityTest;
import com.eviware.soapui.security.SecurityTestRunContext;
import com.eviware.soapui.security.SecurityTestRunner;
import com.eviware.soapui.security.SecurityTestRunnerImpl;
import com.eviware.soapui.security.actions.SecurityTestOptionsAction;
import com.eviware.soapui.security.log.JFunctionalTestRunLog;
import com.eviware.soapui.security.log.JSecurityTestRunLog;
import com.eviware.soapui.security.result.SecurityScanRequestResult;
import com.eviware.soapui.security.result.SecurityScanResult;
import com.eviware.soapui.security.result.SecurityTestStepResult;
import com.eviware.soapui.security.result.SecurityResult.ResultStatus;
import com.eviware.soapui.security.support.ProgressBarSecurityTestAdapter;
import com.eviware.soapui.security.support.SecurityTestRunListenerAdapter;
import com.eviware.soapui.settings.UISettings;
import com.eviware.soapui.support.DocumentListenerAdapter;
import com.eviware.soapui.support.StringUtils;
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.JFocusableComponentInspector;
import com.eviware.soapui.support.components.JInspectorPanel;
import com.eviware.soapui.support.components.JInspectorPanelFactory;
import com.eviware.soapui.support.components.JUndoableTextArea;
import com.eviware.soapui.support.components.JXToolBar;
import com.eviware.soapui.support.dnd.JListDragAndDropable;
import com.eviware.soapui.support.swing.ComponentBag;
import com.eviware.soapui.support.types.StringToObjectMap;
import com.eviware.soapui.ui.support.ModelItemDesktopPanel;

/**
* SecurityTest desktop panel
*
*
* this is just first rough version created by copy-pasting from
* WsdlTestCaseDesktoppanel therefore a lot of variables have not been renamed
* yet, and a lot of code my be unused, or missing
*
* @author dragica.soldo
*/

@SuppressWarnings( "serial" )
public class SecurityTestDesktopPanel extends ModelItemDesktopPanel<SecurityTest>
{
  private JSecurityTestTestStepList testStepList;
  private JProgressBar progressBar;
  private JButton runButton;
  private JButton cancelButton;
  private SecurityTestRunner runner;
  private JButton setEndpointButton;
  private JButton setCredentialsButton;
  private JButton optionsButton;
  private JSecurityTestRunLog securityTestLog;
  private JFunctionalTestRunLog functionalTestLog;
  // private JToggleButton loopButton;
  private ProgressBarSecurityTestAdapter progressBarAdapter;
  private ComponentBag stateDependantComponents = new ComponentBag();
  private boolean canceled;
  private JTextArea descriptionArea;
  private PropertyHolderTable propertiesTable;
  private GroovyEditorComponent tearDownGroovyEditor;
  private GroovyEditorComponent setupGroovyEditor;
  private JInspectorPanel testStepListInspectorPanel;
  private JInspectorPanel inspectorPanel;
  private SecurityTestRunner lastRunner;
  private SecurityTest securityTest;
  private JXToolBar toolbar;
  private InternalSecurityTestRunListener securityTestRunListener = new InternalSecurityTestRunListener();
  private JLabel cntLabel;
  private JComponentInspector<?> securityLogInspector;
  private JComponentInspector<?> functionalLogInspector;
  private ResultStatus securityStatus;
  private ResultStatus functionalStatus;
  private boolean startStepLogEntryAdded;

  public SecurityTestDesktopPanel( SecurityTest securityTest )
  {
    super( securityTest );

    buildUI();

    setPreferredSize( new Dimension( 400, 550 ) );
    this.securityTest = securityTest;
    securityTest.addSecurityTestRunListener( securityTestRunListener );
    progressBarAdapter = new ProgressBarSecurityTestAdapter( progressBar, securityTest, cntLabel );
  }

  protected JSecurityTestTestStepList getTestStepList()
  {
    return testStepList;
  }

  protected JSecurityTestRunLog getSecurityTestLog()
  {
    return securityTestLog;
  }

  protected void setTestStepList( JSecurityTestTestStepList testStepList )
  {
    this.testStepList = testStepList;
  }

  private void buildUI()
  {
    JPanel panel = new JPanel( new BorderLayout() );

    panel.add( buildToolbar(), BorderLayout.PAGE_START );
    panel.add( buildRunnerBar(), BorderLayout.CENTER );

    add( panel, BorderLayout.NORTH );

    JComponent securityLog = buildSecurityLog();
    inspectorPanel = JInspectorPanelFactory.build( buildContent() );
    securityLogInspector = new JComponentInspector<JComponent>( securityLog, "Security Log",
        "Security Execution Log", true );
    inspectorPanel.addInspector( securityLogInspector );
    JComponent functionalLog = buildFunctionalLog();
    functionalLogInspector = new JComponentInspector<JComponent>( functionalLog, "TestCase Log",
        "Functional Execution Log", true );
    inspectorPanel.addInspector( functionalLogInspector );
    inspectorPanel.setDefaultDividerLocation( 0.7F );
    inspectorPanel.setCurrentInspector( "Security Log" );

    if( StringUtils.hasContent( getModelItem().getDescription() )
        && getModelItem().getSettings().getBoolean( UISettings.SHOW_DESCRIPTIONS ) )
    {
      testStepListInspectorPanel.setCurrentInspector( "Description" );
    }
    initializeStatusIcons();

    add( inspectorPanel.getComponent(), BorderLayout.CENTER );
  }

  private void initializeStatusIcons()
  {
    securityStatus = ResultStatus.UNKNOWN;
    updateStatusIcon( securityStatus, securityLogInspector );

    functionalStatus = ResultStatus.UNKNOWN;
    updateStatusIcon( functionalStatus, functionalLogInspector );
  }

  private void updateStatusIcon( ResultStatus status, JComponentInspector<?> logInspector )
  {
    switch( status )
    {
    case FAILED :
    {
      logInspector.setIcon( UISupport.createImageIcon( "/failed_securitytest.gif" ) );
      // inspectorPanel.activate( logInspector );
      break;
    }
    case UNKNOWN :
    {
      logInspector.setIcon( UISupport.createImageIcon( "/unknown_securitytest.gif" ) );
      break;
    }
    case OK :
    {
      logInspector.setIcon( UISupport.createImageIcon( "/valid_securitytest.gif" ) );
      // inspectorPanel.deactivate();
      break;
    }
    }
  }

  private Component buildRunnerBar()
  {
    progressBar = new JProgressBar( 0, getModelItem().getSecurityScanCount() );

    JPanel progressPanel = new JPanel( new BorderLayout( 10, 0 ) );

    progressBar.setValue( 0 );
    progressBar.setStringPainted( true );
    progressBar.setString( "" );
    progressBar.setIndeterminate( false );

    progressBar.setBorder( BorderFactory.createMatteBorder( 0, 0, 1, 1, Color.LIGHT_GRAY ) );

    progressPanel.setBorder( BorderFactory.createEmptyBorder( 5, 5, 5, 5 ) );
    progressPanel.add( progressBar );

    progressBar.setMinimumSize( new Dimension( 0, 200 ) );
    progressBar.setBackground( Color.WHITE );

    cntLabel = new JLabel( "" );
    cntLabel.setForeground( Color.white );
    cntLabel.setPreferredSize( new Dimension( 50, 18 ) );
    cntLabel.setHorizontalTextPosition( SwingConstants.CENTER );
    cntLabel.setHorizontalAlignment( SwingConstants.CENTER );
    cntLabel.setBorder( BorderFactory.createLineBorder( Color.LIGHT_GRAY ) );

    progressPanel.add( cntLabel, BorderLayout.EAST );

    return progressPanel;
  }

  private JComponent buildSecurityLog()
  {
    securityTestLog = new JSecurityTestRunLog( getModelItem() );
    stateDependantComponents.add( securityTestLog );
    return securityTestLog;
  }

  private JComponent buildFunctionalLog()
  {
    functionalTestLog = new JFunctionalTestRunLog( getModelItem() );
    stateDependantComponents.add( functionalTestLog );
    return functionalTestLog;
  }

  private JComponent buildContent()
  {
    JTabbedPane tabs = new JTabbedPane( JTabbedPane.TOP );
    testStepListInspectorPanel = JInspectorPanelFactory.build( buildTestStepList(), SwingConstants.BOTTOM );

    tabs.addTab( "TestSteps", testStepListInspectorPanel.getComponent() );

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

    return UISupport.createTabPanel( tabs, true );
  }

  protected JComponent buildTestStepList()
  {
    testStepList = new JSecurityTestTestStepList( getModelItem(), securityTestLog );
    return testStepList;
  }

  protected void addTabs( JTabbedPane tabs, JInspectorPanel inspectorPanel )
  {
    inspectorPanel.addInspector( new JFocusableComponentInspector<JPanel>( buildDescriptionPanel(), descriptionArea,
        "Description", "SecurityTest Description", true ) );
    inspectorPanel.addInspector( new JComponentInspector<JComponent>( buildPropertiesPanel(), "Properties",
        "SecurityTest level properties", true ) );
    inspectorPanel.addInspector( new GroovyEditorInspector( buildSetupScriptPanel(), "Setup Script",
        "Script to run before tunning a SecurityTest" ) );
    inspectorPanel.addInspector( new GroovyEditorInspector( buildTearDownScriptPanel(), "TearDown Script",
        "Script to run after a SecurityTest Run" ) );
  }

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

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

  protected JComponent buildPropertiesPanel()
  {
    JPanel panel = new JPanel( new BorderLayout() );
    propertiesTable = buildPropertiesTable();
    panel.add( propertiesTable, BorderLayout.CENTER );
    return panel;
  }

  protected PropertyHolderTable buildPropertiesTable()
  {
    return new PropertyHolderTable( getModelItem() );
  }

  private JPanel buildDescriptionPanel()
  {
    JPanel panel = new JPanel( new BorderLayout() );
    descriptionArea = new JUndoableTextArea( getModelItem().getDescription() );
    descriptionArea.getDocument().addDocumentListener( new DocumentListenerAdapter()
    {
      public void update( Document document )
      {
        getModelItem().setDescription( descriptionArea.getText() );
      }
    } );

    panel.setBorder( BorderFactory.createEmptyBorder( 2, 2, 2, 2 ) );
    panel.add( new JScrollPane( descriptionArea ), BorderLayout.CENTER );
    UISupport.addTitledBorder( panel, "SecurityTest Description" );

    return panel;
  }

  protected Component buildToolbar()
  {
    toolbar = UISupport.createToolbar();

    runButton = UISupport.createToolbarButton( new RunSecurityTestAction() );
    optionsButton = UISupport.createToolbarButton( SwingActionDelegate.createDelegate(
        SecurityTestOptionsAction.SOAPUI_ACTION_ID, getModelItem(), null, "/options.gif" ) );
    optionsButton.setText( null );
    cancelButton = UISupport.createToolbarButton( new CancelRunSecuritytestAction(), false );

    // loopButton = new JToggleButton( UISupport.createImageIcon( "/loop.gif"
    // ) );
    // loopButton.setPreferredSize( UISupport.getPreferredButtonSize() );
    // loopButton.setToolTipText( "Loop TestCase continuously" );

    setCredentialsButton = UISupport.createToolbarButton( new SetCredentialsAction( getModelItem().getTestCase() ) );
    setEndpointButton = UISupport.createToolbarButton( new SetEndpointAction( getModelItem().getTestCase() ) );

    stateDependantComponents.add( runButton );
    stateDependantComponents.add( optionsButton );
    stateDependantComponents.add( cancelButton );
    stateDependantComponents.add( setCredentialsButton );
    stateDependantComponents.add( setEndpointButton );

    addToolbarActions( toolbar );

    toolbar.addSeparator();
    toolbar.add( Box.createHorizontalGlue() );
    toolbar.add( UISupport.createToolbarButton( new ShowOnlineHelpAction( HelpUrls.SECURITYTESTEDITOR_HELP_URL ) ) );

    return toolbar;
  }

  public JButton getOptionsButton()
  {
    return optionsButton;
  }

  public void setOptionsButton( JButton optionsButton )
  {
    this.optionsButton = optionsButton;
  }

  protected void addToolbarActions( JToolBar toolbar )
  {
    toolbar.add( runButton );
    toolbar.add( cancelButton );
    // toolbar.add( loopButton );
    toolbar.addSeparator();
    toolbar.add( setCredentialsButton );
    toolbar.add( setEndpointButton );
    toolbar.addSeparator();
    toolbar.add( optionsButton );

  }

  protected void runSecurityTest()
  {
    initializeStatusIcons();
    if( canceled )
    {

      // make sure state is correct
      runButton.setEnabled( true );
      cancelButton.setEnabled( false );
      return;
    }

    runButton.setEnabled( false );
    cancelButton.setEnabled( true );
    StringToObjectMap properties = new StringToObjectMap();
    // properties.put( "loopButton", loopButton );
    properties.put( TestCaseRunContext.INTERACTIVE, Boolean.TRUE );
    lastRunner = null;

    runner = getModelItem().run( properties, true );
  }

  public class RunSecurityTestAction extends AbstractAction
  {
    public RunSecurityTestAction()
    {
      putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/run_testcase.gif" ) );
      putValue( Action.SHORT_DESCRIPTION, "Runs this securitytest" );
    }

    public void actionPerformed( ActionEvent e )
    {
      canceled = false;
      // shouldRun is indicator is there any security scan that can be run
      // meaning security scan have at least one scan and it is not disabled.
      boolean shouldRun = false;
      for( List<SecurityScan> scanList : securityTest.getSecurityScansMap().values() )
        for( SecurityScan scan : scanList )
          if( !scan.isDisabled() )
            shouldRun = true;
      if( shouldRun )
        runSecurityTest();
      else
        UISupport.showInfoMessage( "No Security Scans available to run.", "Security Test Warning" );
    }
  }

  public class CancelRunSecuritytestAction extends AbstractAction
  {
    public CancelRunSecuritytestAction()
    {
      putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/stop_testcase.gif" ) );
      putValue( Action.SHORT_DESCRIPTION, "Stops running this securitytest" );
    }

    public void actionPerformed( ActionEvent e )
    {
      if( runner != null )
        runner.cancel( "canceled in UI" );

      canceled = true;
    }
  }

  @Override
  protected boolean release()
  {
    testStepList.release();
    setupGroovyEditor.release();
    tearDownGroovyEditor.release();
    functionalTestLog.release();
    return super.release();
  }

  public boolean onClose( boolean canCancel )
  {
    if( canCancel )
    {
      if( runner != null && runner.getStatus() == TestCaseRunner.Status.RUNNING )
      {
        Boolean retval = UISupport.confirmOrCancel( "Cancel running SecurityTest?", "Cancel Run" );

        if( retval == null )
          return false;
        if( retval.booleanValue() )
        {
          if( runner != null )
            runner.cancel( null );
        }
      }
    }
    else
    {
      if( runner != null && runner.getStatus() == TestCaseRunner.Status.RUNNING )
      {
        if( runner != null )
          runner.cancel( null );
      }
    }

    getModelItem().removeSecurityTestRunListener( securityTestRunListener );
    progressBarAdapter.release();
    propertiesTable.release();
    inspectorPanel.release();

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

    securityTestLog.release();
    lastRunner = null;

    return release();
  }

  protected void beforeRun()
  {
  }

  protected void afterRun()
  {
    runButton.setEnabled( true );
    cancelButton.setEnabled( false );
    testStepList.setEnabled( true );
  }

  private class SetupScriptGroovyEditorModel extends AbstractGroovyEditorModel
  {
    @Override
    public Action createRunAction()
    {
      return new AbstractAction()
      {

        public void actionPerformed( ActionEvent e )
        {

          MockSecurityTestRunner securityTestRunner = new MockSecurityTestRunner( SecurityTestDesktopPanel.this
              .getModelItem() );
          try
          {
            SecurityTestDesktopPanel.this.getModelItem().runStartupScript(
                ( SecurityTestRunContext )securityTestRunner.getRunContext(), securityTestRunner );
          }
          catch( Exception e1 )
          {
            UISupport.showErrorMessage( e1 );
          }

        }
      };
    }

    public SetupScriptGroovyEditorModel()
    {
      super( new String[] { "log", "testCase", "context", "testRunner" }, SecurityTestDesktopPanel.this
          .getModelItem(), "Setup" );
    }

    public String getScript()
    {
      return SecurityTestDesktopPanel.this.getModelItem().getStartupScript();
    }

    public void setScript( String text )
    {
      SecurityTestDesktopPanel.this.getModelItem().setStartupScript( text );
    }
  }

  private class TearDownScriptGroovyEditorModel extends AbstractGroovyEditorModel
  {
    @Override
    public Action createRunAction()
    {
      return new AbstractAction()
      {

        public void actionPerformed( ActionEvent e )
        {
          try
          {
            MockSecurityTestRunner securityTestRunner = new MockSecurityTestRunner( SecurityTestDesktopPanel.this
                .getModelItem() );
            SecurityTestDesktopPanel.this.getModelItem().runTearDownScript(
                ( SecurityTestRunContext )securityTestRunner.getRunContext(), securityTestRunner );
          }
          catch( Exception e1 )
          {
            UISupport.showErrorMessage( e1 );
          }
        }
      };
    }

    public TearDownScriptGroovyEditorModel()
    {
      super( new String[] { "log", "securityTest", "context", "testRunner" }, SecurityTestDesktopPanel.this
          .getModelItem(), "TearDown" );
    }

    public String getScript()
    {
      return SecurityTestDesktopPanel.this.getModelItem().getTearDownScript();
    }

    public void setScript( String text )
    {
      SecurityTestDesktopPanel.this.getModelItem().setTearDownScript( text );
    }
  }

  public static class ModelItemListDragAndDropable extends JListDragAndDropable<JList>
  {
    public ModelItemListDragAndDropable( JList list, WsdlTestCase testCase )
    {
      super( list, testCase );
    }

    @Override
    public ModelItem getModelItemAtRow( int row )
    {
      return ( ModelItem )getList().getModel().getElementAt( row );
    }

    @Override
    public int getModelItemRow( ModelItem modelItem )
    {
      ListModel model = getList().getModel();

      for( int c = 0; c < model.getSize(); c++ )
      {
        if( model.getElementAt( c ) == modelItem )
          return c;
      }

      return -1;
    }

    public Component getRenderer( ModelItem modelItem )
    {
      return getList().getCellRenderer().getListCellRendererComponent( getList(), modelItem,
          getModelItemRow( modelItem ), true, true );
    }

    @Override
    public void setDragInfo( String dropInfo )
    {
      super.setDragInfo( dropInfo == null || dropInfo.length() == 0 ? null : dropInfo );
    }
  }

  public SecurityTestRunner getSecurityTestRunner()
  {
    return runner == null ? lastRunner : runner;
  }

  public boolean dependsOn( ModelItem modelItem )
  {
    SecurityTest securityTest = getModelItem();

    return modelItem == securityTest || modelItem == securityTest.getTestCase()
        || modelItem == securityTest.getTestCase().getTestSuite()
        || modelItem == securityTest.getTestCase().getTestSuite().getProject();
  }

  protected SecurityTest getSecurityTest()
  {
    return securityTest;
  }

  public class InternalSecurityTestRunListener extends SecurityTestRunListenerAdapter
  {

    private SimpleDateFormat dateFormat;

    public InternalSecurityTestRunListener()
    {
      dateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.SSS" );
    }

    public void beforeRun( TestCaseRunner testRunner, SecurityTestRunContext runContext )
    {
      securityTestLog.clear();
      functionalTestLog.clear();

      runButton.setEnabled( false );
      cancelButton.setEnabled( true );
      testStepList.setEnabled( false );
      // testStepList.setSelectedIndex( -1 );
      String start = dateFormat.format( new Date() );
      securityTestLog.addText( "SecurityTest started at " + start );
      functionalTestLog.addText( "Test started at " + start );

      SecurityTestDesktopPanel.this.beforeRun();

      progressBar.setValue( 0 );
      progressBar.setString( "" );

      if( runner == null )
        runner = ( SecurityTestRunnerImpl )testRunner;

      securityStatus = ResultStatus.UNKNOWN;
    }

    public void afterRun( TestCaseRunner testRunner, SecurityTestRunContext runContext )
    {
      SecurityTestRunnerImpl securityRunner = ( SecurityTestRunnerImpl )testRunner;

      if( testRunner.getStatus() == SecurityTestRunner.Status.CANCELED )
      {
        securityTestLog.addText( "SecurityTest canceled [" + testRunner.getReason() + "], time taken = "
            + securityRunner.getTimeTaken() );
        functionalTestLog.addText( "FunctionalTest canceled [" + testRunner.getReason() + "], time taken = "
            + securityRunner.getFunctionalTimeTaken() );
      }
      else if( testRunner.getStatus() == SecurityTestRunner.Status.FAILED )
      {
        String msg = securityRunner.getReason();
        if( securityRunner.getError() != null )
        {
          if( msg != null )
            msg += ":";

          msg += securityRunner.getError();
        }

        securityTestLog
            .addText( "SecurityTest failed [" + msg + "], time taken = " + securityRunner.getTimeTaken() );
        if( functionalStatus == ResultStatus.OK )
        {
          functionalTestLog.addText( "FunctionalTest finished with status [" + functionalStatus
              + "], time taken = " + securityRunner.getFunctionalTimeTaken() );
        }
        else if( functionalStatus == ResultStatus.FAILED )
        {
          functionalTestLog.addText( "FunctionalTest failed [Failing due to failed test step], time taken = "
              + securityRunner.getFunctionalTimeTaken() );
        }
      }
      else
      {
        securityTestLog.addText( "SecurityTest finished with status [" + testRunner.getStatus()
            + "], time taken = " + securityRunner.getTimeTaken() );
        if( functionalStatus == ResultStatus.OK )
        {
          functionalTestLog.addText( "FunctionalTest finished with status [" + functionalStatus
              + "], time taken = " + securityRunner.getFunctionalTimeTaken() );
        }
        else if( functionalStatus == ResultStatus.FAILED )
        {
          functionalTestLog.addText( "FunctionalTest failed [Failing due to failed test step], time taken = "
              + securityRunner.getFunctionalTimeTaken() );
        }
      }

      lastRunner = runner;
      runner = null;

      // JToggleButton loopButton = ( JToggleButton )runContext.getProperty(
      // "loopButton" );
      // if( loopButton != null && loopButton.isSelected()
      // && testRunner.getStatus() == SecurityTestRunner.Status.FINISHED )
      // {
      // SwingUtilities.invokeLater( new Runnable()
      // {
      // public void run()
      // {
      // runSecurityTest();
      // }
      // } );
      // }
      // else
      // {
      SecurityTestDesktopPanel.this.afterRun();
      // }

      if( testRunner.getStatus() == Status.FAILED )
      {
        securityStatus = ResultStatus.FAILED;
      }
      else if( testRunner.getStatus() == Status.FINISHED || testRunner.getStatus() == Status.CANCELED )
      {
        if( securityStatus != ResultStatus.FAILED )
          securityStatus = ResultStatus.OK;
      }
      updateStatusIcon( securityStatus, securityLogInspector );
      updateStatusIcon( functionalStatus, functionalLogInspector );
    }

    @Override
    public void beforeSecurityScan( TestCaseRunner testRunner, SecurityTestRunContext runContext,
        SecurityScan securityCheck )
    {
      securityTestLog.addSecurityScanResult( securityCheck );
    }

    @Override
    public void afterSecurityScan( TestCaseRunner testRunner, SecurityTestRunContext runContext,
        SecurityScanResult securityCheckResult )
    {
      securityTestLog.updateSecurityScanResult( securityCheckResult );

      if( securityCheckResult.getStatus() == ResultStatus.CANCELED
          && securityCheckResult.isHasRequestsWithWarnings() )
      {
        securityStatus = ResultStatus.FAILED;
      }
      else if( securityCheckResult.getStatus() == ResultStatus.FAILED )
      {
        securityStatus = ResultStatus.FAILED;
      }
      else if( securityCheckResult.getStatus() == ResultStatus.OK )
      {
        if( securityStatus != ResultStatus.FAILED )
          securityStatus = ResultStatus.OK;
      }

    }

    @Override
    public void afterOriginalStep( TestCaseRunner testRunner, SecurityTestRunContext runContext,
        SecurityTestStepResult result )
    {
      functionalTestLog.addSecurityTestFunctionalStepResult( result.getOriginalTestStepResult() );
      if( result.getOriginalTestStepResult().getStatus() == TestStepStatus.FAILED )
      {
        functionalStatus = ResultStatus.FAILED;
      }
      else if( result.getOriginalTestStepResult().getStatus() == TestStepStatus.OK
          && functionalStatus != ResultStatus.FAILED )
      {
        functionalStatus = ResultStatus.OK;
      }
    }

    @Override
    public void afterSecurityScanRequest( TestCaseRunner testRunner, SecurityTestRunContext runContext,
        SecurityScanRequestResult securityCheckReqResult )
    {
      securityTestLog.addSecurityScanRequestResult( securityCheckReqResult );
    }

    @Override
    public void beforeStep( TestCaseRunner testRunner, SecurityTestRunContext runContext,
        TestStepResult testStepResult )
    {
      startStepLogEntryAdded = securityTestLog.addSecurityTestStepResult( testStepResult.getTestStep() );
    }

    @Override
    public void afterStep( TestCaseRunner testRunner, SecurityTestRunContext runContext, SecurityTestStepResult result )
    {
      boolean hasChecksToProcess = securityTest.getTestStepSecurityScansCount( result.getTestStep().getId() ) > 0;
      securityTestLog.updateSecurityTestStepResult( result, hasChecksToProcess, startStepLogEntryAdded );
      if( result.getStatus() == ResultStatus.FAILED )
      {
        securityStatus = ResultStatus.FAILED;
      }
      else if( result.getStatus() == ResultStatus.OK )
      {
        if( securityStatus != ResultStatus.FAILED )
          securityStatus = ResultStatus.OK;
      }
    }
  }
}
TOP

Related Classes of com.eviware.soapui.security.panels.SecurityTestDesktopPanel$ModelItemListDragAndDropable

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.