Package com.eviware.soapui.impl.wsdl.teststeps.registry

Source Code of com.eviware.soapui.impl.wsdl.teststeps.registry.WsdlMockResponseStepFactory$CreateForm

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

import java.util.ArrayList;
import java.util.List;

import com.eviware.soapui.config.MockResponseConfig;
import com.eviware.soapui.config.MockResponseStepConfig;
import com.eviware.soapui.config.TestStepConfig;
import com.eviware.soapui.impl.WsdlInterfaceFactory;
import com.eviware.soapui.impl.wsdl.WsdlInterface;
import com.eviware.soapui.impl.wsdl.WsdlOperation;
import com.eviware.soapui.impl.wsdl.WsdlProject;
import com.eviware.soapui.impl.wsdl.WsdlRequest;
import com.eviware.soapui.impl.wsdl.mock.WsdlMockResponse;
import com.eviware.soapui.impl.wsdl.support.CompressedStringSupport;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase;
import com.eviware.soapui.impl.wsdl.teststeps.WsdlMockResponseTestStep;
import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestStep;
import com.eviware.soapui.model.iface.Interface;
import com.eviware.soapui.model.iface.Operation;
import com.eviware.soapui.model.util.ModelItemNames;
import com.eviware.soapui.settings.WsdlSettings;
import com.eviware.soapui.support.UISupport;
import com.eviware.x.form.XFormDialog;
import com.eviware.x.form.XFormField;
import com.eviware.x.form.XFormFieldListener;
import com.eviware.x.form.support.ADialogBuilder;
import com.eviware.x.form.support.AField;
import com.eviware.x.form.support.AField.AFieldType;
import com.eviware.x.form.support.AForm;

/**
* Factory for creation TransferValue steps
*
* @author Ole.Matzura
*/
public class WsdlMockResponseStepFactory extends WsdlTestStepFactory
{
  public static final String MOCKRESPONSE_TYPE = "mockresponse";
  private static XFormDialog dialog;
  private static WsdlProject project;

  public WsdlMockResponseStepFactory()
  {
    super( MOCKRESPONSE_TYPE, "Mock Response", "Waits for a request and returns the specified response",
        "/mockResponseStep.gif" );
  }

  public WsdlTestStep buildTestStep( WsdlTestCase testCase, TestStepConfig config, boolean forLoadTest )
  {
    return new WsdlMockResponseTestStep( testCase, config, forLoadTest );
  }

  public TestStepConfig createNewTestStep( WsdlTestCase testCase, String name )
  {
    ensureDialog();

    return createFromDialog( testCase.getTestSuite().getProject(), name );
  }

  private static void ensureDialog()
  {
    if( dialog == null )
    {
      dialog = ADialogBuilder.buildDialog( CreateForm.class );
      dialog.getFormField( CreateForm.INTERFACE ).addFormFieldListener( new XFormFieldListener()
      {

        public void valueChanged( XFormField sourceField, String newValue, String oldValue )
        {
          WsdlInterface iface = ( WsdlInterface )project.getInterfaceByName( newValue );
          dialog.setOptions( CreateForm.OPERATION,
              new ModelItemNames<Operation>( iface.getOperationList() ).getNames() );
        }
      } );

      dialog.setBooleanValue( CreateForm.CREATE_RESPONSE, true );
      dialog.setValue( CreateForm.PATH, "/" );
    }
  }

  private static TestStepConfig createFromDialog( WsdlProject project, String name )
  {
    WsdlMockResponseStepFactory.project = project;

    try
    {
      List<Interface> interfaces = new ArrayList<Interface>();
      for( Interface iface : project.getInterfaces( WsdlInterfaceFactory.WSDL_TYPE ) )
      {
        if( iface.getOperationCount() > 0 )
          interfaces.add( iface );
      }

      if( interfaces.isEmpty() )
      {
        UISupport.showErrorMessage( "Missing Interfaces/Operations to mock" );
        return null;
      }

      dialog.setValue( CreateForm.NAME, name );
      dialog.setOptions( CreateForm.INTERFACE, new ModelItemNames<Interface>( interfaces ).getNames() );
      dialog.setOptions( CreateForm.OPERATION,
          new ModelItemNames<Operation>( interfaces.get( 0 ).getOperationList() ).getNames() );

      if( !dialog.show() )
        return null;

      TestStepConfig testStepConfig = TestStepConfig.Factory.newInstance();
      testStepConfig.setType( MOCKRESPONSE_TYPE );
      testStepConfig.setName( dialog.getValue( CreateForm.NAME ) );

      MockResponseStepConfig config = MockResponseStepConfig.Factory.newInstance();
      config.setInterface( dialog.getValue( CreateForm.INTERFACE ) );
      config.setOperation( dialog.getValue( CreateForm.OPERATION ) );
      config.setPort( dialog.getIntValue( CreateForm.PORT, 8080 ) );
      config.setPath( dialog.getValue( CreateForm.PATH ) );
      config.addNewResponse();
      config.getResponse().addNewResponseContent();

      if( dialog.getBooleanValue( CreateForm.CREATE_RESPONSE ) )
      {
        WsdlInterface iface = ( WsdlInterface )project.getInterfaceByName( config.getInterface() );
        String response = iface.getOperationByName( config.getOperation() ).createResponse(
            project.getSettings().getBoolean( WsdlSettings.XML_GENERATION_ALWAYS_INCLUDE_OPTIONAL_ELEMENTS ) );

        CompressedStringSupport.setString( config.getResponse().getResponseContent(), response );
      }

      testStepConfig.addNewConfig().set( config );
      return testStepConfig;
    }
    finally
    {
      WsdlMockResponseStepFactory.project = null;
    }
  }

