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>