Package com.eviware.soapui.security.actions

Source Code of com.eviware.soapui.security.actions.CloneParametersAction

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

import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.AbstractAction;
import javax.swing.Action;

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.project.Project;
import com.eviware.soapui.model.security.SecurityCheckedParameter;
import com.eviware.soapui.model.support.ModelSupport;
import com.eviware.soapui.model.testsuite.TestCase;
import com.eviware.soapui.model.testsuite.TestStep;
import com.eviware.soapui.model.testsuite.TestSuite;
import com.eviware.soapui.security.SecurityTest;
import com.eviware.soapui.security.scan.AbstractSecurityScan;
import com.eviware.soapui.security.scan.AbstractSecurityScanWithProperties;
import com.eviware.soapui.support.StringUtils;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.action.swing.DefaultActionList;
import com.eviware.x.form.XFormDialog;
import com.eviware.x.form.XFormField;
import com.eviware.x.form.XFormFieldListener;
import com.eviware.x.form.XFormOptionsField;
import com.eviware.x.form.support.ADialogBuilder;
import com.eviware.x.form.support.AField;
import com.eviware.x.form.support.AForm;
import com.eviware.x.form.support.XFormMultiSelectList;
import com.eviware.x.form.support.AField.AFieldType;
import com.eviware.x.impl.swing.JFormDialog;
import com.eviware.x.impl.swing.SwingXFormDialog;

public class CloneParametersAction extends AbstractAction
{

  private XFormDialog dialog;
  protected DefaultActionList actionList;
  private AbstractSecurityScanWithProperties securityScan;

  public CloneParametersAction()
  {
    super( "Clone SecurityScan Parameters" );
    putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/clone_parameters.gif" ) );
    putValue( Action.SHORT_DESCRIPTION, "Clones parameter" );
    setEnabled( false );
  }

  public CloneParametersAction( AbstractSecurityScanWithProperties securityScan )
  {
    super( "Clone SecurityScan Parameters" );
    putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/clone_parameters.gif" ) );
    putValue( Action.SHORT_DESCRIPTION, "Clones parameter" );
    this.securityScan = securityScan;
  }

  @Override
  public void actionPerformed( ActionEvent e )
  {
    XFormDialog dialog = createCloneParameterDialog();
    dialog.show();
    // model.fireTableDataChanged();
  }

  public void setSecurityScan( AbstractSecurityScanWithProperties securityScan )
  {
    this.securityScan = securityScan;
  }

  private class OkAction extends AbstractAction
  {

    private XFormDialog dialog;

    public OkAction()
    {
      super( "OK" );
    }

    public void setDialog( XFormDialog dialog )
    {
      this.dialog = dialog;
    }

    @Override
    public void actionPerformed( ActionEvent arg0 )
    {
      if( dialog != null )
      {
        ( ( SwingXFormDialog )dialog ).setReturnValue( XFormDialog.OK_OPTION );
        List<ModelItem> items = performClone( true );
        UISupport.showInfoMessage( "Updated " + items.size() + " scans" );
        dialog.setVisible( false );
      }
    }
  }

  private String[] getSecurableTestStepsNames( TestCase testCase )
  {
    List<TestStep> testStepList = testCase.getTestStepList();
    List<String> namesList = new ArrayList<String>();
    for( TestStep testStep : testStepList )
    {
      if( AbstractSecurityScan.isSecurable( testStep ) )
      {
        namesList.add( testStep.getName() );
      }
    }
    String[] names = new String[namesList.size()];
    for( int c = 0; c < namesList.size(); c++ )
    {
      names[c] = namesList.get( c );
    }
    return names;
  }

