Package org.apache.sandesha2

Source Code of org.apache.sandesha2.RMMsgContext

/*
* Copyright  1999-2004 The Apache Software Foundation.
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*
*/

package org.apache.sandesha2;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.addressing.RelatesTo;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
import org.apache.sandesha2.client.SandeshaClientConstants;
import org.apache.sandesha2.util.SOAPAbstractFactory;
import org.apache.sandesha2.wsrm.IOMRMPart;

/**
* This class is used to hold a MessageContext within Sandesha. This is used to
* easily manupilate the properties of a MessageContext.
*/

public class RMMsgContext {

  private MessageContext msgContext;

  private HashMap rmMessageParts;

  private int messageType;

  private String rmNamespaceValue = null;
 
  private String rmSpecVersion = null;
 
  public RMMsgContext() {
    rmMessageParts = new HashMap();
    messageType = Sandesha2Constants.MessageTypes.UNKNOWN;
    rmNamespaceValue = Sandesha2Constants.DEFAULT_RM_NAMESPACE;
  }

  public void setMessageContext(MessageContext msgCtx) {
    this.msgContext = msgCtx;
  }

  public RMMsgContext(MessageContext ctx) {
    this();
    this.msgContext = ctx;
  }

  /**
   * To add a new SOAP envelope to the message. The generated envelope will belong
   * to the SOAP version of the MessageContext. We will be going through each MessagePart and adding it to the
   * envelope. In other words all the MessageParts that are available in the RMMsg will be added to the SOAP
   * envelope after this.
   *
   * @throws SandeshaException
   */
  public void addSOAPEnvelope() throws AxisFault {
    int SOAPVersion = Sandesha2Constants.SOAPVersion.v1_1;

    if (!msgContext.isSOAP11())
      SOAPVersion = Sandesha2Constants.SOAPVersion.v1_2;

    if (msgContext.getEnvelope() == null) {
      try {
        msgContext.setEnvelope(SOAPAbstractFactory.getSOAPFactory(
            SOAPVersion).getDefaultEnvelope());
      } catch (AxisFault e) {
        throw new SandeshaException(e.getMessage());
      }
    }

    SOAPEnvelope envelope = msgContext.getEnvelope();
    Iterator keys = rmMessageParts.keySet().iterator();
    while (keys.hasNext()) {
      Integer key = (Integer) keys.next();
      int partId = key.intValue();
     
      if (isMultiPart(partId)) {
        for (Iterator it=getMessageParts(partId);it.hasNext();) {
          IOMRMPart rmPart = (IOMRMPart) it.next();
          rmPart.toSOAPEnvelope(envelope);
        }
      } else {
        IOMRMPart rmPart = (IOMRMPart) rmMessageParts.get(key);
        rmPart.toSOAPEnvelope(envelope);
      }
    }
  }

  public int getMessageType() {
    return messageType;
  }
 
 
  /**
   * The message type can be used to easily identify what this message is.
   * Possible message types are given in the Constnts.MessageTypes interface.
   *
   * @param msgType
   */
  public void setMessageType(int msgType) {
    if (msgType >= 0 && msgType <= Sandesha2Constants.MessageTypes.MAX_MESSAGE_TYPE)
      this.messageType = msgType;
  }

 
  /**
   * Sets an IRMPart object to the MessageContext. Possible parts are give in the
   *
   *
   * @param partId
   * @param part
   */
  public void setMessagePart(int partId, IOMRMPart part) {
    if (partId >= 0 && partId <= Sandesha2Constants.MessageParts.MAX_MSG_PART_ID) {
      if (isMultiPart(partId)) {
        ArrayList partList = (ArrayList) rmMessageParts.get(new Integer (partId));
        if (partList==null) {
          partList = new ArrayList ();
          rmMessageParts.put(new Integer (partId),partList);
        }
        partList.add(part);
      } else {
        rmMessageParts.put(new Integer(partId), part);
      }
    }
  }
 

  public IOMRMPart getMessagePart(int partId) throws SandeshaException {
    if (isMultiPart(partId)) {
      String message = "It is possible for a multiple MessageParts of this type to exit. Please call the 'getMessageParts' method";
      throw new SandeshaException (message);
    }
   
    return (IOMRMPart) rmMessageParts.get(new Integer(partId));
  }
 
  public Iterator getMessageParts (int partId) {
    Object obj = rmMessageParts.get(new Integer (partId));
    if (obj==null)
      return new ArrayList().iterator();
   
    if (obj instanceof ArrayList) {
      return ((ArrayList) obj).iterator();
    } else {
      ArrayList arr = new ArrayList ();
      arr.add(obj);
      return arr.iterator();
    }
  }
 
