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 2006/08/02 17:25:45 UTC
svn commit: r428023 - in
/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name:
NameFormat.java Path.java QName.java
Author: stefan
Date: Wed Aug 2 08:25:45 2006
New Revision: 428023
URL: http://svn.apache.org/viewvc?rev=428023&view=rev
Log:
some minor cleanups and javadoc improvements
Modified:
jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/NameFormat.java
jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/Path.java
jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/QName.java
Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/NameFormat.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/NameFormat.java?rev=428023&r1=428022&r2=428023&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/NameFormat.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/NameFormat.java Wed Aug 2 08:25:45 2006
@@ -28,7 +28,7 @@
public class NameFormat {
/**
- * The reqular expression pattern used to validate and doParse
+ * The reqular expression pattern used to validate and parse
* qualified names.
* <p/>
* The pattern contains the following groups:
@@ -38,7 +38,8 @@
* <li>group 3 is localName
* </ul>
*/
- private static final Pattern NAME_PATTERN = Pattern.compile("(([^ /:\\[\\]*'\"|](?:[^/:\\[\\]*'\"|]*[^ /:\\[\\]*'\"|])?):)?"
+ private static final Pattern NAME_PATTERN = Pattern.compile(
+ "(([^ /:\\[\\]*'\"|](?:[^/:\\[\\]*'\"|]*[^ /:\\[\\]*'\"|])?):)?"
+ "([^ /:\\[\\]*'\"|](?:[^/:\\[\\]*'\"|]*[^ /:\\[\\]*'\"|])?)");
/**
Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/Path.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/Path.java?rev=428023&r1=428022&r2=428023&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/Path.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/Path.java Wed Aug 2 08:25:45 2006
@@ -384,12 +384,18 @@
if (last.denotesRoot()) {
// the first element is the root element;
// ".." would refer to the parent of root
- throw new MalformedPathException("Path can not be canonicalized: unresolvable '..' element");
+ throw new MalformedPathException(
+ "Path can not be canonicalized: unresolvable '..' element");
}
queue.removeLast();
- last = queue.isEmpty() ? PARENT_ELEMENT : (PathElement) queue.getLast();
+ if (queue.isEmpty()) {
+ last = PARENT_ELEMENT;
+ } else {
+ last = (PathElement) queue.getLast();
+ }
} else if (!elem.denotesCurrent()) {
- queue.add(last = elem);
+ last = elem;
+ queue.add(last);
}
}
if (queue.isEmpty()) {
@@ -939,26 +945,15 @@
// no need to check the path format, assuming all names correct
return new Path(elements, isNormalized);
}
-
- /**
- * {@inheritDoc}
- */
- public Object clone() throws CloneNotSupportedException {
- super.clone();
- PathBuilder clone = new PathBuilder();
- clone.queue.addAll(queue);
- return clone;
- }
}
- //---------------------------------------------------------< Path Elements >
-
+ //---------------------------------------------< PathElement & subclasses >
/**
* Object representation of a single JCR path element. A PathElement
* object contains the qualified name and optional index of a single
* JCR path element.
* <p/>
- * Once created, a NameElement object is immutable.
+ * Once created, a PathElement object is immutable.
*/
public abstract static class PathElement {
@@ -973,9 +968,11 @@
*/
private final int index;
-
/**
- * Creates a path element with the given qualified name and index.
+ * Private constructor for creating a path element with the given
+ * qualified name and index. Instead of using this constructor directly
+ * the factory methods {@link #create(QName)} and {@link #create(QName, int)}
+ * should be used.
*
* @param name qualified name
* @param index index
@@ -986,12 +983,12 @@
}
/**
- * Creates a new path element with the given qualified name and index.
- * If the name is equals to the name of a special element, like the
- * {@link #PARENT_ELEMENT},{@link #CURRENT_ELEMENT} or the
- * {@link #ROOT_ELEMENT}, then it's instance is returned.
+ * Creates a path element with the given qualified name.
+ * The created path element does not contain an explicit index.
* <p/>
- * the private constructor must never be called but from these 2 methods.
+ * If the specified name denotes a <i>special</i> path element (either
+ * {@link Path#PARENT_ELEMENT}, {@link Path#CURRENT_ELEMENT} or
+ * {@link Path#ROOT_ELEMENT}) then the associated constant is returned.
*
* @param name the name of the element
* @return a path element
@@ -1012,30 +1009,34 @@
}
/**
- * Creates a new path element with the given qualified name and index.
- * If the name is equals to the name of a special element, like the
- * {@link #PARENT_ELEMENT},{@link #CURRENT_ELEMENT} or the
- * {@link #ROOT_ELEMENT}, then it's instance is returned.
+ * Same as {@link #create(QName)} except that an explicit index can be
+ * specified.
* <p/>
- * the private constructor must never be called but from these 2 methods.
+ * Note that an IllegalArgumentException will be thrown if the specified
+ * name denotes a <i>special</i> path element (either
+ * {@link Path#PARENT_ELEMENT}, {@link Path#CURRENT_ELEMENT} or
+ * {@link Path#ROOT_ELEMENT}) since an explicit index is not allowed
+ * in this context.
*
* @param name the name of the element
* @param index the 1-based index.
* @return a path element
- * @throws IllegalArgumentException if the name is <code>null</code> or
- * if the given index is less than 1.
+ * @throws IllegalArgumentException if the name is <code>null</code>,
+ * if the given index is less than 1
+ * or if name denoting a special path
+ * element and an index greater than 1
+ * have been specified.
*/
public static PathElement create(QName name, int index) {
if (index < INDEX_DEFAULT) {
throw new IllegalArgumentException("index is 1-based.");
} else if (name == null) {
throw new IllegalArgumentException("name must not be null");
- } else if (name.equals(PARENT_ELEMENT.getName())) {
- return PARENT_ELEMENT;
- } else if (name.equals(CURRENT_ELEMENT.getName())) {
- return CURRENT_ELEMENT;
- } else if (name.equals(ROOT_ELEMENT.getName())) {
- return ROOT_ELEMENT;
+ } else if (name.equals(PARENT_ELEMENT.getName())
+ || name.equals(CURRENT_ELEMENT.getName())
+ || name.equals(ROOT_ELEMENT.getName())) {
+ throw new IllegalArgumentException(
+ "special path elements (root, '.' and '..') can not have an explicit index");
} else {
return new NameElement(name, index);
}
@@ -1305,10 +1306,10 @@
}
/**
- * Returns the JCR name of this path element.
- *
- * @param resolver
- * @return ""
+ * {@inheritDoc}
+ * <p/>
+ * Returns <code>""</code>
+ * @return <code>""</code>
*/
public String toJCRName(NamespaceResolver resolver) {
return "";
@@ -1379,10 +1380,10 @@
}
/**
- * Returns the JCR name of this path element.
- *
- * @param resolver
- * @return {@link #LITERAL}
+ * {@inheritDoc}
+ * <p/>
+ * Returns <code>"."</code>
+ * @return <code>"."</code>
*/
public String toJCRName(NamespaceResolver resolver) {
return LITERAL;
@@ -1452,10 +1453,10 @@
}
/**
- * Returns the JCR name of this path element.
- *
- * @param resolver
- * @return {@link #LITERAL}
+ * {@inheritDoc}
+ * <p/>
+ * Returns <code>".."</code>
+ * @return <code>".."</code>
*/
public String toJCRName(NamespaceResolver resolver) {
return LITERAL;
Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/QName.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/QName.java?rev=428023&r1=428022&r2=428023&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/QName.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/name/QName.java Wed Aug 2 08:25:45 2006
@@ -512,7 +512,7 @@
/** The internalized namespace URI of this qualified name. */
private final String namespaceURI;
- /** The internalized local part of this qualified name. */
+ /** The local part of this qualified name. */
private final String localName;
/**
@@ -534,27 +534,15 @@
if (localName == null) {
throw new IllegalArgumentException("invalid localName specified");
}
- // internalize only namespaceURI to improve performance of QName
- // comparisons. Please note that we do not internalize the localname
- // since this could blow perm space for big repositories.
+ // internalize namespaceURI to improve performance of QName comparisons.
+ // Please note that we do *not* internalize localName since this could
+ // blow perm space for large repositories
this.namespaceURI = namespaceURI.intern();
this.localName = localName;
hash = 0;
}
- /**
- * Returns a new instance of this class with the same namespace URI and
- * local name as has been deserialized.
- * <p>
- * If just sing plain serialization, the strings are just created but not
- * internalized.
- */
- private Object readResolve() {
- return new QName(namespaceURI, localName);
- }
-
//------------------------------------------------------< factory methods >
-
/**
* Parses the given prefixed JCR name into a qualified name using the
* given namespace resolver.
@@ -708,8 +696,7 @@
}
if (obj instanceof QName) {
QName other = (QName) obj;
- // namespaceURI is internalized, we only have to compare their
- // references
+ // we can use == operator for namespaceURI since it is internalized
return namespaceURI == other.namespaceURI
&& localName.equals(other.localName);
}
@@ -763,12 +750,23 @@
if (this == o) {
return 0;
}
+
QName other = (QName) o;
- // == comparison ok, because of .intern() strings
+ // we can use == operator for namespaceURI since it is internalized
if (namespaceURI == other.namespaceURI) {
return localName.compareTo(other.localName);
} else {
return namespaceURI.compareTo(other.namespaceURI);
}
+ }
+
+ //-------------------------------------------------< Serializable support >
+ /**
+ * Creates a new <code>QName</code> instance using the proper constructor
+ * during deserialization in order to make sure that internalized strings
+ * are used where appropriate.
+ */
+ private Object readResolve() {
+ return new QName(namespaceURI, localName);
}
}