  @AForm( description = "Secify options for new MockResponse step", name = "New MockResponse Step", helpUrl = HelpUrls.CREATEMOCKRESPONSESTEP_HELP_URL, icon = UISupport.OPTIONS_ICON_PATH )
  private class CreateForm
  {
    @AField( description = "The name of the MockResponse step", name = "Name", type = AFieldType.STRING )
    public static final String NAME = "Name";

    @AField( description = "Specifies the operation to be mocked", name = "Operation", type = AFieldType.ENUMERATION )
    public final static String OPERATION = "Operation";

    @AField( description = "Specifies the interface containing the operation to be mocked", name = "Interface", type = AFieldType.ENUMERATION )
    public final static String INTERFACE = "Interface";

    @AField( description = "Specifies if a mock response is to be created from the schema", name = "Create Response", type = AFieldType.BOOLEAN )
    public final static String CREATE_RESPONSE = "Create Response";

    @AField( description = "Specifies the port to listen on", name = "Port", type = AFieldType.INT )
    public final static String PORT = "Port";

    @AField( description = "Specifies the path to listen on", name = "Path" )
    public final static String PATH = "Path";
  }

  public static TestStepConfig createConfig( WsdlOperation operation, boolean interactive )
  {
    return createConfig( operation, null, interactive );
  }

  public static TestStepConfig createConfig( WsdlRequest request, boolean interactive )
  {
    return createConfig( request.getOperation(), request, interactive );
  }

  public static TestStepConfig createConfig( WsdlOperation operation, WsdlRequest request, boolean interactive )
  {
    if( interactive )
    {
      ensureDialog();

      dialog.setValue( CreateForm.INTERFACE, operation.getInterface().getName() );
      dialog.setValue( CreateForm.OPERATION, operation.getName() );
      dialog.setBooleanValue( CreateForm.CREATE_RESPONSE, request.getResponse() == null );

      return createFromDialog( operation.getInterface().getProject(), request.getName() + " Response" );
    }
    else
    {
      TestStepConfig testStepConfig = TestStepConfig.Factory.newInstance();
      testStepConfig.setType( MOCKRESPONSE_TYPE );
      testStepConfig.setName( "Mock Response" );

      MockResponseStepConfig config = MockResponseStepConfig.Factory.newInstance();
      config.setInterface( operation.getInterface().getName() );
      config.setOperation( operation.getName() );
      MockResponseConfig response = config.addNewResponse();
      response.addNewResponseContent();

      if( request != null && request.getResponse() != null )
      {
        CompressedStringSupport.setString( response.getResponseContent(), request.getResponse()
            .getContentAsString() );
      }

      testStepConfig.addNewConfig().set( config );

      return testStepConfig;
    }
  }

  public static TestStepConfig createNewTestStep( WsdlMockResponse mockResponse )
  {
    WsdlOperation operation = mockResponse.getMockOperation().getOperation();
    if( operation == null )
    {
      UISupport.showErrorMessage( "Missing operation for this mock response" );
      return null;
    }

    ensureDialog();

    dialog.setValue( CreateForm.INTERFACE, operation.getInterface().getName() );
    dialog.setValue( CreateForm.OPERATION, operation.getName() );
    dialog.setBooleanValue( CreateForm.CREATE_RESPONSE, false );
    dialog.setIntValue( CreateForm.PORT, mockResponse.getMockOperation().getMockService().getPort() );
    dialog.setValue( CreateForm.PATH, mockResponse.getMockOperation().getMockService().getPath() );

    return createFromDialog( operation.getInterface().getProject(), mockResponse.getMockOperation().getName() + " - "
        + mockResponse.getName() );
  }

  public boolean canCreate()
  {
    return true;
  }

  @Override
  public boolean canAddTestStepToTestCase( WsdlTestCase testCase )
  {
    for( Interface iface : testCase.getTestSuite().getProject().getInterfaceList() )
    {
      if( iface instanceof WsdlInterface && iface.getOperationCount() > 0 )
        return true;
    }

    UISupport.showErrorMessage( "Missing SOAP Operations to Mock in Project" );
    return false;

  }
}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.teststeps.registry.WsdlMockResponseStepFactory$CreateForm

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.