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 2006/11/02 20:02:41 UTC
svn commit: r470475 - in
/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi:
NodeImpl.java state/ItemState.java state/NodeState.java
state/entry/ChildNodeReference.java
Author: angela
Date: Thu Nov 2 11:02:39 2006
New Revision: 470475
URL: http://svn.apache.org/viewvc?view=rev&rev=470475
Log:
work in progress
- index if unresolved cne was always 1
- add NodeState.getIndex() and simplify Node.getIndex() and ItemState.getPath()
Modified:
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/entry/ChildNodeReference.java
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java?view=diff&rev=470475&r1=470474&r2=470475
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java Thu Nov 2 11:02:39 2006
@@ -557,23 +557,7 @@
*/
public int getIndex() throws RepositoryException {
checkStatus();
-
- if (getNodeState().getDefinition().allowsSameNameSiblings()) {
- NodeState parentState = getItemState().getParent();
- if (parentState == null) {
- // the root node cannot have same-name siblings; always return the
- // default index
- return Path.INDEX_DEFAULT;
- }
- ChildNodeEntry entry = parentState.getChildNodeEntry(getNodeState());
- if (entry == null) {
- String msg = "Unable to retrieve index for: " + safeGetJCRPath();
- throw new RepositoryException(msg);
- }
- return entry.getIndex();
- } else {
- return Path.INDEX_DEFAULT;
- }
+ return getNodeState().getIndex();
}
/**
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java?view=diff&rev=470475&r1=470474&r2=470475
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java Thu Nov 2 11:02:39 2006
@@ -23,7 +23,6 @@
import org.apache.jackrabbit.name.Path;
import org.apache.jackrabbit.name.MalformedPathException;
import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.jcr2spi.state.entry.ChildNodeEntry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -218,23 +217,17 @@
// recursively build path of parent
buildPath(builder, parentState);
+ QName name = state.getQName();
if (state.isNode()) {
- NodeState nodeState = (NodeState) state;
- ChildNodeEntry entry = parentState.getChildNodeEntry(nodeState);
- if (entry == null) {
- String msg = "Failed to build path of " + state + ": parent has no such child entry.";
- log.debug(msg);
- throw new ItemNotFoundException(msg);
- }
+ int index = ((NodeState)state).getIndex();
// add to path
- if (entry.getIndex() == Path.INDEX_DEFAULT) {
- builder.addLast(entry.getName());
+ if (index == Path.INDEX_DEFAULT) {
+ builder.addLast(name);
} else {
- builder.addLast(entry.getName(), entry.getIndex());
+ builder.addLast(name, index);
}
} else {
PropertyState propState = (PropertyState) state;
- QName name = propState.getQName();
// add to path
builder.addLast(name);
}
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java?view=diff&rev=470475&r1=470474&r2=470475
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java Thu Nov 2 11:02:39 2006
@@ -33,6 +33,7 @@
import javax.jcr.RepositoryException;
import javax.jcr.ItemExistsException;
+import javax.jcr.ItemNotFoundException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -280,6 +281,29 @@
}
/**
+ * Returns the index of this node state.
+ *
+ * @return the index.
+ */
+ public int getIndex() throws ItemNotFoundException {
+ if (parent == null) {
+ // the root state may never have siblings
+ return Path.INDEX_DEFAULT;
+ }
+
+ if (getDefinition().allowsSameNameSiblings()) {
+ ChildNodeEntry entry = getParent().getChildNodeEntry(this);
+ if (entry == null) {
+ String msg = "Unable to retrieve index for: " + this;
+ throw new ItemNotFoundException(msg);
+ }
+ return entry.getIndex();
+ } else {
+ return Path.INDEX_DEFAULT;
+ }
+ }
+
+ /**
* Returns the name of this node's node type.
*
* @return the name of this node's node type.
@@ -393,7 +417,7 @@
* <code>NodeState</code> or <code>null</code> if there's no
* matching entry.
*/
- public synchronized ChildNodeEntry getChildNodeEntry(NodeState nodeState) {
+ private synchronized ChildNodeEntry getChildNodeEntry(NodeState nodeState) {
return childNodeEntries.get(nodeState);
}
@@ -581,27 +605,32 @@
* Returns the index of the given <code>ChildNodeEntry</code> and with
* <code>name</code>.
*
- * @param name the name of the child node.
* @param cne the <code>ChildNodeEntry</code> instance.
* @return the index of the child node entry or <code>0</code> if it is not
* found in this <code>NodeState</code>.
*/
- public int getChildNodeIndex(QName name, ChildNodeEntry cne) {
- List sns = childNodeEntries.get(name);
+ public int getChildNodeIndex(ChildNodeEntry cne) {
+ List sns = childNodeEntries.get(cne.getName());
// index is one based
int index = 1;
for (Iterator it = sns.iterator(); it.hasNext(); ) {
- ChildNodeEntry e = (ChildNodeEntry) it.next();
- if (e == cne) {
+ ChildNodeEntry entry = (ChildNodeEntry) it.next();
+ if (entry == cne) {
return index;
}
- // skip removed entries
- try {
- if (e.isAvailable() && e.getNodeState().isValid()) {
- index++;
+ // skip entries that belong to removed or invalidated states.
+ // NOTE, that in this case the nodestate must be available from the cne.
+ if (entry.isAvailable()) {
+ try {
+ if (entry.getNodeState().isValid()) {
+ index++;
+ }
+ } catch (ItemStateException e) {
+ // probably removed or stale
}
- } catch (ItemStateException ex) {
- // probably removed or stale
+ } else {
+ // cne has not been resolved yet -> increase counter.
+ index++;
}
}
// not found
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/entry/ChildNodeReference.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/entry/ChildNodeReference.java?view=diff&rev=470475&r1=470474&r2=470475
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/entry/ChildNodeReference.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/entry/ChildNodeReference.java Thu Nov 2 11:02:39 2006
@@ -100,7 +100,7 @@
* @see ChildNodeEntry#getIndex()
*/
public int getIndex() {
- return parent.getChildNodeIndex(getName(), this);
+ return parent.getChildNodeIndex(this);
}
/**