  public List<ModelItem> performClone( boolean showErrorMessage )
  {
    List<ModelItem> items = new ArrayList<ModelItem>();
    String targetTestSuiteName = dialog.getValue( CloneParameterDialog.TARGET_TESTSUITE );
    String targetTestCaseName = dialog.getValue( CloneParameterDialog.TARGET_TESTCASE );
    String targetSecurityTestName = dialog.getValue( CloneParameterDialog.TARGET_SECURITYTEST );
    String targetSecurityTestStepName = dialog.getValue( CloneParameterDialog.TARGET_TESTSTEP );
    String[] targetSecurityScans = StringUtils.toStringArray( ( ( XFormMultiSelectList )dialog
        .getFormField( CloneParameterDialog.TARGET_SECURITYSCAN ) ).getSelectedOptions() );

    if( targetSecurityScans.length == 0 )
    {
      if( showErrorMessage )
      {
        UISupport.showErrorMessage( "No SecurityScans selected.." );
      }
      return items;
    }

    int[] indexes = ( ( XFormOptionsField )dialog.getFormField( CloneParameterDialog.PARAMETERS ) )
        .getSelectedIndexes();
    if( indexes.length == 0 )
    {
      if( showErrorMessage )
      {
        UISupport.showErrorMessage( "No Parameters selected.." );
      }
      return items;
    }

    Project project = securityScan.getTestStep().getTestCase().getTestSuite().getProject();
    TestSuite targetTestSuite = project.getTestSuiteByName( targetTestSuiteName );
    TestCase targetTestCase = targetTestSuite.getTestCaseByName( targetTestCaseName );
    SecurityTest targetSecurityTest = targetTestCase.getSecurityTestByName( targetSecurityTestName );
    TestStep targetTestStep = targetTestCase.getTestStepByName( targetSecurityTestStepName );

    boolean overwrite = dialog.getBooleanValue( CloneParameterDialog.OVERWRITE );

    for( String scanName : targetSecurityScans )
    {
      AbstractSecurityScanWithProperties targetSecurityScan = ( AbstractSecurityScanWithProperties )targetSecurityTest
          .getTestStepSecurityScanByName( targetTestStep.getId(), scanName );

      for( int i : indexes )
      {
        SecurityCheckedParameter scanParameter = securityScan.getParameterAt( i );
        String newParameterLabel = scanParameter.getLabel();
        if( securityScan.getParameterByLabel( scanParameter.getLabel() ) != null )
        {
          if( securityScan.equals( targetSecurityScan ) )
          {
            newParameterLabel = "Copy of " + scanParameter.getLabel();
          }
        }
        if( targetSecurityScan.importParameter( scanParameter, overwrite, newParameterLabel )
            && !items.contains( targetSecurityScan ) )
        {
          items.add( targetSecurityScan );
        }
      }
    }
    return items;
  }

  private class CancelAction extends AbstractAction
  {

    private XFormDialog dialog;

    public CancelAction()
    {
      super( "Cancel" );
    }

    public void setDialog( XFormDialog dialog )
    {
      this.dialog = dialog;
    }

    @Override
    public void actionPerformed( ActionEvent arg0 )
    {
      if( dialog != null )
      {
        ( ( SwingXFormDialog )dialog ).setReturnValue( XFormDialog.CANCEL_OPTION );
        dialog.setVisible( false );
      }
    }
  }

  private class ApplyAction extends AbstractAction
  {

    private XFormDialog dialog;

    public ApplyAction()
    {
      super( "Apply" );
    }

    public void setDialog( XFormDialog dialog )
    {
      this.dialog = dialog;
    }

    @Override
    public void actionPerformed( ActionEvent arg0 )
    {
      if( dialog != null )
      {
        List<ModelItem> items = performClone( true );
        UISupport.showInfoMessage( "Updated " + items.size() + " scans" );

        if( items.size() > 0 )
        {
          ( ( XFormMultiSelectList )dialog.getFormField( CloneParameterDialog.TARGET_SECURITYSCAN ) )
              .setSelectedOptions( new String[0] );
          ( ( XFormMultiSelectList )dialog.getFormField( CloneParameterDialog.PARAMETERS ) )
              .setSelectedOptions( new String[0] );
        }
      }
    }
  }

