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

Source Code of com.eviware.soapui.impl.wsdl.teststeps.registry.HttpRequestStepFactory$Form

/*
*  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.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.swing.AbstractAction;

import com.eviware.soapui.config.HttpRequestConfig;
import com.eviware.soapui.config.RestParameterConfig;
import com.eviware.soapui.config.RestParametersConfig;
import com.eviware.soapui.config.TestStepConfig;
import com.eviware.soapui.impl.rest.RestRequestInterface;
import com.eviware.soapui.impl.rest.panels.resource.RestParamsTable;
import com.eviware.soapui.impl.rest.support.RestUtils;
import com.eviware.soapui.impl.rest.support.XmlBeansRestParamsTestPropertyHolder;
import com.eviware.soapui.impl.support.HttpUtils;
import com.eviware.soapui.impl.wsdl.monitor.WsdlMonitorMessageExchange;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase;
import com.eviware.soapui.impl.wsdl.teststeps.HttpTestRequestStep;
import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestStep;
import com.eviware.soapui.support.MessageSupport;
import com.eviware.soapui.support.StringUtils;
import com.eviware.soapui.support.UISupport;
import com.eviware.x.form.XFormDialog;
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.validators.RequiredValidator;

/**
* Factory for WsdlTestRequestSteps
*
* @author Ole.Matzura
*/

public class HttpRequestStepFactory extends WsdlTestStepFactory
{
  private static final String HTTPREQUEST = "httprequest";
  public static final String HTTPREQUEST_TYPE = HTTPREQUEST;
  private XFormDialog dialog;
  public static final MessageSupport messages = MessageSupport.getMessages( HttpRequestStepFactory.class );
  private XmlBeansRestParamsTestPropertyHolder params;
  private RestParamsTable paramsTable;

  public HttpRequestStepFactory()
  {
    super( HTTPREQUEST_TYPE, "HTTP Test Request", "Submits a HTTP Request and validates its response",
        "/http_request.gif" );
  }

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

  public TestStepConfig createNewTestStep( WsdlTestCase testCase, String name )
  {
    if( dialog == null )
    {
      buildDialog();
    }
    else
    {
      dialog.setValue( Form.ENDPOINT, "" );
    }

    params = new XmlBeansRestParamsTestPropertyHolder( testCase, RestParametersConfig.Factory.newInstance() );

    paramsTable = new RestParamsTable( params, false );
    dialog.getFormField( Form.PARAMSTABLE ).setProperty( "component", paramsTable );
    dialog.setValue( Form.STEPNAME, name );

    try
    {
      if( dialog.show() )
      {
        HttpRequestConfig httpRequest = HttpRequestConfig.Factory.newInstance();
        httpRequest.setEndpoint( HttpUtils.ensureEndpointStartsWithProtocol( dialog.getValue( Form.ENDPOINT ) ) );
        httpRequest.setMethod( dialog.getValue( Form.HTTPMETHOD ) );
        XmlBeansRestParamsTestPropertyHolder tempParams = new XmlBeansRestParamsTestPropertyHolder( testCase,
            httpRequest.addNewParameters() );
        tempParams.addParameters( params );
        tempParams.release();

        TestStepConfig testStep = TestStepConfig.Factory.newInstance();
        testStep.setType( HTTPREQUEST_TYPE );
        testStep.setConfig( httpRequest );
        testStep.setName( dialog.getValue( Form.STEPNAME ) );

        return testStep;
      }
      else
      {
        return null;
      }
    }
    finally
    {
      paramsTable.release();
      paramsTable = null;
      params = null;
      dialog.getFormField( Form.PARAMSTABLE ).setProperty( "component", paramsTable );
    }
  }

  public TestStepConfig createNewTestStep( WsdlTestCase testCase, String name, String endpoint, String method )
  {
    RestParametersConfig restParamConf = RestParametersConfig.Factory.newInstance();
    params = new XmlBeansRestParamsTestPropertyHolder( testCase, restParamConf );

    HttpRequestConfig httpRequest = HttpRequestConfig.Factory.newInstance();
    httpRequest.setMethod( method );

    String path = RestUtils.extractParams( endpoint, params, true );
    endpoint = path;

    XmlBeansRestParamsTestPropertyHolder tempParams = new XmlBeansRestParamsTestPropertyHolder( testCase,
        httpRequest.addNewParameters() );
    tempParams.addParameters( params );

    httpRequest.setEndpoint( HttpUtils.ensureEndpointStartsWithProtocol( endpoint ) );

    TestStepConfig testStep = TestStepConfig.Factory.newInstance();
    testStep.setType( HTTPREQUEST_TYPE );
    testStep.setConfig( httpRequest );
    testStep.setName( name );

    return testStep;
  }

