You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by su...@apache.org on 2011/01/06 08:02:16 UTC

svn commit: r1055764 - /synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/MediatorProperty.java

Author: supun
Date: Thu Jan  6 07:02:16 2011
New Revision: 1055764

URL: http://svn.apache.org/viewvc?rev=1055764&view=rev
Log:
adding scope to the properties

Modified:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/MediatorProperty.java

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/MediatorProperty.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/MediatorProperty.java?rev=1055764&r1=1055763&r2=1055764&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/MediatorProperty.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/MediatorProperty.java Thu Jan  6 07:02:16 2011
@@ -20,10 +20,14 @@
 package org.apache.synapse.mediators;
 
 import org.apache.synapse.MessageContext;
+import org.apache.synapse.SynapseException;
 import org.apache.synapse.config.xml.XMLConfigConstants;
+import org.apache.synapse.core.axis2.Axis2MessageContext;
 import org.apache.synapse.util.xpath.SynapseXPath;
 
 import javax.xml.namespace.QName;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * A mediator property is a name-value or name-expression pair which could be supplied
@@ -38,13 +42,62 @@ public class MediatorProperty {
     public static final QName ATT_NAME_Q  = new QName(XMLConfigConstants.NULL_NAMESPACE, "name");
     public static final QName ATT_VALUE_Q = new QName(XMLConfigConstants.NULL_NAMESPACE, "value");
     public static final QName ATT_EXPR_Q  = new QName(XMLConfigConstants.NULL_NAMESPACE, "expression");
+    public static final QName ATT_SCOPE_Q = new QName(XMLConfigConstants.NULL_NAMESPACE, "scope");
 
     private String name;
     private String value;
     private SynapseXPath expression;
 
+    private String scope;
+
     public MediatorProperty() {}
 
+    public void evaluate(MessageContext synCtx) {
+        String result;
+        if (value != null) {
+            result = value;
+        } else if (expression != null) {
+            result = expression.stringValueOf(synCtx);
+        } else {
+            throw new SynapseException("A value or expression must be specified");
+        }
+
+        if (scope == null || XMLConfigConstants.SCOPE_DEFAULT.equals(scope)) {
+            synCtx.setProperty(name, result);
+        } else if (XMLConfigConstants.SCOPE_AXIS2.equals(scope)) {
+            //Setting property into the  Axis2 Message Context
+            Axis2MessageContext axis2smc = (Axis2MessageContext) synCtx;
+            org.apache.axis2.context.MessageContext axis2MessageCtx =
+                    axis2smc.getAxis2MessageContext();
+            axis2MessageCtx.setProperty(name, result);
+        } else if (XMLConfigConstants.SCOPE_CLIENT.equals(scope)) {
+            //Setting property into the  Axis2 Message Context client options
+            Axis2MessageContext axis2smc = (Axis2MessageContext) synCtx;
+            org.apache.axis2.context.MessageContext axis2MessageCtx =
+                    axis2smc.getAxis2MessageContext();
+            axis2MessageCtx.getOptions().setProperty(name, result);
+        } else if (XMLConfigConstants.SCOPE_TRANSPORT.equals(scope)) {
+            //Setting Transport Headers
+            Axis2MessageContext axis2smc = (Axis2MessageContext) synCtx;
+            org.apache.axis2.context.MessageContext axis2MessageCtx =
+                    axis2smc.getAxis2MessageContext();
+            Object headers = axis2MessageCtx.getProperty(
+                    org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
+
+            if (headers != null && headers instanceof Map) {
+                Map headersMap = (Map) headers;
+                headersMap.put(name, result);
+            }
+            if (headers == null) {
+                Map headersMap = new HashMap();
+                headersMap.put(name, result);
+                axis2MessageCtx.setProperty(
+                        org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS,
+                        headersMap);
+            }
+        }
+    }
+
     public String getName() {
         return name;
     }
@@ -53,6 +106,14 @@ public class MediatorProperty {
         this.name = name;
     }
 
+    public String getScope() {
+        return scope;
+    }
+
+    public void setScope(String scope) {
+        this.scope = scope;
+    }
+
     public String getValue() {
         return value;
     }