You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2007/10/30 11:02:57 UTC
svn commit: r590014 [8/11] - in /jackrabbit/trunk: jackrabbit-core/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jou...
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/sql/QueryFormat.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/sql/QueryFormat.java?rev=590014&r1=590013&r2=590014&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/sql/QueryFormat.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/sql/QueryFormat.java Tue Oct 30 03:02:41 2007
@@ -32,14 +32,14 @@
import org.apache.jackrabbit.core.query.RelationQueryNode;
import org.apache.jackrabbit.core.query.TextsearchQueryNode;
import org.apache.jackrabbit.core.query.PropertyFunctionQueryNode;
-import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.jackrabbit.name.NoPrefixDeclaredException;
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.name.NameFormat;
-import org.apache.jackrabbit.name.Path;
+import org.apache.jackrabbit.name.NameConstants;
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.Path;
import org.apache.jackrabbit.util.ISO8601;
+import org.apache.jackrabbit.conversion.NameResolver;
import javax.jcr.query.InvalidQueryException;
+import javax.jcr.NamespaceException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
@@ -54,7 +54,7 @@
/**
* Will be used to resolve QNames
*/
- private final NamespaceResolver resolver;
+ private final NameResolver resolver;
/**
* The String representation of the query node tree
@@ -71,7 +71,7 @@
*/
private List nodeTypes = new ArrayList();
- private QueryFormat(QueryRootNode root, NamespaceResolver resolver)
+ private QueryFormat(QueryRootNode root, NameResolver resolver)
throws InvalidQueryException {
this.resolver = resolver;
statement = root.accept(this, new StringBuffer()).toString();
@@ -91,7 +91,7 @@
* @throws InvalidQueryException the query node tree cannot be represented
* as a SQL <code>String</code>.
*/
- public static String toString(QueryRootNode root, NamespaceResolver resolver)
+ public static String toString(QueryRootNode root, NameResolver resolver)
throws InvalidQueryException {
return new QueryFormat(root, resolver).toString();
}
@@ -112,7 +112,7 @@
try {
sb.append("SELECT");
- QName[] selectProps = node.getSelectProperties();
+ Name[] selectProps = node.getSelectProperties();
if (selectProps.length == 0) {
sb.append(" *");
} else {
@@ -151,7 +151,7 @@
String comma = "";
int ntCount = 0;
for (Iterator it = nodeTypes.iterator(); it.hasNext(); ntCount++) {
- QName nt = (QName) it.next();
+ Name nt = (Name) it.next();
sb.append(comma).append(" ");
appendName(nt, resolver, sb);
comma = ",";
@@ -159,7 +159,7 @@
if (ntCount == 0) {
sb.append(" ");
- sb.append(NameFormat.format(QName.NT_BASE, resolver));
+ sb.append(resolver.getJCRName(NameConstants.NT_BASE));
}
// append WHERE clause
@@ -181,7 +181,7 @@
}
node.getLocationNode().accept(this, sb);
}
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
@@ -259,7 +259,7 @@
StringBuffer sb = (StringBuffer) data;
try {
appendName(node.getPropertyName(), resolver, sb);
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
sb.append("='").append(node.getValue()).append("'");
@@ -285,7 +285,7 @@
} else {
try {
appendName(node.getRelativePath().getNameElement().getName(), resolver, sb);
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
}
@@ -300,7 +300,7 @@
try {
if (containsDescendantOrSelf(node)) {
sb.append("(");
- sb.append(NameFormat.format(QName.JCR_PATH, resolver));
+ sb.append(resolver.getJCRName(NameConstants.JCR_PATH));
sb.append(" LIKE '");
LocationStepQueryNode[] steps = node.getPathSteps();
for (int i = 0; i < steps.length; i++) {
@@ -315,7 +315,7 @@
}
sb.append('\'');
sb.append(" OR ");
- sb.append(NameFormat.format(QName.JCR_PATH, resolver));
+ sb.append(resolver.getJCRName(NameConstants.JCR_PATH));
sb.append(" LIKE '");
for (int i = 0; i < steps.length; i++) {
if (steps[i].getNameTest() == null
@@ -328,7 +328,7 @@
}
sb.append("')");
} else if (containsAllChildrenMatch(node)) {
- sb.append(NameFormat.format(QName.JCR_PATH, resolver));
+ sb.append(resolver.getJCRName(NameConstants.JCR_PATH));
sb.append(" LIKE '");
StringBuffer path = new StringBuffer();
LocationStepQueryNode[] steps = node.getPathSteps();
@@ -342,12 +342,12 @@
sb.append(path);
sb.append('\'');
sb.append(" AND NOT ");
- sb.append(NameFormat.format(QName.JCR_PATH, resolver));
+ sb.append(resolver.getJCRName(NameConstants.JCR_PATH));
sb.append(" LIKE '");
sb.append(path).append("/%").append('\'');
} else {
// just do a best effort
- sb.append(NameFormat.format(QName.JCR_PATH, resolver));
+ sb.append(resolver.getJCRName(NameConstants.JCR_PATH));
sb.append(" LIKE '");
LocationStepQueryNode[] steps = node.getPathSteps();
for (int i = 0; i < steps.length; i++) {
@@ -359,7 +359,7 @@
}
sb.append('\'');
}
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
return sb;
@@ -372,8 +372,8 @@
} else {
if (node.getNameTest().getLocalName().length() > 0) {
try {
- sb.append(NameFormat.format(node.getNameTest(), resolver));
- } catch (NoPrefixDeclaredException e) {
+ sb.append(resolver.getJCRName(node.getNameTest()));
+ } catch (NamespaceException e) {
exceptions.add(e);
}
if (node.getIndex() == LocationStepQueryNode.NONE) {
@@ -462,7 +462,7 @@
if (node.getOperation() == OPERATION_LIKE && node.getStringValue().indexOf('\\') > -1) {
sb.append(" ESCAPE '\\'");
}
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
return sb;
@@ -483,7 +483,7 @@
}
comma = ",";
}
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
} else {
@@ -513,21 +513,21 @@
* <code>resolver</code>. The <code>name</code> is put in double quotes
* if the local part of <code>name</code> contains a space character.
*
- * @param name the <code>QName</code> to print.
+ * @param name the <code>Name</code> to print.
* @param resolver to resolve <code>name</code>.
* @param b where to output the <code>name</code>.
- * @throws NoPrefixDeclaredException if <code>name</code> contains a uri
+ * @throws NamespaceException if <code>name</code> contains a uri
* that is not declared in <code>resolver</code>.
*/
- private static void appendName(QName name,
- NamespaceResolver resolver,
+ private static void appendName(Name name,
+ NameResolver resolver,
StringBuffer b)
- throws NoPrefixDeclaredException {
+ throws NamespaceException {
boolean quote = name.getLocalName().indexOf(' ') > -1;
if (quote) {
b.append('"');
}
- b.append(NameFormat.format(name, resolver));
+ b.append(resolver.getJCRName(name));
if (quote) {
b.append('"');
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/xpath/QueryBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/xpath/QueryBuilder.java?rev=590014&r1=590013&r2=590014&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/xpath/QueryBuilder.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/xpath/QueryBuilder.java Tue Oct 30 03:02:41 2007
@@ -19,7 +19,7 @@
import org.apache.jackrabbit.core.query.QueryTreeBuilder;
import org.apache.jackrabbit.core.query.QueryRootNode;
import org.apache.jackrabbit.core.query.QueryNodeFactory;
-import org.apache.jackrabbit.name.NamespaceResolver;
+import org.apache.jackrabbit.conversion.NameResolver;
import javax.jcr.query.InvalidQueryException;
import javax.jcr.query.Query;
@@ -33,7 +33,7 @@
* @inheritDoc
*/
public QueryRootNode createQueryTree(String statement,
- NamespaceResolver resolver,
+ NameResolver resolver,
QueryNodeFactory factory)
throws InvalidQueryException {
return XPathQueryBuilder.createQuery(statement, resolver, factory);
@@ -57,7 +57,7 @@
/**
* @inheritDoc
*/
- public String toString(QueryRootNode root, NamespaceResolver resolver)
+ public String toString(QueryRootNode root, NameResolver resolver)
throws InvalidQueryException {
return XPathQueryBuilder.toString(root, resolver);
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/xpath/QueryFormat.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/xpath/QueryFormat.java?rev=590014&r1=590013&r2=590014&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/xpath/QueryFormat.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/xpath/QueryFormat.java Tue Oct 30 03:02:41 2007
@@ -33,15 +33,15 @@
import org.apache.jackrabbit.core.query.TextsearchQueryNode;
import org.apache.jackrabbit.core.query.PropertyFunctionQueryNode;
import org.apache.jackrabbit.core.query.DefaultQueryNodeVisitor;
-import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.jackrabbit.name.NoPrefixDeclaredException;
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.name.NameFormat;
-import org.apache.jackrabbit.name.Path;
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.Path;
import org.apache.jackrabbit.util.ISO8601;
import org.apache.jackrabbit.util.ISO9075;
+import org.apache.jackrabbit.conversion.NameResolver;
+import org.apache.jackrabbit.name.NameFactoryImpl;
import javax.jcr.query.InvalidQueryException;
+import javax.jcr.NamespaceException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
@@ -55,7 +55,7 @@
/**
* Will be used to resolve QNames
*/
- private final NamespaceResolver resolver;
+ private final NameResolver resolver;
/**
* The String representation of the query node tree
@@ -67,7 +67,7 @@
*/
private List exceptions = new ArrayList();
- private QueryFormat(QueryRootNode root, NamespaceResolver resolver)
+ private QueryFormat(QueryRootNode root, NameResolver resolver)
throws InvalidQueryException {
this.resolver = resolver;
statement = root.accept(this, new StringBuffer()).toString();
@@ -87,7 +87,7 @@
* @throws InvalidQueryException the query node tree cannot be represented
* as a XPath <code>String</code>.
*/
- public static String toString(QueryRootNode root, NamespaceResolver resolver)
+ public static String toString(QueryRootNode root, NameResolver resolver)
throws InvalidQueryException {
return new QueryFormat(root, resolver).toString();
}
@@ -109,7 +109,7 @@
if (node.getOrderNode() != null) {
node.getOrderNode().accept(this, data);
}
- QName[] selectProps = node.getSelectProperties();
+ Name[] selectProps = node.getSelectProperties();
if (selectProps.length > 0) {
sb.append('/');
boolean union = selectProps.length > 1;
@@ -121,9 +121,9 @@
try {
sb.append(pipe);
sb.append('@');
- NameFormat.format(ISO9075.encode(selectProps[i]), resolver, sb);
+ sb.append(resolver.getJCRName(encode(selectProps[i])));
pipe = "|";
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
}
@@ -173,11 +173,11 @@
QueryNode[] operands = node.getOperands();
if (operands.length > 0) {
try {
- NameFormat.format(XPathQueryBuilder.FN_NOT_10, resolver, sb);
+ sb.append(resolver.getJCRName(XPathQueryBuilder.FN_NOT_10));
sb.append("(");
operands[0].accept(this, sb);
sb.append(")");
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
}
@@ -188,10 +188,11 @@
StringBuffer sb = (StringBuffer) data;
sb.append("@");
try {
- NameFormat.format(ISO9075.encode(node.getPropertyName()), resolver, sb);
+ Name name = encode(node.getPropertyName());
+ sb.append(resolver.getJCRName(name));
sb.append("='");
- NameFormat.format(node.getValue(), resolver, sb);
- } catch (NoPrefixDeclaredException e) {
+ sb.append(resolver.getJCRName(node.getValue()));
+ } catch (NamespaceException e) {
exceptions.add(e);
}
sb.append("'");
@@ -206,13 +207,13 @@
public Object visit(TextsearchQueryNode node, Object data) {
StringBuffer sb = (StringBuffer) data;
try {
- NameFormat.format(XPathQueryBuilder.JCR_CONTAINS, resolver, sb);
+ sb.append(resolver.getJCRName(XPathQueryBuilder.JCR_CONTAINS));
sb.append("(");
Path relPath = node.getRelativePath();
if (relPath == null) {
sb.append(".");
} else {
- Path.PathElement[] elements = relPath.getElements();
+ Path.Element[] elements = relPath.getElements();
String slash = "";
for (int i = 0; i < elements.length; i++) {
sb.append(slash);
@@ -223,7 +224,8 @@
if (elements[i].getName().equals(RelationQueryNode.STAR_NAME_TEST)) {
sb.append("*");
} else {
- NameFormat.format(ISO9075.encode(elements[i].getName()), resolver, sb);
+ Name n = encode(elements[i].getName());
+ sb.append(resolver.getJCRName(n));
}
if (elements[i].getIndex() != 0) {
sb.append("[").append(elements[i].getIndex()).append("]");
@@ -233,7 +235,7 @@
sb.append(", '");
sb.append(node.getQuery().replaceAll("'", "''"));
sb.append("')");
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
return sb;
@@ -259,7 +261,7 @@
if (node.getIncludeDescendants()) {
sb.append('/');
}
- final QName[] nodeType = new QName[1];
+ final Name[] nodeType = new Name[1];
node.acceptOperands(new DefaultQueryNodeVisitor() {
public Object visit(NodeTypeQueryNode node, Object data) {
nodeType[0] = node.getValue();
@@ -276,11 +278,11 @@
} else {
try {
if (node.getNameTest().getLocalName().length() == 0) {
- NameFormat.format(XPathQueryBuilder.JCR_ROOT, resolver, sb);
+ sb.append(resolver.getJCRName(XPathQueryBuilder.JCR_ROOT));
} else {
- NameFormat.format(ISO9075.encode(node.getNameTest()), resolver, sb);
+ sb.append(resolver.getJCRName(encode(node.getNameTest())));
}
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
}
@@ -288,8 +290,8 @@
if (nodeType[0] != null) {
sb.append(", ");
try {
- NameFormat.format(ISO9075.encode(nodeType[0]), resolver, sb);
- } catch (NoPrefixDeclaredException e) {
+ sb.append(resolver.getJCRName(encode(nodeType[0])));
+ } catch (NamespaceException e) {
exceptions.add(e);
}
sb.append(")");
@@ -314,17 +316,17 @@
public Object visit(DerefQueryNode node, Object data) {
StringBuffer sb = (StringBuffer) data;
try {
- NameFormat.format(XPathQueryBuilder.JCR_DEREF, resolver, sb);
+ sb.append(resolver.getJCRName(XPathQueryBuilder.JCR_DEREF));
sb.append("(@");
- NameFormat.format(ISO9075.encode(node.getRefProperty()), resolver, sb);
+ sb.append(resolver.getJCRName(encode(node.getRefProperty())));
sb.append(", '");
if (node.getNameTest() == null) {
sb.append("*");
} else {
- NameFormat.format(ISO9075.encode(node.getNameTest()), resolver, sb);
+ sb.append(resolver.getJCRName(encode(node.getNameTest())));
}
sb.append("')");
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
return sb;
@@ -340,9 +342,9 @@
if (relPath == null) {
propPath.append(".");
} else if (relPath.getNameElement().getName().equals(XPathQueryBuilder.FN_POSITION_FULL)) {
- NameFormat.format(XPathQueryBuilder.FN_POSITION_FULL, resolver, propPath);
+ propPath.append(resolver.getJCRName(XPathQueryBuilder.FN_POSITION_FULL));
} else {
- Path.PathElement[] elements = relPath.getElements();
+ Path.Element[] elements = relPath.getElements();
String slash = "";
for (int i = 0; i < elements.length; i++) {
propPath.append(slash);
@@ -353,7 +355,7 @@
if (elements[i].getName().equals(RelationQueryNode.STAR_NAME_TEST)) {
propPath.append("*");
} else {
- NameFormat.format(ISO9075.encode(elements[i].getName()), resolver, propPath);
+ propPath.append(resolver.getJCRName(encode(elements[i].getName())));
}
if (elements[i].getIndex() != 0) {
propPath.append("[").append(elements[i].getIndex()).append("]");
@@ -389,7 +391,7 @@
sb.append(propPath).append(" le ");
appendValue(node, sb);
} else if (node.getOperation() == OPERATION_LIKE) {
- NameFormat.format(XPathQueryBuilder.JCR_LIKE, resolver, sb);
+ sb.append(resolver.getJCRName(XPathQueryBuilder.JCR_LIKE));
sb.append("(").append(propPath).append(", ");
appendValue(node, sb);
sb.append(")");
@@ -406,23 +408,23 @@
sb.append(propPath).append(" ne ");
appendValue(node, sb);
} else if (node.getOperation() == OPERATION_NULL) {
- NameFormat.format(XPathQueryBuilder.FN_NOT, resolver, sb);
+ sb.append(resolver.getJCRName(XPathQueryBuilder.FN_NOT));
sb.append("(").append(propPath).append(")");
} else if (node.getOperation() == OPERATION_NOT_NULL) {
sb.append(propPath);
} else if (node.getOperation() == OPERATION_SIMILAR) {
- NameFormat.format(XPathQueryBuilder.REP_SIMILAR, resolver, sb);
+ sb.append(resolver.getJCRName(XPathQueryBuilder.REP_SIMILAR));
sb.append("(").append(propPath).append(", ");
appendValue(node, sb);
} else if (node.getOperation() == OPERATION_SPELLCHECK) {
- NameFormat.format(XPathQueryBuilder.REP_SPELLCHECK, resolver, sb);
+ sb.append(resolver.getJCRName(XPathQueryBuilder.REP_SPELLCHECK));
sb.append("(");
appendValue(node, sb);
sb.append(")");
} else {
exceptions.add(new InvalidQueryException("Invalid operation: " + node.getOperation()));
}
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
return sb;
@@ -436,15 +438,15 @@
try {
for (int i = 0; i < specs.length; i++) {
sb.append(comma);
- QName prop = ISO9075.encode(specs[i].getProperty());
+ Name prop = encode(specs[i].getProperty());
sb.append(" @");
- NameFormat.format(prop, resolver, sb);
+ sb.append(resolver.getJCRName(prop));
if (!specs[i].isAscending()) {
sb.append(" descending");
}
comma = ",";
}
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
return data;
@@ -455,15 +457,15 @@
String functionName = node.getFunctionName();
try {
if (functionName.equals(PropertyFunctionQueryNode.LOWER_CASE)) {
- sb.insert(0, NameFormat.format(XPathQueryBuilder.FN_LOWER_CASE, resolver) + "(");
+ sb.insert(0, resolver.getJCRName(XPathQueryBuilder.FN_LOWER_CASE) + "(");
sb.append(")");
} else if (functionName.equals(PropertyFunctionQueryNode.UPPER_CASE)) {
- sb.insert(0, NameFormat.format(XPathQueryBuilder.FN_UPPER_CASE, resolver) + "(");
+ sb.insert(0, resolver.getJCRName(XPathQueryBuilder.FN_UPPER_CASE) + "(");
sb.append(")");
} else {
exceptions.add(new InvalidQueryException("Unsupported function: " + functionName));
}
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
return sb;
@@ -477,11 +479,11 @@
*
* @param node the relation node.
* @param b where to append the value.
- * @throws NoPrefixDeclaredException if a prefix declaration is missing for
+ * @throws NamespaceException if a prefix declaration is missing for
* a namespace URI.
*/
private void appendValue(RelationQueryNode node, StringBuffer b)
- throws NoPrefixDeclaredException {
+ throws NamespaceException {
if (node.getValueType() == TYPE_LONG) {
b.append(node.getLongValue());
} else if (node.getValueType() == TYPE_DOUBLE) {
@@ -491,7 +493,7 @@
} else if (node.getValueType() == TYPE_DATE || node.getValueType() == TYPE_TIMESTAMP) {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.setTime(node.getDateValue());
- NameFormat.format(XPathQueryBuilder.XS_DATETIME, resolver, b);
+ b.append(resolver.getJCRName(XPathQueryBuilder.XS_DATETIME));
b.append("('").append(ISO8601.format(cal)).append("')");
} else if (node.getValueType() == TYPE_POSITION) {
if (node.getPositionValue() == LocationStepQueryNode.LAST) {
@@ -501,6 +503,15 @@
}
} else {
exceptions.add(new InvalidQueryException("Invalid type: " + node.getValueType()));
+ }
+ }
+
+ private static Name encode(Name name) {
+ String encoded = ISO9075.encode(name.getLocalName());
+ if (encoded.equals(name.getLocalName())) {
+ return name;
+ } else {
+ return NameFactoryImpl.getInstance().create(name.getNamespaceURI(), encoded);
}
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/xpath/XPathQueryBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/xpath/XPathQueryBuilder.java?rev=590014&r1=590013&r2=590014&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/xpath/XPathQueryBuilder.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/xpath/XPathQueryBuilder.java Tue Oct 30 03:02:41 2007
@@ -16,6 +16,8 @@
*/
package org.apache.jackrabbit.core.query.xpath;
+import org.apache.jackrabbit.conversion.MalformedPathException;
+import org.apache.jackrabbit.conversion.NameResolver;
import org.apache.jackrabbit.core.query.DerefQueryNode;
import org.apache.jackrabbit.core.query.LocationStepQueryNode;
import org.apache.jackrabbit.core.query.NAryQueryNode;
@@ -31,18 +33,22 @@
import org.apache.jackrabbit.core.query.PropertyFunctionQueryNode;
import org.apache.jackrabbit.core.query.DefaultQueryNodeVisitor;
import org.apache.jackrabbit.core.query.QueryNodeFactory;
-import org.apache.jackrabbit.name.NameException;
-import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.jackrabbit.name.NoPrefixDeclaredException;
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.name.NameFormat;
-import org.apache.jackrabbit.name.Path;
-import org.apache.jackrabbit.name.MalformedPathException;
+import org.apache.jackrabbit.conversion.NameException;
+import org.apache.jackrabbit.name.NameFactoryImpl;
+import org.apache.jackrabbit.name.PathBuilder;
+import org.apache.jackrabbit.name.PathFactoryImpl;
+import org.apache.jackrabbit.name.NameConstants;
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.NameFactory;
+import org.apache.jackrabbit.spi.PathFactory;
import org.apache.jackrabbit.util.ISO8601;
import org.apache.jackrabbit.util.ISO9075;
import org.apache.commons.collections.map.ReferenceMap;
import javax.jcr.query.InvalidQueryException;
+import javax.jcr.RepositoryException;
+import javax.jcr.NamespaceException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Calendar;
@@ -54,110 +60,113 @@
*/
public class XPathQueryBuilder implements XPathVisitor, XPathTreeConstants {
+ private static final NameFactory NAME_FACTORY = NameFactoryImpl.getInstance();
+ private static final PathFactory PATH_FACTORY = PathFactoryImpl.getInstance();
+
/**
* Namespace uri for xpath functions. See also class SearchManager
*/
static final String NS_FN_URI = "http://www.w3.org/2005/xpath-functions";
/**
- * QName for 'fn:not'
+ * Name for 'fn:not'
*/
- static final QName FN_NOT = new QName(NS_FN_URI, "not");
+ static final Name FN_NOT = NAME_FACTORY.create(NS_FN_URI, "not");
/**
- * QName for 'fn:lower-case'
+ * Name for 'fn:lower-case'
*/
- static final QName FN_LOWER_CASE = new QName(NS_FN_URI, "lower-case");
+ static final Name FN_LOWER_CASE = NAME_FACTORY.create(NS_FN_URI, "lower-case");
/**
- * QName for 'fn:upper-case'
+ * Name for 'fn:upper-case'
*/
- static final QName FN_UPPER_CASE = new QName(NS_FN_URI, "upper-case");
+ static final Name FN_UPPER_CASE = NAME_FACTORY.create(NS_FN_URI, "upper-case");
/**
- * QName for 'not' as defined in XPath 1.0 (no prefix)
+ * Name for 'not' as defined in XPath 1.0 (no prefix)
*/
- static final QName FN_NOT_10 = new QName("", "not");
+ static final Name FN_NOT_10 = NAME_FACTORY.create("", "not");
/**
- * QName for true function.
+ * Name for true function.
*/
- static final QName FN_TRUE = new QName("", "true");
+ static final Name FN_TRUE = NAME_FACTORY.create("", "true");
/**
- * QName for false function.
+ * Name for false function.
*/
- static final QName FN_FALSE = new QName("", "false");
+ static final Name FN_FALSE = NAME_FACTORY.create("", "false");
/**
- * QName for position function.
+ * Name for position function.
*/
- static final QName FN_POSITION = new QName("", "position");
+ static final Name FN_POSITION = NAME_FACTORY.create("", "position");
/**
- * QName for element function.
+ * Name for element function.
*/
- static final QName FN_ELEMENT = new QName("", "element");
+ static final Name FN_ELEMENT = NAME_FACTORY.create("", "element");
/**
- * QName for the full position function including bracket
+ * Name for the full position function including bracket
*/
- static final QName FN_POSITION_FULL = new QName("", "position()");
+ static final Name FN_POSITION_FULL = NAME_FACTORY.create("", "position()");
/**
- * QName for jcr:xmltext
+ * Name for jcr:xmltext
*/
- static final QName JCR_XMLTEXT = new QName(QName.NS_JCR_URI, "xmltext");
+ static final Name JCR_XMLTEXT = NAME_FACTORY.create(Name.NS_JCR_URI, "xmltext");
/**
- * QName for last function.
+ * Name for last function.
*/
- static final QName FN_LAST = new QName("", "last");
+ static final Name FN_LAST = NAME_FACTORY.create("", "last");
/**
- * QName for first function.
+ * Name for first function.
*/
- static final QName FN_FIRST = new QName("", "first");
+ static final Name FN_FIRST = NAME_FACTORY.create("", "first");
/**
- * QName for xs:dateTime
+ * Name for xs:dateTime
*/
- static final QName XS_DATETIME = new QName("http://www.w3.org/2001/XMLSchema", "dateTime");
+ static final Name XS_DATETIME = NAME_FACTORY.create("http://www.w3.org/2001/XMLSchema", "dateTime");
/**
- * QName for jcr:like
+ * Name for jcr:like
*/
- static final QName JCR_LIKE = new QName(QName.NS_JCR_URI, "like");
+ static final Name JCR_LIKE = NAME_FACTORY.create(Name.NS_JCR_URI, "like");
/**
- * QName for jcr:deref
+ * Name for jcr:deref
*/
- static final QName JCR_DEREF = new QName(QName.NS_JCR_URI, "deref");
+ static final Name JCR_DEREF = NAME_FACTORY.create(Name.NS_JCR_URI, "deref");
/**
- * QName for jcr:contains
+ * Name for jcr:contains
*/
- static final QName JCR_CONTAINS = new QName(QName.NS_JCR_URI, "contains");
+ static final Name JCR_CONTAINS = NAME_FACTORY.create(Name.NS_JCR_URI, "contains");
/**
- * QName for jcr:root
+ * Name for jcr:root
*/
- static final QName JCR_ROOT = new QName(QName.NS_JCR_URI, "root");
+ static final Name JCR_ROOT = NAME_FACTORY.create(Name.NS_JCR_URI, "root");
/**
- * QName for jcr:score
+ * Name for jcr:score
*/
- static final QName JCR_SCORE = new QName(QName.NS_JCR_URI, "score");
+ static final Name JCR_SCORE = NAME_FACTORY.create(Name.NS_JCR_URI, "score");
/**
- * QName for rep:similar
+ * Name for rep:similar
*/
- static final QName REP_SIMILAR = new QName(QName.NS_REP_URI, "similar");
+ static final Name REP_SIMILAR = NAME_FACTORY.create(Name.NS_REP_URI, "similar");
/**
- * QName for rep:spellcheck
+ * Name for rep:spellcheck
*/
- static final QName REP_SPELLCHECK = new QName(QName.NS_REP_URI, "spellcheck");
+ static final Name REP_SPELLCHECK = NAME_FACTORY.create(Name.NS_REP_URI, "spellcheck");
/**
* String constant for operator 'eq'
@@ -230,9 +239,9 @@
private final QueryRootNode root;
/**
- * The {@link NamespaceResolver} in use
+ * The {@link NameResolver} in use
*/
- private final NamespaceResolver resolver;
+ private final NameResolver resolver;
/**
* List of exceptions that are created while building the query tree
@@ -242,7 +251,7 @@
/**
* Temporary relative path
*/
- private Path.PathBuilder tmpRelPath;
+ private PathBuilder tmpRelPath;
/**
* The query node factory.
@@ -253,12 +262,12 @@
* Creates a new <code>XPathQueryBuilder</code> instance.
*
* @param statement the XPath statement.
- * @param resolver the namespace resolver to use.
+ * @param resolver the name resolver to use.
* @param factory the query node factory.
* @throws InvalidQueryException if the XPath statement is malformed.
*/
private XPathQueryBuilder(String statement,
- NamespaceResolver resolver,
+ NameResolver resolver,
QueryNodeFactory factory)
throws InvalidQueryException {
this.resolver = resolver;
@@ -309,13 +318,13 @@
* passed query node <code>factory</code>.
*
* @param statement the XPath statement.
- * @param resolver the namespace resolver to use.
+ * @param resolver the name resolver to use.
* @param factory the query node factory.
* @return the <code>QueryNode</code> tree for the XPath statement.
* @throws InvalidQueryException if the XPath statement is malformed.
*/
public static QueryRootNode createQuery(String statement,
- NamespaceResolver resolver,
+ NameResolver resolver,
QueryNodeFactory factory)
throws InvalidQueryException {
return new XPathQueryBuilder(statement, resolver, factory).getRootNode();
@@ -325,12 +334,12 @@
* Creates a String representation of the query node tree in XPath syntax.
*
* @param root the root of the query node tree.
- * @param resolver to resolve QNames.
+ * @param resolver to resolve <code>Name</code>s.
* @return a String representation of the query node tree.
* @throws InvalidQueryException if the query node tree cannot be converted
* into a String representation due to restrictions in XPath.
*/
- public static String toString(QueryRootNode root, NamespaceResolver resolver)
+ public static String toString(QueryRootNode root, NameResolver resolver)
throws InvalidQueryException {
return QueryFormat.toString(root, resolver);
}
@@ -411,7 +420,7 @@
null, RelationQueryNode.OPERATION_NOT_NULL);
node.childrenAccept(this, tmp);
if (tmpRelPath == null) {
- tmpRelPath = new Path.PathBuilder();
+ tmpRelPath = new PathBuilder();
}
tmpRelPath.addLast(tmp.getRelativePath().getNameElement());
}
@@ -450,11 +459,13 @@
LocationStepQueryNode loc = (LocationStepQueryNode) queryNode;
String ntName = ((SimpleNode) node.jjtGetChild(0)).getValue();
try {
- QName nt = NameFormat.parse(ntName, resolver);
+ Name nt = resolver.getQName(ntName);
NodeTypeQueryNode nodeType = factory.createNodeTypeQueryNode(loc, nt);
loc.addPredicate(nodeType);
} catch (NameException e) {
exceptions.add(new InvalidQueryException("Not a valid name: " + ntName));
+ } catch (NamespaceException e) {
+ exceptions.add(new InvalidQueryException("Not a valid name: " + ntName));
}
}
break;
@@ -554,7 +565,7 @@
try {
Path relPath = tmpRelPath.getPath();
for (int i = 0; i < relPath.getLength(); i++) {
- node.addPathElement(relPath.getElement(i));
+ node.addPathElement(relPath.getElements()[i]);
}
} catch (MalformedPathException e) {
// should never happen
@@ -594,7 +605,7 @@
}
/**
- * Assigns a QName to one of the follwing QueryNodes:
+ * Assigns a Name to one of the follwing QueryNodes:
* {@link RelationQueryNode}, {@link DerefQueryNode}, {@link RelationQueryNode},
* {@link PathQueryNode}, {@link OrderQueryNode}, {@link TextsearchQueryNode}.
*
@@ -606,7 +617,7 @@
SimpleNode child = (SimpleNode) node.jjtGetChild(0);
if (child.getId() == JJTQNAME || child.getId() == JJTQNAMEFORITEMTYPE) {
try {
- QName name = ISO9075.decode(NameFormat.parse(child.getValue(), resolver));
+ Name name = decode(resolver.getQName(child.getValue()));
if (queryNode.getType() == QueryNode.TYPE_LOCATION) {
if (name.equals(JCR_ROOT)) {
name = LocationStepQueryNode.EMPTY_NAME;
@@ -615,7 +626,7 @@
} else if (queryNode.getType() == QueryNode.TYPE_DEREF) {
((DerefQueryNode) queryNode).setRefProperty(name);
} else if (queryNode.getType() == QueryNode.TYPE_RELATION) {
- Path.PathElement element = Path.PathElement.create(name);
+ Path.Element element = PATH_FACTORY.createElement(name);
((RelationQueryNode) queryNode).addPathElement(element);
} else if (queryNode.getType() == QueryNode.TYPE_PATH) {
root.addSelectProperty(name);
@@ -623,12 +634,12 @@
root.getOrderNode().addOrderSpec(name, true);
} else if (queryNode.getType() == QueryNode.TYPE_TEXTSEARCH) {
TextsearchQueryNode ts = (TextsearchQueryNode) queryNode;
- ts.addPathElement(Path.PathElement.create(name));
+ ts.addPathElement(PATH_FACTORY.createElement(name));
if (isAttributeNameTest(node)) {
ts.setReferencesProperty(true);
}
}
- } catch (NameException e) {
+ } catch (RepositoryException e) {
exceptions.add(new InvalidQueryException("Illegal name: " + child.getValue()));
}
} else if (child.getId() == JJTSTAR) {
@@ -636,10 +647,10 @@
((LocationStepQueryNode) queryNode).setNameTest(null);
} else if (queryNode.getType() == QueryNode.TYPE_RELATION) {
((RelationQueryNode) queryNode).addPathElement(
- Path.PathElement.create(RelationQueryNode.STAR_NAME_TEST));
+ PATH_FACTORY.createElement(RelationQueryNode.STAR_NAME_TEST));
} else if (queryNode.getType() == QueryNode.TYPE_TEXTSEARCH) {
((TextsearchQueryNode) queryNode).addPathElement(
- Path.PathElement.create(RelationQueryNode.STAR_NAME_TEST));
+ PATH_FACTORY.createElement(RelationQueryNode.STAR_NAME_TEST));
}
} else {
exceptions.add(new InvalidQueryException("Unsupported location for name test: " + child));
@@ -762,8 +773,8 @@
String fName = ((SimpleNode) node.jjtGetChild(0)).getValue();
fName = fName.substring(0, fName.length() - 1);
try {
- if (NameFormat.format(FN_NOT, resolver).equals(fName)
- || NameFormat.format(FN_NOT_10, resolver).equals(fName)) {
+ if (resolver.getJCRName(FN_NOT).equals(fName)
+ || resolver.getJCRName(FN_NOT_10).equals(fName)) {
if (queryNode instanceof NAryQueryNode) {
QueryNode not = factory.createNotQueryNode(queryNode);
((NAryQueryNode) queryNode).addOperand(not);
@@ -778,7 +789,7 @@
} else {
exceptions.add(new InvalidQueryException("Unsupported location for function fn:not"));
}
- } else if (NameFormat.format(XS_DATETIME, resolver).equals(fName)) {
+ } else if (resolver.getJCRName(XS_DATETIME).equals(fName)) {
// check arguments
if (node.jjtGetNumChildren() == 2) {
if (queryNode instanceof RelationQueryNode) {
@@ -804,7 +815,7 @@
// wrong number of arguments
exceptions.add(new InvalidQueryException("Wrong number of arguments for xs:dateTime"));
}
- } else if (NameFormat.format(JCR_CONTAINS, resolver).equals(fName)) {
+ } else if (resolver.getJCRName(JCR_CONTAINS).equals(fName)) {
// check number of arguments
if (node.jjtGetNumChildren() == 3) {
if (queryNode instanceof NAryQueryNode) {
@@ -824,7 +835,7 @@
// wrong number of arguments
exceptions.add(new InvalidQueryException("Wrong number of arguments for jcr:contains"));
}
- } else if (NameFormat.format(JCR_LIKE, resolver).equals(fName)) {
+ } else if (resolver.getJCRName(JCR_LIKE).equals(fName)) {
// check number of arguments
if (node.jjtGetNumChildren() == 3) {
if (queryNode instanceof NAryQueryNode) {
@@ -852,35 +863,35 @@
// wrong number of arguments
exceptions.add(new InvalidQueryException("Wrong number of arguments for jcr:like"));
}
- } else if (NameFormat.format(FN_TRUE, resolver).equals(fName)) {
+ } else if (resolver.getJCRName(FN_TRUE).equals(fName)) {
if (queryNode.getType() == QueryNode.TYPE_RELATION) {
RelationQueryNode rel = (RelationQueryNode) queryNode;
rel.setStringValue("true");
} else {
exceptions.add(new InvalidQueryException("Unsupported location for true()"));
}
- } else if (NameFormat.format(FN_FALSE, resolver).equals(fName)) {
+ } else if (resolver.getJCRName(FN_FALSE).equals(fName)) {
if (queryNode.getType() == QueryNode.TYPE_RELATION) {
RelationQueryNode rel = (RelationQueryNode) queryNode;
rel.setStringValue("false");
} else {
exceptions.add(new InvalidQueryException("Unsupported location for false()"));
}
- } else if (NameFormat.format(FN_POSITION, resolver).equals(fName)) {
+ } else if (resolver.getJCRName(FN_POSITION).equals(fName)) {
if (queryNode.getType() == QueryNode.TYPE_RELATION) {
RelationQueryNode rel = (RelationQueryNode) queryNode;
if (rel.getOperation() == RelationQueryNode.OPERATION_EQ_GENERAL) {
// set dummy value to set type of relation query node
// will be overwritten when the tree is furhter parsed.
rel.setPositionValue(1);
- rel.addPathElement(Path.PathElement.create(FN_POSITION_FULL));
+ rel.addPathElement(PATH_FACTORY.createElement(FN_POSITION_FULL));
} else {
exceptions.add(new InvalidQueryException("Unsupported expression with position(). Only = is supported."));
}
} else {
exceptions.add(new InvalidQueryException("Unsupported location for position()"));
}
- } else if (NameFormat.format(FN_FIRST, resolver).equals(fName)) {
+ } else if (resolver.getJCRName(FN_FIRST).equals(fName)) {
if (queryNode.getType() == QueryNode.TYPE_RELATION) {
((RelationQueryNode) queryNode).setPositionValue(1);
} else if (queryNode.getType() == QueryNode.TYPE_LOCATION) {
@@ -888,7 +899,7 @@
} else {
exceptions.add(new InvalidQueryException("Unsupported location for first()"));
}
- } else if (NameFormat.format(FN_LAST, resolver).equals(fName)) {
+ } else if (resolver.getJCRName(FN_LAST).equals(fName)) {
if (queryNode.getType() == QueryNode.TYPE_RELATION) {
((RelationQueryNode) queryNode).setPositionValue(LocationStepQueryNode.LAST);
} else if (queryNode.getType() == QueryNode.TYPE_LOCATION) {
@@ -896,7 +907,7 @@
} else {
exceptions.add(new InvalidQueryException("Unsupported location for last()"));
}
- } else if (NameFormat.format(JCR_DEREF, resolver).equals(fName)) {
+ } else if (resolver.getJCRName(JCR_DEREF).equals(fName)) {
// check number of arguments
if (node.jjtGetNumChildren() == 3) {
boolean descendant = false;
@@ -924,9 +935,9 @@
// strip quotes
value = value.substring(1, value.length() - 1);
if (!value.equals("*")) {
- QName name = null;
+ Name name = null;
try {
- name = ISO9075.decode(NameFormat.parse(value, resolver));
+ name = decode(resolver.getQName(value));
} catch (NameException e) {
exceptions.add(new InvalidQueryException("Illegal name: " + value));
}
@@ -954,13 +965,13 @@
exceptions.add(new InvalidQueryException("Unsupported location for jcr:deref()"));
}
}
- } else if (NameFormat.format(JCR_SCORE, resolver).equals(fName)) {
+ } else if (resolver.getJCRName(JCR_SCORE).equals(fName)) {
if (queryNode.getType() == QueryNode.TYPE_ORDER) {
createOrderSpec(node, (OrderQueryNode) queryNode);
} else {
exceptions.add(new InvalidQueryException("Unsupported location for jcr:score()"));
}
- } else if (NameFormat.format(FN_LOWER_CASE, resolver).equals(fName)) {
+ } else if (resolver.getJCRName(FN_LOWER_CASE).equals(fName)) {
if (node.jjtGetNumChildren() == 2) {
if (queryNode.getType() == QueryNode.TYPE_RELATION) {
RelationQueryNode relNode = (RelationQueryNode) queryNode;
@@ -974,7 +985,7 @@
} else {
exceptions.add(new InvalidQueryException("Wrong number of argument for fn:lower-case()"));
}
- } else if (NameFormat.format(FN_UPPER_CASE, resolver).equals(fName)) {
+ } else if (resolver.getJCRName(FN_UPPER_CASE).equals(fName)) {
if (node.jjtGetNumChildren() == 2) {
if (queryNode.getType() == QueryNode.TYPE_RELATION) {
RelationQueryNode relNode = (RelationQueryNode) queryNode;
@@ -988,7 +999,7 @@
} else {
exceptions.add(new InvalidQueryException("Unsupported location for fn:upper-case()"));
}
- } else if (NameFormat.format(REP_SIMILAR, resolver).equals(fName)) {
+ } else if (resolver.getJCRName(REP_SIMILAR).equals(fName)) {
if (node.jjtGetNumChildren() == 3) {
if (queryNode instanceof NAryQueryNode) {
NAryQueryNode parent = (NAryQueryNode) queryNode;
@@ -1013,7 +1024,7 @@
exceptions.add(new InvalidQueryException(
"Wrong number of arguments for rep:similar()"));
}
- } else if (NameFormat.format(REP_SPELLCHECK, resolver).equals(fName)
+ } else if (resolver.getJCRName(REP_SPELLCHECK).equals(fName)
&& queryNode.getType() != QueryNode.TYPE_PATH) {
if (node.jjtGetNumChildren() == 2) {
if (queryNode instanceof NAryQueryNode) {
@@ -1031,7 +1042,7 @@
}
// set a dummy property name
- rel.addPathElement(Path.PathElement.create(QName.JCR_PRIMARYTYPE));
+ rel.addPathElement(PATH_FACTORY.createElement(NameConstants.JCR_PRIMARYTYPE));
} else {
exceptions.add(new InvalidQueryException(
"Unsupported location for rep:spellcheck()"));
@@ -1043,8 +1054,8 @@
} else if (queryNode.getType() == QueryNode.TYPE_RELATION) {
// use function name as name of a pseudo property in a relation
try {
- QName name = NameFormat.parse(fName + "()", resolver);
- Path.PathElement element = Path.PathElement.create(name);
+ Name name = resolver.getQName(fName + "()");
+ Path.Element element = PATH_FACTORY.createElement(name);
RelationQueryNode relNode = (RelationQueryNode) queryNode;
relNode.addPathElement(element);
} catch (NameException e) {
@@ -1053,7 +1064,7 @@
} else if (queryNode.getType() == QueryNode.TYPE_PATH) {
// use function name as name of a pseudo property in select clause
try {
- QName name = NameFormat.parse(fName + "()", resolver);
+ Name name = resolver.getQName(fName + "()");
root.addSelectProperty(name);
} catch (NameException e) {
exceptions.add(e);
@@ -1061,7 +1072,7 @@
} else {
exceptions.add(new InvalidQueryException("Unsupported function: " + fName));
}
- } catch (NoPrefixDeclaredException e) {
+ } catch (NamespaceException e) {
exceptions.add(e);
}
return queryNode;
@@ -1078,11 +1089,13 @@
// cut off left parenthesis at end
propName = propName.substring(0, propName.length() - 1);
}
- QName name = ISO9075.decode(NameFormat.parse(propName, resolver));
+ Name name = decode(resolver.getQName(propName));
spec = new OrderQueryNode.OrderSpec(name, true);
queryNode.addOrderSpec(spec);
} catch (NameException e) {
exceptions.add(new InvalidQueryException("Illegal name: " + child.getValue()));
+ } catch (NamespaceException e) {
+ exceptions.add(new InvalidQueryException("Illegal name: " + child.getValue()));
}
return spec;
}
@@ -1112,7 +1125,7 @@
* At @
* NodeTest
* NameTest
- * QName foo
+ * Name foo
* </pre>
* @param node a node with type {@link #JJTNAMETEST}.
* @return <code>true</code> if the name test <code>node</code> is on the
@@ -1152,5 +1165,14 @@
value = value.replaceAll("''", "'");
}
return value;
+ }
+
+ private static Name decode(Name name) {
+ String decodedLN = ISO9075.decode(name.getLocalName());
+ if (decodedLN.equals(name.getLocalName())) {
+ return name;
+ } else {
+ return NAME_FACTORY.create(name.getNamespaceURI(), decodedLN);
+ }
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/AMContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/AMContext.java?rev=590014&r1=590013&r2=590014&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/AMContext.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/AMContext.java Tue Oct 30 03:02:41 2007
@@ -18,7 +18,7 @@
import org.apache.jackrabbit.core.HierarchyManager;
import org.apache.jackrabbit.core.fs.FileSystem;
-import org.apache.jackrabbit.name.NamespaceResolver;
+import org.apache.jackrabbit.namespace.NamespaceResolver;
import javax.security.auth.Subject;
import java.io.File;
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java?rev=590014&r1=590013&r2=590014&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java Tue Oct 30 03:02:41 2007
@@ -20,7 +20,7 @@
import org.apache.jackrabbit.core.NodeId;
import org.apache.jackrabbit.core.PropertyId;
import org.apache.jackrabbit.core.observation.EventStateCollectionFactory;
-import org.apache.jackrabbit.name.QName;
+import org.apache.jackrabbit.spi.Name;
import javax.jcr.ReferentialIntegrityException;
@@ -227,7 +227,7 @@
/**
* {@inheritDoc}
*/
- public NodeState createNew(NodeId id, QName nodeTypeName,
+ public NodeState createNew(NodeId id, Name nodeTypeName,
NodeId parentId)
throws IllegalStateException {
if (!editMode) {
@@ -244,7 +244,7 @@
/**
* {@inheritDoc}
*/
- public PropertyState createNew(QName propName, NodeId parentId)
+ public PropertyState createNew(Name propName, NodeId parentId)
throws IllegalStateException {
if (!editMode) {
throw new IllegalStateException("Not in edit mode");
@@ -488,7 +488,7 @@
* Optimization: shared state manager we're listening to does not deliver node state changes, therefore the state
* concerned must be a local state.
*/
- public void nodeAdded(NodeState state, QName name, int index, NodeId id) {
+ public void nodeAdded(NodeState state, Name name, int index, NodeId id) {
dispatcher.notifyNodeAdded(state, name, index, id);
}
@@ -518,7 +518,7 @@
* Optimization: shared state manager we're listening to does not deliver node state changes, therefore the state
* concerned must be a local state.
*/
- public void nodeRemoved(NodeState state, QName name, int index, NodeId id) {
+ public void nodeRemoved(NodeState state, Name name, int index, NodeId id) {
dispatcher.notifyNodeRemoved(state, name, index, id);
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeState.java?rev=590014&r1=590013&r2=590014&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeState.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeState.java Tue Oct 30 03:02:41 2007
@@ -22,7 +22,8 @@
import org.apache.jackrabbit.core.NodeId;
import org.apache.jackrabbit.core.ItemId;
import org.apache.jackrabbit.core.nodetype.NodeDefId;
-import org.apache.jackrabbit.name.QName;
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.name.NameFactoryImpl;
import java.io.IOException;
import java.io.ObjectInputStream;
@@ -51,7 +52,7 @@
/**
* the name of this node's primary type
*/
- private QName nodeTypeName;
+ private Name nodeTypeName;
/**
* the names of this node's mixin types
@@ -86,7 +87,7 @@
private boolean sharedChildNodeEntries = false;
/**
- * set of property names (QName objects)
+ * set of property names (Name objects)
*/
private HashSet propertyNames = new HashSet();
@@ -124,7 +125,7 @@
* @param initialStatus the initial status of the node state object
* @param isTransient flag indicating whether this state is transient or not
*/
- public NodeState(NodeId id, QName nodeTypeName, NodeId parentId,
+ public NodeState(NodeId id, Name nodeTypeName, NodeId parentId,
int initialStatus, boolean isTransient) {
super(initialStatus, isTransient);
this.id = id;
@@ -202,7 +203,7 @@
*
* @return the name of this node's node type.
*/
- public QName getNodeTypeName() {
+ public Name getNodeTypeName() {
return nodeTypeName;
}
@@ -260,11 +261,11 @@
* Determines if there is a <code>ChildNodeEntry</code> with the
* specified <code>name</code>.
*
- * @param name <code>QName</code> object specifying a node name
+ * @param name <code>Name</code> object specifying a node name
* @return <code>true</code> if there is a <code>ChildNodeEntry</code> with
* the specified <code>name</code>.
*/
- public synchronized boolean hasChildNodeEntry(QName name) {
+ public synchronized boolean hasChildNodeEntry(Name name) {
return !childNodeEntries.get(name).isEmpty();
}
@@ -284,24 +285,24 @@
* Determines if there is a <code>ChildNodeEntry</code> with the
* specified <code>name</code> and <code>index</code>.
*
- * @param name <code>QName</code> object specifying a node name
+ * @param name <code>Name</code> object specifying a node name
* @param index 1-based index if there are same-name child node entries
* @return <code>true</code> if there is a <code>ChildNodeEntry</code> with
* the specified <code>name</code> and <code>index</code>.
*/
- public synchronized boolean hasChildNodeEntry(QName name, int index) {
+ public synchronized boolean hasChildNodeEntry(Name name, int index) {
return childNodeEntries.get(name, index) != null;
}
/**
* Determines if there is a property entry with the specified
- * <code>QName</code>.
+ * <code>Name</code>.
*
- * @param propName <code>QName</code> object specifying a property name
+ * @param propName <code>Name</code> object specifying a property name
* @return <code>true</code> if there is a property entry with the specified
- * <code>QName</code>.
+ * <code>Name</code>.
*/
- public synchronized boolean hasPropertyName(QName propName) {
+ public synchronized boolean hasPropertyName(Name propName) {
return propertyNames.contains(propName);
}
@@ -309,12 +310,12 @@
* Returns the <code>ChildNodeEntry</code> with the specified name and index
* or <code>null</code> if there's no matching entry.
*
- * @param nodeName <code>QName</code> object specifying a node name
+ * @param nodeName <code>Name</code> object specifying a node name
* @param index 1-based index if there are same-name child node entries
* @return the <code>ChildNodeEntry</code> with the specified name and index
* or <code>null</code> if there's no matching entry.
*/
- public synchronized ChildNodeEntry getChildNodeEntry(QName nodeName, int index) {
+ public synchronized ChildNodeEntry getChildNodeEntry(Name nodeName, int index) {
return childNodeEntries.get(nodeName, index);
}
@@ -352,18 +353,18 @@
* @see #addChildNodeEntry
* @see #removeChildNodeEntry
*/
- public synchronized List getChildNodeEntries(QName nodeName) {
+ public synchronized List getChildNodeEntries(Name nodeName) {
return childNodeEntries.get(nodeName);
}
/**
* Adds a new <code>ChildNodeEntry</code>.
*
- * @param nodeName <code>QName</code> object specifying the name of the new entry.
+ * @param nodeName <code>Name</code> object specifying the name of the new entry.
* @param id the id the new entry is refering to.
* @return the newly added <code>ChildNodeEntry</code>
*/
- public synchronized ChildNodeEntry addChildNodeEntry(QName nodeName,
+ public synchronized ChildNodeEntry addChildNodeEntry(Name nodeName,
NodeId id) {
if (sharedChildNodeEntries) {
childNodeEntries = (ChildNodeEntries) childNodeEntries.clone();
@@ -377,14 +378,14 @@
/**
* Renames a new <code>ChildNodeEntry</code>.
*
- * @param oldName <code>QName</code> object specifying the entry's old name
+ * @param oldName <code>Name</code> object specifying the entry's old name
* @param index 1-based index if there are same-name child node entries
- * @param newName <code>QName</code> object specifying the entry's new name
+ * @param newName <code>Name</code> object specifying the entry's new name
* @return <code>true</code> if the entry was sucessfully renamed;
* otherwise <code>false</code>
*/
- public synchronized boolean renameChildNodeEntry(QName oldName, int index,
- QName newName) {
+ public synchronized boolean renameChildNodeEntry(Name oldName, int index,
+ Name newName) {
if (sharedChildNodeEntries) {
childNodeEntries = (ChildNodeEntries) childNodeEntries.clone();
sharedChildNodeEntries = false;
@@ -408,7 +409,7 @@
* @return <code>true</code> if the specified child node entry was found
* in the list of child node entries and could be removed.
*/
- public synchronized boolean removeChildNodeEntry(QName nodeName, int index) {
+ public synchronized boolean removeChildNodeEntry(Name nodeName, int index) {
if (sharedChildNodeEntries) {
childNodeEntries = (ChildNodeEntries) childNodeEntries.clone();
sharedChildNodeEntries = false;
@@ -488,9 +489,9 @@
/**
* Adds a property name entry.
*
- * @param propName <code>QName</code> object specifying the property name
+ * @param propName <code>Name</code> object specifying the property name
*/
- public synchronized void addPropertyName(QName propName) {
+ public synchronized void addPropertyName(Name propName) {
if (sharedPropertyNames) {
propertyNames = (HashSet) propertyNames.clone();
sharedPropertyNames = false;
@@ -501,11 +502,11 @@
/**
* Removes a property name entry.
*
- * @param propName <code>QName</code> object specifying the property name
+ * @param propName <code>Name</code> object specifying the property name
* @return <code>true</code> if the specified property name was found
* in the list of property name entries and could be removed.
*/
- public synchronized boolean removePropertyName(QName propName) {
+ public synchronized boolean removePropertyName(Name propName) {
if (sharedPropertyNames) {
propertyNames = (HashSet) propertyNames.clone();
sharedPropertyNames = false;
@@ -526,7 +527,7 @@
}
/**
- * Sets the set of <code>QName</code> objects denoting the
+ * Sets the set of <code>Name</code> objects denoting the
* properties of this node.
*/
public synchronized void setPropertyNames(Set propNames) {
@@ -551,17 +552,17 @@
*
* @param nodeTypeName node type name
*/
- public synchronized void setNodeTypeName(QName nodeTypeName) {
+ public synchronized void setNodeTypeName(Name nodeTypeName) {
this.nodeTypeName = nodeTypeName;
}
//---------------------------------------------------------< diff methods >
/**
- * Returns a set of <code>QName</code>s denoting those properties that
+ * Returns a set of <code>Name</code>s denoting those properties that
* do not exist in the overlayed node state but have been added to
* <i>this</i> node state.
*
- * @return set of <code>QName</code>s denoting the properties that have
+ * @return set of <code>Name</code>s denoting the properties that have
* been added.
*/
public synchronized Set getAddedPropertyNames() {
@@ -591,11 +592,11 @@
}
/**
- * Returns a set of <code>QName</code>s denoting those properties that
+ * Returns a set of <code>Name</code>s denoting those properties that
* exist in the overlayed node state but have been removed from
* <i>this</i> node state.
*
- * @return set of <code>QName</code>s denoting the properties that have
+ * @return set of <code>Name</code>s denoting the properties that have
* been removed.
*/
public synchronized Set getRemovedPropertyNames() {
@@ -792,7 +793,7 @@
*/
public long calculateMemoryFootprint() {
/*
- private QName nodeTypeName;
+ private Name nodeTypeName;
private Set mixinTypeNames = Collections.EMPTY_SET;
private NodeId id;
private NodeId parentId;
@@ -802,9 +803,9 @@
private HashSet propertyNames = new HashSet();
private boolean sharedPropertyNames = false;
- we assume an average QName localname of 30 chars.
+ we assume an average Name localname of 30 chars.
NodeId = 8 + UUID(24) + hashcode(4) = 36
- QName = 8 + hash(4) + string(38+2*len) + namespace(4) + localName(38+2*len) ~ 250
+ Name = 8 + hash(4) + string(38+2*len) + namespace(4) + localName(38+2*len) ~ 250
NodeDefId = 8 + id(4) = 12
ChildNodeEntries = 8 + n * (name(256) + index(4) + id(36) + hashentry(16)) ~ n*300
PropNames = 8 + n * ( name(250))
@@ -878,7 +879,7 @@
return (ChildNodeEntry) entries.get(id);
}
- List get(QName nodeName) {
+ List get(Name nodeName) {
Object obj = nameMap.get(nodeName);
if (obj == null) {
return Collections.EMPTY_LIST;
@@ -892,7 +893,7 @@
}
}
- ChildNodeEntry get(QName nodeName, int index) {
+ ChildNodeEntry get(Name nodeName, int index) {
if (index < 1) {
throw new IllegalArgumentException("index is 1-based");
}
@@ -916,7 +917,7 @@
return null;
}
- ChildNodeEntry add(QName nodeName, NodeId id) {
+ ChildNodeEntry add(Name nodeName, NodeId id) {
List siblings = null;
int index = 0;
Object obj = nameMap.get(nodeName);
@@ -951,12 +952,12 @@
Iterator iter = entriesList.iterator();
while (iter.hasNext()) {
ChildNodeEntry entry = (ChildNodeEntry) iter.next();
- // delegate to add(QName, String) to maintain consistency
+ // delegate to add(Name, String) to maintain consistency
add(entry.getName(), entry.getId());
}
}
- public ChildNodeEntry remove(QName nodeName, int index) {
+ public ChildNodeEntry remove(Name nodeName, int index) {
if (index < 1) {
throw new IllegalArgumentException("index is 1-based");
}
@@ -1271,7 +1272,7 @@
// written in writeObject(ObjectOutputStream)
short count = in.readShort(); // count
for (int i = 0; i < count; i++) {
- QName name = QName.valueOf(in.readUTF()); // name
+ Name name = NameFactoryImpl.getInstance().create(in.readUTF()); // name
String s = in.readUTF(); // id
add(name, NodeId.valueOf(s));
}
@@ -1359,11 +1360,11 @@
private int hash = 0;
- private final QName name;
+ private final Name name;
private final int index; // 1-based index for same-name siblings
private final NodeId id;
- private ChildNodeEntry(QName name, NodeId id, int index) {
+ private ChildNodeEntry(Name name, NodeId id, int index) {
if (name == null) {
throw new IllegalArgumentException("name can not be null");
}
@@ -1384,7 +1385,7 @@
return id;
}
- public QName getName() {
+ public Name getName() {
return name;
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeStateListener.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeStateListener.java?rev=590014&r1=590013&r2=590014&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeStateListener.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeStateListener.java Tue Oct 30 03:02:41 2007
@@ -16,7 +16,7 @@
*/
package org.apache.jackrabbit.core.state;
-import org.apache.jackrabbit.name.QName;
+import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.core.NodeId;
/**
@@ -34,7 +34,7 @@
* @param id id of new node
*/
void nodeAdded(NodeState state,
- QName name, int index, NodeId id);
+ Name name, int index, NodeId id);
/**
* Called when a node has been modified, typically as a result of removal
@@ -63,5 +63,5 @@
* @param index index of removed node
* @param id id of removed node
*/
- void nodeRemoved(NodeState state, QName name, int index, NodeId id);
+ void nodeRemoved(NodeState state, Name name, int index, NodeId id);
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeStateMerger.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeStateMerger.java?rev=590014&r1=590013&r2=590014&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeStateMerger.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeStateMerger.java Tue Oct 30 03:02:41 2007
@@ -18,7 +18,7 @@
import org.apache.jackrabbit.core.PropertyId;
import org.apache.jackrabbit.core.ItemId;
-import org.apache.jackrabbit.name.QName;
+import org.apache.jackrabbit.spi.Name;
import java.util.ArrayList;
import java.util.Iterator;
@@ -157,7 +157,7 @@
for (Iterator iter = state.getAddedPropertyNames().iterator();
iter.hasNext();) {
- QName name = (QName) iter.next();
+ Name name = (Name) iter.next();
PropertyId propId =
new PropertyId(state.getNodeId(), name);
if (context.isAdded(propId)) {
@@ -174,7 +174,7 @@
}
for (Iterator iter = state.getRemovedPropertyNames().iterator();
iter.hasNext();) {
- QName name = (QName) iter.next();
+ Name name = (Name) iter.next();
PropertyId propId =
new PropertyId(state.getNodeId(), name);
if (context.isDeleted(propId)) {
@@ -187,11 +187,11 @@
// re-apply changes made on this state
state.setPropertyNames(overlayedState.getPropertyNames());
for (Iterator iter = added.iterator(); iter.hasNext();) {
- QName name = (QName) iter.next();
+ Name name = (Name) iter.next();
state.addPropertyName(name);
}
for (Iterator iter = removed.iterator(); iter.hasNext();) {
- QName name = (QName) iter.next();
+ Name name = (Name) iter.next();
state.removePropertyName(name);
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/PropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/PropertyState.java?rev=590014&r1=590013&r2=590014&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/PropertyState.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/PropertyState.java Tue Oct 30 03:02:41 2007
@@ -22,7 +22,7 @@
import org.apache.jackrabbit.core.nodetype.PropDefId;
import org.apache.jackrabbit.core.value.BLOBFileValue;
import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.jackrabbit.name.QName;
+import org.apache.jackrabbit.spi.Name;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
@@ -148,7 +148,7 @@
*
* @return the name of this property.
*/
- public QName getName() {
+ public Name getName() {
return id.getName();
}
@@ -237,7 +237,7 @@
private boolean multiValued;
private PropDefId defId;
- we assume an average QName localname of 30 chars.
+ we assume an average Name localname of 30 chars.
PropertyId = 8 + nodeId(36) * name(250) + hash(4) ~ 300;
NodeDefId = 8 + id(4) = 12
InternalValue = 8 + n * (values) ~ 8 + n*100;
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java?rev=590014&r1=590013&r2=590014&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java Tue Oct 30 03:02:41 2007
@@ -24,8 +24,8 @@
import org.apache.jackrabbit.core.PropertyId;
import org.apache.jackrabbit.core.ZombieHierarchyManager;
import org.apache.jackrabbit.core.util.Dumpable;
-import org.apache.jackrabbit.name.PathResolver;
-import org.apache.jackrabbit.name.QName;
+import org.apache.jackrabbit.conversion.PathResolver;
+import org.apache.jackrabbit.spi.Name;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -234,14 +234,14 @@
/**
* {@inheritDoc}
*/
- public NodeState createNew(NodeId id, QName nodeTypeName,
+ public NodeState createNew(NodeId id, Name nodeTypeName,
NodeId parentId)
throws IllegalStateException {
return stateMgr.createNew(id, nodeTypeName, parentId);
}
/**
- * Customized variant of {@link #createNew(NodeId, QName, NodeId)} that
+ * Customized variant of {@link #createNew(NodeId, Name, NodeId)} that
* connects the newly created persistent state with the transient state.
*/
public NodeState createNew(NodeState transientState)
@@ -257,13 +257,13 @@
/**
* {@inheritDoc}
*/
- public PropertyState createNew(QName propName, NodeId parentId)
+ public PropertyState createNew(Name propName, NodeId parentId)
throws IllegalStateException {
return stateMgr.createNew(propName, parentId);
}
/**
- * Customized variant of {@link #createNew(QName, NodeId)} that
+ * Customized variant of {@link #createNew(Name, NodeId)} that
* connects the newly created persistent state with the transient state.
*/
public PropertyState createNew(PropertyState transientState)
@@ -553,7 +553,7 @@
* @return
* @throws ItemStateException
*/
- public NodeState createTransientNodeState(NodeId id, QName nodeTypeName, NodeId parentId, int initialStatus)
+ public NodeState createTransientNodeState(NodeId id, Name nodeTypeName, NodeId parentId, int initialStatus)
throws ItemStateException {
// check map; synchronized to ensure an entry is not created twice.
@@ -607,7 +607,7 @@
* @return
* @throws ItemStateException
*/
- public PropertyState createTransientPropertyState(NodeId parentId, QName propName, int initialStatus)
+ public PropertyState createTransientPropertyState(NodeId parentId, Name propName, int initialStatus)
throws ItemStateException {
PropertyId id = new PropertyId(parentId, propName);
@@ -875,7 +875,7 @@
* Pass notification to listeners if a transient state was modified
* or if the local state is not overlayed.
*/
- public void nodeAdded(NodeState state, QName name, int index, NodeId id) {
+ public void nodeAdded(NodeState state, Name name, int index, NodeId id) {
if (state.getContainer() == this || !transientStore.contains(state.getId())) {
dispatcher.notifyNodeAdded(state, name, index, id);
}
@@ -911,7 +911,7 @@
* Pass notification to listeners if a transient state was modified
* or if the local state is not overlayed.
*/
- public void nodeRemoved(NodeState state, QName name, int index, NodeId id) {
+ public void nodeRemoved(NodeState state, Name name, int index, NodeId id) {
if (state.getContainer() == this || !transientStore.contains(state.getId())) {
dispatcher.notifyNodeRemoved(state, name, index, id);
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java?rev=590014&r1=590013&r2=590014&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java Tue Oct 30 03:02:41 2007
@@ -34,7 +34,8 @@
import org.apache.jackrabbit.core.util.Dumpable;
import org.apache.jackrabbit.core.value.InternalValue;
import org.apache.jackrabbit.core.virtual.VirtualItemStateProvider;
-import org.apache.jackrabbit.name.QName;
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.name.NameConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -976,7 +977,7 @@
* @param parentId parent UUID
* @return new node state instance
*/
- private NodeState createInstance(NodeId id, QName nodeTypeName,
+ private NodeState createInstance(NodeId id, Name nodeTypeName,
NodeId parentId) {
NodeState state = persistMgr.createNew(id);
@@ -1000,8 +1001,8 @@
NodeTypeRegistry ntReg)
throws ItemStateException {
- NodeState rootState = createInstance(rootNodeId, QName.REP_ROOT, null);
- NodeState jcrSystemState = createInstance(RepositoryImpl.SYSTEM_ROOT_NODE_ID, QName.REP_SYSTEM, rootNodeId);
+ NodeState rootState = createInstance(rootNodeId, NameConstants.REP_ROOT, null);
+ NodeState jcrSystemState = createInstance(RepositoryImpl.SYSTEM_ROOT_NODE_ID, NameConstants.REP_SYSTEM, rootNodeId);
// FIXME need to manually setup root node by creating mandatory jcr:primaryType property
// @todo delegate setup of root node to NodeTypeInstanceHandler
@@ -1014,10 +1015,10 @@
NodeDefId jcrSystemDefId;
try {
nodeDefId = ntReg.getRootNodeDef().getId();
- EffectiveNodeType ent = ntReg.getEffectiveNodeType(QName.REP_ROOT);
- propDef = ent.getApplicablePropertyDef(QName.JCR_PRIMARYTYPE,
+ EffectiveNodeType ent = ntReg.getEffectiveNodeType(NameConstants.REP_ROOT);
+ propDef = ent.getApplicablePropertyDef(NameConstants.JCR_PRIMARYTYPE,
PropertyType.NAME, false);
- jcrSystemDefId = ent.getApplicableChildNodeDef(QName.JCR_SYSTEM, QName.REP_SYSTEM, ntReg).getId();
+ jcrSystemDefId = ent.getApplicableChildNodeDef(NameConstants.JCR_SYSTEM, NameConstants.REP_SYSTEM, ntReg).getId();
} catch (NoSuchNodeTypeException nsnte) {
String msg = "internal error: failed to create root node";
log.error(msg, nsnte);
@@ -1034,7 +1035,7 @@
rootState.addPropertyName(propDef.getName());
PropertyState prop = createInstance(propDef.getName(), rootNodeId);
- prop.setValues(new InternalValue[]{InternalValue.create(QName.REP_ROOT)});
+ prop.setValues(new InternalValue[]{InternalValue.create(NameConstants.REP_ROOT)});
prop.setType(propDef.getRequiredType());
prop.setMultiValued(propDef.isMultiple());
prop.setDefinitionId(propDef.getId());
@@ -1043,19 +1044,19 @@
jcrSystemState.addPropertyName(propDef.getName());
PropertyState primaryTypeProp = createInstance(propDef.getName(), jcrSystemState.getNodeId());
- primaryTypeProp.setValues(new InternalValue[]{InternalValue.create(QName.REP_SYSTEM)});
+ primaryTypeProp.setValues(new InternalValue[]{InternalValue.create(NameConstants.REP_SYSTEM)});
primaryTypeProp.setType(propDef.getRequiredType());
primaryTypeProp.setMultiValued(propDef.isMultiple());
primaryTypeProp.setDefinitionId(propDef.getId());
// add child node entry for jcr:system node
- rootState.addChildNodeEntry(QName.JCR_SYSTEM, RepositoryImpl.SYSTEM_ROOT_NODE_ID);
+ rootState.addChildNodeEntry(NameConstants.JCR_SYSTEM, RepositoryImpl.SYSTEM_ROOT_NODE_ID);
// add child node entry for virtual jcr:versionStorage
- jcrSystemState.addChildNodeEntry(QName.JCR_VERSIONSTORAGE, RepositoryImpl.VERSION_STORAGE_NODE_ID);
+ jcrSystemState.addChildNodeEntry(NameConstants.JCR_VERSIONSTORAGE, RepositoryImpl.VERSION_STORAGE_NODE_ID);
// add child node entry for virtual jcr:nodeTypes
- jcrSystemState.addChildNodeEntry(QName.JCR_NODETYPES, RepositoryImpl.NODETYPES_NODE_ID);
+ jcrSystemState.addChildNodeEntry(NameConstants.JCR_NODETYPES, RepositoryImpl.NODETYPES_NODE_ID);
ChangeLog changeLog = new ChangeLog();
@@ -1136,7 +1137,7 @@
* @param parentId parent Id
* @return new property state instance
*/
- private PropertyState createInstance(QName propName, NodeId parentId) {
+ private PropertyState createInstance(Name propName, NodeId parentId) {
PropertyState state = persistMgr.createNew(new PropertyId(parentId, propName));
state.setStatus(ItemState.STATUS_NEW);
state.setContainer(this);
@@ -1173,20 +1174,20 @@
*/
private boolean isReferenceable(NodeState state) throws ItemStateException {
// shortcut: check some wellknown built-in types first
- QName primary = state.getNodeTypeName();
+ Name primary = state.getNodeTypeName();
Set mixins = state.getMixinTypeNames();
- if (mixins.contains(QName.MIX_REFERENCEABLE)
- || mixins.contains(QName.MIX_VERSIONABLE)
- || primary.equals(QName.NT_RESOURCE)) {
+ if (mixins.contains(NameConstants.MIX_REFERENCEABLE)
+ || mixins.contains(NameConstants.MIX_VERSIONABLE)
+ || primary.equals(NameConstants.NT_RESOURCE)) {
return true;
}
// build effective node type
- QName[] types = new QName[mixins.size() + 1];
+ Name[] types = new Name[mixins.size() + 1];
mixins.toArray(types);
// primary type
types[types.length - 1] = primary;
try {
- return ntReg.getEffectiveNodeType(types).includesNodeType(QName.MIX_REFERENCEABLE);
+ return ntReg.getEffectiveNodeType(types).includesNodeType(NameConstants.MIX_REFERENCEABLE);
} catch (NodeTypeConflictException ntce) {
String msg = "internal error: failed to build effective node type for node "
+ state.getNodeId();
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/StateChangeDispatcher.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/StateChangeDispatcher.java?rev=590014&r1=590013&r2=590014&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/StateChangeDispatcher.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/StateChangeDispatcher.java Tue Oct 30 03:02:41 2007
@@ -18,7 +18,7 @@
import EDU.oswego.cs.dl.util.concurrent.CopyOnWriteArrayList;
import org.apache.jackrabbit.core.NodeId;
-import org.apache.jackrabbit.name.QName;
+import org.apache.jackrabbit.spi.Name;
import java.util.Collection;
import java.util.Iterator;
@@ -115,7 +115,7 @@
* @param index index of new node
* @param id id of new node
*/
- public void notifyNodeAdded(NodeState state, QName name, int index, NodeId id) {
+ public void notifyNodeAdded(NodeState state, Name name, int index, NodeId id) {
Iterator iter = nsListeners.iterator();
while (iter.hasNext()) {
((NodeStateListener) iter.next()).nodeAdded(state, name, index, id);
@@ -151,7 +151,7 @@
* @param index index of new node
* @param id id of new node
*/
- public void notifyNodeRemoved(NodeState state, QName name, int index, NodeId id) {
+ public void notifyNodeRemoved(NodeState state, Name name, int index, NodeId id) {
Iterator iter = nsListeners.iterator();
while (iter.hasNext()) {
((NodeStateListener) iter.next()).nodeRemoved(state, name, index, id);