Author: reschke
Date: Tue Jun  5 14:26:31 2012
New Revision: 1346396

URL: http://svn.apache.org/viewvc?rev=1346396&view=rev
Log:
OAK-61: handle names with their indices in a single call

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrNameParser.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrPathParser.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrNameParser.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrNameParser.java?rev=1346396&r1=1346395&r2=1346396&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrNameParser.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrNameParser.java
 Tue Jun  5 14:26:31 2012
@@ -53,8 +53,9 @@ public class JcrNameParser {
          *
          * @param name The resulting name upon successful completion of
          * {@link 
org.apache.jackrabbit.oak.namepath.JcrNameParser#parse(String, 
org.apache.jackrabbit.oak.namepath.JcrNameParser.Listener)}
+         * @param index the index (or {@code 0} when not specified)
          */
-        boolean name(String name);
+        boolean name(String name, int index);
     }
 
     /**
@@ -69,17 +70,19 @@ public class JcrNameParser {
      *
      * @param jcrName The jcr name to be parsed.
      * @param listener The listener to be informed about success or failure.
+     * @param index index, or {@code 0} when not specified
+     * @return whether parsing was successful
      */
-    public static void parse(String jcrName, Listener listener) {
+    public static boolean parse(String jcrName, Listener listener, int index) {
         // trivial check
         int len = jcrName == null ? 0 : jcrName.length();
         if (len == 0) {
             listener.error("Empty name");
-            return;
+            return false;
         }
         if (".".equals(jcrName) || "..".equals(jcrName)) {
             listener.error("Illegal name:" + jcrName);
-            return;
+            return false;
         }
 
         // parse the name
@@ -93,40 +96,40 @@ public class JcrNameParser {
             if (c == ':') {
                 if (state == STATE_PREFIX_START) {
                     listener.error("Prefix must not be empty");
-                    return;
+                    return false;
                 } else if (state == STATE_PREFIX) {
                     if (trailingSpaces) {
                         listener.error("Trailing spaces not allowed");
-                        return;
+                        return false;
                     }
                     prefix = jcrName.substring(0, i);
                     if (!XMLChar.isValidNCName(prefix)) {
                         listener.error("Invalid name prefix: "+ prefix);
-                        return;
+                        return false;
                     }
                     state = STATE_NAME_START;
                 } else if (state == STATE_URI) {
                     // ignore -> validation of uri later on.
                 } else {
                     listener.error("'" + c + "' not allowed in name");
-                    return;
+                    return false;
                 }
                 trailingSpaces = false;
             } else if (c == ' ') {
                 if (state == STATE_PREFIX_START || state == STATE_NAME_START) {
                     listener.error("'" + c + "' not valid name start");
-                    return;
+                    return false;
                 }
                 trailingSpaces = true;
             } else if (Character.isWhitespace(c) || c == '[' || c == ']' || c 
== '*' || c == '|') {
                 listener.error("'" + c + "' not allowed in name");
-                return;
+                return false;
             } else if (c == '/') {
                 if (state == STATE_URI_START) {
                     state = STATE_URI;
                 } else if (state != STATE_URI) {
                     listener.error("'" + c + "' not allowed in name");
-                    return;
+                    return false;
                 }
                 trailingSpaces = false;
             } else if (c == '{') {
@@ -164,7 +167,7 @@ public class JcrNameParser {
                     } else {
                         listener.error("The URI prefix of the name " + jcrName 
+ " is " +
                                 "neither a valid URI nor a valid part of a 
local name.");
-                        return;
+                        return false;
                     }
                 } else if (state == STATE_PREFIX_START) {
                     state = STATE_PREFIX; // prefix start -> validation later 
on will fail.
@@ -190,19 +193,19 @@ public class JcrNameParser {
         // a terminating '}' -> make sure there are no illegal characters 
present.
         if (state == STATE_URI && (jcrName.indexOf(':') > -1 || 
jcrName.indexOf('/') > -1)) {
             listener.error("Local name may not contain ':' nor '/'");
-            return;
+            return false;
         }
 
         if (nameStart == len || state == STATE_NAME_START) {
             listener.error("Local name must not be empty");
-            return;
+            return false;
         }
         if (trailingSpaces) {
             listener.error("Trailing spaces not allowed");
-            return;
+            return false;
         }
 
-        listener.name(jcrName);
+        return listener.name(jcrName, index);
     }
 
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrPathParser.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrPathParser.java?rev=1346396&r1=1346395&r2=1346396&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrPathParser.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrPathParser.java
 Tue Jun  5 14:26:31 2012
@@ -39,7 +39,6 @@ public class JcrPathParser {
         boolean root();
         boolean current();
         boolean parent();
-        boolean index(int index);
     }
 
     public static void parse(String jcrPath, Listener listener) {
@@ -106,8 +105,7 @@ public class JcrPathParser {
                             name = jcrPath.substring(lastPos, pos - 1);
                         }
 
-                        JcrNameParser.parse(name, listener);
-                        if (!listener.index(index)) {
+                        if (!JcrNameParser.parse(name, listener, index)) {
                             return;
                         }
                         state = STATE_PREFIX_START;

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java?rev=1346396&r1=1346395&r2=1346396&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java
 Tue Jun  5 14:26:31 2012
@@ -96,21 +96,16 @@ public class NamePathMapperImpl implemen
             }
 
             @Override
-            public boolean index(int index) {
-                if (index > 1) {
-                    parseErrors.append("index > 1");
-                    return false;
-                }
-                return true;
-            }
-
-            @Override
             public void error(String message) {
                 parseErrors.append(message);
             }
 
             @Override
-            public boolean name(String name) {
+            public boolean name(String name, int index) {
+                if (index > 1) {
+                    parseErrors.append("index > 1");
+                    return false;
+                }
                 String p = nameMapper.getOakName(name);
                 if (p == null) {
                     parseErrors.append("Invalid name: ").append(name);
@@ -187,20 +182,15 @@ public class NamePathMapperImpl implemen
             }
 
             @Override
-            public boolean index(int index) {
-                if (index > 1) {
-                    throw new IllegalArgumentException("index > 1");
-                }
-                return true;
-            }
-
-            @Override
             public void error(String message) {
                 throw new IllegalArgumentException(message);
             }
 
             @Override
-            public boolean name(String name) {
+            public boolean name(String name, int index) {
+                if (index > 1) {
+                    throw new IllegalArgumentException("index > 1");
+                }
                 String p = nameMapper.getJcrName(name);
                 elements.add(p);
                 return true;


Reply via email to