You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2011/09/14 16:06:34 UTC

svn commit: r1170635 - in /jackrabbit/sandbox/jackrabbit-mk: jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/ jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/sp...

Author: mduerig
Date: Wed Sep 14 14:06:33 2011
New Revision: 1170635

URL: http://svn.apache.org/viewvc?rev=1170635&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP) 
refactor: consolidate utils

Modified:
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitMessage.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/util/

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java?rev=1170635&r1=1170634&r2=1170635&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java Wed Sep 14 14:06:33 2011
@@ -109,6 +109,64 @@ public class Text {
     }
 
     /**
+     * Escape all {@code target} characters of string {@code s} with the given
+     * {@code escape} character.
+     *
+     * @param s  string to escape
+     * @param target  characters to escape
+     * @param escape  escape character prepended to all target characters
+     * @return  escaped string
+     */
+    public static String escape(String s, char target, char escape) {
+        if (s == null) {
+            return null;
+        }
+
+        StringBuilder sb = new StringBuilder();
+        for (int k = 0; k < s.length(); k++) {
+            char c = s.charAt(k);
+            if (c == target || c == escape) {
+                sb.append(escape);
+            }
+            sb.append(c);
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Unescape all characters in string {@code s} which are escaped with the
+     * given {@code escape} character.
+     *
+     * @param s  string to unescape
+     * @param escape  escape character prepended to all target characters
+     * @return  unescaped string
+     */
+    public static String unescape(String s, char escape) {
+        if (s == null) {
+            return null;
+        }
+
+        boolean escaping = false;
+        StringBuilder sb = new StringBuilder();
+        for (int k = 0; k < s.length(); k++) {
+            char c = s.charAt(k);
+            if (escaping) {
+                sb.append(c);
+                escaping = false;
+            }
+            else if (c == escape) {
+                escaping = true;
+            }
+            else {
+                sb.append(c);
+            }
+        }
+
+        return sb.toString();
+    }
+
+    /**
      * returns an array of strings decomposed of the original string, split at
      * every occurrence of 'ch'. if 2 'ch' follow each other with no intermediate
      * characters, empty "" entries are avoided.
@@ -314,8 +372,8 @@ public class Text {
      * @return the escaped string
      * @throws NullPointerException if {@code string} is {@code null}.
      */
-    public static String escape(String string, char escape) {
-        return escape(string, escape, false);
+    public static String urlEncode(String string, char escape) {
+        return urlEncode(string, escape, false);
     }
 
     /**
@@ -331,7 +389,7 @@ public class Text {
      * @return the escaped string
      * @throws NullPointerException if {@code string} is {@code null}.
      */
-    public static String escape(String string, char escape, boolean isPath) {
+    public static String urlEncode(String string, char escape, boolean isPath) {
         try {
             BitSet validChars = isPath ? URISaveEx : URISave;
             byte[] bytes = string.getBytes("utf-8");
@@ -361,23 +419,23 @@ public class Text {
      * @return the escaped string
      * @throws NullPointerException if {@code string} is {@code null}.
      */
-    public static String escape(String string) {
-        return escape(string, '%');
+    public static String urlEncode(String string) {
+        return urlEncode(string, '%');
     }
 
     /**
      * Does a URL encoding of the {@code path}. The characters that
      * don't need encoding are those defined 'unreserved' in section 2.3 of
      * the 'URI generic syntax' RFC 2396. In contrast to the
-     * {@link #escape(String)} method, not the entire path string is escaped,
+     * {@link #urlEncode(String)} method, not the entire path string is escaped,
      * but every individual part (i.e. the slashes are not escaped).
      *
      * @param path the path to encode
      * @return the escaped path
      * @throws NullPointerException if {@code path} is {@code null}.
      */
-    public static String escapePath(String path) {
-        return escape(path, '%', true);
+    public static String urlEncodePath(String path) {
+        return urlEncode(path, '%', true);
     }
 
     /**
@@ -394,7 +452,7 @@ public class Text {
      *                                        or if not enough characters follow an
      *                                        escape character
      */
-    public static String unescape(String string, char escape)  {
+    public static String urlDecode(String string, char escape)  {
         try {
             byte[] utf8 = string.getBytes("utf-8");
 
@@ -435,8 +493,8 @@ public class Text {
      * @throws IllegalArgumentException       if the 2 characters following the escape
      *                                        character do not represent a hex-number.
      */
-    public static String unescape(String string) {
-        return unescape(string, '%');
+    public static String urlDecode(String string) {
+        return urlDecode(string, '%');
     }
 
     /**
@@ -505,7 +563,7 @@ public class Text {
      * Unescapes previously escaped jcr chars.
      * <p/>
      * Please note, that this does not exactly the same as the url related
-     * {@link #unescape(String)}, since it handles the byte-encoding
+     * {@link #urlDecode(String)}, since it handles the byte-encoding
      * differently.
      *
      * @param name the name to unescape

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java?rev=1170635&r1=1170634&r2=1170635&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java Wed Sep 14 14:06:33 2011
@@ -16,12 +16,12 @@
  */
 package org.apache.jackrabbit.util;
 
+import junit.framework.TestCase;
+
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
-import junit.framework.TestCase;
-
 /**
  * Test cases for the Text utility class.
  */
@@ -143,16 +143,16 @@ public class TextTest extends TestCase {
         String escaped = testString
             .replaceAll("%", "%25")
             .replaceAll(" ", "%20");
-        String unescaped = Text.unescape(escaped);
+        String unescaped = Text.urlDecode(escaped);
         assertEquals(testString, unescaped);
 
-        escaped = Text.escape(testString);
-        unescaped = Text.unescape(escaped);
+        escaped = Text.urlEncode(testString);
+        unescaped = Text.urlDecode(escaped);
         assertEquals(testString, unescaped);
 
-        assertEquals("%", Text.unescape("%25"));
-        assertEquals("", Text.unescape(""));
-        assertEquals("\u4e2d\u56fd\u7684\u7f51\u9875", Text.unescape("\u4e2d\u56fd\u7684\u7f51\u9875"));
+        assertEquals("%", Text.urlDecode("%25"));
+        assertEquals("", Text.urlDecode(""));
+        assertEquals("\u4e2d\u56fd\u7684\u7f51\u9875", Text.urlDecode("\u4e2d\u56fd\u7684\u7f51\u9875"));
     }
 
     /**
@@ -175,7 +175,7 @@ public class TextTest extends TestCase {
 
     private void assertInvalidUnescape(String string) {
         try {
-            Text.unescape(string);
+            Text.urlDecode(string);
             fail("Text.unescape(" + string + ") should throw IllegalArgumentException");
         } catch (IllegalArgumentException expected) {
         } catch (RuntimeException unexpected) {

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java?rev=1170635&r1=1170634&r2=1170635&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java Wed Sep 14 14:06:33 2011
@@ -78,7 +78,7 @@ public abstract class AbstractIdFactory 
             return DELIMITER + path.toString();
         } else {
             StringBuilder bf = new StringBuilder();
-            bf.append(Text.escape(uniqueId, DELIMITER));
+            bf.append(Text.urlEncode(uniqueId, DELIMITER));
             bf.append(DELIMITER);
             bf.append(path.toString());
             return bf.toString();
@@ -98,7 +98,7 @@ public abstract class AbstractIdFactory 
             case 0:
                 return createNodeId((String) null, getPathFactory().create(jcrIdentifier.substring(1)));
             default:
-                String uniqueId = Text.unescape(jcrIdentifier.substring(0, pos), DELIMITER);
+                String uniqueId = Text.urlDecode(jcrIdentifier.substring(0, pos), DELIMITER);
                 Path path = getPathFactory().create(jcrIdentifier.substring(pos+1));
                 return createNodeId(uniqueId, path);
         }        

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitMessage.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitMessage.java?rev=1170635&r1=1170634&r2=1170635&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitMessage.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitMessage.java Wed Sep 14 14:06:33 2011
@@ -1,6 +1,7 @@
 package org.apache.jackrabbit.spi2microkernel;
 
-import org.apache.jackrabbit.spi2microkernel.util.Text;
+
+import org.apache.jackrabbit.util.Text;
 
 public class CommitMessage {
     private final String userId;