  public boolean canCreate()
  {
    return true;
  }

  private void buildDialog()
  {
    dialog = ADialogBuilder.buildDialog( Form.class );
    dialog.getFormField( Form.STEPNAME ).addFormFieldValidator( new RequiredValidator() );
    dialog.getFormField( Form.EXTRACTPARAMS ).setProperty( "action", new ExtractParamsAction() );
    ( ( XFormOptionsField )dialog.getFormField( Form.HTTPMETHOD ) ).setOptions( RestRequestInterface.RequestMethod
        .getMethods() );
  }

  @AForm( name = "Form.Title", description = "Form.Description", helpUrl = HelpUrls.NEWRESTSERVICE_HELP_URL, icon = UISupport.TOOL_ICON_PATH )
  public interface Form
  {
    @AField( description = "Form.TestStepName.Description", type = AField.AFieldType.STRING )
    public final static String STEPNAME = messages.get( "Form.TestStepName.Label" );

    @AField( description = "Form.Endpoint.Description", type = AField.AFieldType.STRING )
    public final static String ENDPOINT = messages.get( "Form.Endpoint.Label" );

    @AField( description = "Form.ExtractParams.Description", type = AField.AFieldType.ACTION )
    public final static String EXTRACTPARAMS = messages.get( "Form.ExtractParams.Label" );

    @AField( description = "Form.ParamsTable.Description", type = AField.AFieldType.COMPONENT )
    public final static String PARAMSTABLE = messages.get( "Form.ParamsTable.Label" );

    @AField( description = "Form.HttpMethod.Description", type = AField.AFieldType.ENUMERATION )
    public final static String HTTPMETHOD = messages.get( "Form.HttpMethod.Label" );
  }

  private class ExtractParamsAction extends AbstractAction
  {
    public ExtractParamsAction()
    {
      super( "Extract Params" );
    }

    public void actionPerformed( ActionEvent e )
    {
      try
      {
        String path = RestUtils.extractParams( dialog.getValue( Form.ENDPOINT ), params, true );
        dialog.setValue( Form.ENDPOINT, path );

        if( StringUtils.isNullOrEmpty( dialog.getValue( Form.STEPNAME ) ) )
        {
          setNameFromPath( path );
        }

        paramsTable.refresh();
      }
      catch( Exception e1 )
      {
        UISupport.showInfoMessage( "No parameters to extract!" );
      }
    }

    private void setNameFromPath( String path )
    {
      String[] items = path.split( "/" );

      if( items.length > 0 )
      {
        dialog.setValue( Form.STEPNAME, items[items.length - 1] );
      }
    }
  }

  public TestStepConfig createConfig( WsdlMonitorMessageExchange me, String stepName )
  {
    HttpRequestConfig testRequestConfig = HttpRequestConfig.Factory.newInstance();

    testRequestConfig.setName( stepName );
    testRequestConfig.setEncoding( "UTF-8" );
    testRequestConfig.setEndpoint( me.getEndpoint() );
    testRequestConfig.setMethod( me.getRequestMethod() );

    // set parameters
    RestParametersConfig parametersConfig = testRequestConfig.addNewParameters();
    Map<String, String> parametersMap = me.getHttpRequestParameters();
    List<RestParameterConfig> parameterConfigList = new ArrayList<RestParameterConfig>();
    for( String name : parametersMap.keySet() )
    {
      RestParameterConfig parameterConf = RestParameterConfig.Factory.newInstance();
      parameterConf.setName( name );
      parameterConf.setValue( parametersMap.get( name ) );
      parameterConfigList.add( parameterConf );
    }
    parametersConfig.setParameterArray( parameterConfigList.toArray( new RestParameterConfig[parametersMap.size()] ) );
    testRequestConfig.setParameters( parametersConfig );

    // String requestContent = me.getRequestContent();
    // testRequestConfig.addNewRequest().setStringValue( requestContent );

    TestStepConfig testStep = TestStepConfig.Factory.newInstance();
    testStep.setType( HTTPREQUEST );
    testStep.setConfig( testRequestConfig );
    testStep.setName( stepName );
    return testStep;
  }

}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.teststeps.registry.HttpRequestStepFactory$Form

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.