You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2006/11/23 15:09:50 UTC
svn commit: r478581 - in
/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi:
./ config/ lock/ operation/ version/
Author: angela
Date: Thu Nov 23 06:09:49 2006
New Revision: 478581
URL: http://svn.apache.org/viewvc?view=rev&rev=478581
Log:
work in progress
- RepositoryService.lock -> add return value
- Merge-Operation, VersionManager: merge returns failed-Ids
- LockManager: lock returns lockInfo
- javadoc, todos
Modified:
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/RepositoryConfig.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockOperation.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/DefaultVersionManager.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java?view=diff&rev=478581&r1=478580&r2=478581
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java Thu Nov 23 06:09:49 2006
@@ -306,7 +306,9 @@
* @param previousStatus
*/
public void statusChanged(ItemState state, int previousStatus) {
- // TODO: ev. assert that state is this.state?
+ if (state != this.state) {
+ throw new IllegalArgumentException("Invalid argument: ItemState with changed status must be this.state.");
+ }
switch (state.getStatus()) {
/**
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java?view=diff&rev=478581&r1=478580&r2=478581
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java Thu Nov 23 06:09:49 2006
@@ -351,10 +351,11 @@
ItemLifeCycleListener[] listeners = new ItemLifeCycleListener[]{this};
// check special nodes
- if (state.getNodeTypeName().equals(QName.NT_VERSION)) {
+ QName ntName = state.getNodeTypeName();
+ if (QName.NT_VERSION.equals(ntName)) {
// version
return new VersionImpl(this, session, state, def, listeners);
- } else if (state.getNodeTypeName().equals(QName.NT_VERSIONHISTORY)) {
+ } else if (QName.NT_VERSIONHISTORY.equals(ntName)) {
// version-history
return new VersionHistoryImpl(this, session, state, def, listeners);
} else {
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java?view=diff&rev=478581&r1=478580&r2=478581
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java Thu Nov 23 06:09:49 2006
@@ -53,7 +53,8 @@
import org.apache.jackrabbit.jcr2spi.util.LogUtil;
import org.apache.jackrabbit.spi.QPropertyDefinition;
import org.apache.jackrabbit.spi.QNodeDefinition;
-import org.apache.jackrabbit.spi.NodeId;
+import org.apache.jackrabbit.spi.IdIterator;
+import org.apache.jackrabbit.spi.ItemId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -92,7 +93,6 @@
import java.util.List;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Iterator;
/**
* <code>NodeImpl</code>...
@@ -882,15 +882,15 @@
// make sure the workspace exists and is accessible for this session.
session.checkAccessibleWorkspace(srcWorkspace);
- Collection failedIds = session.getVersionManager().merge(getNodeState(), srcWorkspace, bestEffort);
- if (failedIds.isEmpty()) {
+ IdIterator failedIds = session.getVersionManager().merge(getNodeState(), srcWorkspace, bestEffort);
+ if (failedIds.getSize() == 0) {
return IteratorHelper.EMPTY;
} else {
List failedStates = new ArrayList();
- Iterator it = failedIds.iterator();
- while (it.hasNext()) {
+ while (failedIds.hasNext()) {
try {
- ItemState state = session.getItemStateManager().getItemState((NodeId) it.next());
+ ItemId id = failedIds.nextId();
+ ItemState state = session.getItemStateManager().getItemState(id);
if (state.isNode()) {
failedStates.add(state);
} else {
@@ -902,7 +902,11 @@
throw new RepositoryException(e);
}
}
- return new LazyItemIterator(itemMgr, failedStates);
+ if (failedStates.isEmpty()) {
+ return IteratorHelper.EMPTY;
+ } else {
+ return new LazyItemIterator(itemMgr, failedStates);
+ }
}
}
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java?view=diff&rev=478581&r1=478580&r2=478581
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java Thu Nov 23 06:09:49 2006
@@ -410,7 +410,6 @@
//------------------------------------< implementation specific methods >---
void dispose() {
- // TODO.
// NOTE: wspManager has already been disposed upon SessionItemStateManager.dispose()
}
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java?view=diff&rev=478581&r1=478580&r2=478581
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java Thu Nov 23 06:09:49 2006
@@ -75,6 +75,7 @@
import org.apache.jackrabbit.spi.Batch;
import org.apache.jackrabbit.spi.EventBundle;
import org.apache.jackrabbit.spi.EventFilter;
+import org.apache.jackrabbit.spi.IdIterator;
import org.apache.jackrabbit.value.QValue;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
@@ -185,7 +186,6 @@
}
public String[] getWorkspaceNames() throws RepositoryException {
- // TODO: review
return service.getWorkspaceNames(sessionInfo);
}
@@ -248,7 +248,6 @@
* @throws RepositoryException
*/
public String[] getSupportedQueryLanguages() throws RepositoryException {
- // TODO: review
return service.getSupportedQueryLanguages(sessionInfo);
}
@@ -685,8 +684,6 @@
workspaceOperation.accept(this);
}
//-----------------------< OperationVisitor >---------------------------
- // TODO: review retrival of ItemIds for transient modifications
-
public void visit(AddNode operation) throws RepositoryException {
NodeId parentId = operation.getParentState().getNodeId();
batch.addNode(parentId, operation.getNodeName(), operation.getNodeTypeName(), operation.getUuid());
@@ -836,8 +833,8 @@
public void visit(Merge operation) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException {
NodeId nId = operation.getNodeState().getNodeId();
- // todo service should return ids of failed nodes
- service.merge(sessionInfo, nId, operation.getSourceWorkspaceName(), operation.bestEffort());
+ IdIterator failed = service.merge(sessionInfo, nId, operation.getSourceWorkspaceName(), operation.bestEffort());
+ operation.setFailedIds(failed);
}
public void visit(ResolveMergeConflict operation) throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException {
@@ -887,7 +884,8 @@
public void visit(LockOperation operation) throws AccessDeniedException, InvalidItemStateException, UnsupportedRepositoryOperationException, LockException, RepositoryException {
NodeId nId = operation.getNodeState().getNodeId();
- service.lock(sessionInfo, nId, operation.isDeep(), operation.isSessionScoped());
+ LockInfo lInfo = service.lock(sessionInfo, nId, operation.isDeep(), operation.isSessionScoped());
+ operation.setLockInfo(lInfo);
}
public void visit(LockRefresh operation) throws AccessDeniedException, InvalidItemStateException, UnsupportedRepositoryOperationException, LockException, RepositoryException {
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/RepositoryConfig.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/RepositoryConfig.java?view=diff&rev=478581&r1=478580&r2=478581
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/RepositoryConfig.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/RepositoryConfig.java Thu Nov 23 06:09:49 2006
@@ -24,7 +24,6 @@
/**
* <code>RepositoryConfig</code>...
*/
-// TODO: needs to be done properly
public interface RepositoryConfig {
public RepositoryService getRepositoryService() throws RepositoryException;
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java?view=diff&rev=478581&r1=478580&r2=478581
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java Thu Nov 23 06:09:49 2006
@@ -100,10 +100,10 @@
// execute the operation
NodeState wspNodeState = getWorkspaceState(nodeState);
- Operation op = LockOperation.create(wspNodeState, isDeep, isSessionScoped);
+ LockOperation op = LockOperation.create(wspNodeState, isDeep, isSessionScoped);
wspManager.execute(op);
- Lock lock = new LockImpl(new LockState(wspNodeState), lhNode);
+ Lock lock = new LockImpl(new LockState(wspNodeState, op.getLockInfo()), lhNode);
return lock;
}
@@ -457,14 +457,19 @@
private boolean isLive = true;
private final EventFilter eventFilter;
- private LockState(NodeState lockHoldingState) throws LockException, RepositoryException {
+ private LockState(NodeState lockHoldingState, LockInfo lockInfo)
+ throws LockException, RepositoryException{
lockHoldingState.checkIsWorkspaceState();
this.lockHoldingState = lockHoldingState;
- // retrieve lock info from wsp-manager, in order to get the complete
- // lockInfo including lock-token, which is not available from the
- // child properties nor from the original lock request.
- this.lockInfo = wspManager.getLockInfo(lockHoldingState.getNodeId());
+ if (lockInfo == null) {
+ // retrieve lock info from wsp-manager, in order to get the complete
+ // lockInfo including lock-token, which is not available from the
+ // child properties nor from the original lock request.
+ this.lockInfo = wspManager.getLockInfo(lockHoldingState.getNodeId());
+ } else {
+ this.lockInfo = lockInfo;
+ }
// TODO: TOBEFIXED...SPI may not support observation
// register as internal listener to the wsp manager in order to get
@@ -472,6 +477,10 @@
eventFilter = wspManager.createEventFilter(Event.PROPERTY_REMOVED,
lockHoldingState.getQPath(), false, null, null, true);
wspManager.addEventListener(this);
+ }
+
+ private LockState(NodeState lockHoldingState) throws LockException, RepositoryException {
+ this(lockHoldingState, null);
}
private void refresh() throws RepositoryException {
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockOperation.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockOperation.java?view=diff&rev=478581&r1=478580&r2=478581
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockOperation.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockOperation.java Thu Nov 23 06:09:49 2006
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.jcr2spi.operation;
import org.apache.jackrabbit.jcr2spi.state.NodeState;
+import org.apache.jackrabbit.spi.LockInfo;
import javax.jcr.RepositoryException;
import javax.jcr.AccessDeniedException;
@@ -73,6 +74,13 @@
return isSessionScoped;
}
+ public void setLockInfo(LockInfo lockInfo) {
+ this.lockInfo = lockInfo;
+ }
+
+ public LockInfo getLockInfo() {
+ return lockInfo;
+ }
//------------------------------------------------------------< Factory >---
/**
*
@@ -80,8 +88,8 @@
* @param isDeep
* @return
*/
- public static Operation create(NodeState nodeState, boolean isDeep, boolean isSessionScoped) {
- Operation lck = new LockOperation(nodeState, isDeep, isSessionScoped);
+ public static LockOperation create(NodeState nodeState, boolean isDeep, boolean isSessionScoped) {
+ LockOperation lck = new LockOperation(nodeState, isDeep, isSessionScoped);
return lck;
}
}
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java?view=diff&rev=478581&r1=478580&r2=478581
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java Thu Nov 23 06:09:49 2006
@@ -16,8 +16,8 @@
*/
package org.apache.jackrabbit.jcr2spi.operation;
-import org.apache.jackrabbit.jcr2spi.observation.InternalEventListener;
import org.apache.jackrabbit.jcr2spi.state.NodeState;
+import org.apache.jackrabbit.spi.IdIterator;
import javax.jcr.RepositoryException;
import javax.jcr.AccessDeniedException;
@@ -35,13 +35,13 @@
private final NodeState nodeState;
private final String srcWorkspaceName;
private final boolean bestEffort;
- private final InternalEventListener eventListener;
- private Merge(NodeState nodeState, String srcWorkspaceName, boolean bestEffort, InternalEventListener eventListener) {
+ private IdIterator failedIds = null;
+
+ private Merge(NodeState nodeState, String srcWorkspaceName, boolean bestEffort) {
this.nodeState = nodeState;
this.srcWorkspaceName = srcWorkspaceName;
this.bestEffort = bestEffort;
- this.eventListener = eventListener;
this.addAffectedItemState(nodeState);
}
@@ -77,10 +77,22 @@
return bestEffort;
}
- public InternalEventListener getEventListener() {
- return eventListener;
+ public void setFailedIds(IdIterator failedIds) {
+ if (failedIds == null) {
+ throw new IllegalArgumentException("IdIterator must not be null.");
+ }
+ if (this.failedIds != null) {
+ throw new IllegalStateException("Merge operation has already been executed -> FailedIds already set.");
+ }
+ this.failedIds = failedIds;
}
+ public IdIterator getFailedIds() {
+ if (failedIds == null) {
+ throw new IllegalStateException("Merge operation has not been executed yet.");
+ }
+ return failedIds;
+ }
//------------------------------------------------------------< Factory >---
/**
*
@@ -88,7 +100,7 @@
* @param srcWorkspaceName
* @return
*/
- public static Operation create(NodeState nodeState, String srcWorkspaceName, boolean bestEffort, InternalEventListener eventListener) {
- return new Merge(nodeState, srcWorkspaceName, bestEffort, eventListener);
+ public static Merge create(NodeState nodeState, String srcWorkspaceName, boolean bestEffort) {
+ return new Merge(nodeState, srcWorkspaceName, bestEffort);
}
}
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/DefaultVersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/DefaultVersionManager.java?view=diff&rev=478581&r1=478580&r2=478581
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/DefaultVersionManager.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/DefaultVersionManager.java Thu Nov 23 06:09:49 2006
@@ -27,8 +27,6 @@
import org.apache.jackrabbit.name.Path;
import org.apache.jackrabbit.jcr2spi.state.NodeState;
-import java.util.Collection;
-
/**
* <code>DefaultVersionManager</code>...
*/
@@ -73,7 +71,7 @@
throw new UnsupportedRepositoryOperationException("Versioning ist not supported by this repository.");
}
- public Collection merge(NodeState nodeState, String workspaceName, boolean bestEffort) throws RepositoryException {
+ public IdIterator merge(NodeState nodeState, String workspaceName, boolean bestEffort) throws RepositoryException {
throw new UnsupportedRepositoryOperationException("Versioning ist not supported by this repository.");
}
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java?view=diff&rev=478581&r1=478580&r2=478581
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java Thu Nov 23 06:09:49 2006
@@ -19,10 +19,10 @@
import org.apache.jackrabbit.name.QName;
import org.apache.jackrabbit.name.Path;
import org.apache.jackrabbit.jcr2spi.state.NodeState;
+import org.apache.jackrabbit.spi.IdIterator;
import javax.jcr.RepositoryException;
import javax.jcr.version.VersionException;
-import java.util.Collection;
/**
* <code>VersionManager</code>...
@@ -59,7 +59,7 @@
* by the user of the API.
* @see #resolveMergeConflict(NodeState,NodeState,boolean)
*/
- public Collection merge(NodeState nodeState, String workspaceName, boolean bestEffort) throws RepositoryException;
+ public IdIterator merge(NodeState nodeState, String workspaceName, boolean bestEffort) throws RepositoryException;
/**
*
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java?view=diff&rev=478581&r1=478580&r2=478581
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java Thu Nov 23 06:09:49 2006
@@ -20,7 +20,6 @@
import org.apache.jackrabbit.jcr2spi.state.PropertyState;
import org.apache.jackrabbit.jcr2spi.state.ItemStateException;
import org.apache.jackrabbit.jcr2spi.state.Status;
-import org.apache.jackrabbit.jcr2spi.observation.InternalEventListener;
import org.apache.jackrabbit.jcr2spi.operation.Operation;
import org.apache.jackrabbit.jcr2spi.operation.Checkout;
import org.apache.jackrabbit.jcr2spi.operation.Checkin;
@@ -35,20 +34,11 @@
import org.slf4j.Logger;
import javax.jcr.RepositoryException;
-import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.version.VersionException;
import org.apache.jackrabbit.name.QName;
import org.apache.jackrabbit.name.Path;
-import org.apache.jackrabbit.spi.EventIterator;
-import org.apache.jackrabbit.spi.Event;
-import org.apache.jackrabbit.spi.EventBundle;
-import org.apache.jackrabbit.spi.EventFilter;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
+import org.apache.jackrabbit.spi.IdIterator;
/**
* <code>VersionManagerImpl</code>...
@@ -156,39 +146,11 @@
workspaceManager.execute(op);
}
- public Collection merge(NodeState nodeState, String workspaceName, boolean bestEffort) throws RepositoryException {
+ public IdIterator merge(NodeState nodeState, String workspaceName, boolean bestEffort) throws RepositoryException {
NodeState wspState = getWorkspaceState(nodeState);
- // TODO : needs to be fixed... SPI may not support observation
- // TODO find better solution to build the mergeFailed-collection
- EventFilter eventFilter;
- try {
- eventFilter = workspaceManager.createEventFilter(Event.ALL_TYPES, nodeState.getQPath(), true, null, null, false);
- } catch (UnsupportedRepositoryOperationException e) {
- eventFilter = null;
- }
- final List failedIds = new ArrayList();
- final Collection fts = (eventFilter == null) ? Collections.EMPTY_LIST : Collections.singletonList(eventFilter);
-
- InternalEventListener mergeFailedCollector = new InternalEventListener() {
- public Collection getEventFilters() {
- return fts;
- }
- public void onEvent(EventBundle eventBundle) {
- if (eventBundle.isLocal()) {
- EventIterator it = eventBundle.getEvents();
- while (it.hasNext()) {
- Event ev = it.nextEvent();
- if (ev.getType() == Event.PROPERTY_ADDED && QName.JCR_MERGEFAILED.equals(ev.getQPath().getNameElement().getName())) {
- failedIds.add(ev.getParentId());
- }
- }
- }
- }
- };
-
- Operation op = Merge.create(wspState, workspaceName, bestEffort, mergeFailedCollector);
+ Merge op = Merge.create(wspState, workspaceName, bestEffort);
workspaceManager.execute(op);
- return failedIds;
+ return op.getFailedIds();
}
public void resolveMergeConflict(NodeState nodeState, NodeState versionState, boolean done) throws RepositoryException {