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/15 01:40:43 UTC
svn commit: r1170900 - in
/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi:
./ hierarchy/ nodetype/ state/ version/
Author: mduerig
Date: Wed Sep 14 23:40:42 2011
New Revision: 1170900
URL: http://svn.apache.org/viewvc?rev=1170900&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP)
refactor: remove HierarchyEntry, NodeEntry, PropertyEntry interfaces
Added:
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java
- copied, changed from r1170856, jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntryImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java
- copied, changed from r1170856, jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntry.java
- copied, changed from r1170856, jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntryImpl.java
Modified:
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntryImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyManagerImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntryImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProvider.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java?rev=1170900&r1=1170899&r2=1170900&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java Wed Sep 14 23:40:42 2011
@@ -429,9 +429,8 @@ public abstract class ItemImpl implement
* {@code String}.
*
* @return the name of this item as {@code Name}
- * @throws RepositoryException if an error occurs.
*/
- abstract Name getQName() throws RepositoryException;
+ abstract Name getQName();
/**
* Returns the primary path to this {@code Item}.
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java?rev=1170900&r1=1170899&r2=1170900&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java Wed Sep 14 23:40:42 2011
@@ -1217,7 +1217,7 @@ public class NodeImpl extends ItemImpl i
* @see ItemImpl#getName()
*/
@Override
- Name getQName() throws RepositoryException {
+ Name getQName() {
if (getNodeState().isRoot()) {
// shortcut. the given state represents the root or an orphaned node
return NameConstants.ROOT;
@@ -1368,7 +1368,7 @@ public class NodeImpl extends ItemImpl i
protected Property getProperty(Name qName) throws RepositoryException {
checkStatus();
try {
- PropertyEntry pEntry = getNodeEntry().getPropertyEntry(qName, true);
+ PropertyEntry pEntry = getNodeEntry().getPropertyEntry(qName);
if (pEntry == null) {
throw new PathNotFoundException(LogUtil.saveGetJCRName(qName, session.getNamePathResolver()));
}
@@ -1661,7 +1661,7 @@ public class NodeImpl extends ItemImpl i
// contain such a property entry, the targetEntry is 'null;
Name propName = rp.getName();
// check if property entry exists
- targetEntry = getNodeEntry().getPropertyEntry(propName, true);
+ targetEntry = getNodeEntry().getPropertyEntry(propName);
} else {
// build and resolve absolute path
Path p = getPath(rp).getCanonicalPath();
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java?rev=1170900&r1=1170899&r2=1170900&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java Wed Sep 14 23:40:42 2011
@@ -17,8 +17,6 @@
package org.apache.jackrabbit.jcr2spi.hierarchy;
import org.apache.jackrabbit.spi.Name;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashSet;
@@ -29,14 +27,14 @@ import java.util.Set;
* {@code ChildNodeAttic}...
*/
class ChildNodeAttic {
- private final Set<NodeEntryImpl> attic = new HashSet<NodeEntryImpl>();
+ private final Set<NodeEntry> attic = new HashSet<NodeEntry>();
boolean isEmpty() {
return attic.isEmpty();
}
boolean contains(Name name, int index) {
- for (NodeEntryImpl ne : attic) {
+ for (NodeEntry ne : attic) {
if (ne.matches(name, index)) {
return true;
}
@@ -45,7 +43,7 @@ class ChildNodeAttic {
}
boolean contains(Name name, int index, String uniqueId) {
- for (NodeEntryImpl ne : attic) {
+ for (NodeEntry ne : attic) {
if (uniqueId != null && uniqueId.equals(ne.getUniqueID()) || ne.matches(name, index)) {
return true;
}
@@ -54,9 +52,9 @@ class ChildNodeAttic {
return false;
}
- List<NodeEntryImpl> get(Name name) {
- List<NodeEntryImpl> l = new ArrayList<NodeEntryImpl>();
- for (NodeEntryImpl ne : attic) {
+ List<NodeEntry> get(Name name) {
+ List<NodeEntry> l = new ArrayList<NodeEntry>();
+ for (NodeEntry ne : attic) {
if (ne.matches(name)) {
l.add(ne);
}
@@ -71,7 +69,7 @@ class ChildNodeAttic {
* @return
*/
NodeEntry get(Name name, int index) {
- for (NodeEntryImpl ne : attic) {
+ for (NodeEntry ne : attic) {
if (ne.matches(name, index)) {
return ne;
}
@@ -98,7 +96,7 @@ class ChildNodeAttic {
return null;
}
- void add(NodeEntryImpl movedEntry) {
+ void add(NodeEntry movedEntry) {
attic.add(movedEntry);
}
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java?rev=1170900&r1=1170899&r2=1170900&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java Wed Sep 14 23:40:42 2011
@@ -74,8 +74,8 @@ public class EntryFactory {
this.isf = isf;
this.listener = listener;
- invalidationStrategy = new NodeEntryImpl.LazyInvalidation();
- rootEntry = NodeEntryImpl.createRootEntry(this);
+ invalidationStrategy = new NodeEntry.LazyInvalidation();
+ rootEntry = NodeEntry.createRootEntry(this);
}
/**
@@ -86,17 +86,17 @@ public class EntryFactory {
}
public NodeEntry createNodeEntry(NodeEntry parent, Name qName, String uniqueId) {
- if (!(parent instanceof NodeEntryImpl)) {
+ if (!(parent instanceof NodeEntry)) {
throw new IllegalArgumentException();
}
- return NodeEntryImpl.createNodeEntry((NodeEntryImpl) parent, qName, uniqueId, this);
+ return NodeEntry.createNodeEntry(parent, qName, uniqueId, this);
}
public PropertyEntry createPropertyEntry(NodeEntry parent, Name qName) {
- if (!(parent instanceof NodeEntryImpl)) {
+ if (!(parent instanceof NodeEntry)) {
throw new IllegalArgumentException();
}
- return PropertyEntryImpl.create((NodeEntryImpl) parent, qName, this);
+ return PropertyEntry.create(parent, qName, this);
}
public IdFactory getIdFactory() {
Copied: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java (from r1170856, jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntryImpl.java)
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java?p2=jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java&p1=jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntryImpl.java&r1=1170856&r2=1170900&rev=1170900&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntryImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java Wed Sep 14 23:40:42 2011
@@ -16,6 +16,7 @@
*/
package org.apache.jackrabbit.jcr2spi.hierarchy;
+import org.apache.jackrabbit.jcr2spi.operation.Operation;
import org.apache.jackrabbit.jcr2spi.state.ItemState;
import org.apache.jackrabbit.jcr2spi.state.ItemState.MergeResult;
import org.apache.jackrabbit.jcr2spi.state.ItemStateFactory;
@@ -39,8 +40,8 @@ import java.lang.ref.SoftReference;
* {@code HierarchyEntryImpl} implements base functionality for child node
* and property references.
*/
-abstract class HierarchyEntryImpl implements HierarchyEntry {
- private static final Logger log = LoggerFactory.getLogger(HierarchyEntryImpl.class);
+public abstract class HierarchyEntry {
+ private static final Logger log = LoggerFactory.getLogger(HierarchyEntry.class);
/**
* The required generation of this entry. This is used by the
@@ -63,7 +64,7 @@ abstract class HierarchyEntryImpl implem
/**
* Hard reference to the parent {@code NodeEntry}.
*/
- protected NodeEntryImpl parent;
+ protected NodeEntry parent;
/**
* The item state factory to create the item state.
@@ -79,7 +80,7 @@ abstract class HierarchyEntryImpl implem
* @param name the name of the child item.
* @param factory
*/
- HierarchyEntryImpl(NodeEntryImpl parent, Name name, EntryFactory factory) {
+ HierarchyEntry(NodeEntry parent, Name name, EntryFactory factory) {
this.parent = parent;
this.name = name;
this.factory = factory;
@@ -167,6 +168,19 @@ abstract class HierarchyEntryImpl implem
abstract Path buildPath(boolean workspacePath) throws RepositoryException;
/**
+ * True if this {@code HierarchyEntry} would resolve to a {@code NodeState}.
+ * @return
+ */
+ public abstract boolean denotesNode();
+
+ /**
+ * Clean up this entry upon {@link Operation#undo()} or {@link Operation#persisted()}.
+ *
+ * @param operation
+ */
+ public abstract void complete(Operation operation) throws RepositoryException;
+
+ /**
* @return the item state or {@code null} if the entry isn't resolved.
*/
ItemState internalGetItemState() {
@@ -195,27 +209,48 @@ abstract class HierarchyEntryImpl implem
//-----------------------------------------------------< HierarchyEntry >---
- @Override
+ /**
+ * @return the name of this hierarchy entry.
+ */
public Name getName() {
return name;
}
- @Override
+ /**
+ * @return the path of this hierarchy entry.
+ */
public Path getPath() throws RepositoryException {
return buildPath(false);
}
- @Override
+ /**
+ * @return If this entry has not been modified this method returns the same
+ * as {@link #getPath()}. In case of moved items this method return the
+ * original path as it is present on the persistent layer.
+ */
public Path getWorkspacePath() throws RepositoryException {
return buildPath(true);
}
- @Override
+ /**
+ * Returns the {@code NodeEntry} being parent to this
+ * {@code HierarchyEntry}.
+ *
+ * @return the parent {@code HierarchyEntry}
+ */
public NodeEntry getParent() {
return parent;
}
- @Override
+ /**
+ * If this {@code HierarchyEntry} provides an underlying
+ * {@code ItemState} this method returns the status of that state,
+ * otherwise it returns {@link org.apache.jackrabbit.jcr2spi.state.Status#_UNDEFINED_}.
+ *
+ * @return Status of the ItemState or {@link org.apache.jackrabbit.jcr2spi.state.Status#_UNDEFINED_} if this
+ * entry has not been resolved yet.
+ * @see ItemState#getStatus()
+ */
public Status getStatus() {
ItemState state = internalGetItemState();
if (state == null) {
@@ -225,23 +260,43 @@ abstract class HierarchyEntryImpl implem
}
}
- @Override
+ /**
+ * Returns {@code true} if the referenced {@code ItemState} is
+ * available. That is, the referenced {@code ItemState} has already
+ * been resolved.<br>
+ * Note, that the validity of the ItemState is not checked.
+ *
+ * @return {@code true} if the {@code ItemState} is available;
+ * otherwise {@code false}.
+ * @see #getItemState()
+ */
public boolean isAvailable() {
return internalGetItemState() != null;
}
/**
- * {@inheritDoc}<br>
+ * If this {@code HierarchyEntry} has already been resolved before
+ * (see {@link #isAvailable()}), that {@code ItemState} is returned.
+ * Note however, that the validity of the State is not asserted.<br>
+ * If the entry has not been resolved yet an attempt is made to resolve this
+ * entry, which may fail if there exists no accessible {@code ItemState}
+ * or if the corresponding state has been removed in the mean time.
+ *
+ * @return the referenced {@code ItemState}.
+ * @throws ItemNotFoundException if the {@code ItemState} does not
+ * exist anymore.
+ * @throws RepositoryException If an error occurs while retrieving the
+ * {@code ItemState}.
*/
- @Override
public ItemState getItemState() throws RepositoryException {
return resolve();
}
/**
- * {@inheritDoc}<br>
+ * Set the ItemState this hierarchyEntry will be resolved to.
+ *
+ * @param state
*/
- @Override
public synchronized void setItemState(ItemState state) {
ItemState currentState = internalGetItemState();
if (state == null || state == currentState || denotesNode() != state.isNode()) {
@@ -268,19 +323,33 @@ abstract class HierarchyEntryImpl implem
}
/**
- * {@inheritDoc}<br>
+ * Invalidates the underlying {@code ItemState} if available and if it
+ * is not transiently modified. If the {@code recursive} flag is true,
+ * also invalidates the child entries recursively.<br>
+ * Note, that in contrast to {@link HierarchyEntry#reload(boolean)}
+ * this method only sets the status of this item state to {@link
+ * org.apache.jackrabbit.jcr2spi.state.Status#INVALIDATED} and does not actually update it with the persistent
+ * state in the repository.
*/
- @Override
public void invalidate(boolean recursive) {
getInvalidationStrategy().invalidate(this, recursive);
}
- @Override
+ /**
+ * Calculates the status of the underlying {@code ItemState}: any pending
+ * changes to the underlying {@code ItemState} are applied.
+ */
public void calculateStatus() {
getInvalidationStrategy().applyPending(this);
}
- @Override
+ /**
+ * Traverses the hierarchy and reverts all transient modifications such as
+ * adding, modifying or removing item states. 'Existing' item states
+ * are reverted to their initial state and their status is reset to {@link org.apache.jackrabbit.jcr2spi.state.Status#EXISTING}.
+ *
+ * @throws RepositoryException if an error occurs.
+ */
public void revert() throws RepositoryException {
ItemState state = internalGetItemState();
if (state == null) {
@@ -328,7 +397,13 @@ abstract class HierarchyEntryImpl implem
}
}
- @Override
+ /**
+ * Reloads this hierarchy entry and the corresponding ItemState, if this
+ * entry has already been resolved. If '{@code recursive}' the complete
+ * hierarchy below this entry is reloaded as well.
+ *
+ * @param recursive
+ */
public void reload(boolean recursive) {
Status status = getStatus();
if (status == Status._UNDEFINED_) {
@@ -363,7 +438,18 @@ abstract class HierarchyEntryImpl implem
}
}
- @Override
+ /**
+ * Traverses the hierarchy and marks all available item states as transiently
+ * removed. They will change their status to either {@link org.apache.jackrabbit.jcr2spi.state.Status#EXISTING_REMOVED} if
+ * the item is existing in the persistent storage or {@link org.apache.jackrabbit.jcr2spi.state.Status#REMOVED}
+ * if the item has been transiently added before. In the latter case, the
+ * corresponding HierarchyEntries can be removed as well from their parent.
+ *
+ * @throws InvalidItemStateException if this entry has been removed in the
+ * mean time.
+ * @throws RepositoryException if an error occurs while removing any of the item
+ * states e.g. an item state is not valid anymore.
+ */
public void transientRemove() throws RepositoryException {
ItemState state = internalGetItemState();
if (state == null) {
@@ -402,12 +488,22 @@ abstract class HierarchyEntryImpl implem
}
}
- @Override
+ /**
+ * Removes this {@code HierarchyEntry} from its parent and sets the
+ * status of the underlying ItemState to {@link org.apache.jackrabbit.jcr2spi.state.Status#REMOVED} or to
+ * {@link org.apache.jackrabbit.jcr2spi.state.Status#STALE_DESTROYED}, respectively. If this entry is a
+ * NodeEntry all descending ItemStates must get their status changed as well.
+ */
public void remove() {
internalRemove(false);
}
- @Override
+ /**
+ * The required generation of this {@code HierarchyEntry} . This is used by the
+ * {@link ItemInfoCache} to determine whether an item info in the cache is up to date or not.
+ * That is whether the generation of the item info in the cache is the same or more recent
+ * as the required generation of this entry.
+ */
public long getGeneration() {
calculateStatus();
return generation;
@@ -477,7 +573,7 @@ abstract class HierarchyEntryImpl implem
*/
@Override
public void invalidate(HierarchyEntry entry, boolean recursive) {
- HierarchyEntryImpl he = (HierarchyEntryImpl) entry;
+ HierarchyEntry he = entry;
if (recursive) {
he.generation = INVALIDATION_PENDING;
if (!invalidating) {
@@ -508,7 +604,7 @@ abstract class HierarchyEntryImpl implem
currentGeneration += nextGeneration;
nextGeneration = 0;
try {
- HierarchyEntryImpl he = (HierarchyEntryImpl) entry;
+ HierarchyEntry he = entry;
if (he.generation == INVALIDATION_PENDING) {
he.invalidateInternal(true);
he.generation = currentGeneration;
@@ -528,7 +624,7 @@ abstract class HierarchyEntryImpl implem
*
* @param entry
*/
- private void resolvePendingInvalidation(HierarchyEntryImpl entry) {
+ private void resolvePendingInvalidation(HierarchyEntry entry) {
if (entry != null) {
// First recursively travel up to the first parent node
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyManagerImpl.java?rev=1170900&r1=1170899&r2=1170900&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyManagerImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyManagerImpl.java Wed Sep 14 23:40:42 2011
@@ -54,8 +54,8 @@ public class HierarchyManagerImpl implem
public void setResolver(NamePathResolver resolver) {
this.resolver = resolver;
- if (rootEntry instanceof HierarchyEntryImpl) {
- ((HierarchyEntryImpl) rootEntry).factory.setResolver(resolver);
+ if (rootEntry instanceof HierarchyEntry) {
+ rootEntry.factory.setResolver(resolver);
}
}
Copied: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java (from r1170856, jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java)
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java?p2=jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java&p1=jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java&r1=1170856&r2=1170900&rev=1170900&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java Wed Sep 14 23:40:42 2011
@@ -69,8 +69,8 @@ import static org.apache.jackrabbit.spi.
* {@code NodeEntryImpl} implements common functionality for child
* node entry implementations.
*/
-public class NodeEntryImpl extends HierarchyEntryImpl implements NodeEntry {
- private static final Logger log = LoggerFactory.getLogger(NodeEntryImpl.class);
+public class NodeEntry extends HierarchyEntry {
+ private static final Logger log = LoggerFactory.getLogger(NodeEntry.class);
/**
* UniqueID identifying this NodeEntry or {@code null} if either
@@ -123,7 +123,7 @@ public class NodeEntryImpl extends Hiera
* @param name the name of the child node.
* @param factory the entry factory.
*/
- private NodeEntryImpl(NodeEntryImpl parent, Name name, String uniqueID, EntryFactory factory) {
+ private NodeEntry(NodeEntry parent, Name name, String uniqueID, EntryFactory factory) {
super(parent, name, factory);
this.uniqueID = uniqueID; // NOTE: don't use setUniqueID (for mod only)
@@ -140,7 +140,7 @@ public class NodeEntryImpl extends Hiera
* @return the entry corresponding to the root node.
*/
static NodeEntry createRootEntry(EntryFactory factory) {
- return new NodeEntryImpl(null, NameConstants.ROOT, null, factory);
+ return new NodeEntry(null, NameConstants.ROOT, null, factory);
}
/**
@@ -150,15 +150,14 @@ public class NodeEntryImpl extends Hiera
* @param factory
* @return the created entry.
*/
- static NodeEntry createNodeEntry(NodeEntryImpl parent, Name name, String uniqueId, EntryFactory factory) {
- return new NodeEntryImpl(parent, name, uniqueId, factory);
+ static NodeEntry createNodeEntry(NodeEntry parent, Name name, String uniqueId, EntryFactory factory) {
+ return new NodeEntry(parent, name, uniqueId, factory);
}
//-----------------------------------------------------< HierarchyEntry >---
+
/**
* Returns true.
- *
- * @see HierarchyEntry#denotesNode()
*/
@Override
public boolean denotesNode() {
@@ -240,7 +239,7 @@ public class NodeEntryImpl extends Hiera
boolean staleParent = getStatus() == Status.STALE_DESTROYED;
// now remove all child-entries (or mark them accordingly)
for (Iterator<HierarchyEntry> it = getAllChildEntries(true); it.hasNext();) {
- HierarchyEntryImpl ce = (HierarchyEntryImpl) it.next();
+ HierarchyEntry ce = it.next();
ce.internalRemove(staleParent);
}
}
@@ -253,14 +252,11 @@ public class NodeEntryImpl extends Hiera
// now remove all child-entries (or mark them accordingly)
for (Iterator<HierarchyEntry> it = getAllChildEntries(true); it.hasNext();) {
- HierarchyEntryImpl ce = (HierarchyEntryImpl) it.next();
+ HierarchyEntry ce = it.next();
ce.internalRemove(staleParent);
}
}
- /**
- * @see HierarchyEntry#complete(Operation)
- */
@Override
public void complete(Operation operation) throws RepositoryException {
if (operation instanceof AddNode) {
@@ -284,12 +280,22 @@ public class NodeEntryImpl extends Hiera
//----------------------------------------------------------< NodeEntry >---
- @Override
+ /**
+ * @return the {@code NodeId} of this child node entry.
+ */
public NodeId getId() throws RepositoryException {
return getId(false);
}
- @Override
+ /**
+ * Returns the ID that must be used for resolving this entry OR loading its
+ * children entries from the persistent layer. This is the same as
+ * {@code getId()} unless this entry or any of its ancestors has been
+ * transiently moved.
+ *
+ * @return
+ * @see #getId()
+ */
public NodeId getWorkspaceId() throws RepositoryException {
return getId(true);
}
@@ -306,7 +312,7 @@ public class NodeEntryImpl extends Hiera
}
}
- private static NodeId buildNodeId(NodeEntryImpl entry, PathFactory pathFactory, IdFactory idFactory,
+ private static NodeId buildNodeId(NodeEntry entry, PathFactory pathFactory, IdFactory idFactory,
boolean wspId) throws RepositoryException {
PathBuilder pathBuilder = new PathBuilder(pathFactory);
@@ -329,12 +335,18 @@ public class NodeEntryImpl extends Hiera
}
}
- @Override
+ /**
+ * @return the unique ID of the node state which is referenced by this
+ * child node entry or {@code null} if the node state cannot be
+ * identified with a unique ID.
+ */
public String getUniqueID() {
return uniqueID;
}
- @Override
+ /**
+ * @param uniqueID
+ */
public void setUniqueID(String uniqueID) {
String old = this.uniqueID;
boolean mod = uniqueID == null ? old != null : !uniqueID.equals(old);
@@ -344,19 +356,41 @@ public class NodeEntryImpl extends Hiera
}
}
- @Override
+ /**
+ * @return the index of this child node entry to support same-name siblings.
+ * If the index of this entry cannot be determined
+ * {@link org.apache.jackrabbit.spi.Path#INDEX_UNDEFINED} is returned.
+ * @throws InvalidItemStateException
+ * @throws RepositoryException
+ */
public int getIndex() throws RepositoryException {
return getIndex(false);
}
- @Override
+ /**
+ * @return the referenced {@code NodeState}.
+ * @throws ItemNotFoundException if the {@code NodeState} does not
+ * exist.
+ * @throws RepositoryException If an error occurs while retrieving the
+ * {@code NodeState}.
+ */
public NodeState getNodeState() throws RepositoryException {
return (NodeState) getItemState();
}
- @Override
+ /**
+ * Traverse the tree below this entry and return the child entry matching
+ * the given path. If that entry has not been loaded yet, try to do so.
+ * NOTE: In contrast to getNodeEntry, getNodeEntries this method may return
+ * invalid entries, i.e. entries connected to a removed or stale ItemState.
+ *
+ * @param path
+ * @return the entry at the given path.
+ * @throws PathNotFoundException
+ * @throws RepositoryException
+ */
public NodeEntry getDeepNodeEntry(Path path) throws RepositoryException {
- NodeEntryImpl entry = this;
+ NodeEntry entry = this;
Path.Element[] elems = path.getElements();
for (int i = 0; i < elems.length; i++) {
Path.Element elem = elems[i];
@@ -374,7 +408,7 @@ public class NodeEntryImpl extends Hiera
// first try to resolve to known node or property entry
NodeEntry cne = entry.getNodeEntry(name, index, false);
if (cne != null) {
- entry = (NodeEntryImpl) cne;
+ entry = cne;
} else {
// no valid entry
// -> if entries are complete -> assume that it doesn't exist.
@@ -427,9 +461,20 @@ public class NodeEntryImpl extends Hiera
return entry;
}
- @Override
+ /**
+ * Traverse the tree below this entry and return the child entry matching
+ * the given path. If that entry has not been loaded yet, try to do so.
+ * NOTE: In contrast to getPropertyEntry and getPropertyEntries this method
+ * may return invalid entries, i.e. entries connected to a removed or stale
+ * ItemState.
+ *
+ * @param path
+ * @return the property entry at the given path.
+ * @throws PathNotFoundException
+ * @throws RepositoryException
+ */
public PropertyEntry getDeepPropertyEntry(Path path) throws RepositoryException {
- NodeEntryImpl entry = this;
+ NodeEntry entry = this;
Path.Element[] elems = path.getElements();
int i = 0;
for (; i < elems.length-1; i++) {
@@ -447,7 +492,7 @@ public class NodeEntryImpl extends Hiera
// first try to resolve to known node or property entry
NodeEntry cne = entry.getNodeEntry(name, index, false);
if (cne != null) {
- entry = (NodeEntryImpl) cne;
+ entry = cne;
} else {
// no valid ancestor node entry
// -> if entries are complete -> assume that it doesn't exist.
@@ -501,9 +546,17 @@ public class NodeEntryImpl extends Hiera
return pe;
}
- @Override
+ /**
+ * Traverse the tree below this entry and return the child entry matching
+ * the given 'workspacePath', i.e. transient modifications and new entries
+ * are ignored.<p/>
+ * If no matching entry can be found, {@code null} is return.
+ *
+ * @param workspacePath
+ * @return matching entry or {@code null}.
+ */
public HierarchyEntry lookupDeepEntry(Path workspacePath) {
- NodeEntryImpl entry = this;
+ NodeEntry entry = this;
for (int i = 0; i < workspacePath.getLength(); i++) {
Path.Element elem = workspacePath.getElements()[i];
// check for root element
@@ -521,7 +574,7 @@ public class NodeEntryImpl extends Hiera
// first try to resolve node
NodeEntry cne = entry.lookupNodeEntry(null, childName, index);
if (cne != null) {
- entry = (NodeEntryImpl) cne;
+ entry = cne;
} else if (index == Path.INDEX_DEFAULT && i == workspacePath.getLength() - 1) {
// property must not have index && must be final path element
return entry.lookupPropertyEntry(childName);
@@ -532,13 +585,28 @@ public class NodeEntryImpl extends Hiera
return entry;
}
- @Override
+ /**
+ * Determines if there is a valid {@code NodeEntry} with the
+ * specified {@code nodeName}.
+ *
+ * @param nodeName {@code Name} object specifying a node name
+ * @return {@code true} if there is a {@code NodeEntry} with
+ * the specified {@code nodeName}.
+ */
public synchronized boolean hasNodeEntry(Name nodeName) {
List<NodeEntry> namedEntries = childNodeEntries.get(nodeName);
return !namedEntries.isEmpty() && EntryValidation.containsValidNodeEntry(namedEntries.iterator());
}
- @Override
+ /**
+ * Determines if there is a valid {@code NodeEntry} with the
+ * specified {@code name} and {@code index}.
+ *
+ * @param nodeName {@code Name} object specifying a node name.
+ * @param index 1-based index if there are same-name child node entries.
+ * @return {@code true} if there is a {@code NodeEntry} with
+ * the specified {@code name} and {@code index}.
+ */
public synchronized boolean hasNodeEntry(Name nodeName, int index) {
try {
return getNodeEntry(nodeName, index) != null;
@@ -548,12 +616,34 @@ public class NodeEntryImpl extends Hiera
}
}
- @Override
+ /**
+ * Returns the valid {@code NodeEntry} with the specified name
+ * and index or {@code null} if there's no matching entry.
+ *
+ * @param nodeName {@code Name} object specifying a node name.
+ * @param index 1-based index if there are same-name child node entries.
+ * @return The {@code NodeEntry} with the specified name and index
+ * or {@code null} if there's no matching entry.
+ * @throws RepositoryException If an unexpected error occurs.
+ */
public synchronized NodeEntry getNodeEntry(Name nodeName, int index) throws RepositoryException {
return getNodeEntry(nodeName, index, false);
}
- @Override
+ /**
+ * Returns the valid {@code NodeEntry} with the specified name
+ * and index or {@code null} if there's no matching entry. If
+ * {@code loadIfNotFound} is true, the implementation must make
+ * sure, that it's list of child entries is up to date and eventually
+ * try to load the node entry.
+ *
+ * @param nodeName {@code Name} object specifying a node name.
+ * @param index 1-based index if there are same-name child node entries.
+ * @param loadIfNotFound
+ * @return The {@code NodeEntry} with the specified name and index
+ * or {@code null} if there's no matching entry.
+ * @throws RepositoryException If an unexpected error occurs.
+ */
public NodeEntry getNodeEntry(Name nodeName, int index, boolean loadIfNotFound) throws RepositoryException {
List<NodeEntry> entries = childNodeEntries.get(nodeName);
NodeEntry cne = null;
@@ -583,7 +673,13 @@ public class NodeEntryImpl extends Hiera
return cne;
}
- @Override
+ /**
+ * Returns a unmodifiable iterator of {@code NodeEntry} objects
+ * denoting the the valid child NodeEntries present on this {@code NodeEntry}.
+ *
+ * @return iterator of {@code NodeEntry} objects
+ * @throws RepositoryException If an unexpected error occurs.
+ */
public synchronized Iterator<NodeEntry> getNodeEntries() throws RepositoryException {
Collection<NodeEntry> entries = new ArrayList<NodeEntry>();
for (Iterator<NodeEntry> it = getCompleteChildNodeEntries().iterator(); it.hasNext();) {
@@ -595,7 +691,14 @@ public class NodeEntryImpl extends Hiera
return entries.iterator();
}
- @Override
+ /**
+ * Returns a unmodifiable List of {@code NodeEntry}s with the
+ * specified name.
+ *
+ * @param nodeName name of the child node entries that should be returned
+ * @return list of {@code NodeEntry} objects
+ * @throws RepositoryException If an unexpected error occurs.
+ */
public synchronized List<NodeEntry> getNodeEntries(Name nodeName) throws RepositoryException {
List<NodeEntry> namedEntries = getCompleteChildNodeEntries().get(nodeName);
if (namedEntries.isEmpty()) {
@@ -614,8 +717,12 @@ public class NodeEntryImpl extends Hiera
}
}
- @Override
- public void setNodeEntries(Iterator<ChildInfo> childInfos) throws RepositoryException {
+ /**
+ * Creates or updates the {@code ChildNodeEntries} of this node.
+ *
+ * @param childInfos
+ */
+ public void setNodeEntries(Iterator<ChildInfo> childInfos) {
if (childNodeAttic.isEmpty()) {
childNodeEntries.update(childInfos);
} else {
@@ -631,8 +738,16 @@ public class NodeEntryImpl extends Hiera
}
}
- @Override
- public NodeEntry getOrAddNodeEntry(Name nodeName, int index, String uniqueID) throws RepositoryException {
+ /**
+ * Adds a child NodeEntry to this entry if it not yet present with this
+ * node entry.
+ *
+ * @param nodeName
+ * @param index
+ * @param uniqueID
+ * @return the {@code NodeEntry}.
+ */
+ public NodeEntry getOrAddNodeEntry(Name nodeName, int index, String uniqueID) {
NodeEntry ne = lookupNodeEntry(uniqueID, nodeName, index);
if (ne == null) {
ne = internalAddNodeEntry(nodeName, uniqueID, index);
@@ -642,22 +757,44 @@ public class NodeEntryImpl extends Hiera
return ne;
}
- @Override
- public NodeEntry addNewNodeEntry(Name nodeName, String uniqueID,
- Name primaryNodeType, QNodeDefinition definition) throws RepositoryException {
+ /**
+ * Adds a new, transient child {@code NodeEntry}
+ *
+ * @param nodeName
+ * @param uniqueID
+ * @param primaryNodeType
+ * @param definition
+ * @return
+ */
+ public NodeEntry addNewNodeEntry(Name nodeName, String uniqueID, Name primaryNodeType, QNodeDefinition definition) {
+
NodeEntry entry = internalAddNodeEntry(nodeName, uniqueID, Path.INDEX_UNDEFINED);
NodeState state = getItemStateFactory().createNewNodeState(entry, primaryNodeType, definition);
entry.setItemState(state);
return entry;
}
- @Override
+ /**
+ * Determines if there is a property entry with the specified {@code Name}.
+ *
+ * @param propName {@code Name} object specifying a property name
+ * @return {@code true} if there is a property entry with the specified
+ * {@code Name}.
+ */
public synchronized boolean hasPropertyEntry(Name propName) {
PropertyEntry entry = properties.get(propName);
return EntryValidation.isValidPropertyEntry(entry);
}
- @Override
+ /**
+ * Returns the valid {@code PropertyEntry} with the specified name
+ * or {@code null} if no matching entry exists.
+ *
+ * @param propName {@code Name} object specifying a property name.
+ * @return The {@code PropertyEntry} with the specified name or
+ * {@code null} if no matching entry exists.
+ * @throws RepositoryException If an unexpected error occurs.
+ */
public synchronized PropertyEntry getPropertyEntry(Name propName) {
PropertyEntry entry = properties.get(propName);
if (EntryValidation.isValidPropertyEntry(entry)) {
@@ -668,25 +805,20 @@ public class NodeEntryImpl extends Hiera
}
/**
- * Ignores the {@code loadIfNotFound} flag due to the fact, that
- * {@link org.apache.jackrabbit.spi.NodeInfo#getPropertyIds()} returns the
- * complete list of property names currently available.
+ * Returns an unmodifiable Iterator over those children that represent valid
+ * PropertyEntries.
+ *
+ * @return an unmodifiable Iterator over those children that represent valid
+ * PropertyEntries.
*/
- @Override
- public PropertyEntry getPropertyEntry(Name propName, boolean loadIfNotFound) throws RepositoryException {
- return getPropertyEntry(propName);
- }
-
- @Override
public synchronized Iterator<PropertyEntry> getPropertyEntries() {
Collection<PropertyEntry> props;
if (getStatus() == Status.EXISTING_MODIFIED) {
// filter out removed properties
props = new ArrayList<PropertyEntry>();
// use array since upon validation the entry might be removed.
- Object[] arr = properties.getPropertyEntries().toArray();
- for (Object anArr : arr) {
- PropertyEntry propEntry = (PropertyEntry) anArr;
+ Collection<PropertyEntry> propertyEntries = properties.getPropertyEntries();
+ for (PropertyEntry propEntry : propertyEntries.toArray(new PropertyEntry[propertyEntries.size()])) {
if (EntryValidation.isValidPropertyEntry(propEntry)) {
props.add(propEntry);
}
@@ -698,8 +830,16 @@ public class NodeEntryImpl extends Hiera
return props.iterator();
}
- @Override
- public PropertyEntry getOrAddPropertyEntry(Name propName) throws ItemExistsException {
+ /**
+ * Add an existing {@code PropertyEntry} with the given name if it is
+ * not yet contained in this {@code NodeEntry}.
+ * Please note the difference to {@link #addNewPropertyEntry(Name, QPropertyDefinition, QValue[], int)}
+ * which adds a new, transient entry.
+ *
+ * @param propName
+ * @return the {@code PropertyEntry}
+ */
+ public PropertyEntry getOrAddPropertyEntry(Name propName) {
PropertyEntry pe = lookupPropertyEntry(propName);
if (pe == null) {
pe = internalAddPropertyEntry(propName, true);
@@ -709,8 +849,15 @@ public class NodeEntryImpl extends Hiera
return pe;
}
- @Override
- public void setPropertyEntries(Collection<Name> propNames) throws RepositoryException {
+ /**
+ * Adds property entries for the given {@code Name}s. It depends on
+ * the status of this {@code NodeEntry}, how conflicts are resolved
+ * and whether or not existing entries that are missing in the iterator
+ * get removed.
+ *
+ * @param propNames
+ */
+ public void setPropertyEntries(Collection<Name> propNames) {
Set<Name> diff = new HashSet<Name>();
diff.addAll(properties.getPropertyNames());
boolean containsExtra = diff.removeAll(propNames);
@@ -741,7 +888,18 @@ public class NodeEntryImpl extends Hiera
}
}
- @Override
+ /**
+ * Add a new, transient {@code PropertyEntry} to this {@code NodeEntry}
+ * and return the {@code PropertyState} associated with the new entry.
+ *
+ * @param propName
+ * @param definition
+ * @param values
+ * @param propertyType
+ * @return the new entry.
+ * @throws ItemExistsException
+ * @throws RepositoryException
+ */
public PropertyEntry addNewPropertyEntry(Name propName, QPropertyDefinition definition, QValue[] values,
int propertyType) throws RepositoryException {
@@ -781,7 +939,14 @@ public class NodeEntryImpl extends Hiera
return entry;
}
- @Override
+ /**
+ * Reorders this NodeEntry before the sibling entry specified by the given
+ * {@code beforeEntry}.
+ *
+ * @param beforeEntry the child node where to insert the node before. If
+ * {@code null} this entry is moved to the end of its parents child node entries.
+ * @throws RepositoryException If an unexpected error occurs.
+ */
public void orderBefore(NodeEntry beforeEntry) throws RepositoryException {
if (Status.NEW == getStatus()) {
// new states get remove upon revert
@@ -793,7 +958,20 @@ public class NodeEntryImpl extends Hiera
}
}
- @Override
+ /**
+ * Moves this {@code NodeEntry} as new child entry of the
+ * {@code NodeEntry} identified by {@code newParent} and/or renames
+ * it to {@code newName}. If {@code transientMove} is true, an
+ * implementation must make sure, that reverting this modification by calling
+ * {@link HierarchyEntry#revert()} on the common ancestor of both parents
+ * moves this NodeEntry back and resets the name to its original value.
+ *
+ * @param newName
+ * @param newParent
+ * @return the moved entry
+ * @throws RepositoryException If the entry to be moved is not a child of this
+ * NodeEntry or if an unexpected error occurs.
+ */
public NodeEntry move(Name newName, NodeEntry newParent, boolean transientMove) throws RepositoryException {
if (parent == null) {
// the root may never be moved
@@ -824,19 +1002,27 @@ public class NodeEntryImpl extends Hiera
throw new RepositoryException(msg);
}
// set name and parent to new values
- parent = (NodeEntryImpl) newParent;
+ parent = newParent;
name = newName;
// register entry with its new parent
parent.childNodeEntries.add(this);
return this;
}
- @Override
+ /**
+ * @return true if this {@code NodeEntry} is transiently moved.
+ */
public boolean isTransientlyMoved() {
return revertInfo != null && revertInfo.isMoved();
}
- @Override
+ /**
+ * The parent entry of a external event gets informed about the modification.
+ * Note, that {@link Event#getParentId()} of the given childEvent must point
+ * to this {@code NodeEntry}.
+ *
+ * @param childEvent
+ */
public void refresh(Event childEvent) {
ItemId eventId = childEvent.getItemId();
Path eventPath = childEvent.getPath();
@@ -894,7 +1080,7 @@ public class NodeEntryImpl extends Hiera
} else if (Status.isTransient(child.getStatus())) {
// pending changes -> don't reload entry but rather
// mark it stale
- ((HierarchyEntryImpl) child).internalGetItemState().setStatus(Status.MODIFIED);
+ child.internalGetItemState().setStatus(Status.MODIFIED);
} else {
// no pending changes -> invalidate and force reload
// upon next access.
@@ -920,7 +1106,7 @@ public class NodeEntryImpl extends Hiera
}
}
- //-------------------------------------------------< HierarchyEntryImpl >---
+ //-------------------------------------------------< HierarchyEntry >---
@Override
ItemState doResolve() throws RepositoryException {
@@ -945,11 +1131,11 @@ public class NodeEntryImpl extends Hiera
* On exit, {@code builder} contains the path of this entry.
*
* @param builder
- * @param nEntry NodeEntryImpl of the state the path should be built for.
+ * @param nEntry NodeEntry of the state the path should be built for.
* @param wspPath true if the workspace path should be built
*/
- private static void buildPath(PathBuilder builder, NodeEntryImpl nEntry, boolean wspPath) throws RepositoryException {
- NodeEntryImpl parentEntry = wspPath && nEntry.revertInfo != null ? nEntry.revertInfo.oldParent : nEntry.parent;
+ private static void buildPath(PathBuilder builder, NodeEntry nEntry, boolean wspPath) throws RepositoryException {
+ NodeEntry parentEntry = wspPath && nEntry.revertInfo != null ? nEntry.revertInfo.oldParent : nEntry.parent;
// shortcut for root state
if (parentEntry == null) {
builder.addRoot();
@@ -1274,8 +1460,8 @@ public class NodeEntryImpl extends Hiera
List<NodeEntry> sns = new ArrayList<NodeEntry>(childNodeEntries.get(cne.getName()));
if (wspIndex) {
- List<NodeEntryImpl> atticSiblings = childNodeAttic.get(cne.getName());
- for (NodeEntryImpl s : atticSiblings) {
+ List<NodeEntry> atticSiblings = childNodeAttic.get(cne.getName());
+ for (NodeEntry s : atticSiblings) {
if (s.revertInfo != null) {
sns.add(s.revertInfo.oldIndex - 1, s);
} else {
@@ -1340,7 +1526,7 @@ public class NodeEntryImpl extends Hiera
// special treatment for potentially moved/reordered/removed sns
// TODO: check again
if (childIndex > Path.INDEX_DEFAULT) {
- List<NodeEntryImpl> siblingsInAttic = childNodeAttic.get(childName);
+ List<NodeEntry> siblingsInAttic = childNodeAttic.get(childName);
if (siblings.size() < childIndex && childIndex <= siblings.size() + siblingsInAttic.size()) {
return true;
}
@@ -1348,8 +1534,8 @@ public class NodeEntryImpl extends Hiera
if (getStatus() == Status.EXISTING_MODIFIED) {
for (NodeEntry child : siblings) {
if (!EntryValidation.isValidNodeEntry(child) ||
- ((NodeEntryImpl) child).revertInfo != null &&
- ((NodeEntryImpl) child).revertInfo.oldIndex == childIndex) {
+ child.revertInfo != null &&
+ child.revertInfo.oldIndex == childIndex) {
return true;
}
@@ -1378,7 +1564,7 @@ public class NodeEntryImpl extends Hiera
if (he.getStatus() == Status.NEW) {
switch (operation.getStatus()) {
case PERSISTED:
- ((HierarchyEntryImpl) he).internalGetItemState().setStatus(Status.EXISTING);
+ he.internalGetItemState().setStatus(Status.EXISTING);
he.invalidate(false);
break;
case UNDO:
@@ -1402,7 +1588,7 @@ public class NodeEntryImpl extends Hiera
case PERSISTED:
// for autocreated/protected props, mark to be reloaded
// upon next access.
- PropertyState addedState = (PropertyState) ((HierarchyEntryImpl) pe).internalGetItemState();
+ PropertyState addedState = (PropertyState) pe.internalGetItemState();
addedState.setStatus(Status.EXISTING);
QPropertyDefinition pd = addedState.getDefinition();
if (pd.isAutoCreated() || pd.isProtected()) {
@@ -1554,7 +1740,7 @@ public class NodeEntryImpl extends Hiera
}
private void revertMove() {
- NodeEntryImpl oldParent = revertInfo.oldParent;
+ NodeEntry oldParent = revertInfo.oldParent;
if (oldParent == parent) {
// simple renaming
parent.childNodeEntries.remove(this);
@@ -1596,7 +1782,7 @@ public class NodeEntryImpl extends Hiera
*/
private class RevertInfo {
- private final NodeEntryImpl oldParent;
+ private final NodeEntry oldParent;
private final Name oldName;
private final int oldIndex;
private final NodeEntry oldSuccessor;
@@ -1606,8 +1792,8 @@ public class NodeEntryImpl extends Hiera
oldParent = parent;
oldName = name;
oldIndex = getIndex();
- oldSuccessor = parent.childNodeEntries.getNext(NodeEntryImpl.this);
- oldPredecessor = parent.childNodeEntries.getPrevious(NodeEntryImpl.this);
+ oldSuccessor = parent.childNodeEntries.getNext(NodeEntry.this);
+ oldPredecessor = parent.childNodeEntries.getPrevious(NodeEntry.this);
}
private boolean isMoved() {
@@ -1616,7 +1802,7 @@ public class NodeEntryImpl extends Hiera
private void dispose(boolean persisted) {
if (!persisted) {
- NodeEntry ne = NodeEntryImpl.this;
+ NodeEntry ne = NodeEntry.this;
ChildNodeEntriesImpl parentCNEs = parent.childNodeEntries;
parentCNEs.reorderAfter(ne, revertInfo.oldPredecessor);
try {
Copied: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntry.java (from r1170856, jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntryImpl.java)
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntry.java?p2=jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntry.java&p1=jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntryImpl.java&r1=1170856&r2=1170900&rev=1170900&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntryImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntry.java Wed Sep 14 23:40:42 2011
@@ -25,12 +25,13 @@ import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.Path;
import org.apache.jackrabbit.spi.PropertyId;
+import javax.jcr.ItemNotFoundException;
import javax.jcr.RepositoryException;
/**
* {@code PropertyEntryImpl} implements a reference to a property state.
*/
-public class PropertyEntryImpl extends HierarchyEntryImpl implements PropertyEntry {
+public class PropertyEntry extends HierarchyEntry {
/**
* Creates a new {@code PropertyEntryImpl}.
@@ -40,7 +41,7 @@ public class PropertyEntryImpl extends H
* @param name the name of the property.
* @param factory
*/
- private PropertyEntryImpl(NodeEntryImpl parent, Name name, EntryFactory factory) {
+ private PropertyEntry(NodeEntry parent, Name name, EntryFactory factory) {
super(parent, name, factory);
}
@@ -52,11 +53,11 @@ public class PropertyEntryImpl extends H
* @param factory
* @return new {@code PropertyEntry}
*/
- static PropertyEntry create(NodeEntryImpl parent, Name name, EntryFactory factory) {
- return new PropertyEntryImpl(parent, name, factory);
+ static PropertyEntry create(NodeEntry parent, Name name, EntryFactory factory) {
+ return new PropertyEntry(parent, name, factory);
}
- //------------------------------------------------------< HierarchyEntryImpl >---
+ //------------------------------------------------------< HierarchyEntry >---
@Override
ItemState doResolve() throws RepositoryException {
return getItemStateFactory().createPropertyState(getWorkspaceId(), this);
@@ -69,35 +70,48 @@ public class PropertyEntryImpl extends H
}
//------------------------------------------------------< PropertyEntry >---
- @Override
+
+ /**
+ * @return the {@code NodeId} of this child node entry.
+ */
public PropertyId getId() throws RepositoryException {
return getIdFactory().createPropertyId(parent.getId(), getName());
}
- @Override
+ /**
+ * Returns the ID that must be used for resolving this entry OR loading its
+ * children entries from the persistent layer. This is the same as
+ * {@code getId()} unless any of its ancestors has been transiently
+ * moved.
+ *
+ * @return
+ * @see #getId()
+ */
public PropertyId getWorkspaceId() throws RepositoryException {
return getIdFactory().createPropertyId(parent.getWorkspaceId(), getName());
}
- @Override
+ /**
+ * @return the referenced {@code PropertyState}.
+ * @throws ItemNotFoundException if the {@code PropertyState} does not
+ * exist anymore.
+ * @throws RepositoryException if an error occurs while retrieving the
+ * {@code PropertyState}.
+ */
public PropertyState getPropertyState() throws RepositoryException {
return (PropertyState) getItemState();
}
//-----------------------------------------------------< HierarchyEntry >---
+
/**
* Returns false.
- *
- * @see HierarchyEntry#denotesNode()
*/
@Override
public boolean denotesNode() {
return false;
}
- /**
- * @see HierarchyEntry#complete(Operation)
- */
@Override
public void complete(Operation operation) throws RepositoryException {
if (!(operation instanceof SetPropertyValue)) {
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java?rev=1170900&r1=1170899&r2=1170900&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java Wed Sep 14 23:40:42 2011
@@ -65,8 +65,8 @@ public class EffectiveNodeType {
private Set<Name> supportedMixins;
EffectiveNodeType(TreeSet<Name> mergedNodeTypes, TreeSet<Name> inheritedNodeTypes, TreeSet<Name> allNodeTypes,
- Map<Name, List<QItemDefinition>> namedItemDefs, List<QItemDefinition> unnamedItemDefs,
- Set<Name> supportedMixins) {
+ Map<Name, List<QItemDefinition>> namedItemDefs, List<QItemDefinition> unnamedItemDefs,
+ Set<Name> supportedMixins) {
this.mergedNodeTypes.addAll(mergedNodeTypes);
this.inheritedNodeTypes.addAll(inheritedNodeTypes);
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProvider.java?rev=1170900&r1=1170899&r2=1170900&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProvider.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProvider.java Wed Sep 14 23:40:42 2011
@@ -31,7 +31,6 @@ import javax.jcr.nodetype.ConstraintViol
*/
public interface ItemDefinitionProvider {
-
/**
* Returns the {@code QNodeDefinition} for the root node.
*
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java?rev=1170900&r1=1170899&r2=1170900&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java Wed Sep 14 23:40:42 2011
@@ -217,7 +217,7 @@ public class NodeState extends ItemState
}
/**
- * Used by NodeEntryImpl and NodeState only
+ * Used by NodeEntry and NodeState only
*
* @param mixinTypeNames
*/
@@ -259,7 +259,7 @@ public class NodeState extends ItemState
Name primaryType = getNodeTypeName();
allNtNames = new Name[] { primaryType }; // default
try {
- PropertyEntry pe = getNodeEntry().getPropertyEntry(NameConstants.JCR_MIXINTYPES, true);
+ PropertyEntry pe = getNodeEntry().getPropertyEntry(NameConstants.JCR_MIXINTYPES);
if (pe != null) {
PropertyState mixins = pe.getPropertyState();
QValue[] values = mixins.getValues();
@@ -372,11 +372,11 @@ public class NodeState extends ItemState
* @throws RepositoryException If an error occurs while retrieving the
* property state.
*
- * @see NodeEntry#getPropertyEntry(Name, boolean)
+ * @see NodeEntry#getPropertyEntry(org.apache.jackrabbit.spi.Name)
* @see PropertyEntry#getPropertyState()
*/
public PropertyState getPropertyState(Name propertyName) throws RepositoryException {
- PropertyEntry pe = getNodeEntry().getPropertyEntry(propertyName, true);
+ PropertyEntry pe = getNodeEntry().getPropertyEntry(propertyName);
if (pe != null) {
return pe.getPropertyState();
} else {
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java?rev=1170900&r1=1170899&r2=1170900&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java Wed Sep 14 23:40:42 2011
@@ -38,7 +38,6 @@ import org.apache.jackrabbit.spi.commons
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.jcr.ItemExistsException;
import javax.jcr.ItemNotFoundException;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
@@ -329,12 +328,7 @@ public class WorkspaceItemStateFactory e
Name propertyName = pId.getName();
propNames.add(propertyName);
}
- try {
- entry.setPropertyEntries(propNames);
- } catch (ItemExistsException e) {
- // should not get here
- log.error("Internal error", e);
- }
+ entry.setPropertyEntries(propNames);
// unless the child-info are omitted by the SPI impl -> make sure
// the child entries the node entry are initialized or updated.
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java?rev=1170900&r1=1170899&r2=1170900&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java Wed Sep 14 23:40:42 2011
@@ -337,7 +337,7 @@ public class VersionHistoryImpl extends
private Version getVersionByLabel(Name qLabel) throws RepositoryException {
refreshEntry(labelNodeEntry);
// retrieve reference property value -> and retrieve referenced node
- PropertyEntry pEntry = labelNodeEntry.getPropertyEntry(qLabel, true);
+ PropertyEntry pEntry = labelNodeEntry.getPropertyEntry(qLabel);
if (pEntry == null) {
throw new VersionException("Version with label '" + qLabel + "' does not exist.");
}