  protected XFormDialog createCloneParameterDialog()
  {
    actionList = new DefaultActionList();
    OkAction okAction = new OkAction();
    actionList.addAction( okAction, true );
    CancelAction cancelAction = new CancelAction();
    actionList.addAction( cancelAction );
    ApplyAction applyAction = new ApplyAction();
    actionList.addAction( applyAction );

    dialog = ADialogBuilder.buildDialog( CloneParameterDialog.class, actionList, false );

    okAction.setDialog( dialog );
    cancelAction.setDialog( dialog );
    applyAction.setDialog( dialog );

    final TestCase testCase = securityScan.getTestStep().getTestCase();
    final Project project = testCase.getTestSuite().getProject();

    dialog.getFormField( CloneParameterDialog.TARGET_TESTSUITE ).addFormFieldListener( new XFormFieldListener()
    {
      public void valueChanged( XFormField sourceField, String newValue, String oldValue )
      {
        TestSuite testSuite = project.getTestSuiteByName( newValue );
        String[] testCaseNames = ModelSupport.getNames( testSuite.getTestCaseList() );
        dialog.setOptions( CloneParameterDialog.TARGET_TESTCASE, testCaseNames );

        if( testCaseNames.length > 0 )
        {
          dialog.setValue( CloneParameterDialog.TARGET_TESTCASE, testCaseNames[0] );
          TestCase testCase = testSuite.getTestCaseByName( testCaseNames[0] );

          String[] testStepNames = new String[0];
          String[] securityTestNames = ModelSupport.getNames( testCase.getSecurityTestList() );
          dialog.setOptions( CloneParameterDialog.TARGET_SECURITYTEST, securityTestNames );
          if( securityTestNames.length > 0 )
          {
            testStepNames = getSecurableTestStepsNames( testCase );
          }
          dialog.setOptions( CloneParameterDialog.TARGET_TESTSTEP, testStepNames );

          if( securityTestNames.length > 0 )
          {
            dialog.setValue( CloneParameterDialog.TARGET_SECURITYTEST, securityTestNames[0] );
            if( testStepNames.length > 0 )
            {
              dialog.setValue( CloneParameterDialog.TARGET_TESTSTEP, testStepNames[0] );
            }
            else
            {
              dialog.setOptions( CloneParameterDialog.TARGET_TESTSTEP, new String[0] );
            }

            String securityTestName = dialog.getValue( CloneParameterDialog.TARGET_SECURITYTEST );
            SecurityTest securityTest = testCase.getSecurityTestByName( securityTestName );
            String testStepName = dialog.getValue( CloneParameterDialog.TARGET_TESTSTEP );
            TestStep testStep = testCase.getTestStepByName( testStepName );
            String[] securityScanNames = ModelSupport.getNames( securityTest.getTestStepSecurityScanByType(
                testStep.getId(), AbstractSecurityScanWithProperties.class ) );
            dialog.setOptions( CloneParameterDialog.TARGET_SECURITYSCAN, securityScanNames );
          }
          else
          {
            dialog.setOptions( CloneParameterDialog.TARGET_SECURITYTEST, new String[0] );
            dialog.setOptions( CloneParameterDialog.TARGET_TESTSTEP, new String[0] );
            dialog.setOptions( CloneParameterDialog.TARGET_SECURITYSCAN, new String[0] );
          }
        }
        else
        {
          dialog.setOptions( CloneParameterDialog.TARGET_SECURITYTEST, new String[0] );
          dialog.setOptions( CloneParameterDialog.TARGET_TESTSTEP, new String[0] );
        }
      }
    } );
    dialog.getFormField( CloneParameterDialog.TARGET_TESTCASE ).addFormFieldListener( new XFormFieldListener()
    {
      public void valueChanged( XFormField sourceField, String newValue, String oldValue )
      {
        String testSuiteName = dialog.getValue( CloneParameterDialog.TARGET_TESTSUITE );
        TestSuite testSuite = project.getTestSuiteByName( testSuiteName );
        TestCase testCase = testSuite.getTestCaseByName( newValue );

        String[] testStepNames = new String[0];
        String[] securityTestNames = ModelSupport.getNames( testCase.getSecurityTestList() );
        dialog.setOptions( CloneParameterDialog.TARGET_SECURITYTEST, securityTestNames );
        if( securityTestNames.length > 0 )
        {
          testStepNames = getSecurableTestStepsNames( testCase );
        }
        dialog.setOptions( CloneParameterDialog.TARGET_TESTSTEP, testStepNames );

        if( securityTestNames.length > 0 )
        {
          dialog.setValue( CloneParameterDialog.TARGET_SECURITYTEST, securityTestNames[0] );
          if( testStepNames.length > 0 )
          {
            dialog.setValue( CloneParameterDialog.TARGET_TESTSTEP, testStepNames[0] );
          }
          else
          {
            dialog.setOptions( CloneParameterDialog.TARGET_TESTSTEP, new String[0] );
          }

          String securityTestName = dialog.getValue( CloneParameterDialog.TARGET_SECURITYTEST );
          SecurityTest securityTest = testCase.getSecurityTestByName( securityTestName );
          String testStepName = dialog.getValue( CloneParameterDialog.TARGET_TESTSTEP );
          TestStep testStep = testCase.getTestStepByName( testStepName );
          String[] securityScanNames = ModelSupport.getNames( securityTest.getTestStepSecurityScanByType(
              testStep.getId(), AbstractSecurityScanWithProperties.class ) );
          dialog.setOptions( CloneParameterDialog.TARGET_SECURITYSCAN, securityScanNames );
        }
        else
        {
          dialog.setOptions( CloneParameterDialog.TARGET_SECURITYTEST, new String[0] );
          dialog.setOptions( CloneParameterDialog.TARGET_TESTSTEP, new String[0] );
          dialog.setOptions( CloneParameterDialog.TARGET_SECURITYSCAN, new String[0] );
        }
      }
    } );
    dialog.getFormField( CloneParameterDialog.TARGET_TESTSTEP ).addFormFieldListener( new XFormFieldListener()
    {
      public void valueChanged( XFormField sourceField, String newValue, String oldValue )
      {
        String testSuiteName = dialog.getValue( CloneParameterDialog.TARGET_TESTSUITE );
        TestSuite testSuite = project.getTestSuiteByName( testSuiteName );
        String testCaseName = dialog.getValue( CloneParameterDialog.TARGET_TESTCASE );
        TestCase testCase = testSuite.getTestCaseByName( testCaseName );
        String securityTestName = dialog.getValue( CloneParameterDialog.TARGET_SECURITYTEST );
        SecurityTest securityTest = testCase.getSecurityTestByName( securityTestName );
        TestStep testStep = testCase.getTestStepByName( newValue );

        String[] securityScanNames = ModelSupport.getNames( securityTest.getTestStepSecurityScanByType(
            testStep.getId(), AbstractSecurityScanWithProperties.class ) );
        dialog.setOptions( CloneParameterDialog.TARGET_SECURITYSCAN, securityScanNames );
      }
    } );
    dialog.getFormField( CloneParameterDialog.TARGET_SECURITYTEST ).addFormFieldListener( new XFormFieldListener()
    {
      public void valueChanged( XFormField sourceField, String newValue, String oldValue )
      {
        String testSuiteName = dialog.getValue( CloneParameterDialog.TARGET_TESTSUITE );
        TestSuite testSuite = project.getTestSuiteByName( testSuiteName );
        String testCaseName = dialog.getValue( CloneParameterDialog.TARGET_TESTCASE );
        TestCase testCase = testSuite.getTestCaseByName( testCaseName );
        SecurityTest securityTest = testCase.getSecurityTestByName( newValue );
        String testStepName = dialog.getValue( CloneParameterDialog.TARGET_TESTSTEP );
        TestStep testStep = testCase.getTestStepByName( testStepName );

        String[] securityScanNames = ModelSupport.getNames( securityTest.getTestStepSecurityScanByType(
            testStep.getId(), AbstractSecurityScanWithProperties.class ) );
        dialog.setOptions( CloneParameterDialog.TARGET_SECURITYSCAN, securityScanNames );
      }
    } );

    WsdlTestCase wsdlTestCase = ( WsdlTestCase )securityScan.getTestStep().getTestCase();

    dialog.setOptions( CloneParameterDialog.TARGET_TESTSUITE,
        ModelSupport.getNames( wsdlTestCase.getTestSuite().getProject().getTestSuiteList() ) );
    dialog.setValue( CloneParameterDialog.TARGET_TESTSUITE, wsdlTestCase.getTestSuite().getName() );

    List<TestCase> wsdlTestCaseList = wsdlTestCase.getTestSuite().getTestCaseList();
    dialog.setOptions( CloneParameterDialog.TARGET_TESTCASE, ModelSupport.getNames( wsdlTestCaseList ) );
    dialog.setValue( CloneParameterDialog.TARGET_TESTCASE, wsdlTestCase.getName() );

    dialog.setOptions( CloneParameterDialog.TARGET_TESTSTEP, getSecurableTestStepsNames( wsdlTestCase ) );
    dialog.setOptions( CloneParameterDialog.TARGET_SECURITYTEST,
        ModelSupport.getNames( wsdlTestCase.getSecurityTestList() ) );

    String securityTestName = dialog.getValue( CloneParameterDialog.TARGET_SECURITYTEST );
    SecurityTest securityTest = wsdlTestCase.getSecurityTestByName( securityTestName );
    String testStepName = dialog.getValue( CloneParameterDialog.TARGET_TESTSTEP );
    TestStep testStep = wsdlTestCase.getTestStepByName( testStepName );

    String[] securityScanNames = ModelSupport.getNames( securityTest.getTestStepSecurityScanByType( testStep.getId(),
        AbstractSecurityScanWithProperties.class ) );
    dialog.setOptions( CloneParameterDialog.TARGET_SECURITYSCAN, securityScanNames );

    dialog.setOptions( CloneParameterDialog.PARAMETERS, securityScan.getParameterHolder().getParameterLabels() );

    ( ( JFormDialog )dialog ).getDialog().setResizable( false );

    return dialog;
  }

