Author: hiranya
Date: Mon Aug 23 07:39:22 2010
New Revision: 988013

URL: http://svn.apache.org/viewvc?rev=988013&view=rev
Log:
Multiple actions per rule support


Modified:
    
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteAction.java
    
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/xml/URLRewriteMediatorFactory.java
    
synapse/trunk/scratch/hiranya/urlrewrite/src/test/java/org/apache/synapse/mediators/URLRewriteTest.java

Modified: 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteAction.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteAction.java?rev=988013&r1=988012&r2=988013&view=diff
==============================================================================
--- 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteAction.java
 (original)
+++ 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteAction.java
 Mon Aug 23 07:39:22 2010
@@ -31,9 +31,14 @@ public class RewriteAction {
 
     private static final Log log = LogFactory.getLog(RewriteAction.class);
 
+    public static final int ACTION_SET = 0;
+    public static final int ACTION_APPEND = 1;
+    public static final int ACTION_PREPEND = 2;
+
     private String value;
     private SynapseXPath xpath;
     private int fragmentIndex = URLRewriteMediator.FULL_URI;
+    private int actionType = ACTION_SET;
 
     public void execute(Object[] fragments, MessageContext messageContext) {
         String result;
@@ -76,7 +81,19 @@ public class RewriteAction {
                 fragments[fragmentIndex] = -1;
             }
         } else {
-            fragments[fragmentIndex] = result;
+            switch (actionType) {
+                case ACTION_SET:
+                    fragments[fragmentIndex] = result;
+                    break;
+
+                case ACTION_PREPEND:
+                    fragments[fragmentIndex] = result + 
fragments[fragmentIndex];
+                    break;
+
+                case ACTION_APPEND:
+                    fragments[fragmentIndex] = fragments[fragmentIndex] + 
result;
+                    break;
+            }
         }
     }
 
@@ -103,4 +120,12 @@ public class RewriteAction {
     public void setXpath(SynapseXPath xpath) {
         this.xpath = xpath;
     }
+
+    public int getActionType() {
+        return actionType;
+    }
+
+    public void setActionType(int actionType) {
+        this.actionType = actionType;
+    }
 }

Modified: 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/xml/URLRewriteMediatorFactory.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/xml/URLRewriteMediatorFactory.java?rev=988013&r1=988012&r2=988013&view=diff
==============================================================================
--- 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/xml/URLRewriteMediatorFactory.java
 (original)
+++ 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/xml/URLRewriteMediatorFactory.java
 Mon Aug 23 07:39:22 2010
@@ -84,6 +84,7 @@ public class URLRewriteMediatorFactory e
     private RewriteAction parseAction(OMElement actionElt) {
         String value = actionElt.getAttributeValue(new QName("value"));
         String xpath = actionElt.getAttributeValue(new QName("xpath"));
+        String type = actionElt.getAttributeValue(new QName("type"));
 
         if (value == null && xpath == null) {
             handleException("value or xpath attribute is required on the 
action element");
@@ -124,6 +125,19 @@ public class URLRewriteMediatorFactory e
         } else {
             action.setFragmentIndex(URLRewriteMediator.FULL_URI);
         }
+
+        if (type != null) {
+            if ("set".equals(type)) {
+                action.setActionType(RewriteAction.ACTION_SET);
+            } else if ("append".equals(type)) {
+                action.setActionType(RewriteAction.ACTION_APPEND);
+            } else if ("prepend".equals(type)) {
+                action.setActionType(RewriteAction.ACTION_PREPEND);
+            } else {
+                handleException("Unknown action type: " + type);
+            }
+        }
+
         return action;
     }
 

Modified: 
synapse/trunk/scratch/hiranya/urlrewrite/src/test/java/org/apache/synapse/mediators/URLRewriteTest.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/urlrewrite/src/test/java/org/apache/synapse/mediators/URLRewriteTest.java?rev=988013&r1=988012&r2=988013&view=diff
==============================================================================
--- 
synapse/trunk/scratch/hiranya/urlrewrite/src/test/java/org/apache/synapse/mediators/URLRewriteTest.java
 (original)
+++ 
synapse/trunk/scratch/hiranya/urlrewrite/src/test/java/org/apache/synapse/mediators/URLRewriteTest.java
 Mon Aug 23 07:39:22 2010
@@ -35,6 +35,7 @@ import org.apache.axis2.addressing.Endpo
 
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.io.InputStream;
 
 public class URLRewriteTest extends TestCase {
 
@@ -58,7 +59,8 @@ public class URLRewriteTest extends Test
     }
 
     public void testMediateWithFactory() throws Exception {
-        String xml = "<rewrite 
xmlns=\"http://synapse.apache.org/ns/2010/04/configuration\";>" +
+        String xml =
+                "<rewrite 
xmlns=\"http://synapse.apache.org/ns/2010/04/configuration\";>" +
                 "    <rule>" +
                 "        <condition>" +
                 "            <match type=\"url\" fragment=\"host\" 
regex=\"wso2.org\"/>" +
@@ -67,6 +69,9 @@ public class URLRewriteTest extends Test
                 "        <action fragment=\"port\" value=\"9443\"/>" +
                 "        <action fragment=\"protocol\" value=\"https\"/>" +
                 "    </rule>" +
+                "    <rule>" +
+                "        <action fragment=\"path\" value=\"/esb\" 
type=\"prepend\"/>" +
+                "    </rule>" +
                 "</rewrite>";
         URLRewriteMediatorFactory fac = new URLRewriteMediatorFactory();
         Mediator mediator = fac.createMediator(AXIOMUtil.stringToOM(xml));
@@ -76,7 +81,7 @@ public class URLRewriteTest extends Test
         SynapseConfiguration config = new SynapseConfiguration();
         SynapseEnvironment env = new Axis2SynapseEnvironment(config);
         MessageContext synMc = new Axis2MessageContext(mc, config, env);
-        synMc.setProperty("prop1", "ref1");
+        synMc.setProperty("foo", "/esb");
         synMc.setTo(new 
EndpointReference("http://wso2.org:9763/services/MyService";));
 
         mediator.mediate(synMc);


Reply via email to