  public void removeMessageParts (int messageType) {
    rmMessageParts.remove (new Integer (messageType));
  }
 
  //checks weather there can be multiple elements of these parts,
  //if so getMessageParts method has to be called to get a ArrayList of parts..
  public boolean isMultiPart (int messagePartId) {
    if (messagePartId==Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT||
      messagePartId==Sandesha2Constants.MessageParts.ACK_REQUEST)
      return true;
   
    return false;
  }

  public EndpointReference getFrom() {
    return msgContext.getFrom();
  }

  public EndpointReference getTo() {
    return msgContext.getTo();
  }

  public EndpointReference getReplyTo() {
    return msgContext.getReplyTo();
  }

  public RelatesTo getRelatesTo() {
    return msgContext.getRelatesTo();
  }

  public String getMessageId() {
    return msgContext.getMessageID();
  }

  public void setFaultTo(EndpointReference epr) {
    msgContext.setFaultTo(epr);
  }

  public EndpointReference getFaultTo() {
    return msgContext.getFaultTo();
  }

  public SOAPEnvelope getSOAPEnvelope() {
    return msgContext.getEnvelope();
  }

  public void setSOAPEnvelop(SOAPEnvelope envelope) throws SandeshaException {

    try {
      msgContext.setEnvelope(envelope);
    } catch (AxisFault e) {
      throw new SandeshaException(e.getMessage());
    }
  }

  public void setFrom(EndpointReference epr) {
    msgContext.setFrom(epr);
  }

  public void setTo(EndpointReference epr) {
    msgContext.setTo(epr);
  }

  public void setReplyTo(EndpointReference epr) {
    msgContext.setReplyTo(epr);
  }

  public void setMessageId(String messageId) {
    msgContext.setMessageID(messageId);
  }

  public void setAction(String action) {
    msgContext.setWSAAction(action);
  }

  public void addRelatesTo(RelatesTo relatesTo) {
    msgContext.addRelatesTo(relatesTo);
  }

  public void setWSAAction(String URI) {
    msgContext.setWSAAction(URI);
  }

  public String getWSAAction() {
    return msgContext.getWSAAction();
  }

  public MessageContext getMessageContext() {
    return msgContext;
  }

  public Object getProperty(String key) {
    if (msgContext == null)
      return null;

    return msgContext.getProperty(key);
  }

  public boolean setProperty(String key, Object val) {
    if (msgContext == null)
      return false;

    msgContext.setProperty(key, val);
    return true;
  }

  public ConfigurationContext getConfigurationContext() {
    if (msgContext == null)
      return null;

    return msgContext.getConfigurationContext();
  }

 
  public void setSOAPAction(String SOAPAction) {
    msgContext.setSoapAction(SOAPAction);
  }
 
  public void pause () {
    if (msgContext!=null)
      msgContext.pause();
  }
 
  public void setPaused (boolean pause) {
    if (msgContext!=null)
      msgContext.setPaused(pause);
  }

  public String getRMNamespaceValue() {
    return rmNamespaceValue;
  }

  public void setRMNamespaceValue(String rmNamespaceValue) {
    this.rmNamespaceValue = rmNamespaceValue;
   
    if (Sandesha2Constants.SPEC_2005_02.NS_URI.equals(rmNamespaceValue)) {
      rmSpecVersion = Sandesha2Constants.SPEC_VERSIONS.v1_0;
    } else if (Sandesha2Constants.SPEC_2007_02.NS_URI.equals(rmNamespaceValue)) {
      rmSpecVersion = Sandesha2Constants.SPEC_VERSIONS.v1_1;
    }
  }
 
  /**
   * Gives the RM version.
   * @return  Can be either <Sandesha2Constants.SPEC_VERSIONS.v1_1> or <Sandesha2Constants.SPEC_VERSIONS.v1_0>
   */
  public String getRMSpecVersion () {
    if (rmSpecVersion==null) {
      //this may hv been set in the Options object.
      if (msgContext!=null && msgContext.getOptions()!=null)
      rmSpecVersion = (String) msgContext.getOptions().getProperty(SandeshaClientConstants.RM_SPEC_VERSION);
    }
   
    return rmSpecVersion;
  }
 
  public void setFlow (int flow) {
    msgContext.setFLOW(flow);
  }
 
  public int getFlow () {
    return msgContext.getFLOW();
  }

  /**
   * This will return the sequenceId if it could be derived from the SOAP envelope, in the
   * message initiation.
   *
   * @return
   */
  public String getGeneratedSequenceId () {
    return (String) msgContext.getProperty(Sandesha2Constants.MessageContextProperties.SEQUENCE_ID);
  }
}
TOP

Related Classes of org.apache.sandesha2.RMMsgContext

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.