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 2009/05/12 16:14:19 UTC
svn commit: r773907 - in /jackrabbit/trunk:
jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/
jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/
jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/l...
Author: angela
Date: Tue May 12 14:14:19 2009
New Revision: 773907
URL: http://svn.apache.org/viewvc?rev=773907&view=rev
Log:
JCR-2003: Add support for JCR 2.0
- Workspace.createWorkspace
- Workspace.deleteWorkspace
Modified:
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/RepositoryServiceLogger.java
jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java
jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
jackrabbit/trunk/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/RepositoryServiceImpl.java
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java?rev=773907&r1=773906&r2=773907&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java Tue May 12 14:14:19 2009
@@ -346,18 +346,19 @@
* @see javax.jcr.Workspace#createWorkspace(String)
*/
public void createWorkspace(String name) throws RepositoryException {
- // TODO: implementation missing
- throw new UnsupportedRepositoryOperationException("JCR-1104");
+ session.checkIsAlive();
+ session.checkSupportedOption(Repository.OPTION_WORKSPACE_MANAGEMENT_SUPPORTED);
+ wspManager.createWorkspace(name, null);
}
/**
* @see javax.jcr.Workspace#createWorkspace(String, String)
*/
- public void createWorkspace(String name, String srcWorkspace)
- throws RepositoryException {
- // TODO: implementation missing
- throw new UnsupportedRepositoryOperationException("JCR-1104");
+ public void createWorkspace(String name, String srcWorkspace) throws RepositoryException {
+ session.checkIsAlive();
+ session.checkSupportedOption(Repository.OPTION_WORKSPACE_MANAGEMENT_SUPPORTED);
+ wspManager.createWorkspace(name, srcWorkspace);
}
@@ -365,8 +366,9 @@
* @see javax.jcr.Workspace#deleteWorkspace(String)
*/
public void deleteWorkspace(String name) throws RepositoryException {
- // TODO: implementation missing
- throw new UnsupportedRepositoryOperationException("JCR-1104");
+ session.checkIsAlive();
+ session.checkSupportedOption(Repository.OPTION_WORKSPACE_MANAGEMENT_SUPPORTED);
+ wspManager.deleteWorkspace(name);
}
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java?rev=773907&r1=773906&r2=773907&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java Tue May 12 14:14:19 2009
@@ -388,6 +388,7 @@
throws UnsupportedRepositoryOperationException, RepositoryException {
return service.createEventFilter(sessionInfo, eventTypes, path, isDeep, uuids, nodeTypes, noLocal);
}
+
//--------------------------------------------------------------------------
/**
@@ -483,6 +484,32 @@
return t;
}
+ //-----------------------------------------------------< wsp management >---
+ /**
+ * Create a new workspace with the specified <code>name</code>. If
+ * <code>srcWorkspaceName</code> isn't <code>null</code> the content of
+ * that workspace is used as inital content, otherwise an empty workspace
+ * will be created.
+ *
+ * @param name The name of the workspace to be created.
+ * @param srcWorkspaceName The name of the workspace from which the initial
+ * content of the new workspace will be 'cloned'.
+ * @throws RepositoryException If an exception occurs.
+ */
+ void createWorkspace(String name, String srcWorkspaceName) throws RepositoryException {
+ service.createWorkspace(sessionInfo, name, srcWorkspaceName);
+ }
+
+ /**
+ * Deletes the workspace with the specified <code>name</code>.
+ *
+ * @param name
+ * @throws RepositoryException
+ */
+ void deleteWorkspace(String name) throws RepositoryException {
+ service.deleteWorkspace(sessionInfo, name);
+ }
+
//------------------------------------------< UpdatableItemStateManager >---
/**
* Creates a new batch from the single workspace operation and executes it.
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java?rev=773907&r1=773906&r2=773907&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java Tue May 12 14:14:19 2009
@@ -75,8 +75,7 @@
* repository service implementation that only provide read access to the
* underlying content.
*/
-public abstract class AbstractReadableRepositoryService
- extends AbstractRepositoryService {
+public abstract class AbstractReadableRepositoryService extends AbstractRepositoryService {
protected static final Set WRITE_ACTIONS = new HashSet(Arrays.asList(
new String[]{"add_node", "set_property", "remove"}));
@@ -683,7 +682,7 @@
throw new UnsupportedRepositoryOperationException();
}
- //----------------------< namespace registry >------------------------------
+ //-------------------------------------------------< namespace registry >---
/**
* @throws UnsupportedRepositoryOperationException always.
@@ -702,6 +701,23 @@
throw new UnsupportedRepositoryOperationException();
}
+ //-----------------------------------------------< Workspace Management >---
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void createWorkspace(SessionInfo sessionInfo, String name, String srcWorkspaceName) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void deleteWorkspace(SessionInfo sessionInfo, String name) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+
+ }
+
//-------------------------------< query >----------------------------------
public String[] getSupportedQueryLanguages(SessionInfo sessionInfo) throws
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/RepositoryServiceLogger.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/RepositoryServiceLogger.java?rev=773907&r1=773906&r2=773907&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/RepositoryServiceLogger.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/RepositoryServiceLogger.java Tue May 12 14:14:19 2009
@@ -657,6 +657,25 @@
}, "getQNodeTypeDefinitions(SessionInfo, Name[])", new Object[]{unwrap(sessionInfo), nodetypeNames});
}
+ public void createWorkspace(final SessionInfo sessionInfo, final String name, final String srcWorkspaceName) throws RepositoryException {
+ execute(new Callable() {
+ public Object call() throws RepositoryException {
+ service.createWorkspace(unwrap(sessionInfo), name, srcWorkspaceName);
+ return null;
+ }
+ }, "createWorkspace(SessionInfo, String, String)", new Object[]{unwrap(sessionInfo), name, srcWorkspaceName});
+ }
+
+ public void deleteWorkspace(final SessionInfo sessionInfo, final String name) throws RepositoryException {
+ execute(new Callable() {
+ public Object call() throws RepositoryException {
+ service.deleteWorkspace(unwrap(sessionInfo), name);
+ return null;
+ }
+ }, "deleteWorkspace(SessionInfo, String, String)", new Object[]{unwrap(sessionInfo), name});
+
+ }
+
// -----------------------------------------------------< private >---
private static SessionInfo unwrap(SessionInfo sessionInfo) {
Modified: jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java?rev=773907&r1=773906&r2=773907&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java (original)
+++ jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java Tue May 12 14:14:19 2009
@@ -610,6 +610,7 @@
* @throws javax.jcr.lock.LockException
* @throws javax.jcr.RepositoryException
* @see javax.jcr.version.VersionManager#checkpoint(String)
+ * @since JCR 2.0
*/
public NodeId checkpoint(SessionInfo sessionInfo, NodeId nodeId) throws UnsupportedRepositoryOperationException, RepositoryException;
@@ -700,25 +701,26 @@
public Iterator merge(SessionInfo sessionInfo, NodeId nodeId, String srcWorkspaceName, boolean bestEffort) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException;
/**
- * Merge the node identified by the given <code>NodeId</code> and its subtree
- * with the corresponding node present in the workspace with the name of
- * <code>srcWorkspaceName</code>.
- *
- * @param sessionInfo
- * @param nodeId
- * @param srcWorkspaceName
- * @param bestEffort
- * @return an <code>Iterator</code> over the {@link NodeId}s of all nodes that
- * received a merge result of "fail" in the course of this operation.
- * @throws javax.jcr.NoSuchWorkspaceException
- * @throws javax.jcr.AccessDeniedException
- * @throws javax.jcr.MergeException
- * @throws javax.jcr.lock.LockException
- * @throws javax.jcr.InvalidItemStateException
- * @throws javax.jcr.RepositoryException
- * @see javax.jcr.version.VersionManager#merge(String, String, boolean, boolean)
- */
- public Iterator merge(SessionInfo sessionInfo, NodeId nodeId, String srcWorkspaceName, boolean bestEffort, boolean isShallow) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException;
+ * Merge the node identified by the given <code>NodeId</code> and its subtree
+ * with the corresponding node present in the workspace with the name of
+ * <code>srcWorkspaceName</code>.
+ *
+ * @param sessionInfo
+ * @param nodeId
+ * @param srcWorkspaceName
+ * @param bestEffort
+ * @return an <code>Iterator</code> over the {@link NodeId}s of all nodes that
+ * received a merge result of "fail" in the course of this operation.
+ * @throws javax.jcr.NoSuchWorkspaceException
+ * @throws javax.jcr.AccessDeniedException
+ * @throws javax.jcr.MergeException
+ * @throws javax.jcr.lock.LockException
+ * @throws javax.jcr.InvalidItemStateException
+ * @throws javax.jcr.RepositoryException
+ * @see javax.jcr.version.VersionManager#merge(String, String, boolean, boolean)
+ * @since JCR 2.0
+ */
+ public Iterator merge(SessionInfo sessionInfo, NodeId nodeId, String srcWorkspaceName, boolean bestEffort, boolean isShallow) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException;
/**
* Resolve an existing merge conflict present with the node identified by
@@ -1053,4 +1055,39 @@
* @see javax.jcr.nodetype.NodeTypeManager#getNodeType(String)
*/
public Iterator getQNodeTypeDefinitions(SessionInfo sessionInfo, Name[] nodetypeNames) throws RepositoryException;
+
+ //-----------------------------------------------< Workspace Management >---
+ /**
+ * Create a new workspace with the specified <code>name</code>. If
+ * <code>srcWorkspaceName</code> isn't <code>null</code> the content of
+ * that workspace is 'cloned' to the new workspace as inital content,
+ * otherwise an empty workspace will be created.
+ *
+ * @param sessionInfo
+ * @param name The name of the new workspace.
+ * @param srcWorkspaceName The name of the workspace from which the initial
+ * content of the new workspace will be 'cloned'.
+ * @throws AccessDeniedException
+ * @throws UnsupportedRepositoryOperationException
+ * @throws NoSuchWorkspaceException
+ * @throws RepositoryException
+ * @see javax.jcr.Workspace#createWorkspace(String)
+ * @see javax.jcr.Workspace#createWorkspace(String, String)
+ * @since JCR 2.0
+ */
+ public void createWorkspace(SessionInfo sessionInfo, String name, String srcWorkspaceName) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException;
+
+ /**
+ * Deletes the workspace with the specified <code>name</code>.
+ *
+ * @param sessionInfo
+ * @param name The name of the workspace to be deleted.
+ * @throws AccessDeniedException
+ * @throws UnsupportedRepositoryOperationException
+ * @throws NoSuchWorkspaceException
+ * @throws RepositoryException
+ * @see javax.jcr.Workspace#deleteWorkspace(String)
+ * @since JCR 2.0
+ */
+ public void deleteWorkspace(SessionInfo sessionInfo, String name) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException;
}
Modified: jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java?rev=773907&r1=773906&r2=773907&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java Tue May 12 14:14:19 2009
@@ -1450,35 +1450,43 @@
throw ExceptionConverter.generate(e);
}
}
+
/**
* @see RepositoryService#merge(SessionInfo, NodeId, String, boolean)
*/
public Iterator merge(SessionInfo sessionInfo, NodeId nodeId, String srcWorkspaceName, boolean bestEffort) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException {
- try {
- String wspHref = uriResolver.getWorkspaceUri(srcWorkspaceName);
- Element mElem = MergeInfo.createMergeElement(new String[] {wspHref}, bestEffort, false, domFactory);
- MergeInfo mInfo = new MergeInfo(mElem);
-
- MergeMethod method = new MergeMethod(getItemUri(nodeId, sessionInfo), mInfo);
- execute(method, sessionInfo);
-
- MultiStatusResponse[] resps = method.getResponseBodyAsMultiStatus().getResponses();
- List failedIds = new ArrayList(resps.length);
- for (int i = 0; i < resps.length; i++) {
- String href = resps[i].getHref();
- failedIds.add(uriResolver.getNodeId(href, sessionInfo));
- }
- return failedIds.iterator();
- } catch (IOException e) {
- throw new RepositoryException(e);
- } catch (DavException e) {
- throw ExceptionConverter.generate(e);
- }
+ return merge(sessionInfo, nodeId, srcWorkspaceName, bestEffort, false);
}
+ /**
+ * @see RepositoryService#merge(SessionInfo, NodeId, String, boolean, boolean)
+ */
public Iterator merge(SessionInfo sessionInfo, NodeId nodeId, String srcWorkspaceName, boolean bestEffort, boolean isShallow) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException {
- // TODO
- throw new UnsupportedOperationException("JCR-2104: JSR 283 Versioning. Implementation missing");
+ if (!isShallow) {
+ try {
+ String wspHref = uriResolver.getWorkspaceUri(srcWorkspaceName);
+ Element mElem = MergeInfo.createMergeElement(new String[] {wspHref}, bestEffort, false, domFactory);
+ MergeInfo mInfo = new MergeInfo(mElem);
+
+ MergeMethod method = new MergeMethod(getItemUri(nodeId, sessionInfo), mInfo);
+ execute(method, sessionInfo);
+
+ MultiStatusResponse[] resps = method.getResponseBodyAsMultiStatus().getResponses();
+ List failedIds = new ArrayList(resps.length);
+ for (int i = 0; i < resps.length; i++) {
+ String href = resps[i].getHref();
+ failedIds.add(uriResolver.getNodeId(href, sessionInfo));
+ }
+ return failedIds.iterator();
+ } catch (IOException e) {
+ throw new RepositoryException(e);
+ } catch (DavException e) {
+ throw ExceptionConverter.generate(e);
+ }
+ } else {
+ // TODO
+ throw new UnsupportedOperationException("JCR-2104: JSR 283 Versioning. Implementation missing");
+ }
}
/**
@@ -2006,6 +2014,22 @@
}
/**
+ * {@inheritDoc}
+ */
+ public void createWorkspace(SessionInfo sessionInfo, String name, String srcWorkspaceName) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException {
+ // TODO
+ throw new UnsupportedOperationException("JCR-2003. Implementation missing");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void deleteWorkspace(SessionInfo sessionInfo, String name) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException {
+ // TODO
+ throw new UnsupportedOperationException("JCR-2003. Implementation missing");
+ }
+
+ /**
*
* @param sessionInfo
* @param reportDoc
Modified: jackrabbit/trunk/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/RepositoryServiceImpl.java?rev=773907&r1=773906&r2=773907&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/RepositoryServiceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/RepositoryServiceImpl.java Tue May 12 14:14:19 2009
@@ -1105,6 +1105,28 @@
return defs.iterator();
}
+ /**
+ * {@inheritDoc}
+ */
+ public void createWorkspace(SessionInfo sessionInfo, String name, String srcWorkspaceName) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException {
+ SessionInfoImpl sInfo = getSessionInfoImpl(sessionInfo);
+ Workspace wsp = sInfo.getSession().getWorkspace();
+ if (srcWorkspaceName == null) {
+ wsp.createWorkspace(name);
+ } else {
+ wsp.createWorkspace(name, srcWorkspaceName);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void deleteWorkspace(SessionInfo sessionInfo, String name) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException {
+ SessionInfoImpl sInfo = getSessionInfoImpl(sessionInfo);
+ Workspace wsp = sInfo.getSession().getWorkspace();
+ wsp.deleteWorkspace(name);
+ }
+
//----------------------------< internal >----------------------------------
private final class BatchImpl implements Batch {