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/16 14:04:55 UTC
svn commit: r1171521 - in
/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src:
main/java/org/apache/jackrabbit/spi/commons/name/
test/java/org/apache/jackrabbit/spi/commons/name/
Author: mduerig
Date: Fri Sep 16 12:04:55 2011
New Revision: 1171521
URL: http://svn.apache.org/viewvc?rev=1171521&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP)
special case non default index elements in path
Added:
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NamePathWithIndex.java
Modified:
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/AbstractPath.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NamePath.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/PathBuilder.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/PathFactoryImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/ElementTest.java
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/AbstractPath.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/AbstractPath.java?rev=1171521&r1=1171520&r2=1171521&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/AbstractPath.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/AbstractPath.java Fri Sep 16 12:04:55 2011
@@ -146,7 +146,7 @@ abstract class AbstractPath implements P
@Override
public final Path resolve(Element element) {
if (element.denotesName()) {
- return new NamePath(this, element.getName(), element.getIndex());
+ return NamePath.create(this, element.getName(), element.getIndex());
} else if (element.denotesParent()) {
if (isAbsolute() && getDepth() == 0) {
throw new IllegalArgumentException(
@@ -178,7 +178,7 @@ abstract class AbstractPath implements P
} else if (relative.denotesParent()) {
return new ParentPath(this);
} else if (relative.denotesName()) {
- return new NamePath(this, relative.getName(), relative.getIndex());
+ return NamePath.create(this, relative.getName(), relative.getIndex());
} else {
throw new IllegalArgumentException(
"Unknown path type: " + relative);
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NamePath.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NamePath.java?rev=1171521&r1=1171520&r2=1171521&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NamePath.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NamePath.java Fri Sep 16 12:04:55 2011
@@ -21,7 +21,7 @@ import org.apache.jackrabbit.spi.Path;
import javax.jcr.RepositoryException;
-final class NamePath extends RelativePath {
+class NamePath extends RelativePath {
/** Serial version UID */
private static final long serialVersionUID = -2887665244213430950L;
@@ -31,24 +31,19 @@ final class NamePath extends RelativePat
*/
private final Name name;
- /**
- * Optional index of the last path element. Set to
- * {@link Path#INDEX_UNDEFINED} if not explicitly specified,
- * otherwise contains the 1-based index.
- */
- private final int index;
+ public static NamePath create(Path parent, Name name, int index) {
+ return index == INDEX_UNDEFINED
+ ? new NamePath(parent, name)
+ : new NamePathWithIndex(parent, name, index);
+ }
- public NamePath(Path parent, Name name, int index) {
+ protected NamePath(Path parent, Name name) {
super(parent);
if (name == null) {
throw new IllegalArgumentException("Name must not be null");
}
- if (index < 0) {
- throw new IllegalArgumentException("Index must be non negative");
- }
this.name = name;
- this.index = index;
}
@Override
@@ -67,11 +62,7 @@ final class NamePath extends RelativePat
@Override
protected String getElementString() {
- if (index > Path.INDEX_DEFAULT) {
- return name + "[" + index + ']';
- } else {
- return name.toString();
- }
+ return name.toString();
}
@Override
@@ -79,20 +70,6 @@ final class NamePath extends RelativePat
return name;
}
- @Override
- public int getIndex() {
- return index;
- }
-
- @Override
- public int getNormalizedIndex() {
- if (index == INDEX_UNDEFINED) {
- return INDEX_DEFAULT;
- } else {
- return index;
- }
- }
-
/**
* Returns {@code true} as this path ends in a named element.
*
@@ -125,7 +102,7 @@ final class NamePath extends RelativePat
if (normalized.denotesCurrent()) {
normalized = null; // special case: ./a
}
- return new NamePath(normalized, name, index);
+ return create(normalized, name, getIndex());
}
}
@@ -134,7 +111,7 @@ final class NamePath extends RelativePat
if (isCanonical()) {
return this;
} else if (parent != null) {
- return new NamePath(parent.getCanonicalPath(), name, index);
+ return create(parent.getCanonicalPath(), name, getIndex());
} else {
throw new RepositoryException(
"There is no canonical representation of " + this);
@@ -149,7 +126,7 @@ final class NamePath extends RelativePat
@Override
public AbstractPath getLastElement() {
if (parent != null) {
- return new NamePath(null, name, index);
+ return create(null, name, getIndex());
} else {
return this;
}
Added: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NamePathWithIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NamePathWithIndex.java?rev=1171521&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NamePathWithIndex.java (added)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NamePathWithIndex.java Fri Sep 16 12:04:55 2011
@@ -0,0 +1,41 @@
+package org.apache.jackrabbit.spi.commons.name;
+
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.Path;
+
+class NamePathWithIndex extends NamePath {
+
+ /**
+ * Optional index of the last path element. Set to
+ * {@link Path#INDEX_UNDEFINED} if not explicitly specified,
+ * otherwise contains the 1-based index.
+ */
+ private final int index;
+
+ public NamePathWithIndex(Path parent, Name name, int index) {
+ super(parent, name);
+ if (index < 0) {
+ throw new IllegalArgumentException("Index must be non negative");
+ }
+
+ this.index = index;
+ }
+
+ @Override
+ protected String getElementString() {
+ return index > Path.INDEX_DEFAULT
+ ? super.getElementString() + '[' + index + ']'
+ : super.getElementString();
+ }
+
+ @Override
+ public int getIndex() {
+ return index;
+ }
+
+ @Override
+ public int getNormalizedIndex() {
+ return index;
+ }
+
+}
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/PathBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/PathBuilder.java?rev=1171521&r1=1171520&r2=1171521&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/PathBuilder.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/PathBuilder.java Fri Sep 16 12:04:55 2011
@@ -172,7 +172,7 @@ public final class PathBuilder {
* @param index
*/
public void addLast(Name name, int index) {
- path = new NamePath(path, name, index);
+ path = NamePath.create(path, name, index);
}
/**
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/PathFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/PathFactoryImpl.java?rev=1171521&r1=1171520&r2=1171521&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/PathFactoryImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/PathFactoryImpl.java Fri Sep 16 12:04:55 2011
@@ -72,7 +72,7 @@ public class PathFactoryImpl implements
if (RootPath.NAME.equals(name)) {
throw new IllegalArgumentException();
}
- Path path = new NamePath(parent, name, index);
+ Path path = NamePath.create(parent, name, index);
if (normalize) {
return path.getNormalizedPath();
} else {
@@ -121,7 +121,7 @@ public class PathFactoryImpl implements
throw new IllegalArgumentException();
}
} else {
- return new NamePath(null, name, index);
+ return NamePath.create(null, name, index);
}
}
@@ -132,7 +132,7 @@ public class PathFactoryImpl implements
} else if (element.denotesIdentifier()) {
return new IdentifierPath(element.getIdentifier());
} else if (element.denotesName()) {
- return new NamePath(null, element.getName(), element.getIndex());
+ return NamePath.create(null, element.getName(), element.getIndex());
} else if (element.denotesParent()) {
return ParentPath.PARENT_PATH;
} else if (element.denotesRoot()) {
@@ -158,7 +158,7 @@ public class PathFactoryImpl implements
}
path = new IdentifierPath(element.getIdentifier());
} else if (element.denotesName()) {
- path = new NamePath(path, element.getName(), element.getIndex());
+ path = NamePath.create(path, element.getName(), element.getIndex());
} else if (element.denotesParent()) {
if (path != null && path.isAbsolute() && path.getDepth() == 0) {
throw new IllegalArgumentException();
@@ -215,7 +215,7 @@ public class PathFactoryImpl implements
} else if (name.equals(RootPath.NAME)) {
return RootPath.ROOT_PATH;
} else {
- return new NamePath(null, name, Path.INDEX_UNDEFINED);
+ return NamePath.create(null, name, Path.INDEX_UNDEFINED);
}
}
@@ -236,7 +236,7 @@ public class PathFactoryImpl implements
"Special path elements (root, '.' and '..') can not have an explicit index: "
+ name + '[' + index + ']');
} else {
- return new NamePath(null, name, index);
+ return NamePath.create(null, name, index);
}
}
@@ -271,7 +271,7 @@ public class PathFactoryImpl implements
int pos = elementString.indexOf('[');
if (pos == -1) {
Name name = factory.create(elementString);
- return new NamePath(null, name, Path.INDEX_UNDEFINED);
+ return NamePath.create(null, name, Path.INDEX_UNDEFINED);
}
Name name = factory.create(elementString.substring(0, pos));
int pos1 = elementString.indexOf(']');
@@ -283,7 +283,7 @@ public class PathFactoryImpl implements
if (index < 1) {
throw new IllegalArgumentException("invalid PathElement literal: " + elementString + " (index is 1-based)");
}
- return new NamePath(null, name, index);
+ return NamePath.create(null, name, index);
} catch (NumberFormatException e) {
throw new IllegalArgumentException("invalid PathElement literal: " + elementString + " (" + e.getMessage() + ')');
}
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/ElementTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/ElementTest.java?rev=1171521&r1=1171520&r2=1171521&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/ElementTest.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/ElementTest.java Fri Sep 16 12:04:55 2011
@@ -58,8 +58,7 @@ public class ElementTest extends TestCas
}
public void testNameElement() {
- Element element =
- new NamePath(null, createName("test"), Path.INDEX_UNDEFINED);
+ Element element = NamePath.create(null, createName("test"), Path.INDEX_UNDEFINED);
assertFalse(element.denotesCurrent());
assertFalse(element.denotesIdentifier());
assertTrue(element.denotesName());
@@ -72,7 +71,7 @@ public class ElementTest extends TestCas
}
public void testIndexedNameElement() {
- Element element = new NamePath(null, createName("test"), 123);
+ Element element = NamePath.create(null, createName("test"), 123);
assertFalse(element.denotesCurrent());
assertFalse(element.denotesIdentifier());
assertTrue(element.denotesName());