Package com.eviware.soapui.impl.support.http

Source Code of com.eviware.soapui.impl.support.http.HttpRequest

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

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

import javax.xml.namespace.QName;

import org.apache.xmlbeans.SchemaGlobalElement;
import org.apache.xmlbeans.SchemaType;

import com.eviware.soapui.config.AttachmentConfig;
import com.eviware.soapui.config.HttpRequestConfig;
import com.eviware.soapui.impl.rest.RestRequest.ParameterMessagePart;
import com.eviware.soapui.impl.rest.RestRequestInterface;
import com.eviware.soapui.impl.rest.RestRequestInterface.RequestMethod;
import com.eviware.soapui.impl.rest.support.RestParamProperty;
import com.eviware.soapui.impl.rest.support.RestParamsPropertyHolder;
import com.eviware.soapui.impl.rest.support.XmlBeansRestParamsTestPropertyHolder;
import com.eviware.soapui.impl.support.AbstractHttpOperation;
import com.eviware.soapui.impl.support.AbstractHttpRequest;
import com.eviware.soapui.impl.wsdl.HttpAttachmentPart;
import com.eviware.soapui.impl.wsdl.WsdlSubmit;
import com.eviware.soapui.impl.wsdl.submit.RequestTransportRegistry;
import com.eviware.soapui.impl.wsdl.submit.transports.http.HttpResponse;
import com.eviware.soapui.impl.wsdl.support.jms.header.JMSHeaderConfig;
import com.eviware.soapui.impl.wsdl.support.jms.property.JMSPropertiesConfig;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.iface.MessagePart;
import com.eviware.soapui.model.iface.MessagePart.ContentPart;
import com.eviware.soapui.model.iface.SubmitContext;
import com.eviware.soapui.model.propertyexpansion.PropertyExpander;
import com.eviware.soapui.model.propertyexpansion.PropertyExpansion;
import com.eviware.soapui.model.propertyexpansion.PropertyExpansionsResult;
import com.eviware.soapui.model.testsuite.TestProperty;
import com.eviware.soapui.model.testsuite.TestPropertyListener;
import com.eviware.soapui.support.StringUtils;
import com.eviware.soapui.support.UISupport;

