Package com.eviware.soapui.impl.wsdl.submit.transports.jms

Source Code of com.eviware.soapui.impl.wsdl.submit.transports.jms.JMSEndpoint

/*
*  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.submit.transports.jms;

import com.eviware.soapui.SoapUI;
import com.eviware.soapui.model.iface.Interface;
import com.eviware.soapui.model.iface.Request;
import com.eviware.soapui.model.iface.SubmitContext;
import com.eviware.soapui.model.propertyexpansion.PropertyExpander;

public class JMSEndpoint
{
  public static final String JMS_OLD_ENDPOINT_SEPARATOR = "/";
  public static final String JMS_ENDPOINT_SEPARATOR = "::";
  public static final String QUEUE_ENDPOINT_PREFIX = "queue_";
  public static final String TOPIC_ENDPOINT_PREFIX = "topic_";
  public static final String JMS_EMPTY_DESTIONATION = "-";
  public static final String JMS_ENDPIONT_PREFIX = "jms://";
  Request request;
  SubmitContext submitContext;
  String[] parameters;
  String sessionName;
  String send;
  String receive;

  public JMSEndpoint( Request request, SubmitContext submitContext )
  {
    this.request = request;
    this.submitContext = submitContext;
    parameters = extractEndpointParameters( request, submitContext );
    sessionName = getEndpointParameter( 0 );
    send = getEndpointParameter( 1 );
    receive = getEndpointParameter( 2 );
  }

  public JMSEndpoint( String sessionName, String send, String receive )
  {
    this.sessionName = sessionName;
    this.send = send;
    this.receive = receive;
  }

  public JMSEndpoint( String jmsEndpointString )
  {
    parameters = jmsEndpointString.replaceFirst( JMS_ENDPIONT_PREFIX, "" ).split( JMS_ENDPOINT_SEPARATOR );
    sessionName = getEndpointParameter( 0 );
    send = getEndpointParameter( 1 );
    receive = getEndpointParameter( 2 );
  }

  public static String[] extractEndpointParameters( Request request, SubmitContext context )
  {
    resolveOldEndpointPattern( request );

    String endpoint = PropertyExpander.expandProperties( context, request.getEndpoint() );
    String[] parameters = endpoint.replaceFirst( JMS_ENDPIONT_PREFIX, "" ).split( JMS_ENDPOINT_SEPARATOR );
    return parameters;
  }

  private static void resolveOldEndpointPattern( Request request )
  {
    String oldEndpoint = request.getEndpoint();
    if( oldEndpoint.contains( "/queue_" ) || oldEndpoint.contains( "/topic_" ) )
    {
      String newEndpoint = request.getEndpoint()
          .replaceAll( JMS_OLD_ENDPOINT_SEPARATOR + "queue_", JMS_ENDPOINT_SEPARATOR + "queue_" )
          .replaceAll( JMS_OLD_ENDPOINT_SEPARATOR + "topic_", JMS_ENDPOINT_SEPARATOR + "topic_" )
          .replaceAll( JMS_OLD_ENDPOINT_SEPARATOR + "-", JMS_ENDPOINT_SEPARATOR + "-" );

      request.setEndpoint( newEndpoint );

      refreshEndpointList( request, oldEndpoint, newEndpoint );

      SoapUI.log( "JMS endpoint resolver changed endpoint pattern from " + oldEndpoint + "to " + newEndpoint );
    }
  }

  private static void refreshEndpointList( Request request, String oldEndpoint, String newEndpoint )
  {
    Interface iface = request.getOperation().getInterface();
    for( String endpoint : iface.getEndpoints() )
    {
      if( endpoint.equals( oldEndpoint ) )
      {
        iface.changeEndpoint( endpoint, newEndpoint );
      }
    }
  }

  private String getEndpointParameter( int i )
  {
    if( i > parameters.length - 1 )
      return null;
    String stripParameter = PropertyExpander.expandProperties( submitContext, parameters[i] )
        .replaceFirst( QUEUE_ENDPOINT_PREFIX, "" ).replaceFirst( TOPIC_ENDPOINT_PREFIX, "" );
    return stripParameter;
  }

  public String getSessionName()
  {
    return sessionName;
  }

  public String getSend()
  {
    return send;
  }

  public String getReceive()
  {
    return receive;
  }
}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.submit.transports.jms.JMSEndpoint

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.