  @AForm( description = "Specify target TestSuite/TestCase/Security Test(s)/Security Scan(s) and select Parameters to clone", name = "Clone Parameters", icon = UISupport.TOOL_ICON_PATH, helpUrl = HelpUrls.SECURITY_SCANS_OVERVIEW )
  private interface CloneParameterDialog
  {
    @AField( name = "Parameters", description = "The Parameters to clone", type = AFieldType.MULTILIST )
    public final static String PARAMETERS = "Parameters";

    @AField( name = "Target TestSuite", description = "The target TestSuite for the cloned Parameter(s)", type = AFieldType.ENUMERATION )
    public final static String TARGET_TESTSUITE = "Target TestSuite";

    @AField( name = "Target TestCase", description = "The target TestCase for the cloned Parameter(s)", type = AFieldType.ENUMERATION )
    public final static String TARGET_TESTCASE = "Target TestCase";

    @AField( name = "Target SecurityTest", description = "The target SecurityTest for the cloned Parameter(s)", type = AFieldType.ENUMERATION )
    public final static String TARGET_SECURITYTEST = "Target SecurityTest";

    @AField( name = "Target TestStep", description = "The target TestStep for the cloned Parameter(s)", type = AFieldType.ENUMERATION )
    public final static String TARGET_TESTSTEP = "Target TestStep";

    @AField( name = "Target SecurityScans", description = "The SecurityScans to clone to", type = AFieldType.MULTILIST )
    public final static String TARGET_SECURITYSCAN = "Target SecurityScans";

    @AField( name = "Overwrite", description = "Overwrite existing parameters", type = AFieldType.BOOLEAN )
    public final static String OVERWRITE = "Overwrite";
  }

}
TOP

Related Classes of com.eviware.soapui.security.actions.CloneParametersAction

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.