You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/06/21 08:56:22 UTC

camel git commit: CAMEL-10063: Fix camel karaf commands using some util code from karaf that is not reusable.

Repository: camel
Updated Branches:
  refs/heads/master cb954e777 -> 4b9f3a968


CAMEL-10063: Fix camel karaf commands using some util code from karaf that is not reusable.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/4b9f3a96
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4b9f3a96
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4b9f3a96

Branch: refs/heads/master
Commit: 4b9f3a968386b481ca6849de83e7f5592a0cb5df
Parents: cb954e7
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jun 21 10:56:13 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jun 21 10:56:13 2016 +0200

----------------------------------------------------------------------
 platforms/karaf/commands/pom.xml                |   9 +-
 .../internal/KarafStringEscapeUtils.java        | 229 +++++++++++++++++++
 .../karaf/commands/internal/StringEscape.java   |   8 +-
 3 files changed, 233 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/4b9f3a96/platforms/karaf/commands/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/karaf/commands/pom.xml b/platforms/karaf/commands/pom.xml
index a32e014..3701123 100644
--- a/platforms/karaf/commands/pom.xml
+++ b/platforms/karaf/commands/pom.xml
@@ -53,11 +53,6 @@
       <version>${karaf4-version}</version>
     </dependency>
     <dependency>
-      <groupId>org.apache.karaf</groupId>
-      <artifactId>org.apache.karaf.util</artifactId>
-      <version>${karaf-version}</version>
-    </dependency>
-    <dependency>
       <groupId>org.osgi</groupId>
       <artifactId>org.osgi.core</artifactId>
       <scope>provided</scope>
@@ -81,7 +76,6 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
-            <Embed-Dependency>*;artifactId=org.apache.karaf.util;inline=true</Embed-Dependency>
             <Import-Package>
               !org.apache.felix.utils.properties,
               org.apache.felix.service.command;version="[0.16,1)",
@@ -92,8 +86,7 @@
               *
             </Import-Package>
             <Private-Package>
-              org.apache.camel.karaf.commands.internal,
-              org.apache.karaf.util
+              org.apache.camel.karaf.commands.internal
             </Private-Package>
           </instructions>
         </configuration>

