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 2008/11/07 09:52:46 UTC
svn commit: r712088 [2/2] - in
/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src:
main/java/org/apache/jackrabbit/jcr2spi/
main/java/org/apache/jackrabbit/jcr2spi/hierarchy/
main/java/org/apache/jackrabbit/jcr2spi/lock/
main/java/org/apache/jackrabbit/jc...
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java Fri Nov 7 00:52:32 2008
@@ -252,23 +252,25 @@
* @see HierarchyEntry#remove()
*/
public void remove() {
- ItemState state = internalGetItemState();
- if (state != null) {
- if (getStatus() == Status.EXISTING_MODIFIED) {
- state.setStatus(Status.STALE_DESTROYED);
- } else {
- state.setStatus(Status.REMOVED);
- parent.internalRemoveChildEntry(this);
- }
- } else {
- // unresolved: ignore.
- parent.internalRemoveChildEntry(this);
+ // handle this entry first
+ super.internalRemove(false);
+ boolean staleParent = (getStatus() == Status.STALE_DESTROYED);
+ // now remove all child-entries (or mark them accordingly)
+ for (Iterator it = getAllChildEntries(true); it.hasNext();) {
+ HierarchyEntryImpl ce = (HierarchyEntryImpl) it.next();
+ ce.internalRemove(staleParent);
}
+ }
- // now remove all child-entries.
+ void internalRemove(boolean staleParent) {
+ // handle this entry first
+ super.internalRemove(staleParent);
+ staleParent = (staleParent || (getStatus() == Status.STALE_DESTROYED));
+
+ // now remove all child-entries (or mark them accordingly)
for (Iterator it = getAllChildEntries(true); it.hasNext();) {
HierarchyEntryImpl ce = (HierarchyEntryImpl) it.next();
- ce.remove();
+ ce.internalRemove(staleParent);
}
}
@@ -367,17 +369,17 @@
/**
* @inheritDoc
- * @see NodeEntry#getDeepEntry(Path)
+ * @see NodeEntry#getDeepNodeEntry(Path)
*/
- public HierarchyEntry getDeepEntry(Path path) throws PathNotFoundException, RepositoryException {
+ public NodeEntry getDeepNodeEntry(Path path) throws PathNotFoundException, RepositoryException {
NodeEntryImpl entry = this;
Path.Element[] elems = path.getElements();
for (int i = 0; i < elems.length; i++) {
Path.Element elem = (Path.Element) elems[i];
// check for root element
if (elem.denotesRoot()) {
- if (getParent() != null) {
- throw new RepositoryException("NodeEntry out of 'hierarchy'" + path.toString());
+ if (entry.getParent() != null) {
+ throw new RepositoryException("NodeEntry out of 'hierarchy' " + path.toString());
}
continue;
}
@@ -389,9 +391,6 @@
NodeEntry cne = entry.getNodeEntry(name, index, false);
if (cne != null) {
entry = (NodeEntryImpl) cne;
- } else if (index == Path.INDEX_DEFAULT && i == path.getLength() - 1 && entry.properties.contains(name)) {
- // property must not have index && must be final path element
- return entry.properties.get(name);
} else {
// no valid entry
// -> if cnes are complete -> assume that it doesn't exist.
@@ -406,6 +405,11 @@
if (entry.containsAtticChild(siblings, name, index)) {
throw new PathNotFoundException(path.toString());
}
+ // shortcut: entry is NEW and still unresolved remaining path
+ // elements -> hierarchy doesn't exist anyway.
+ if (entry.getStatus() == Status.NEW) {
+ throw new PathNotFoundException(path.toString());
+ }
/*
* Unknown entry (not-existing or not yet loaded):
* Skip all intermediate entries and directly try to load the ItemState
@@ -423,12 +427,6 @@
}
Path remainingPath = pb.getPath();
- // shortcut: entry is NEW and still unresolved remaining path
- // elements -> hierarchy doesn't exist anyway.
- if (entry.getStatus() == Status.NEW) {
- throw new PathNotFoundException(path.toString());
- }
-
NodeId parentId = entry.getWorkspaceId();
IdFactory idFactory = factory.getIdFactory();
@@ -437,18 +435,7 @@
if (ne != null) {
return ne;
} else {
- if (index != Path.INDEX_DEFAULT) {
- throw new PathNotFoundException(path.toString());
- }
- // maybe a property entry exists
- parentId = (remainingPath.getLength() == 1) ? parentId : idFactory.createNodeId(parentId, remainingPath.getAncestor(1));
- PropertyId propId = idFactory.createPropertyId(parentId, remainingPath.getNameElement().getName());
- PropertyEntry pe = entry.loadPropertyEntry(propId);
- if (pe != null) {
- return pe;
- } else {
- throw new PathNotFoundException(path.toString());
- }
+ throw new PathNotFoundException(path.toString());
}
}
}
@@ -456,6 +443,82 @@
}
/**
+ * @see NodeEntry#getDeepPropertyEntry(Path)
+ */
+ public PropertyEntry getDeepPropertyEntry(Path path) throws PathNotFoundException, RepositoryException {
+ NodeEntryImpl entry = this;
+ Path.Element[] elems = path.getElements();
+ int i = 0;
+ for (; i < elems.length-1; i++) {
+ Path.Element elem = (Path.Element) elems[i];
+ if (elems[i].denotesRoot()) {
+ if (entry.getParent() != null) {
+ throw new RepositoryException("NodeEntry out of 'hierarchy' " + path.toString());
+ }
+ continue;
+ }
+
+ int index = elem.getNormalizedIndex();
+ Name name = elem.getName();
+
+ // first try to resolve to known node or property entry
+ NodeEntry cne = entry.getNodeEntry(name, index, false);
+ if (cne != null) {
+ entry = (NodeEntryImpl) cne;
+ } else {
+ // no valid ancestor node entry
+ // -> if cnes are complete -> assume that it doesn't exist.
+ // refresh will bring up new entries added in the mean time
+ // on the persistent layer.
+ if (entry.childNodeEntries.isComplete()) {
+ throw new PathNotFoundException(path.toString());
+ }
+ // -> check for moved child entry in node-attic
+ // -> check if child points to a removed/moved sns
+ List siblings = entry.childNodeEntries.get(name);
+ if (entry.containsAtticChild(siblings, name, index)) {
+ throw new PathNotFoundException(path.toString());
+ }
+ // break out of the loop and start deep loading the property
+ break;
+ }
+ }
+
+ int st = entry.getStatus();
+ PropertyEntry pe;
+ if (i == elems.length-1 && Status.INVALIDATED != st && Status._UNDEFINED_ != st) {
+ // all node entries present in the hierarchy and the direct ancestor
+ // has already been resolved and isn't invalidated -> no need to
+ // retrieve property entry from SPI
+ pe = entry.properties.get(path.getNameElement().getName());
+ } else {
+ /*
+ * Unknown parent entry (not-existing or not yet loaded) or a parent
+ * entry that has been invalidated:
+ * Skip all intermediate entries and directly try to load the
+ * PropertyState (including building the itermediate entries. If that
+ * fails ItemNotFoundException is thrown.
+ */
+ PathBuilder pb = new PathBuilder(factory.getPathFactory());
+ for (int j = i; j < elems.length; j++) {
+ pb.addLast(elems[j]);
+ }
+ Path remainingPath = pb.getPath();
+
+ IdFactory idFactory = factory.getIdFactory();
+ NodeId parentId = entry.getWorkspaceId();
+ parentId = (remainingPath.getLength() == 1) ? parentId : idFactory.createNodeId(parentId, remainingPath.getAncestor(1));
+ PropertyId propId = idFactory.createPropertyId(parentId, remainingPath.getNameElement().getName());
+ pe = entry.loadPropertyEntry(propId);
+ }
+
+ if (pe == null) {
+ throw new PathNotFoundException(path.toString());
+ }
+ return pe;
+ }
+
+ /**
* @see NodeEntry#lookupDeepEntry(Path)
*/
public HierarchyEntry lookupDeepEntry(Path workspacePath) {
@@ -528,10 +591,14 @@
if (entries.size() >= index) {
// position of entry might differ from index-1 if a SNS with lower
// index has been transiently removed.
- for (int i = index-1; i < entries.size() && cne == null; i++) {
+ int eIndex = 1;
+ for (int i = 0; i < entries.size() && cne == null; i++) {
NodeEntry ne = (NodeEntry) entries.get(i);
if (EntryValidation.isValidNodeEntry(ne)) {
- cne = ne;
+ if (eIndex == index) {
+ cne = ne;
+ }
+ eIndex++;
}
}
}
@@ -869,19 +936,11 @@
case Event.PROPERTY_REMOVED:
if (child != null) {
int status = child.getStatus();
- if (Status.isTransient(status) || Status.isStale(status)) {
- if (Status.EXISTING_REMOVED == status) {
- // colliding item removal -> mark parent stale
- internalGetItemState().setStatus(Status.MODIFIED);
- }
- // pending changes -> don't remove entry in the hierarchy
- // but rather change status to 'STALE_DESTROYED'
- ItemState childState = ((HierarchyEntryImpl) child).internalGetItemState();
- childState.setStatus(Status.STALE_DESTROYED);
- } else {
- // no pending changes -> save to remove the entry.
- child.remove();
+ if (Status.EXISTING_REMOVED == status) {
+ // colliding item removal -> mark parent stale
+ internalGetItemState().setStatus(Status.MODIFIED);
}
+ child.remove();
} // else: child-Entry has not been loaded yet -> ignore
break;
@@ -1530,12 +1589,14 @@
private final Name oldName;
private final int oldIndex;
private final NodeEntryImpl oldSuccessor;
+ private final NodeEntryImpl oldPredecessor;
private RevertInfo() throws InvalidItemStateException, RepositoryException {
this.oldParent = parent;
this.oldName = name;
this.oldIndex = getIndex();
this.oldSuccessor = (NodeEntryImpl) ((ChildNodeEntriesImpl) parent.childNodeEntries).getNext(NodeEntryImpl.this);
+ this.oldPredecessor = (NodeEntryImpl) ((ChildNodeEntriesImpl) parent.childNodeEntries).getPrevious(NodeEntryImpl.this);
}
private boolean isMoved() {
@@ -1546,7 +1607,7 @@
if (!persisted) {
NodeEntryImpl ne = NodeEntryImpl.this;
ChildNodeEntriesImpl parentCNEs = (ChildNodeEntriesImpl) parent.childNodeEntries;
- parentCNEs.reorder(ne, revertInfo.oldSuccessor);
+ parentCNEs.reorderAfter(ne, revertInfo.oldPredecessor);
try {
if (oldIndex != ne.getIndex()) {
// TODO: TOBEFIXED
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntryImpl.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntryImpl.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntryImpl.java Fri Nov 7 00:52:32 2008
@@ -110,25 +110,6 @@
}
/**
- * @see HierarchyEntry#remove()
- */
- public void remove() {
- ItemState state = internalGetItemState();
- int status = getStatus();
- if (state != null) {
- if (status == Status.EXISTING_MODIFIED) {
- state.setStatus(Status.STALE_DESTROYED);
- } else {
- state.setStatus(Status.REMOVED);
- parent.internalRemoveChildEntry(this);
- }
- } else {
- // unresolved
- parent.internalRemoveChildEntry(this);
- }
- }
-
- /**
* @see HierarchyEntry#complete(Operation)
*/
public void complete(Operation operation) throws RepositoryException {
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/UniqueIdResolver.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/UniqueIdResolver.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/UniqueIdResolver.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/UniqueIdResolver.java Fri Nov 7 00:52:32 2008
@@ -30,7 +30,6 @@
import javax.jcr.RepositoryException;
import javax.jcr.ItemNotFoundException;
import java.util.Map;
-import java.util.Iterator;
/**
* <code>UniqueIdResolver</code> allows to retrieve <code>NodeEntry</code> instances
@@ -61,16 +60,15 @@
lookUp.clear();
}
- public NodeEntry lookup(NodeId nodeId) {
- if (nodeId.getPath() != null) {
+ public NodeEntry lookup(String uniqueId) {
+ if (uniqueId == null) {
throw new IllegalArgumentException();
}
- NodeEntry entry = (NodeEntry) lookUp.get(nodeId.getUniqueID());
- return (entry != null) ? entry : null;
+ return (NodeEntry) lookUp.get(uniqueId);
}
public NodeEntry resolve(NodeId nodeId, NodeEntry rootEntry) throws ItemNotFoundException, RepositoryException {
- NodeEntry entry = lookup(nodeId);
+ NodeEntry entry = lookup(nodeId.getUniqueID());
if (entry == null) {
NodeState state = isf.createDeepNodeState(nodeId, rootEntry);
entry = state.getNodeEntry();
@@ -90,30 +88,45 @@
* @see ItemStateLifeCycleListener#statusChanged(ItemState, int)
*/
public void statusChanged(ItemState state, int previousStatus) {
- if (Status.isTerminal(state.getStatus())) {
- if (state.isNode()) {
- NodeState nodeState = (NodeState) state;
- String uniqueID = nodeState.getUniqueID();
- if (uniqueID != null) {
- lookUp.remove(uniqueID);
+ synchronized (lookUp) {
+ if (Status.isTerminal((state.getStatus()))) {
+ if (state.isNode()) {
+ NodeEntry entry = (NodeEntry) state.getHierarchyEntry();
+ String uniqueID = entry.getUniqueID();
+ if (uniqueID != null) {
+ NodeEntry mapEntry = (NodeEntry) lookUp.get(uniqueID);
+ if (mapEntry == entry) {
+ lookUp.remove(uniqueID);
+ } // else: removed entry is not present in lookup but
+ // only it's replacement -> ignore
+ }
}
- }
- state.removeListener(this);
- } else {
- putToCache(state);
+ // stop listening if a state reached status REMOVED.
+ if (Status.REMOVED == state.getStatus()) {
+ state.removeListener(this);
+ }
+ } // else: any other status than REMOVED -> ignore.
}
}
//------------------------------------------< ItemStateCreationListener >---
/**
- * Updates the internal id-lookup if the created state is a NodeState that
- * is identified by a uniqueID.
+ * Nothing to do. The lookUp is filled entry creation and/or modification
+ * of its uniqueID
*
* @param state
* @see ItemStateCreationListener#created(ItemState)
*/
public void created(ItemState state) {
- putToCache(state);
+ if (state.isNode()) {
+ NodeEntry entry = (NodeEntry) state.getHierarchyEntry();
+ String uniqueID = entry.getUniqueID();
+ if (uniqueID != null) {
+ if (!lookUp.containsKey(uniqueID) || lookUp.get(uniqueID) != entry) {
+ log.error("Created NodeState identified by UniqueID that is not contained in the lookup.");
+ }
+ }
+ }
}
//-------------------------------------< EntryFactory.NodeEntryListener >---
@@ -124,15 +137,7 @@
synchronized (lookUp) {
String uniqueID = entry.getUniqueID();
if (uniqueID != null) {
- // get an previous entry first and remove it before adding the
- // new one. otherwise the newly added entry will be removed
- // again upon removal of the original entry.
- Object previous = lookUp.get(uniqueID);
- if (previous != null) {
- lookUp.remove(uniqueID);
- ((NodeEntry) previous).remove();
- }
- lookUp.put(uniqueID, entry);
+ putToLookup(uniqueID, entry);
}
}
}
@@ -144,56 +149,56 @@
synchronized (lookUp) {
if (previousUniqueID != null) {
Object previous = lookUp.get(previousUniqueID);
- if (previous != entry) {
- // changed entry was not in this cache -> return.
- return;
- } else {
+ if (previous == entry) {
lookUp.remove(previousUniqueID);
- }
+ } // else: previousUniqueID points to another entry -> ignore
}
String uniqueID = entry.getUniqueID();
if (uniqueID != null) {
- Object previous = lookUp.put(uniqueID, entry);
- if (previous != null && previous != entry) {
- // some other entry existed before with the same uniqueID
- ((NodeEntry) previous).remove();
- }
+ putToLookup(uniqueID, entry);
}
}
}
+
//------------------------------------------------------------< private >---
- /**
- * Put the given <code>ItemState</code> in the internal cache.
- *
- * @param state
- */
- private void putToCache(ItemState state) {
- if (!state.isNode()) {
- return;
+ private void putToLookup(String uniqueID, NodeEntry entry) {
+ Object previous = lookUp.put(uniqueID, entry);
+ if (previous != null) {
+ // some other entry existed before with the same uniqueID
+ if (!sameEntry((NodeEntry) previous, entry)) {
+ // if the new entry represents the externally moved/renamed
+ // correspondance of the previous the latter needs to marked
+ // removed/stale-destroyed.
+ // otherwise (both represent the same entry) the creation
+ // of entry is the result of gc of the node or any of the
+ // ancestors. in this case there is not need to 'remove'
+ // the previous entry. instead it is just removed from this
+ // cache and left for collection.
+ ((NodeEntry) previous).remove();
+ } else {
+ log.debug("Replacement of NodeEntry identified by UniqueID");
+ }
}
+ }
- if (state.getStatus() == Status.EXISTING || state.getStatus() == Status.MODIFIED) {
- NodeEntry entry = ((NodeState)state).getNodeEntry();
- // NOTE: uniqueID is retrieved from the state and not from the NodeId.
- String uniqueID = entry.getUniqueID();
- synchronized (lookUp) {
- if (uniqueID != null) {
- if (lookUp.get(uniqueID) != entry) {
- lookUp.put(uniqueID, entry);
- }
- } else {
- // ev. uniqueID was removed -> remove the entry from the lookUp
- if (lookUp.containsValue(entry)) {
- for (Iterator it = lookUp.entrySet().iterator(); it.hasNext();) {
- Map.Entry next = (Map.Entry) it.next();
- if (next.getValue() == entry) {
- it.remove();
- break;
- }
- }
- }
+ private static boolean sameEntry(NodeEntry previous, NodeEntry entry) {
+ if (previous == entry) {
+ return true;
+ } else if (Status.REMOVED != previous.getStatus() &&
+ previous.getName().equals(entry.getName())) {
+
+ NodeEntry parent = previous.getParent();
+ NodeEntry parent2 = entry.getParent();
+ if (parent == parent2) {
+ return true;
+ } else {
+ try {
+ return parent.getPath().equals(parent2.getPath());
+ } catch (RepositoryException e) {
+ // TODO: add some fallback
}
}
}
+ return false;
}
}
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java Fri Nov 7 00:52:32 2008
@@ -324,17 +324,12 @@
if (lockNodeId.equals(nId)) {
lockHoldingState = nodeState;
} else {
- HierarchyEntry lockedEntry = wspManager.getHierarchyManager().getHierarchyEntry(lockNodeId);
- if (lockedEntry.denotesNode()) {
- try {
- lockHoldingState = ((NodeEntry) lockedEntry).getNodeState();
- } catch (RepositoryException e) {
- log.warn("Cannot build LockState");
- throw new RepositoryException("Cannot build LockState", e);
- }
- } else {
- // should never occur
- throw new RepositoryException("Internal error: NodeId points to a Property.");
+ NodeEntry lockedEntry = wspManager.getHierarchyManager().getNodeEntry(lockNodeId);
+ try {
+ lockHoldingState = ((NodeEntry) lockedEntry).getNodeState();
+ } catch (RepositoryException e) {
+ log.warn("Cannot build LockState");
+ throw new RepositoryException("Cannot build LockState", e);
}
}
@@ -547,7 +542,7 @@
try {
if (!lockHoldingState.hasPropertyName(NameConstants.JCR_LOCKISDEEP)) {
// force reloading of the lock holding node.
- itemManager.getItem(lockHoldingState.getNodeEntry().getPath());
+ itemManager.getItem(lockHoldingState.getNodeEntry());
}
PropertyState ps = lockHoldingState.getPropertyState(NameConstants.JCR_LOCKISDEEP);
ps.addListener(this);
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractCopy.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractCopy.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractCopy.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractCopy.java Fri Nov 7 00:52:32 2008
@@ -16,17 +16,14 @@
*/
package org.apache.jackrabbit.jcr2spi.operation;
-import org.apache.jackrabbit.jcr2spi.state.ItemState;
-import org.apache.jackrabbit.jcr2spi.state.NodeState;
import org.apache.jackrabbit.jcr2spi.ManagerProvider;
-import org.apache.jackrabbit.jcr2spi.util.LogUtil;
-import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.jcr2spi.state.NodeState;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.NodeId;
-import org.slf4j.LoggerFactory;
+import org.apache.jackrabbit.spi.Path;
import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
/**
@@ -51,12 +48,9 @@
ManagerProvider srcMgrProvider, ManagerProvider destMgrProvider)
throws RepositoryException {
- ItemState srcItemState = srcMgrProvider.getHierarchyManager().getItemState(srcPath);
- if (!srcItemState.isNode()) {
- throw new PathNotFoundException("Source path " + LogUtil.safeGetJCRPath(srcPath, srcMgrProvider.getPathResolver()) + " is not a valid path.");
- }
+ NodeState srcItemState = getNodeState(srcPath, srcMgrProvider.getHierarchyManager());
this.srcState = (NodeState)srcItemState;
- this.destParentState = getNodeState(destPath.getAncestor(1), destMgrProvider.getHierarchyManager(), destMgrProvider.getNamePathResolver());
+ this.destParentState = getNodeState(destPath.getAncestor(1), destMgrProvider.getHierarchyManager());
// check for illegal index present in destination path
Path.Element destElement = destPath.getNameElement();
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractOperation.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractOperation.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractOperation.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractOperation.java Fri Nov 7 00:52:32 2008
@@ -16,17 +16,15 @@
*/
package org.apache.jackrabbit.jcr2spi.operation;
-import org.apache.jackrabbit.spi.Path;
import org.apache.jackrabbit.jcr2spi.hierarchy.HierarchyManager;
import org.apache.jackrabbit.jcr2spi.state.ItemState;
import org.apache.jackrabbit.jcr2spi.state.NodeState;
-import org.apache.jackrabbit.jcr2spi.util.LogUtil;
-import org.apache.jackrabbit.spi.commons.conversion.PathResolver;
+import org.apache.jackrabbit.spi.Path;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
-import java.util.Collection;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
/**
@@ -82,17 +80,13 @@
*
* @param nodePath
* @param hierMgr
- * @param resolver
* @return
* @throws PathNotFoundException
* @throws RepositoryException
*/
- protected static NodeState getNodeState(Path nodePath, HierarchyManager hierMgr, PathResolver resolver) throws PathNotFoundException, RepositoryException {
- ItemState itemState = hierMgr.getItemState(nodePath);
- if (!itemState.isNode()) {
- throw new PathNotFoundException(LogUtil.safeGetJCRPath(nodePath, resolver));
- }
- return (NodeState) itemState;
+ protected static NodeState getNodeState(Path nodePath, HierarchyManager hierMgr) throws PathNotFoundException, RepositoryException {
+ NodeState nodeState = hierMgr.getNodeState(nodePath);
+ return nodeState;
}
/**
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java Fri Nov 7 00:52:32 2008
@@ -175,9 +175,9 @@
throw new RepositoryException(msg);
}
- NodeState srcState = getNodeState(srcPath, hierMgr, resolver);
- NodeState srcParentState = getNodeState(srcPath.getAncestor(1), hierMgr, resolver);
- NodeState destParentState = getNodeState(destPath.getAncestor(1), hierMgr, resolver);
+ NodeState srcState = getNodeState(srcPath, hierMgr);
+ NodeState srcParentState = getNodeState(srcPath.getAncestor(1), hierMgr);
+ NodeState destParentState = getNodeState(destPath.getAncestor(1), hierMgr);
Name destName = destElement.getName();
if (sessionMove) {
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java Fri Nov 7 00:52:32 2008
@@ -89,6 +89,11 @@
//------------------------------------------------------------< Factory >---
public static Operation create(ItemState state) throws RepositoryException {
+ if (state.isNode() && ((NodeState) state).getDefinition().allowsSameNameSiblings()) {
+ // in case of SNS-siblings make sure the parent hierarchy entry has
+ // its child entries loaded.
+ assertChildNodeEntries(state.getParent());
+ }
return new Remove(state, state.getParent());
}
}
\ No newline at end of file
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java Fri Nov 7 00:52:32 2008
@@ -214,7 +214,7 @@
try {
QueryResultRow row = (QueryResultRow) rows.next();
nextId = row.getNodeId();
- Item tmp = itemMgr.getItem(hierarchyMgr.getHierarchyEntry(nextId));
+ Item tmp = itemMgr.getItem(hierarchyMgr.getNodeEntry(nextId));
if (tmp.isNode()) {
next = (Node) tmp;
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java Fri Nov 7 00:52:32 2008
@@ -421,7 +421,6 @@
VersionException, LockException, ItemNotFoundException,
ReferentialIntegrityException, RepositoryException {
- // TODO: missing check if all affected child-states can be removed as well
if (targetState.isNode() && ((NodeState)targetState).isRoot()) {
// root node
throw new ConstraintViolationException("Cannot remove root node.");
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java Fri Nov 7 00:52:32 2008
@@ -313,7 +313,7 @@
removedStates.add(state);
}
- /**
+ /**
*
* @param parent
* @param state
@@ -321,26 +321,26 @@
*/
private static boolean containedInTree(ItemState parent, ItemState state) {
HierarchyEntry he = state.getHierarchyEntry();
- HierarchyEntry pHe = parent.getHierarchyEntry();
- // short cuts first
- if (he == pHe || he.getParent() == pHe) {
- return true;
- }
- if (!parent.isNode() || he == pHe.getParent()) {
- return false;
- }
- // none of the simple cases: walk up hierarchy
- HierarchyEntry pe = he.getParent();
- while (pe != null) {
- if (pe == pHe) {
- return true;
- }
- pe = pe.getParent();
- }
+ HierarchyEntry pHe = parent.getHierarchyEntry();
+ // short cuts first
+ if (he == pHe || he.getParent() == pHe) {
+ return true;
+ }
+ if (!parent.isNode() || he == pHe.getParent()) {
+ return false;
+ }
+ // none of the simple cases: walk up hierarchy
+ HierarchyEntry pe = he.getParent();
+ while (pe != null) {
+ if (pe == pHe) {
+ return true;
+ }
+ pe = pe.getParent();
+ }
- // state isn't descendant of 'parent'
- return false;
- }
+ // state isn't descendant of 'parent'
+ return false;
+ }
//-----------------------------------------< ItemStateLifeCycleListener >---
/**
@@ -404,14 +404,16 @@
removed(state);
break;
}
+ // in any case: stop listening to status changes
+ state.removeListener(this);
break;
case Status.STALE_DESTROYED:
case Status.STALE_MODIFIED:
/**
- state is stale due to external modification -> move it to
- the collection of stale item states.
- validation omitted for only 'existing_modified' states can
- become stale see {@link Status#isValidStatusChange(int, int)}
+ state is stale due to external modification -> move it to
+ the collection of stale item states.
+ validation omitted for only 'existing_modified' states can
+ become stale see {@link Status#isValidStatusChange(int, int)}
*/
modifiedStates.remove(state);
staleStates.add(state);
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java Fri Nov 7 00:52:32 2008
@@ -19,7 +19,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.jackrabbit.jcr2spi.NodeImpl;
-import org.apache.jackrabbit.jcr2spi.ItemManager;
import org.apache.jackrabbit.jcr2spi.SessionImpl;
import org.apache.jackrabbit.jcr2spi.ItemLifeCycleListener;
import org.apache.jackrabbit.jcr2spi.LazyItemIterator;
@@ -58,10 +57,9 @@
private final NodeEntry vhEntry;
private final NodeEntry labelNodeEntry;
- public VersionHistoryImpl(ItemManager itemMgr, SessionImpl session,
- NodeState state, ItemLifeCycleListener[] listeners)
- throws VersionException, RepositoryException {
- super(itemMgr, session, state, listeners);
+ public VersionHistoryImpl(SessionImpl session, NodeState state, ItemLifeCycleListener[] listeners)
+ throws VersionException, RepositoryException {
+ super(session, state, listeners);
this.vhEntry = (NodeEntry) state.getHierarchyEntry();
// retrieve hierarchy entry of the jcr:versionLabels node
@@ -99,7 +97,7 @@
log.error(msg);
throw new RepositoryException(msg);
}
- return (Version) itemMgr.getItem(vEntry);
+ return (Version) getItemManager().getItem(vEntry);
}
/**
@@ -120,7 +118,7 @@
versionEntries.add(entry);
}
}
- return new LazyItemIterator(itemMgr, new RangeIteratorAdapter(versionEntries));
+ return new LazyItemIterator(getItemManager(), new RangeIteratorAdapter(versionEntries));
}
/**
@@ -134,7 +132,7 @@
public Version getVersion(String versionName) throws VersionException, RepositoryException {
checkStatus();
NodeState vState = getVersionState(versionName);
- return (Version) itemMgr.getItem(vState.getHierarchyEntry());
+ return (Version) getItemManager().getItem(vState.getHierarchyEntry());
}
/**
@@ -378,7 +376,7 @@
if (pEntry == null) {
throw new VersionException("Version with label '" + qLabel + "' does not exist.");
}
- Node version = ((Property) itemMgr.getItem(pEntry)).getNode();
+ Node version = ((Property) getItemManager().getItem(pEntry)).getNode();
return (Version) version;
}
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionImpl.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionImpl.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionImpl.java Fri Nov 7 00:52:32 2008
@@ -43,9 +43,9 @@
private static Logger log = LoggerFactory.getLogger(VersionImpl.class);
- public VersionImpl(ItemManager itemMgr, SessionImpl session, NodeState state,
+ public VersionImpl(SessionImpl session, NodeState state,
ItemLifeCycleListener[] listeners) {
- super(itemMgr, session, state, listeners);
+ super(session, state, listeners);
}
//------------------------------------------------------------< Version >---
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java Fri Nov 7 00:52:32 2008
@@ -61,7 +61,7 @@
public NodeEntry checkin(NodeState nodeState) throws RepositoryException {
Checkin ci = Checkin.create(nodeState, this);
workspaceManager.execute(ci);
- return (NodeEntry) workspaceManager.getHierarchyManager().getHierarchyEntry(ci.getNewVersionId());
+ return workspaceManager.getHierarchyManager().getNodeEntry(ci.getNewVersionId());
}
public void checkout(NodeState nodeState) throws RepositoryException {
@@ -187,13 +187,13 @@
String uniqueID = ps.getValue().getString();
NodeId versionableId = workspaceManager.getIdFactory().createNodeId(uniqueID);
- return (NodeEntry) workspaceManager.getHierarchyManager().getHierarchyEntry(versionableId);
+ return workspaceManager.getHierarchyManager().getNodeEntry(versionableId);
}
public NodeEntry getVersionHistoryEntry(NodeState versionableState) throws RepositoryException {
PropertyState ps = versionableState.getPropertyState(NameConstants.JCR_VERSIONHISTORY);
String uniqueID = ps.getValue().getString();
NodeId vhId = workspaceManager.getIdFactory().createNodeId(uniqueID);
- return (NodeEntry) workspaceManager.getHierarchyManager().getHierarchyEntry(vhId);
+ return workspaceManager.getHierarchyManager().getNodeEntry(vhId);
}
}
\ No newline at end of file
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java Fri Nov 7 00:52:32 2008
@@ -18,7 +18,6 @@
import org.apache.jackrabbit.jcr2spi.SessionImpl;
import org.apache.jackrabbit.jcr2spi.SessionListener;
-import org.apache.jackrabbit.jcr2spi.hierarchy.HierarchyEntry;
import org.apache.jackrabbit.jcr2spi.hierarchy.NodeEntry;
import org.apache.jackrabbit.jcr2spi.hierarchy.PropertyEntry;
import org.apache.jackrabbit.jcr2spi.nodetype.EffectiveNodeType;
@@ -29,7 +28,6 @@
import org.apache.jackrabbit.jcr2spi.operation.Remove;
import org.apache.jackrabbit.jcr2spi.operation.SetMixin;
import org.apache.jackrabbit.jcr2spi.operation.SetPropertyValue;
-import org.apache.jackrabbit.jcr2spi.state.ItemState;
import org.apache.jackrabbit.jcr2spi.state.ItemStateValidator;
import org.apache.jackrabbit.jcr2spi.state.NodeState;
import org.apache.jackrabbit.jcr2spi.state.PropertyState;
@@ -37,19 +35,19 @@
import org.apache.jackrabbit.jcr2spi.state.Status;
import org.apache.jackrabbit.jcr2spi.util.LogUtil;
import org.apache.jackrabbit.jcr2spi.util.ReferenceChangeTracker;
-import org.apache.jackrabbit.spi.commons.name.NameConstants;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.NodeId;
import org.apache.jackrabbit.spi.Path;
import org.apache.jackrabbit.spi.QNodeDefinition;
import org.apache.jackrabbit.spi.QPropertyDefinition;
import org.apache.jackrabbit.spi.QValue;
+import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
+import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.spi.commons.value.ValueFormat;
import org.apache.jackrabbit.util.Base64;
import org.apache.jackrabbit.util.TransientFileFactory;
import org.apache.jackrabbit.uuid.UUID;
-import org.apache.jackrabbit.spi.commons.value.ValueFormat;
import org.apache.jackrabbit.value.ValueHelper;
-import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -126,11 +124,7 @@
// perform preliminary checks
try {
- ItemState itemState = session.getHierarchyManager().getItemState(parentPath);
- if (!itemState.isNode()) {
- throw new PathNotFoundException(LogUtil.safeGetJCRPath(parentPath, session.getPathResolver()));
- }
- importTarget = (NodeState) itemState;
+ importTarget = session.getHierarchyManager().getNodeState(parentPath);
// check if import target is writable, not-locked and checked-out.
int options = ItemStateValidator.CHECK_ACCESS | ItemStateValidator.CHECK_LOCK | ItemStateValidator.CHECK_VERSIONING;
@@ -217,7 +211,7 @@
// potential uuid conflict
try {
NodeId conflictingId = session.getIdFactory().createNodeId(nodeInfo.getUUID());
- HierarchyEntry conflicting = session.getHierarchyManager().getHierarchyEntry(conflictingId);
+ NodeEntry conflicting = session.getHierarchyManager().getNodeEntry(conflictingId);
// assert that the entry is available
conflicting.getItemState();
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractMoveTreeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractMoveTreeTest.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractMoveTreeTest.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractMoveTreeTest.java Fri Nov 7 00:52:32 2008
@@ -27,6 +27,8 @@
import javax.jcr.version.VersionException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.lock.LockException;
+import java.util.List;
+import java.util.ArrayList;
/**
* <code>AbstractMoveTreeTest</code>...
@@ -44,6 +46,7 @@
protected String srcPath;
protected String destinationPath;
+ protected List childPaths = new ArrayList();
protected void setUp() throws Exception {
super.setUp();
@@ -59,6 +62,9 @@
childNode = moveNode.addNode(nodeName2, testNodeType);
grandChildNode = childNode.addNode(nodeName3, testNodeType);
+ childPaths.add(grandChildNode.getPath());
+ childPaths.add(childNode.getPath());
+
doMove(moveNode.getPath(), destinationPath);
}
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/ExternalModificationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/ExternalModificationTest.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/ExternalModificationTest.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/ExternalModificationTest.java Fri Nov 7 00:52:32 2008
@@ -27,6 +27,7 @@
import javax.jcr.Node;
import javax.jcr.InvalidItemStateException;
import javax.jcr.Item;
+import javax.jcr.Property;
/** <code>ExternalModificationTest</code>... */
public class ExternalModificationTest extends AbstractJCRTest {
@@ -152,19 +153,14 @@
superuser.move(refNode.getPath(), destParentNode.getPath() + "/" + nodeName2);
superuser.save();
+ testSession.getItem(destParentNode.getPath() + "/" + nodeName2);
+
+ assertItemStatus(refNode2, Status.STALE_DESTROYED);
try {
- refNode2.refresh(true);
- Node parent = refNode2.getParent();
+ refNode2.refresh(false);
+ fail();
} catch (InvalidItemStateException e) {
- }
-
- if (isItemStatus(refNode2, Status.STALE_DESTROYED)) {
- try {
- refNode2.refresh(false);
- fail();
- } catch (InvalidItemStateException e) {
- // correct behaviour
- }
+ // correct behaviour
}
}
@@ -175,15 +171,230 @@
superuser.move(refNode.getPath(), destParentNode.getPath() + "/" + nodeName2);
superuser.save();
+ testSession.getItem(destParentNode.getPath() + "/" + nodeName2);
+
+ assertItemStatus(refNode2, Status.STALE_DESTROYED);
+ testSession.refresh(false);
+ assertItemStatus(refNode2, Status.REMOVED);
+ }
+
+ public void testStaleDestroyed3() throws RepositoryException, NotExecutableException {
+ String uuid = refNode.getUUID();
+
+ Node refNode2 = (Node) testSession.getItem(refNode.getPath());
+ // TODO: for generic jsr 170 test isSame must be replace by 'Item.isSame'
+ assertSame(refNode2, testSession.getNodeByUUID(uuid));
+ // add some modification
+ refNode2.addMixin(mixLockable);
+
+ String srcPath = refNode.getPath();
+ String destPath = destParentNode.getPath() + "/" + nodeName2;
+ superuser.move(srcPath, destPath);
+ superuser.save();
+
+ testSession.getItem(destPath);
+
+ assertItemStatus(refNode2, Status.STALE_DESTROYED);
+ // the uuid must be transfered to the 'moved' node
+ Node n = testSession.getNodeByUUID(uuid);
+ // TODO: for generic jsr 170 test assertSame must be replace by 'Item.isSame'
+ assertSame(n, testSession.getItem(destPath));
+ assertSame(refNode2, testSession.getItem(srcPath));
+ }
+
+ public void testExternalRemoval() throws RepositoryException, NotExecutableException {
+ String uuid = refNode.getUUID();
+ Node refNode2 = (Node) testSession.getNodeByUUID(uuid);
+
+ String srcPath = refNode.getPath();
+ String destPath = destParentNode.getPath() + "/" + nodeName2;
+ superuser.move(srcPath, destPath);
+ superuser.save();
+
try {
refNode2.refresh(true);
Node parent = refNode2.getParent();
} catch (InvalidItemStateException e) {
}
- if (isItemStatus(refNode2, Status.STALE_DESTROYED)) {
- testSession.refresh(false);
- assertItemStatus(refNode2, Status.REMOVED);
+ assertItemStatus(refNode2, Status.REMOVED);
+ // the uuid must be transfered to the 'moved' node
+ Node n = testSession.getNodeByUUID(uuid);
+ // TODO: for generic jsr 170 test assertSame must be replace by 'Item.isSame'
+ assertSame(n, testSession.getItem(destPath));
+ }
+
+ public void testExternalRemoval2() throws RepositoryException, NotExecutableException {
+ Node childN = refNode.addNode(nodeName3);
+ Property p = childN.setProperty(propertyName1, "anyvalue");
+ refNode.save();
+
+ String uuid = refNode.getUUID();
+ Node refNode2 = (Node) testSession.getNodeByUUID(uuid);
+ Node c2 = (Node) testSession.getItem(childN.getPath());
+ Property p2 = (Property) testSession.getItem(p.getPath());
+ // transiently remove the property -> test effect of external removal.
+ p2.remove();
+
+ String srcPath = refNode.getPath();
+ String destPath = destParentNode.getPath() + "/" + nodeName2;
+ superuser.move(srcPath, destPath);
+ superuser.save();
+
+ try {
+ refNode2.refresh(true);
+ Node parent = refNode2.getParent();
+ } catch (InvalidItemStateException e) {
}
+
+ assertItemStatus(refNode2, Status.REMOVED);
+ assertItemStatus(c2, Status.STALE_DESTROYED);
+ assertItemStatus(p2, Status.REMOVED);
+ }
+
+ public void testExternalRemoval3() throws RepositoryException, NotExecutableException {
+ Node childN = refNode.addNode(nodeName3);
+ Property p = childN.setProperty(propertyName1, "anyvalue");
+ refNode.save();
+
+ String uuid = refNode.getUUID();
+ Node refNode2 = (Node) testSession.getNodeByUUID(uuid);
+ Node c2 = (Node) testSession.getItem(childN.getPath());
+ Property p2 = (Property) testSession.getItem(p.getPath());
+ // transiently modify -> test effect of external removal.
+ p2.setValue("changedValue");
+
+ String srcPath = refNode.getPath();
+ String destPath = destParentNode.getPath() + "/" + nodeName2;
+ superuser.move(srcPath, destPath);
+ superuser.save();
+
+ try {
+ refNode2.refresh(true);
+ Node parent = refNode2.getParent();
+ } catch (InvalidItemStateException e) {
+ }
+
+ assertItemStatus(refNode2, Status.REMOVED);
+ assertItemStatus(c2, Status.REMOVED);
+ assertItemStatus(p2, Status.STALE_DESTROYED);
+ assertEquals("changedValue", p2.getString());
+ }
+
+ public void testNewItemsUponStaleDestroyed() throws RepositoryException, NotExecutableException {
+ String uuid = refNode.getUUID();
+ Node refNode2 = (Node) testSession.getItem(refNode.getPath());
+ refNode2.addMixin(mixLockable);
+
+ Node childN = refNode2.addNode(nodeName3);
+ String childNPath = childN.getPath();
+
+ Property childP = refNode2.setProperty(propertyName2, "someValue");
+ String childPPath = childP.getPath();
+
+ String destPath = destParentNode.getPath() + "/" + nodeName2;
+ superuser.move(refNode.getPath(), destPath);
+ superuser.save();
+
+ testSession.refresh(true);
+ testSession.getItem(destPath);
+
+ assertItemStatus(refNode2, Status.STALE_DESTROYED);
+ assertItemStatus(refNode2.getProperty(jcrMixinTypes), Status.STALE_DESTROYED);
+ assertItemStatus(childN, Status.NEW);
+ assertItemStatus(childP, Status.NEW);
+ assertItemStatus(childN.getProperty(jcrPrimaryType), Status.NEW);
+
+ assertTrue(testSession.itemExists(childNPath));
+ assertSame(childN, testSession.getItem(childNPath));
+
+ assertTrue(testSession.itemExists(childPPath));
+ assertSame(childP, testSession.getItem(childPPath));
+
+ testSession.refresh(false);
+
+ assertItemStatus(childN, Status.REMOVED);
+ assertItemStatus(childP, Status.REMOVED);
+ assertFalse(testSession.itemExists(childNPath));
+ assertFalse(testSession.itemExists(childPPath));
+ }
+
+ public void testChildItemsUponStaleDestroyed() throws RepositoryException, NotExecutableException {
+ Node cNode = refNode.addNode(nodeName3);
+ Node cNode2 = cNode.addNode(nodeName4);
+ refNode.save();
+
+ String uuid = refNode.getUUID();
+ Node refNode2 = (Node) testSession.getItem(refNode.getPath());
+ refNode2.addMixin(mixLockable);
+
+ Node child = (Node) testSession.getItem(cNode.getPath());
+ Node child2 = (Node) testSession.getItem(cNode2.getPath());
+ Node child3 = child2.addNode(nodeName4);
+ String child3Path = child3.getPath();
+
+ String destPath = destParentNode.getPath() + "/" + nodeName2;
+ superuser.move(refNode.getPath(), destPath);
+ superuser.save();
+
+ testSession.refresh(true);
+ testSession.getItem(destPath);
+
+ assertItemStatus(refNode2, Status.STALE_DESTROYED);
+ assertItemStatus(refNode2.getProperty(jcrMixinTypes), Status.STALE_DESTROYED);
+ assertItemStatus(child, Status.REMOVED);
+ assertItemStatus(child2, Status.STALE_DESTROYED);
+ assertItemStatus(child3, Status.NEW);
+ assertItemStatus(child3.getProperty(jcrPrimaryType), Status.NEW);
+
+ testSession.refresh(false);
+
+ assertItemStatus(child2, Status.REMOVED);
+ assertItemStatus(child3, Status.REMOVED);
+ }
+
+ public void testUnmodifiedAncestorRemoved() throws RepositoryException, NotExecutableException {
+ String uuid = refNode.getUUID();
+ Node n3 = refNode.addNode(nodeName3, testNodeType);
+ refNode.save();
+
+ Node refNode2 = (Node) testSession.getItem(refNode.getPath());
+ // add transient modification to non-referenceable child node
+ Node node3 = (Node) testSession.getItem(n3.getPath());
+ node3.addMixin(mixLockable);
+
+ // add new child node and child property below
+ Node childN = node3.addNode(nodeName3);
+ String childNPath = childN.getPath();
+
+ Property childP = node3.setProperty(propertyName2, "someValue");
+ String childPPath = childP.getPath();
+
+ // externally move the 'refNode' in order to provoke uuid-conflict
+ // in testSession -> refNode2 gets removed, since it doesn't have
+ // transient modifications.
+ String destPath = destParentNode.getPath() + "/" + nodeName2;
+ superuser.move(refNode.getPath(), destPath);
+ superuser.save();
+
+ testSession.refresh(true);
+ testSession.getItem(destPath);
+
+ assertItemStatus(refNode2, Status.REMOVED);
+ assertItemStatus(node3, Status.STALE_DESTROYED);
+ assertItemStatus(childN, Status.NEW);
+ assertItemStatus(childP, Status.NEW);
+
+ // since 'refNode2' is removed -> child items must not be accessible
+ // any more.
+ assertFalse(testSession.itemExists(childNPath));
+ assertFalse(testSession.itemExists(childPPath));
+
+ // revert all pending changes...
+ testSession.refresh(false);
+ // must mark all modified/new items as removed.
+ assertItemStatus(node3, Status.REMOVED);
+ assertItemStatus(childN, Status.REMOVED);
+ assertItemStatus(childP, Status.REMOVED);
}
}
\ No newline at end of file
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetPropertyTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetPropertyTest.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetPropertyTest.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetPropertyTest.java Fri Nov 7 00:52:32 2008
@@ -19,17 +19,23 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.jackrabbit.test.AbstractJCRTest;
+import org.apache.jackrabbit.test.NotExecutableException;
+import org.apache.jackrabbit.util.Text;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.Session;
import javax.jcr.RepositoryException;
+import javax.jcr.PropertyIterator;
+import javax.jcr.InvalidItemStateException;
+import javax.jcr.PathNotFoundException;
/** <code>GetPropertyTest</code>... */
public class GetPropertyTest extends AbstractJCRTest {
private static Logger log = LoggerFactory.getLogger(GetPropertyTest.class);
+ private String node1Path;
private String prop1Path;
private String prop2Path;
@@ -39,6 +45,8 @@
super.setUp();
Node n = testRootNode.addNode(nodeName1, testNodeType);
+ node1Path = n.getPath();
+
Property p = n.setProperty(propertyName1, "string1");
prop1Path = p.getPath();
@@ -82,4 +90,126 @@
trn.getProperty(prop1Path.substring(testPath.length() + 1));
trn.getProperty(prop2Path.substring(testPath.length() + 1));
}
+
+ public void testGetDeepProperty() throws RepositoryException {
+ Node n2 = testRootNode.getNode(nodeName1).addNode(nodeName2);
+ testRootNode.save();
+
+ // other session directly accesses n2.
+ // consequently n1 is not yet resolved
+ Node node2 = (Node) readOnly.getItem(n2.getPath());
+
+ // now try to access properties below n1 -> should be existing although
+ // n1 has not yet been resolved.
+ assertTrue(readOnly.itemExists(prop1Path));
+ Property p1 = (Property) readOnly.getItem(prop1Path);
+ assertTrue(p1.isSame(node2.getProperty("../" + Text.getName(prop1Path))));
+
+ PropertyIterator it = node2.getParent().getProperties();
+ assertTrue(it.getSize() >= 3);
+ }
+
+ public void testGetExternallyAddedItems() throws RepositoryException {
+ Node node1 = (Node) readOnly.getItem(node1Path);
+
+ Node n2 = testRootNode.getNode(nodeName1).addNode(nodeName2);
+ Property p3 = n2.setProperty(propertyName1, "test");
+ testRootNode.save();
+
+ node1.refresh(true);
+
+ assertTrue(readOnly.itemExists(n2.getPath()));
+ assertTrue(readOnly.itemExists(p3.getPath()));
+ }
+
+ public void testGetDeepSNSProperties() throws RepositoryException, NotExecutableException {
+ Node n = testRootNode.getNode(nodeName1);
+ if (!n.getDefinition().allowsSameNameSiblings()) {
+ throw new NotExecutableException();
+ }
+ Node sib2 = testRootNode.addNode(nodeName1);
+ Property p2 = sib2.setProperty(propertyName1, "sib2-prop");
+
+ Node sib3 = testRootNode.addNode(nodeName1);
+ Property p3 = sib3.setProperty(propertyName1, "sib3-prop");
+ testRootNode.save();
+
+ Session s = helper.getReadWriteSession();
+ try {
+ Node sibNode = (Node) s.getItem(sib2.getPath());
+ sibNode.remove();
+
+ // after transient removal of the sibling2, sibling3 must match its
+ // path -> the property must have the proper value.
+ Property pp3 = (Property) s.getItem(sib2.getPath() + "/" + propertyName1);
+ assertEquals("sib3-prop", pp3.getString());
+
+ // the tree starting with node[3] must not be accessible any more.
+ assertFalse(s.itemExists(p3.getPath()));
+ assertFalse(s.itemExists(sib3.getPath()));
+ } finally {
+ s.logout();
+ }
+ }
+
+ public void testGetDeepRefNodeProperties() throws RepositoryException, NotExecutableException {
+ Node n = testRootNode.getNode(nodeName1);
+ n.addMixin(mixReferenceable);
+ Node n2 = n.addNode(nodeName2);
+ Property p3 = n2.setProperty(propertyName1, "test");
+ testRootNode.save();
+
+ // other session directly accesses p3.
+ // consequently n1 is not yet resolved
+ Property prop3 = (Property) readOnly.getItem(p3.getPath());
+
+ // now try to access properties below n1 -> should be existing although
+ // n1 has not yet been resolved.
+ assertTrue(readOnly.itemExists(prop2Path));
+ Property p1 = (Property) readOnly.getItem(prop2Path);
+
+ Node node1 = readOnly.getNodeByUUID(n.getUUID());
+ assertTrue(p1.isSame(node1.getProperty(Text.getName(prop2Path))));
+ }
+
+ public void testGetPropertyOfRemovedAncestor() throws RepositoryException {
+ Session rw = helper.getReadWriteSession();
+ try {
+ // add modification to a property.
+ Property p = (Property) rw.getItem(prop1Path);
+ p.setValue("changedValue");
+
+ // transiently remove the test root node
+ rw.getItem(testRootNode.getPath()).remove();
+
+ try {
+ p.getValue();
+ fail("modified property must be marked removed upon parent removal");
+ } catch (InvalidItemStateException e) {
+ // success
+ }
+ try {
+ rw.getItem(prop1Path);
+ fail("modified property must be marked removed upon parent removal");
+ } catch (PathNotFoundException e) {
+ // success
+ }
+ try {
+ Property p2 = (Property) rw.getItem(prop2Path);
+ fail("existing property must be marked removed upon parent removal");
+ } catch (PathNotFoundException e) {
+ // success
+ }
+
+ // revert all transient modifications
+ rw.refresh(false);
+ Property pAgain = (Property) rw.getItem(prop1Path);
+
+ // TODO: for generic jsr 170 test: change assert to p.isSame(pAgain)
+ assertSame(p, pAgain);
+ assertEquals("string1", p.getString());
+ } finally {
+ rw.logout();
+ }
+ }
}
\ No newline at end of file
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveMultipleTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveMultipleTest.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveMultipleTest.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveMultipleTest.java Fri Nov 7 00:52:32 2008
@@ -16,21 +16,15 @@
*/
package org.apache.jackrabbit.jcr2spi;
+import org.apache.jackrabbit.util.Text;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.jackrabbit.util.Text;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.ItemExistsException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Property;
-import javax.jcr.Node;
import javax.jcr.InvalidItemStateException;
-import javax.jcr.AccessDeniedException;
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.RepositoryException;
import javax.jcr.Session;
-import javax.jcr.lock.LockException;
-import javax.jcr.version.VersionException;
/**
* <code>MoveMultipleTest</code>...
@@ -54,7 +48,7 @@
* Transiently move a persisted node multiple times and check results
* after each move as well as after saving.
*/
- public void testMultipleMove() throws RepositoryException, ConstraintViolationException, ItemExistsException, VersionException {
+ public void testMultipleMove() throws RepositoryException {
// 1. move
doMove(moveNode.getPath(), destinationPath);
@@ -103,7 +97,7 @@
/**
* Move a new node multiple times and check the hierarchy after saving.
*/
- public void testMultipleMoveNewNode() throws RepositoryException, LockException, ConstraintViolationException, VersionException {
+ public void testMultipleMoveNewNode() throws RepositoryException {
// add additional nodes
Node moveNode2 = moveNode.addNode(nodeName3, testNodeType);
@@ -140,7 +134,7 @@
* Separately move the persisted 'moveNode' and its transiently added
* child node.
*/
- public void testMoveParentAndChild() throws RepositoryException, LockException, ConstraintViolationException, VersionException {
+ public void testMoveParentAndChild() throws RepositoryException {
// add additional nodes
Node moveNode2 = moveNode.addNode(nodeName3, testNodeType);
Property childProperty = moveNode2.setProperty(propertyName2, "anyString");
@@ -175,7 +169,7 @@
/**
* Move a node that has a child node and finally revert the 'move' operations.
*/
- public void testRevertingMoveParentAndChild() throws RepositoryException, LockException, ConstraintViolationException, NoSuchNodeTypeException, ItemExistsException, VersionException {
+ public void testRevertingMoveParentAndChild() throws RepositoryException {
Node moveNode2 = moveNode.addNode(nodeName3, testNodeType);
// moveNode2 must be persisted in order not to have it removed upon
// refresh(false).
@@ -198,7 +192,7 @@
* Separately move the new 'moveNode' and its child node. Save 'add' and
* 'move' ops in one step.
*/
- public void testMoveNewParentAndNewChild() throws RepositoryException, LockException, ConstraintViolationException, VersionException {
+ public void testMoveNewParentAndNewChild() throws RepositoryException {
Node moveNode2 = moveNode.addNode("moveNode2", testNodeType);
Property childProperty = moveNode2.setProperty(propertyName2, "anyString");
Node childNode = moveNode2.addNode("childNode", testNodeType);
@@ -222,7 +216,7 @@
* Check if reverting the changes removes the 'new' child and moves
* the persisted moveNode back.
*/
- public void testRevertingMoveParentAndNewChild() throws RepositoryException, LockException, ConstraintViolationException, NoSuchNodeTypeException, ItemExistsException, VersionException {
+ public void testRevertingMoveParentAndNewChild() throws RepositoryException {
Node moveNode2 = moveNode.addNode(nodeName3, testNodeType);
doMove(moveNode.getPath(), destinationPath);
@@ -247,7 +241,7 @@
* Move a node with child items without having loaded the children before.
* Test if children can be accessed afterwards.
*/
- public void testAccessChildrenAfterMove() throws RepositoryException, ConstraintViolationException, InvalidItemStateException, AccessDeniedException, NoSuchNodeTypeException, ItemExistsException, VersionException {
+ public void testAccessChildrenAfterMove() throws RepositoryException {
Property childProperty = moveNode.setProperty(propertyName2, "anyString");
Node childNode = moveNode.addNode(nodeName2, testNodeType);
testRootNode.save();
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveTreeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveTreeTest.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveTreeTest.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveTreeTest.java Fri Nov 7 00:52:32 2008
@@ -46,7 +46,6 @@
assertTrue("Moving a node must move all child items as well.", ancestor.isSame(destParentNode));
ancestor = grandChildNode.getAncestor(degree);
assertTrue("Moving a node must move all child items as well.", ancestor.isSame(destParentNode));
-
}
public void testTreeEntries() throws RepositoryException {
@@ -65,17 +64,40 @@
} catch (PathNotFoundException e) {
// ok
}
+ }
+
+ public void testOldPropertyPath() throws RepositoryException {
try {
superuser.getItem(srcPath + "/" + propertyName2);
fail("Moving a node must move all child items as well.");
} catch (PathNotFoundException e) {
// ok
}
- try {
- superuser.getItem(srcPath + "/" + nodeName2 + "/" + nodeName3);
- fail("Moving a node must move all child items as well.");
- } catch (PathNotFoundException e) {
- // ok
+ }
+
+ public void testOldChildPath() throws RepositoryException {
+ for (int i = 0; i < childPaths.size(); i++) {
+ String path = childPaths.get(i).toString();
+ assertFalse(superuser.itemExists(path));
+ try {
+ superuser.getItem(path);
+ fail("Moving a node must move all child items as well.");
+ } catch (PathNotFoundException e) {
+ // ok
+ }
+ }
+ }
+
+ public void testOldChildPropertyPath() throws RepositoryException {
+ for (int i = 0; i < childPaths.size(); i++) {
+ String propPath = childPaths.get(i).toString() + "/" + jcrPrimaryType;
+ assertFalse(superuser.itemExists(propPath));
+ try {
+ superuser.getItem(propPath);
+ fail("Moving a node must move all child items as well.");
+ } catch (PathNotFoundException e) {
+ // ok
+ }
}
}
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/UpdateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/UpdateTest.java?rev=712088&r1=712087&r2=712088&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/UpdateTest.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/UpdateTest.java Fri Nov 7 00:52:32 2008
@@ -16,27 +16,21 @@
*/
package org.apache.jackrabbit.jcr2spi;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.jackrabbit.test.AbstractJCRTest;
import org.apache.jackrabbit.test.NotExecutableException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-import javax.jcr.RepositoryException;
-import javax.jcr.NoSuchWorkspaceException;
import javax.jcr.InvalidItemStateException;
-import javax.jcr.AccessDeniedException;
-import javax.jcr.Node;
import javax.jcr.ItemNotFoundException;
-import javax.jcr.ItemExistsException;
-import javax.jcr.Session;
-import javax.jcr.Property;
+import javax.jcr.NoSuchWorkspaceException;
+import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
-import javax.jcr.version.VersionException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.lock.LockException;
-import java.util.List;
+import javax.jcr.Property;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
import java.util.Arrays;
+import java.util.List;
/**
* <code>UpdateTest</code>...
@@ -53,7 +47,7 @@
currentWorkspace = testRootNode.getSession().getWorkspace().getName();
}
- public void testInvalidSrcWorkspace() throws RepositoryException, InvalidItemStateException, AccessDeniedException {
+ public void testInvalidSrcWorkspace() throws RepositoryException {
String nonExistingWorkspace = "nonExistingWorkspace";
String[] accessibleWorkspaces = testRootNode.getSession().getWorkspace().getAccessibleWorkspaceNames();
List l = Arrays.asList(accessibleWorkspaces);
@@ -68,7 +62,7 @@
}
}
- public void testNoCorrespondingNode() throws RepositoryException, InvalidItemStateException, AccessDeniedException, NotExecutableException {
+ public void testNoCorrespondingNode() throws RepositoryException, NotExecutableException {
Node n = testRootNode.addNode(nodeName2, testNodeType);
testRootNode.save();
@@ -96,7 +90,7 @@
}
}
- public void testSameWorkspace() throws RepositoryException, InvalidItemStateException, AccessDeniedException, NotExecutableException {
+ public void testSameWorkspace() throws RepositoryException, NotExecutableException {
try {
// update without corresponding node must be a nop
testRootNode.update(currentWorkspace);
@@ -105,7 +99,7 @@
}
}
- public void testPendingChangesSameWorkspace() throws RepositoryException, InvalidItemStateException, AccessDeniedException, NotExecutableException {
+ public void testPendingChangesSameWorkspace() throws RepositoryException, NotExecutableException {
testRootNode.addNode(nodeName2, testNodeType);
try {
@@ -116,7 +110,7 @@
}
}
- public void testPendingChanges() throws RepositoryException, LockException, ConstraintViolationException, NoSuchNodeTypeException, ItemExistsException, VersionException, NotExecutableException {
+ public void testPendingChanges() throws RepositoryException, NotExecutableException {
testRootNode.addNode(nodeName2, testNodeType);
String srcWorkspace = getAnotherWorkspace();
@@ -128,7 +122,7 @@
}
}
- public void testPendingChangesOnOtherNode() throws RepositoryException, LockException, ConstraintViolationException, NoSuchNodeTypeException, ItemExistsException, VersionException, NotExecutableException {
+ public void testPendingChangesOnOtherNode() throws RepositoryException, NotExecutableException {
try {
Node root = testRootNode.getSession().getRootNode();
if (root.isSame(testRootNode)) {