public class HttpRequest extends AbstractHttpRequest<HttpRequestConfig> implements
    HttpRequestInterface<HttpRequestConfig>
{
  private XmlBeansRestParamsTestPropertyHolder params;

  protected HttpRequest( HttpRequestConfig config, boolean forLoadTest )
  {
    super( config, null, "/http_request.gif", forLoadTest );

    if( config.getParameters() == null )
      config.addNewParameters();

    params = new XmlBeansRestParamsTestPropertyHolder( this, config.getParameters() );
  }

  public TestProperty addProperty( String name )
  {
    return params.addProperty( name );
  }

  public void moveProperty( String propertyName, int targetIndex )
  {
    params.moveProperty( propertyName, targetIndex );
  }

  public TestProperty removeProperty( String propertyName )
  {
    return params.removeProperty( propertyName );
  }

  public boolean renameProperty( String name, String newName )
  {
    return params.renameProperty( name, newName );
  }

  @Override
  public void addTestPropertyListener( TestPropertyListener listener )
  {
    params.addTestPropertyListener( listener );
  }

  public ModelItem getModelItem()
  {
    return this;
  }

  public String getMediaType()
  {
    return getConfig().getMediaType() != null ? getConfig().getMediaType() : "application/xml";
  }

  public String getPath()
  {
    return getEndpoint();
  }

  public boolean hasRequestBody()
  {
    RestRequestInterface.RequestMethod method = getMethod();
    return method == RestRequestInterface.RequestMethod.POST || method == RestRequestInterface.RequestMethod.PUT;
  }

  @Override
  public RestParamsPropertyHolder getParams()
  {
    return params;
  }

  public Map<String, TestProperty> getProperties()
  {
    return params.getProperties();
  }

  public RestParamProperty getProperty( String name )
  {
    return params.getProperty( name );
  }

  public RestParamProperty getPropertyAt( int index )
  {
    return params.getPropertyAt( index );
  }

  public int getPropertyCount()
  {
    return params.getPropertyCount();
  }

  public String[] getPropertyNames()
  {
    return params.getPropertyNames();
  }

  public String getPropertyValue( String name )
  {
    return params.getPropertyValue( name );
  }

  public boolean isPostQueryString()
  {
    return hasRequestBody() && getConfig().getPostQueryString();
  }

  public boolean hasProperty( String name )
  {
    return params.hasProperty( name );
  }

  public void setPropertyValue( String name, String value )
  {
    params.setPropertyValue( name, value );
  }

  public void setMediaType( String mediaType )
  {
    String old = getMediaType();
    getConfig().setMediaType( mediaType );
    notifyPropertyChanged( "mediaType", old, mediaType );
  }

  public void setPostQueryString( boolean b )
  {
    boolean old = isPostQueryString();
    getConfig().setPostQueryString( b );
    notifyPropertyChanged( "postQueryString", old, b );

    if( !"multipart/form-data".equals( getMediaType() ) )
    {
      setMediaType( b ? "application/x-www-form-urlencoded" : getMediaType() );
    }
  }

  public void setMethod( RequestMethod method )
  {
    RestRequestInterface.RequestMethod old = getMethod();
    getConfig().setMethod( method.toString() );
    setIcon( UISupport.createImageIcon( "/" + method.toString().toLowerCase() + "_method.gif" ) );
    notifyPropertyChanged( "method", old, method );
  }

  public void setDownloadIncludedResources( boolean downloadIncludedResources )
  {
    boolean old = getDownloadIncludedResources();
    getConfig().setDownloadIncludedResources( downloadIncludedResources );
    notifyPropertyChanged( "downloadIncludedResources", old, downloadIncludedResources );
  }

  public boolean getDownloadIncludedResources()
  {
    return getConfig().getDownloadIncludedResources();
  }

  public String getPropertiesLabel()
  {
    return "HTTP Params";
  }

  public void removeTestPropertyListener( TestPropertyListener listener )
  {
    params.removeTestPropertyListener( listener );
  }

  public HttpAttachmentPart getAttachmentPart( String partName )
  {
    return null;
  }

  public HttpAttachmentPart[] getDefinedAttachmentParts()
  {
    return new HttpAttachmentPart[0];
  }

  @Override
  public RestRequestInterface.RequestMethod getMethod()
  {
    String method = getConfig().getMethod();
    return method == null ? null : RestRequestInterface.RequestMethod.valueOf( method );
  }

  public MessagePart[] getRequestParts()
  {
    List<MessagePart> result = new ArrayList<MessagePart>();

    for( int c = 0; c < getPropertyCount(); c++ )
    {
      result.add( new ParameterMessagePart( getPropertyAt( c ) ) );
    }

    if( getMethod() == RestRequestInterface.RequestMethod.POST
        || getMethod() == RestRequestInterface.RequestMethod.PUT )
    {
      result.add( new HttpContentPart() );
    }

    return result.toArray( new MessagePart[result.size()] );
  }

  public MessagePart[] getResponseParts()
  {
    return new MessagePart[0];
  }

  public String getResponseContentAsXml()
  {
    HttpResponse response = getResponse();
    if( response == null )
      return null;

    return response.getContentAsXml();
  }

  public WsdlSubmit<HttpRequest> submit( SubmitContext submitContext, boolean async ) throws SubmitException
  {
    String endpoint = PropertyExpander.expandProperties( submitContext, getEndpoint() );

    if( StringUtils.isNullOrEmpty( endpoint ) )
    {
      UISupport.showErrorMessage( "Missing endpoint for request [" + getName() + "]" );
      return null;
    }

    try
    {
      WsdlSubmit<HttpRequest> submitter = new WsdlSubmit<HttpRequest>( this, getSubmitListeners(),
          RequestTransportRegistry.getTransport( endpoint, submitContext ) );
      submitter.submitRequest( submitContext, async );
      return submitter;
    }
    catch( Exception e )
    {
      throw new SubmitException( e.toString() );
    }
  }

  public void updateConfig( HttpRequestConfig request )
  {
    setConfig( request );
    if( params == null )
      params = new XmlBeansRestParamsTestPropertyHolder( this, request.getParameters() );
    else
      params.resetPropertiesConfig( request.getParameters() );

    List<AttachmentConfig> attachmentConfigs = getConfig().getAttachmentList();
    for( int i = 0; i < attachmentConfigs.size(); i++ )
    {
      AttachmentConfig config = attachmentConfigs.get( i );
      getAttachmentsList().get( i ).updateConfig( config );
    }

    if( jmsHeaderConfig != null )
    {
      jmsHeaderConfig.setJMSHeaderConfConfig( request.getJmsConfig() );
    }

    if( jmsPropertyConfig != null )
    {
      jmsPropertyConfig.setJmsPropertyConfConfig( request.getJmsPropertyConfig() );
    }

  }

  public AbstractHttpOperation getOperation()
  {
    return null;
  }

  public class HttpContentPart extends ContentPart implements MessagePart
  {
    @Override
    public SchemaGlobalElement getPartElement()
    {
      return null;
    }

    @Override
    public QName getPartElementName()
    {
      return null;
    }

    @Override
    public SchemaType getSchemaType()
    {
      return null;
    }

    public String getDescription()
    {
      return null;
    }

    public String getName()
    {
      return null;
    }

    public String getMediaType()
    {
      return getConfig().getMediaType();
    }
  }

  public List<TestProperty> getPropertyList()
  {
    return params.getPropertyList();
  }

  private JMSHeaderConfig jmsHeaderConfig;
  private JMSPropertiesConfig jmsPropertyConfig;

  public JMSHeaderConfig getJMSHeaderConfig()
  {
    if( jmsHeaderConfig == null )
    {
      if( !getConfig().isSetJmsConfig() )
      {
        getConfig().addNewJmsConfig();
      }
      jmsHeaderConfig = new JMSHeaderConfig( getConfig().getJmsConfig(), this );
    }
    return jmsHeaderConfig;
  }

  public JMSPropertiesConfig getJMSPropertiesConfig()
  {
    if( jmsPropertyConfig == null )
    {
      if( !getConfig().isSetJmsPropertyConfig() )
      {
        getConfig().addNewJmsPropertyConfig();
      }
      jmsPropertyConfig = new JMSPropertiesConfig( getConfig().getJmsPropertyConfig(), this );
    }
    return jmsPropertyConfig;
  }

  public void notifyPropertyChanged( String responseContentProperty, String oldContent, String responseContent )
  {
    notifyPropertyChanged( responseContentProperty, ( Object )oldContent, ( Object )responseContent );
  }

  @Override
  public String getMultiValueDelimiter()
  {
    return getConfig().getMultiValueDelimiter();
  }

  public void setMultiValueDelimiter( String delimiter )
  {
    String old = getMultiValueDelimiter();
    getConfig().setMultiValueDelimiter( delimiter );

    notifyPropertyChanged( "multiValueDelimiter", old, delimiter );
  }

  public PropertyExpansion[] getPropertyExpansions()
  {
    PropertyExpansionsResult result = new PropertyExpansionsResult( this, this );
    result.addAll( super.getPropertyExpansions() );
    result.addAll( params.getPropertyExpansions() );

    return result.toArray();
  }
 
  public boolean isSendEmptyParameters()
  {
    return getSettings().getBoolean( "sendEmptyParameters" );
  }
 
 
  public void setSendEmptyParameters( boolean sendEmptyParameters )
  {
    getSettings().setBoolean( "sendEmptyParameters", sendEmptyParameters );
  }
}
TOP

Related Classes of com.eviware.soapui.impl.support.http.HttpRequest

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.