http://git-wip-us.apache.org/repos/asf/camel/blob/4b9f3a96/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/internal/KarafStringEscapeUtils.java
----------------------------------------------------------------------
diff --git a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/internal/KarafStringEscapeUtils.java b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/internal/KarafStringEscapeUtils.java
new file mode 100644
index 0000000..53e17f1
--- /dev/null
+++ b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/internal/KarafStringEscapeUtils.java
@@ -0,0 +1,229 @@
+/**
+ * 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.karaf.commands.internal;
+
+import java.util.Locale;
+
+/**
+ * Util class to manipulate String, especially around escape/unescape.
+ *
+ * This class is a copy of org.apache.karaf.util.StringEscapeUtils.
+ */
+public final class KarafStringEscapeUtils {
+
+    /**
+     * Constant for the radix of hex numbers.
+     */
+    private static final int HEX_RADIX = 16;
+
+    /**
+     * Constant for the length of a unicode literal.
+     */
+    private static final int UNICODE_LEN = 4;
+
+    private KarafStringEscapeUtils() {
+    }
+
+    /**
+     * <p>Unescapes any Java literals found in the <code>String</code> to a
+     * <code>Writer</code>.</p> This is a slightly modified version of the
+     * StringEscapeUtils.unescapeJava() function in commons-lang that doesn't
+     * drop escaped separators (i.e '\,').
+     *
+     * @param str the <code>String</code> to unescape, may be null
+     * @return the processed string
+     * @throws IllegalArgumentException if the Writer is <code>null</code>
+     */
+    public static String unescapeJava(String str) {
+        if (str == null) {
+            return null;
+        }
+        int sz = str.length();
+        StringBuffer out = new StringBuffer(sz);
+        StringBuffer unicode = new StringBuffer(UNICODE_LEN);
+        boolean hadSlash = false;
+        boolean inUnicode = false;
+        for (int i = 0; i < sz; i++) {
+            char ch = str.charAt(i);
+            if (inUnicode) {
+                // if in unicode, then we're reading unicode
+                // values in somehow
+                unicode.append(ch);
+                if (unicode.length() == UNICODE_LEN) {
+                    // unicode now contains the four hex digits
+                    // which represents our unicode character
+                    try {
+                        int value = Integer.parseInt(unicode.toString(), HEX_RADIX);
+                        out.append((char) value);
+                        unicode.setLength(0);
+                        inUnicode = false;
+                        hadSlash = false;
+                    } catch (NumberFormatException nfe) {
+                        throw new IllegalArgumentException("Unable to parse unicode value: " + unicode, nfe);
+                    }
+                }
+                continue;
+            }
+
+            if (hadSlash) {
+                // handle an escaped value
+                hadSlash = false;
+                switch (ch) {
+                case '\\':
+                    out.append('\\');
+                    break;
+                case '\'':
+                    out.append('\'');
+                    break;
+                case '\"':
+                    out.append('"');
+                    break;
+                case 'r':
+                    out.append('\r');
+                    break;
+                case 'f':
+                    out.append('\f');
+                    break;
+                case 't':
+                    out.append('\t');
+                    break;
+                case 'n':
+                    out.append('\n');
+                    break;
+                case 'b':
+                    out.append('\b');
+                    break;
+                case 'u':
+                    // uh-oh, we're in unicode country....
+                    inUnicode = true;
+                    break;
+                default:
+                    out.append(ch);
+                    break;
+                }
+                continue;
+            } else if (ch == '\\') {
+                hadSlash = true;
+                continue;
+            }
+            out.append(ch);
+        }
+
+        if (hadSlash) {
+            // then we're in the weird case of a \ at the end of the
+            // string, let's output it anyway.
+            out.append('\\');
+        }
+
+        return out.toString();
+    }
+
+    /**
+     * <p>Escapes the characters in a <code>String</code> using Java String rules.</p>
+     * <p/>
+     * <p>Deals correctly with quotes and control-chars (tab, backslash, cr, ff, etc.) </p>
+     * <p/>
+     * <p>So a tab becomes the characters <code>'\\'</code> and
+     * <code>'t'</code>.</p>
+     * <p/>
+     * <p>The only difference between Java strings and JavaScript strings
+     * is that in JavaScript, a single quote must be escaped.</p>
+     * <p/>
+     * Example:
+     * <pre>
+     * input string: He didn't say, "Stop!"
+     * output string: He didn't say, \"Stop!\"
+     * </pre>
+     *
+     * @param str String to escape values in, may be null
+     * @return String with escaped values, <code>null</code> if null string input
+     */
+    public static String escapeJava(String str) {
+        if (str == null) {
+            return null;
+        }
+        int sz = str.length();
+        StringBuffer out = new StringBuffer(sz * 2);
+        for (int i = 0; i < sz; i++) {
+            char ch = str.charAt(i);
+            // handle unicode
+            if (ch > 0xfff) {
+                out.append("\\u").append(hex(ch));
+            } else if (ch > 0xff) {
+                out.append("\\u0").append(hex(ch));
+            } else if (ch > 0x7f) {
+                out.append("\\u00").append(hex(ch));
+            } else if (ch < 32) {
+                switch (ch) {
+                case '\b':
+                    out.append('\\');
+                    out.append('b');
+                    break;
+                case '\n':
+                    out.append('\\');
+                    out.append('n');
+                    break;
+                case '\t':
+                    out.append('\\');
+                    out.append('t');
+                    break;
+                case '\f':
+                    out.append('\\');
+                    out.append('f');
+                    break;
+                case '\r':
+                    out.append('\\');
+                    out.append('r');
+                    break;
+                default:
+                    if (ch > 0xf) {
+                        out.append("\\u00").append(hex(ch));
+                    } else {
+                        out.append("\\u000").append(hex(ch));
+                    }
+                    break;
+                }
+            } else {
+                switch (ch) {
+                case '"':
+                    out.append('\\');
+                    out.append('"');
+                    break;
+                case '\\':
+                    out.append('\\');
+                    out.append('\\');
+                    break;
+                default:
+                    out.append(ch);
+                    break;
+                }
+            }
+        }
+        return out.toString();
+    }
+
+    /**
+     * <p>Returns an upper case hexadecimal <code>String</code> for the given
+     * character.</p>
+     *
+     * @param ch The character to convert.
+     * @return An upper case hexadecimal <code>String</code>
+     */
+    public static String hex(char ch) {
+        return Integer.toHexString(ch).toUpperCase(Locale.ENGLISH);
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/4b9f3a96/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/internal/StringEscape.java
----------------------------------------------------------------------
diff --git a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/internal/StringEscape.java b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/internal/StringEscape.java
index d9e71a8..36dfd31 100644
--- a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/internal/StringEscape.java
+++ b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/internal/StringEscape.java
@@ -16,22 +16,20 @@
  */
 package org.apache.camel.karaf.commands.internal;
 
-import org.apache.karaf.util.StringEscapeUtils;
-
 public class StringEscape implements org.apache.camel.commands.StringEscape {
 
     @Override
     public String unescapeJava(String str) {
-        return StringEscapeUtils.unescapeJava(str);
+        return KarafStringEscapeUtils.unescapeJava(str);
     }
 
     @Override
     public String escapeJava(String str) {
-        return StringEscapeUtils.escapeJava(str);
+        return KarafStringEscapeUtils.escapeJava(str);
     }
 
     @Override
     public String hex(char ch) {
-        return StringEscapeUtils.hex(ch);
+        return KarafStringEscapeUtils.hex(ch);
     }
 }