Author: hiranya
Date: Thu Aug 26 08:04:58 2010
New Revision: 989517

URL: http://svn.apache.org/viewvc?rev=989517&view=rev
Log:
Refactoring


Added:
    
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URIFragments.java
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/RewriteRule.java
    
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URLRewriteMediator.java
    
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/config/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=989517&r1=989516&r2=989517&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
 Thu Aug 26 08:04:58 2010
@@ -21,7 +21,6 @@ package org.apache.synapse.mediators;
 
 import org.apache.synapse.util.xpath.SynapseXPath;
 import org.apache.synapse.MessageContext;
-import org.apache.synapse.SynapseException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -41,10 +40,12 @@ public class RewriteAction {
     private String value;
     private SynapseXPath xpath;
     private String regex;
-    private int fragmentIndex = URLRewriteMediator.FULL_URI;
+    private int fragmentIndex = URIFragments.FULL_URI;
     private int actionType = ACTION_SET;
 
-    public void execute(Object[] fragments, MessageContext messageContext) {
+    public void execute(URIFragments fragments,
+                        MessageContext messageContext) throws 
URISyntaxException {
+
         String result;
         if (xpath != null) {
             result = xpath.stringValueOf(messageContext);
@@ -52,66 +53,41 @@ public class RewriteAction {
             result = value;
         }
 
-        if (fragmentIndex == URLRewriteMediator.FULL_URI) {
-            try {
-                URI uri;
-                if (result != null) {
-                    uri = new URI(result);
-                    if (log.isTraceEnabled()) {
-                        log.trace("Setting the URI to: " + result);
-                    }
-                } else {
-                    uri = new URI("");
+        if (fragmentIndex == URIFragments.FULL_URI) {
+            URI uri;
+            if (result != null) {
+                uri = new URI(result);
+                if (log.isTraceEnabled()) {
+                    log.trace("Setting the URI to: " + result);
                 }
-
-                fragments[URLRewriteMediator.PROTOCOL] = uri.getScheme();
-                fragments[URLRewriteMediator.USER_INFO] = uri.getUserInfo();
-                fragments[URLRewriteMediator.HOST] = uri.getHost();
-                fragments[URLRewriteMediator.PORT] = uri.getPort();
-                // The uri.getPath() return the empty string for empty URIs
-                // We are better off setting it to null
-                fragments[URLRewriteMediator.PATH] = "".equals(uri.getPath()) 
? null : uri.getPath();
-                fragments[URLRewriteMediator.QUERY] = uri.getQuery();
-                fragments[URLRewriteMediator.REF] = uri.getFragment();
-
-            } catch (URISyntaxException e) {
-                String msg = "Error while setting the URL to: " + result;
-                log.error(msg, e);
-                throw new SynapseException(msg, e);
+            } else {
+                uri = new URI("");
             }
-        } else if (fragmentIndex == URLRewriteMediator.PORT) {
+
+            fragments.setFragments(uri);
+
+        } else if (fragmentIndex == URIFragments.PORT) {
             // When setting the port we must first convert the value into an 
integer
             if (result != null) {
-                fragments[fragmentIndex] = Integer.parseInt(result);
+                fragments.setPort(Integer.parseInt(result));
             } else {
-                fragments[fragmentIndex] = -1;
+                fragments.setPort(-1);
             }
         } else {
             String str;
-            switch (actionType) {
-                case ACTION_PREPEND:
-                    str = result +
-                            (fragments[fragmentIndex] != null ? 
fragments[fragmentIndex] : "");
-                    break;
-
-                case ACTION_APPEND:
-                    str = (fragments[fragmentIndex] != null ? 
fragments[fragmentIndex] : "") +
-                                    result;
-                    break;
-
-                case ACTION_REPLACE:
-                    str = (fragments[fragmentIndex] != null ? (String) 
fragments[fragmentIndex] : "");
-                    str = str.replaceAll(regex, result);
-                    break;
-
-                case ACTION_REMOVE:
-                    str = null;
-                    break;
+            String currentValue = fragments.getStringFragment(fragmentIndex);
+            if (currentValue == null) {
+                currentValue = "";
+            }
 
-                default:
-                    str = result;
+            switch (actionType) {
+                case ACTION_PREPEND : str = result + currentValue; break;
+                case ACTION_APPEND  : str = currentValue + result; break;
+                case ACTION_REPLACE : str = currentValue.replaceAll(regex, 
result); break;
+                case ACTION_REMOVE  : str = null; break;
+                default             : str = result;
             }            
-            fragments[fragmentIndex] = str;
+            fragments.setStringFragment(fragmentIndex, str);
         }
     }
 

Modified: 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteRule.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteRule.java?rev=989517&r1=989516&r2=989517&view=diff
==============================================================================
--- 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteRule.java
 (original)
+++ 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteRule.java
 Thu Aug 26 08:04:58 2010
@@ -23,14 +23,12 @@ import org.apache.synapse.commons.evalua
 import org.apache.synapse.commons.evaluators.EvaluatorContext;
 import org.apache.synapse.commons.evaluators.EvaluatorException;
 import org.apache.synapse.MessageContext;
-import org.apache.synapse.SynapseException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import java.util.Map;
 import java.util.List;
 import java.util.ArrayList;
-import java.net.URI;
 import java.net.URISyntaxException;
 
 public class RewriteRule {
@@ -40,11 +38,11 @@ public class RewriteRule {
     private Evaluator condition;
     private List<RewriteAction> actions = new ArrayList<RewriteAction>();
 
-    public void rewrite(Object[] fragments, MessageContext messageContext,
-                        Map<String,String> headers) {
+    public void rewrite(URIFragments fragments, MessageContext messageContext,
+                        Map<String,String> headers) throws URISyntaxException {
 
         if (condition != null) {
-            String uriString = getURIString(fragments);
+            String uriString = fragments.toURIString();
             EvaluatorContext ctx = new EvaluatorContext(uriString, headers);
             if (log.isTraceEnabled()) {
                 log.trace("Evaluating condition with URI: " + uriString);
@@ -83,21 +81,4 @@ public class RewriteRule {
     public void addRewriteAction(RewriteAction action) {
         actions.add(action);
     }
-
-    private String getURIString(Object[] fragments) {
-        try {
-            return new URI(
-                    (String) fragments[URLRewriteMediator.PROTOCOL],
-                    (String) fragments[URLRewriteMediator.USER_INFO],
-                    (String) fragments[URLRewriteMediator.HOST],
-                    (Integer) fragments[URLRewriteMediator.PORT],
-                    (String) fragments[URLRewriteMediator.PATH],
-                    (String) fragments[URLRewriteMediator.QUERY],
-                    (String) fragments[URLRewriteMediator.REF]).toString();
-        } catch (URISyntaxException e) {
-            String msg = "Error while constructing the URI from fragments";
-            log.error(msg, e);
-            throw new SynapseException(msg, e);
-        }
-    }
 }

Added: 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URIFragments.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URIFragments.java?rev=989517&view=auto
==============================================================================
--- 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URIFragments.java
 (added)
+++ 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URIFragments.java
 Thu Aug 26 08:04:58 2010
@@ -0,0 +1,88 @@
+/*
+ *  Copyright (c) 2005-2008, WSO2 Inc. (http://www.wso2.org) All Rights 
Reserved.
+ *
+ *  WSO2 Inc. licenses this file to you 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.synapse.mediators;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+public class URIFragments {
+
+    public static final int FULL_URI    = -2;
+    public static final int PORT        = -1;
+
+    public static final int PROTOCOL    = 0;
+    public static final int USER_INFO   = 1;
+    public static final int HOST        = 2;
+    public static final int PATH        = 3;
+    public static final int QUERY       = 4;
+    public static final int REF         = 5;
+
+    private int port = -1;
+    private String[] fragments = new String[6];
+
+    public URIFragments() {
+
+    }
+
+    public URIFragments(URI uri) {
+        setFragments(uri);
+    }
+
+    public void setFragments(URI uri) {
+        fragments[PROTOCOL] = uri.getScheme();
+        fragments[USER_INFO] = uri.getUserInfo();
+        fragments[HOST] = uri.getHost();
+        fragments[PATH] = ("".equals(uri.getPath()) ? null : uri.getPath());
+        fragments[QUERY] = uri.getQuery();
+        fragments[REF] = uri.getFragment();
+        port = uri.getPort();
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public void setStringFragment(int index, String value) {
+        fragments[index] = value;
+    }
+
+    public String getStringFragment(int index) {
+        return fragments[index];
+    }
+
+    public URI toURI() throws URISyntaxException {
+        return new URI(
+                fragments[PROTOCOL],
+                fragments[USER_INFO],
+                fragments[HOST],
+                port,
+                fragments[PATH],
+                fragments[QUERY],
+                fragments[REF]);
+    }
+
+    public String toURIString() throws URISyntaxException {
+        return toURI().toString();
+    }
+}

Modified: 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URLRewriteMediator.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URLRewriteMediator.java?rev=989517&r1=989516&r2=989517&view=diff
==============================================================================
--- 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URLRewriteMediator.java
 (original)
+++ 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URLRewriteMediator.java
 Thu Aug 26 08:04:58 2010
@@ -32,72 +32,56 @@ import java.util.ArrayList;
 
 public class URLRewriteMediator extends AbstractMediator {
 
-    public static final int FULL_URI    = -1;
-    public static final int PROTOCOL    = 0;
-    public static final int USER_INFO   = 1;
-    public static final int HOST        = 2;
-    public static final int PORT        = 3;
-    public static final int PATH        = 4;
-    public static final int QUERY       = 5;
-    public static final int REF         = 6;
-
     private List<RewriteRule> rules = new ArrayList<RewriteRule>();
     private String inputProperty;
     private String outputProperty;
 
     public boolean mediate(MessageContext messageContext) {
-        Object[] fragments = newFragmentSet();
-        URI uri;
-
-        String address = getInputAddress(messageContext);
-        if (address != null) {
-            try {
-                uri = new URI(address);
-                fragments[0] = uri.getScheme();
-                fragments[1] = uri.getUserInfo();
-                fragments[2] = uri.getHost();
-                fragments[3] = uri.getPort();
-                fragments[4] = uri.getPath();
-                fragments[5] = uri.getQuery();
-                fragments[6] = uri.getFragment();
-
-            } catch (URISyntaxException e) {
-                handleException("Malformed URI in the input address field", e, 
messageContext);
-                return false;
-            }
+        URIFragments fragments;
+        URI inputURI = getInputAddress(messageContext);
+        if (inputURI != null) {
+            fragments = new URIFragments(inputURI);
+        } else {
+            fragments = new URIFragments();
         }
 
         Map<String, String> headers = getHeaders(messageContext);
-        for (RewriteRule r : rules) {
-            r.rewrite(fragments, messageContext, headers);
-        }
 
-        uri = getURI(fragments, messageContext);
+        try {
+            for (RewriteRule r : rules) {
+                r.rewrite(fragments, messageContext, headers);
+            }
 
-        if (outputProperty != null) {
-            messageContext.setProperty(outputProperty, uri.toString());
-        } else {
-            messageContext.setTo(new EndpointReference(uri.toString()));
+            if (outputProperty != null) {
+                messageContext.setProperty(outputProperty, 
fragments.toURIString());
+            } else {
+                messageContext.setTo(new 
EndpointReference(fragments.toURIString()));
+            }
+        } catch (URISyntaxException e) {
+            handleException("Error while constructing a URI from the 
fragments", e, messageContext);
         }
         return true;
     }
 
-    private String getInputAddress(MessageContext messageContext) {
+    private URI getInputAddress(MessageContext messageContext) {
+        String uriString = null;
         if (inputProperty != null) {
             Object prop = messageContext.getProperty(inputProperty);
             if (prop != null && prop instanceof String) {
-                return (String) prop;
+                uriString = (String) prop;
             }
         } else if (messageContext.getTo() != null) {
-            return messageContext.getTo().getAddress();
+            uriString = messageContext.getTo().getAddress();
         }
-        return null;
-    }
 
-    private Object[] newFragmentSet() {
-        return new Object[] {
-            null, null, null, -1, null, null, null
-        };
+        if (uriString != null) {
+            try {
+                return new URI(uriString);
+            } catch (URISyntaxException e) {
+                handleException("Malformed input URI: " + uriString, e, 
messageContext);
+            }
+        }
+        return null;
     }
 
     private Map<String, String> getHeaders(MessageContext synCtx) {
@@ -119,22 +103,6 @@ public class URLRewriteMediator extends 
         return evaluatorHeaders;
     }
 
-    private URI getURI(Object[] fragments, MessageContext messageContext) {
-        try {
-            return new URI(
-                    (String) fragments[0],
-                    (String) fragments[1],
-                    (String) fragments[2],
-                    (Integer) fragments[3],
-                    (String) fragments[4],
-                    (String) fragments[5],
-                    (String) fragments[6]);
-        } catch (URISyntaxException e) {
-            handleException("Error while constructing the URI from fragments", 
e, messageContext);
-        }
-        return null;
-    }
-
     public void addRule(RewriteRule rule) {
         rules.add(rule);
     }

Modified: 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/config/xml/URLRewriteMediatorFactory.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/config/xml/URLRewriteMediatorFactory.java?rev=989517&r1=989516&r2=989517&view=diff
==============================================================================
--- 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/config/xml/URLRewriteMediatorFactory.java
 (original)
+++ 
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/config/xml/URLRewriteMediatorFactory.java
 Thu Aug 26 08:04:58 2010
@@ -30,6 +30,7 @@ import org.apache.synapse.commons.evalua
 import org.apache.synapse.mediators.URLRewriteMediator;
 import org.apache.synapse.mediators.RewriteRule;
 import org.apache.synapse.mediators.RewriteAction;
+import org.apache.synapse.mediators.URIFragments;
 import org.apache.axiom.om.OMElement;
 import org.jaxen.JaxenException;
 
@@ -115,34 +116,29 @@ public class URLRewriteMediatorFactory e
         String fragment = actionElt.getAttributeValue(new QName("fragment"));
         if (fragment != null) {
             if ("protocol".equals(fragment)) {
-                action.setFragmentIndex(URLRewriteMediator.PROTOCOL);
+                action.setFragmentIndex(URIFragments.PROTOCOL);
             } else if ("user".equals(fragment)) {
-                action.setFragmentIndex(URLRewriteMediator.USER_INFO);
+                action.setFragmentIndex(URIFragments.USER_INFO);
             } else if ("host".equals(fragment)) {
-                action.setFragmentIndex(URLRewriteMediator.HOST);
+                action.setFragmentIndex(URIFragments.HOST);
             } else if ("port".equals(fragment)) {
-                action.setFragmentIndex(URLRewriteMediator.PORT);
+                action.setFragmentIndex(URIFragments.PORT);
             } else if ("path".equals(fragment)) {
-                action.setFragmentIndex(URLRewriteMediator.PATH);
+                action.setFragmentIndex(URIFragments.PATH);
             } else if ("query".equals(fragment)) {
-                action.setFragmentIndex(URLRewriteMediator.QUERY);
+                action.setFragmentIndex(URIFragments.QUERY);
             } else if ("ref".equals(fragment)) {
-                action.setFragmentIndex(URLRewriteMediator.REF);
+                action.setFragmentIndex(URIFragments.REF);
             } else if ("full".equals(fragment)) {
-                action.setFragmentIndex(URLRewriteMediator.FULL_URI);
+                action.setFragmentIndex(URIFragments.FULL_URI);
             } else {
                 handleException("Unknown URL fragment name: " + fragment);
             }
         } else {
-            action.setFragmentIndex(URLRewriteMediator.FULL_URI);
+            action.setFragmentIndex(URIFragments.FULL_URI);
         }
 
         if (type != null) {
-            if (action.getFragmentIndex() == URLRewriteMediator.FULL_URI ||
-                    action.getFragmentIndex() == URLRewriteMediator.PORT) {
-                handleException("type attribute is not allowed for 'port' and 
'full URI' rewrites");    
-            }
-
             if ("set".equals(type)) {
                 action.setActionType(RewriteAction.ACTION_SET);
             } else if ("append".equals(type)) {

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=989517&r1=989516&r2=989517&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
 Thu Aug 26 08:04:58 2010
@@ -144,7 +144,7 @@ public class URLRewriteTest extends Test
         RewriteRule r2 = new RewriteRule();
         RewriteAction a2 = new RewriteAction();
         a2.setValue("/services/TestService");
-        a2.setFragmentIndex(URLRewriteMediator.PATH);
+        a2.setFragmentIndex(URIFragments.PATH);
         r2.addRewriteAction(a2);
         mediator.addRule(r2);
 
@@ -157,7 +157,7 @@ public class URLRewriteTest extends Test
         RewriteAction a3 = new RewriteAction();
         r3.setCondition(eval);
         a3.setXpath(new SynapseXPath("get-property('prop1')"));
-        a3.setFragmentIndex(URLRewriteMediator.REF);
+        a3.setFragmentIndex(URIFragments.REF);
         r3.addRewriteAction(a3);
         mediator.addRule(r3);
 


Reply via email to