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);
}
}