From commits-return-3037-apmail-jackrabbit-commits-archive=jackrabbit.apache.org@jackrabbit.apache.org Thu Nov 02 19:03:09 2006 Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 982 invoked from network); 2 Nov 2006 19:03:08 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 2 Nov 2006 19:03:08 -0000 Received: (qmail 29736 invoked by uid 500); 2 Nov 2006 19:03:20 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 29717 invoked by uid 500); 2 Nov 2006 19:03:19 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 29708 invoked by uid 99); 2 Nov 2006 19:03:19 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 02 Nov 2006 11:03:19 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 02 Nov 2006 11:03:07 -0800 Received: by eris.apache.org (Postfix, from userid 65534) id CC08B1A9846; Thu, 2 Nov 2006 11:02:42 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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 Date: Thu, 02 Nov 2006 19:02:41 -0000 To: commits@jackrabbit.apache.org From: angela@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20061102190242.CC08B1A9846@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 @@ * NodeState or null 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 ChildNodeEntry and with * name. * - * @param name the name of the child node. * @param cne the ChildNodeEntry instance. * @return the index of the child node entry or 0 if it is not * found in this NodeState. */ - 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); } /**