You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2005/02/22 18:12:43 UTC

svn commit: r154876 - in incubator/jackrabbit/trunk/src: java/org/apache/jackrabbit/core/Path.java java/org/apache/jackrabbit/core/util/ValueHelper.java test/org/apache/jackrabbit/core/PathTest.java

Author: stefan
Date: Tue Feb 22 09:12:41 2005
New Revision: 154876

URL: http://svn.apache.org/viewcvs?view=rev&rev=154876
Log:
fixing Path testcase

Modified:
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/Path.java
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/util/ValueHelper.java
    incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/core/PathTest.java

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/Path.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/Path.java?view=diff&r1=154875&r2=154876
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/Path.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/Path.java Tue Feb 22 09:12:41 2005
@@ -151,7 +151,7 @@
         this.normalized = isNormalized;
     }
 
-    //----------------------------------------------------< factory methods >---
+    //------------------------------------------------------< factory methods >
     /**
      * Creates a new <code>Path</code> from the given <code>jcrPath</code>
      * string. If <code>normalize</code> is <code>true</code>, the returned
@@ -283,6 +283,135 @@
         return new Path(new PathElement[]{elem}, !elem.equals(CURRENT_ELEMENT));
     }
 
+    //-------------------------------------------------------< implementation >
+    /**
+     * Parses the give string an d returns an array of path elements. if
+     * <code>master</code> is not <code>null</code>, it is prepended to the
+     * returned list. If <code>resolver</code> is <code>null</code>, this
+     * method only checks the format of the string and returns <code>null</code>.
+     *
+     * @param jcrPath
+     * @param master
+     * @param resolver
+     * @return
+     * @throws MalformedPathException
+     */
+    private static Path parse(String jcrPath, Path master, NamespaceResolver resolver)
+            throws MalformedPathException {
+        // shortcut
+        if ("/".equals(jcrPath)) {
+            return ROOT;
+        }
+
+        // split path into path elements
+        String[] elems = Text.explode(jcrPath, '/', true);
+        if (elems.length == 0) {
+            throw new MalformedPathException("empty path");
+        }
+
+        ArrayList list = new ArrayList();
+        boolean isNormalized = true;
+        boolean leadingParent = true;
+        if (master != null) {
+            isNormalized = master.normalized;
+            // a master path was specified; the 'path' argument is assumed
+            // to be a relative path
+            for (int i = 0; i < master.elements.length; i++) {
+                list.add(master.elements[i]);
+                leadingParent &= master.elements[i].denotesParent();
+            }
+        }
+
+        for (int i = 0; i < elems.length; i++) {
+            // validate & parse path element
+            String prefix;
+            String localName;
+            int index;
+
+            String elem = elems[i];
+            if (i == 0 && elem.length() == 0) {
+                // path is absolute, i.e. the first element is the root element
+                if (!list.isEmpty()) {
+                    throw new MalformedPathException("'" + jcrPath + "' is not a relative path");
+                }
+                list.add(ROOT_ELEMENT);
+                leadingParent = false;
+                continue;
+            }
+            Matcher matcher = PATH_ELEMENT_PATTERN.matcher(elem);
+            if (matcher.matches()) {
+                if (resolver == null) {
+                    // check only
+                    continue;
+                }
+
+                if (matcher.group(1) != null) {
+                    // group 1 is .
+                    list.add(CURRENT_ELEMENT);
+                    leadingParent = false;
+                    isNormalized = false;
+                } else if (matcher.group(2) != null) {
+                    // group 2 is ..
+                    list.add(PARENT_ELEMENT);
+                    isNormalized &= leadingParent;
+                } else {
+                    // element is a name
+
+                    // check for prefix (group 3)
+                    if (matcher.group(3) != null) {
+                        // prefix specified
+                        // group 4 is namespace prefix excl. delimiter (colon)
+                        prefix = matcher.group(4);
+                        // check if the prefix is a valid XML prefix
+                        if (!XMLChar.isValidNCName(prefix)) {
+                            // illegal syntax for prefix
+                            throw new MalformedPathException("'" + jcrPath + "' is not a valid path: '" + elem + "' specifies an illegal namespace prefix");
+                        }
+                    } else {
+                        // no prefix specified
+                        prefix = "";
+                    }
+
+                    // group 5 is localName
+                    localName = matcher.group(5);
+
+                    // check for index (group 6)
+                    if (matcher.group(6) != null) {
+                        // index specified
+                        // group 7 is index excl. brackets
+                        index = Integer.parseInt(matcher.group(7));
+                    } else {
+                        // no index specified
+                        index = 0;
+                    }
+
+                    String nsURI;
+                    try {
+                        nsURI = resolver.getURI(prefix);
+                    } catch (NamespaceException nse) {
+                        // unknown prefix
+                        throw new MalformedPathException("'" + jcrPath + "' is not a valid path: '" + elem + "' specifies an unmapped namespace prefix");
+                    }
+
+                    PathElement element;
+                    if (index == 0) {
+                        element = new PathElement(nsURI, localName);
+                    } else {
+                        element = new PathElement(nsURI, localName, index);
+                    }
+                    list.add(element);
+                    leadingParent = false;
+                }
+            } else {
+                // illegal syntax for path element
+                throw new MalformedPathException("'" + jcrPath + "' is not a valid path: '" + elem + "' is not a legal path element");
+            }
+        }
+        return resolver == null
+                ? null
+                : new Path((PathElement[]) list.toArray(new PathElement[list.size()]), isNormalized);
+    }
+
     //------------------------------------------------------< utility methods >
     /**
      * Checks if <code>jcrPath</code> is a valid JCR-style absolute or relative
@@ -1147,135 +1276,4 @@
             return false;
         }
     }
-
-    //-------------------------------------------------------< implementation >
-
-    /**
-     * parses the give string an d returns an array of path elements. if
-     * <code>master</code> is not <code>null</code>, it is prepended to the
-     * returned list. If <code>resolver</code> is <code>null</code>, this
-     * method only checks the format of the string and returns <code>null</code>.
-     *
-     * @param jcrPath
-     * @param master
-     * @param resolver
-     * @return
-     * @throws MalformedPathException
-     */
-    private static Path parse(String jcrPath, Path master, NamespaceResolver resolver)
-            throws MalformedPathException {
-        // shortcut
-        if (jcrPath.equals("/")) {
-            return ROOT;
-        }
-
-        // split path into path elements
-        String[] elems = Text.explode(jcrPath, '/', true);
-        if (elems.length == 0) {
-            throw new MalformedPathException("empty path");
-        }
-
-        ArrayList list = new ArrayList();
-        boolean isNormalized = true;
-        boolean leadingParent = true;
-        if (master != null) {
-            isNormalized = master.normalized;
-            // a master path was specified; the 'path' argument is assumed
-            // to be a relative path
-            for (int i = 0; i < master.elements.length; i++) {
-                list.add(master.elements[i]);
-                leadingParent &= master.elements[i].denotesParent();
-            }
-        }
-
-        for (int i = 0; i < elems.length; i++) {
-            // validate & parse path element
-            String prefix;
-            String localName;
-            int index;
-
-            String elem = elems[i];
-            if (i == 0 && elem.length() == 0) {
-                // path is absolute, i.e. the first element is the root element
-                if (!list.isEmpty()) {
-                    throw new MalformedPathException("'" + jcrPath + "' is not a relative path");
-                }
-                list.add(ROOT_ELEMENT);
-                leadingParent = false;
-                continue;
-            }
-            Matcher matcher = PATH_ELEMENT_PATTERN.matcher(elem);
-            if (matcher.matches()) {
-                if (resolver == null) {
-                    // check only
-                    continue;
-                }
-
-                if (matcher.group(1) != null) {
-                    // group 1 is .
-                    list.add(CURRENT_ELEMENT);
-                    leadingParent = false;
-                    isNormalized = false;
-                } else if (matcher.group(2) != null) {
-                    // group 2 is ..
-                    list.add(PARENT_ELEMENT);
-                    isNormalized &= leadingParent;
-                } else {
-                    // element is a name
-
-                    // check for prefix (group 3)
-                    if (matcher.group(3) != null) {
-                        // prefix specified
-                        // group 4 is namespace prefix excl. delimiter (colon)
-                        prefix = matcher.group(4);
-                        // check if the prefix is a valid XML prefix
-                        if (!XMLChar.isValidNCName(prefix)) {
-                            // illegal syntax for prefix
-                            throw new MalformedPathException("'" + jcrPath + "' is not a valid path: '" + elem + "' specifies an illegal namespace prefix");
-                        }
-                    } else {
-                        // no prefix specified
-                        prefix = "";
-                    }
-
-                    // group 5 is localName
-                    localName = matcher.group(5);
-
-                    // check for index (group 6)
-                    if (matcher.group(6) != null) {
-                        // index specified
-                        // group 7 is index excl. brackets
-                        index = Integer.parseInt(matcher.group(7));
-                    } else {
-                        // no index specified
-                        index = 0;
-                    }
-
-                    String nsURI;
-                    try {
-                        nsURI = resolver.getURI(prefix);
-                    } catch (NamespaceException nse) {
-                        // unknown prefix
-                        throw new MalformedPathException("'" + jcrPath + "' is not a valid path: '" + elem + "' specifies an unmapped namespace prefix");
-                    }
-
-                    PathElement element;
-                    if (index == 0) {
-                        element = new PathElement(nsURI, localName);
-                    } else {
-                        element = new PathElement(nsURI, localName, index);
-                    }
-                    list.add(element);
-                    leadingParent = false;
-                }
-            } else {
-                // illegal syntax for path element
-                throw new MalformedPathException("'" + jcrPath + "' is not a valid path: '" + elem + "' is not a legal path element");
-            }
-        }
-        return resolver == null
-                ? null
-                : new Path((PathElement[]) list.toArray(new PathElement[list.size()]), isNormalized);
-    }
-
 }

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/util/ValueHelper.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/util/ValueHelper.java?view=diff&r1=154875&r2=154876
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/util/ValueHelper.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/util/ValueHelper.java Tue Feb 22 09:12:41 2005
@@ -58,7 +58,7 @@
      */
     public static Value convert(Value srcValue, int targetType)
             throws ValueFormatException, IllegalStateException, IllegalArgumentException {
-        Value val = null;
+        Value val;
         int srcType = srcValue.getType();
 
         if (srcType == targetType) {

Modified: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/core/PathTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/core/PathTest.java?view=diff&r1=154875&r2=154876
==============================================================================
--- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/core/PathTest.java (original)
+++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/core/PathTest.java Tue Feb 22 09:12:41 2005
@@ -212,11 +212,27 @@
         }
         for (int i=0; i<elems.length; i++) {
             int pos = elems[i].indexOf('[');
+            String elem;
+            QName name;
+            int index;
             if (pos<0) {
-                builder.addLast(QName.fromJCRName(elems[i], resolver));
+                elem = elems[i];
+                index = -1;
             } else {
-                int index = Integer.parseInt(elems[i].substring(pos+1, elems[i].length()-1));
-                builder.addLast(QName.fromJCRName(elems[i].substring(0, pos), resolver), index);
+                index = Integer.parseInt(elems[i].substring(pos+1, elems[i].length()-1));
+                elem = elems[i].substring(0, pos);
+            }
+            if (".".equals(elem)) {
+                name = new QName("", ".");
+            } else if ("..".equals(elems[i])) {
+                name = new QName("", "..");
+            } else {
+                name = QName.fromJCRName(elem, resolver);
+            }
+            if (index < 0) {
+                builder.addLast(name);
+            } else {
+                builder.addLast(name, index);
             }
         }
         return normalize ? builder.getPath().getNormalizedPath() : builder.getPath();
@@ -228,11 +244,27 @@
         String[] elems = Text.explode(path, '/', false);
         for (int i=elems.length-1; i>=0; i--) {
             int pos = elems[i].indexOf('[');
+            String elem;
+            QName name;
+            int index;
             if (pos<0) {
-                builder.addFirst(QName.fromJCRName(elems[i], resolver));
+                elem = elems[i];
+                index = -1;
+            } else {
+                index = Integer.parseInt(elems[i].substring(pos+1, elems[i].length()-1));
+                elem = elems[i].substring(0, pos);
+            }
+            if (".".equals(elem)) {
+                name = new QName("", ".");
+            } else if ("..".equals(elems[i])) {
+                name = new QName("", "..");
+            } else {
+                name = QName.fromJCRName(elem, resolver);
+            }
+            if (index < 0) {
+                builder.addFirst(name);
             } else {
-                int index = Integer.parseInt(elems[i].substring(pos+1, elems[i].length()-1));
-                builder.addFirst(QName.fromJCRName(elems[i].substring(0, pos), resolver), index);
+                builder.addFirst(name, index);
             }
         }
         if (path.startsWith("/")) {