You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2009/07/22 14:16:23 UTC

svn commit: r796685 - in /camel/trunk/components/camel-web/src/main: java/org/apache/camel/web/model/ java/org/apache/camel/web/resources/ java/org/apache/camel/web/util/ webapp/org/apache/camel/web/resources/RouteResource/

Author: janstey
Date: Wed Jul 22 12:16:22 2009
New Revision: 796685

URL: http://svn.apache.org/viewvc?rev=796685&view=rev
Log:
CAMEL-1392 - Latest contribution from Xueqiang. Thanks!

1. javascript for avoiding to re-build a route without any changes;
2. encoder the endpoint URI (see CAMEL-1839) 


Added:
    camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/UriCharactersEncoder.java   (with props)
Modified:
    camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/model/EndpointLink.java
    camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java
    camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/RouteResource/edit.jsp

Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/model/EndpointLink.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/model/EndpointLink.java?rev=796685&r1=796684&r2=796685&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/model/EndpointLink.java (original)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/model/EndpointLink.java Wed Jul 22 12:16:22 2009
@@ -22,6 +22,7 @@
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.apache.camel.Endpoint;
+import org.apache.camel.web.util.UriCharactersEncoder;
 
 /**
  * @version $Revision$
@@ -81,8 +82,7 @@
     protected String createHref(String uri) {
         // must not include :// in endpoint link
         // TODO: might need to use org.apache.camel.util.UnsafeUriCharactersEncoder to safely encode URI for the web
-        String href = uri.contains("://") ? uri.replace("://", ":") : uri;
-        return "/endpoints/" + href;
+        return "/endpoints/" + UriCharactersEncoder.encode(uri);
     }
 
 }

Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java?rev=796685&r1=796684&r2=796685&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java (original)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java Wed Jul 22 12:16:22 2009
@@ -184,9 +184,15 @@
         // TODO replace the Form class with an injected bean?
         String language = formData.getFirst("language", String.class);
         String body = formData.getFirst("route", String.class);
+        String edited = formData.getFirst("edited", String.class);
+
+        if (edited.equals("false")) {
+            return Response.seeOther(new URI("/routes")).build();
+        }
         if (LOG.isDebugEnabled()) {
             LOG.debug("new Route is: " + body);
         }
+        
         LOG.info(body);
         if (body == null) {
             error = "No Route submitted!";

Added: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/UriCharactersEncoder.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/UriCharactersEncoder.java?rev=796685&view=auto
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/UriCharactersEncoder.java (added)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/UriCharactersEncoder.java Wed Jul 22 12:16:22 2009
@@ -0,0 +1,101 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF 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.camel.web.util;
+
+import java.io.UnsupportedEncodingException;
+import java.util.BitSet;
+
+import org.apache.camel.util.UnsafeUriCharactersEncoder;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * 
+ */
+public class UriCharactersEncoder {
+    private static BitSet unsafeCharacters;
+    private static final transient Log LOG = LogFactory.getLog(UriCharactersEncoder.class);
+    private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
+                                              'C', 'D', 'E', 'F'};
+
+    static {
+        unsafeCharacters = new BitSet(256);
+        unsafeCharacters.set(' ');
+        unsafeCharacters.set('"');
+        unsafeCharacters.set('<');
+        unsafeCharacters.set('>');
+        unsafeCharacters.set('#');
+        unsafeCharacters.set('%');
+        unsafeCharacters.set('{');
+        unsafeCharacters.set('}');
+        unsafeCharacters.set('|');
+        unsafeCharacters.set('\\');
+        unsafeCharacters.set('^');
+        unsafeCharacters.set('~');
+        unsafeCharacters.set('[');
+        unsafeCharacters.set(']');
+        unsafeCharacters.set('`');
+        unsafeCharacters.set('/');
+        unsafeCharacters.set('$');
+    }
+
+    private UriCharactersEncoder() {
+        // util class
+    }
+
+    public static String encode(String s) {
+        int n = s.length();
+        if (n == 0) {
+            return s;
+        }
+
+        try {
+            // First check whether we actually need to encode
+            byte[] bytes = s.getBytes("UTF8");
+            for (int i = 0;;) {
+                if (unsafeCharacters.get(bytes[i])) {
+                    break;
+                }
+                if (++i >= bytes.length) {
+                    return s;
+                }
+            }
+
+            // okay there are some unsafe characters so we do need to encode
+            StringBuffer sb = new StringBuffer();
+            for (byte b : bytes) {
+                if (unsafeCharacters.get(b)) {
+                    appendEscape(sb, b);
+                } else {
+                    sb.append((char)b);
+                }
+            }
+            return sb.toString();
+        } catch (UnsupportedEncodingException e) {
+            LOG.error("Can't encoding the uri: ", e);
+            return null;
+        }
+    }
+
+    private static void appendEscape(StringBuffer sb, byte b) {
+        sb.append('%');
+        sb.append(HEX_DIGITS[(b >> 4) & 0x0f]);
+        sb.append(HEX_DIGITS[(b >> 0) & 0x0f]);
+    }
+
+}

Propchange: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/UriCharactersEncoder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/RouteResource/edit.jsp
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/RouteResource/edit.jsp?rev=796685&r1=796684&r2=796685&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/RouteResource/edit.jsp (original)
+++ camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/RouteResource/edit.jsp Wed Jul 22 12:16:22 2009
@@ -30,8 +30,9 @@
 	</tr>
 	<tr>
 		<td colspan="2"><textarea id="route" name="route"
+			onchange="dojo.byId('edited').value = true;"
 			style="width: 800px; height: 300px; border: 10px solid #ddd; -moz-border-radius: 10px; -webkit-border-radius: 10px;">${it.routeDefinition}</textarea>
-		</td>
+		<input id="edited" name="edited" type="hidden" value="false" /></td>
 	</tr>
 </table>