You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2007/09/07 18:19:12 UTC

svn commit: r573626 - /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java

Author: stefan
Date: Fri Sep  7 09:18:58 2007
New Revision: 573626

URL: http://svn.apache.org/viewvc?rev=573626&view=rev
Log:
JCR-1104: JSR 283 support

work in (slow) progress...

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java?rev=573626&r1=573625&r2=573626&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java Fri Sep  7 09:18:58 2007
@@ -179,26 +179,127 @@
         session.sanityCheck();
     }
 
-    //--------------------------------------------------< JackrabbitWorkspace >
+    //--------------------------------------------------< new JSR 283 methods >
+    /**
+     * Creates a new <code>Workspace</code> with the specified <code>name</code>
+     * initialized with a <code>clone</code> of the content of the workspace
+     * <code>srcWorkspace</code>. Semantically, this method is equivalent to
+     * creating a new workspace and manually cloning <code>srcWorkspace</code>
+     * to it; however, this method may assist some implementations in optimizing
+     * subsequent <code>Node.update</code> and <code>Node.merge</code> calls
+     * between the new workspace and its source.
+     * <p/>
+     * The new workspace can be accessed through a <code>login</code>
+     * specifying its name.
+     * <p/>
+     * Throws an <code>AccessDeniedException</code> if the session through which
+     * this <code>Workspace</code> object was acquired does not have permission
+     * to create the new workspace.
+     * <p/>
+     * Throws an <code>UnsupportedRepositoryOperationException</code> if the repository does
+     * not support the creation of workspaces.
+     * <p/>
+     * A <code>RepositoryException</code> is thrown if another error occurs.
+     *
+     * @param name A <code>String</code>, the name of the new workspace.
+     * @param srcWorkspace The name of the workspace from which the new workspace is to be cloned.
+     * @throws AccessDeniedException if the session through which
+     * this <code>Workspace</code> object was acquired does not have permission
+     * to create the new workspace.
+     * @throws UnsupportedRepositoryOperationException if the repository does
+     * not support the creation of workspaces.
+     * @throws RepositoryException if another error occurs.
+     * @since JCR 2.0
+     */
+    public void createWorkspace(String name, String srcWorkspace)
+            throws AccessDeniedException, UnsupportedRepositoryOperationException,
+            RepositoryException {
+        // check state of this instance
+        sanityCheck();
+
+        session.createWorkspace(name);
+
+        SessionImpl tmpSession = null;
+        try {
+            // create a temporary session on new workspace for current subject
+            tmpSession = rep.createSession(session.getSubject(), name);
+            WorkspaceImpl newWsp = (WorkspaceImpl) tmpSession.getWorkspace();
 
+            newWsp.clone(srcWorkspace, "/", "/", false);
+        } finally {
+            if (tmpSession != null) {
+                // we don't need the temporary session anymore, logout
+                tmpSession.logout();
+            }
+        }
+    }
+
+    /**
+     * Deletes the workspace with the specified <code>name</code> from the
+     * repository, deleting all content within it.
+     * <p/>
+     * Throws an <code>AccessDeniedException</code> if the session through which
+     * this <code>Workspace</code> object was acquired does not have permission
+     * to remove the workspace.
+     * <p/>
+     * Throws an <code>UnsupportedRepositoryOperationException</code> if the
+     * repository does not support the removal of workspaces.
+     *
+     * @param name A <code>String</code>, the name of the workspace to be deleted.
+     * @throws AccessDeniedException if the session through which
+     * this <code>Workspace</code> object was acquired does not have permission
+     * to remove the workspace.
+     * @throws UnsupportedRepositoryOperationException if the
+     * repository does not support the removal of workspaces.
+     * @throws RepositoryException if another error occurs.
+     * @since JCR 2.0
+     */
+    public void deleteWorkspace(String name) throws AccessDeniedException,
+            UnsupportedRepositoryOperationException, RepositoryException {
+        // check if workspace exists (will throw NoSuchWorkspaceException if not)
+        rep.getWorkspaceInfo(name);
+        // todo implement deleteWorkspace
+        throw new UnsupportedRepositoryOperationException("not yet implemented");
+    }
+
+    //-------------------------------< JackrabbitWorkspace/new JSR 283 method >
     /**
-     * Creates a workspace with the given name.
+     * Creates a new <code>Workspace</code> with the specified
+     * <code>name</code>. The new workspace is empty, meaning it contains only
+     * root node.
+     * <p/>
+     * The new workspace can be accessed through a <code>login</code>
+     * specifying its name.
+     * <p/>
+     * Throws an <code>AccessDeniedException</code> if the session through which
+     * this <code>Workspace</code> object was acquired does not have permission
+     * to create the new workspace.
+     * <p/>
+     * Throws an <code>UnsupportedRepositoryOperationException</code> if the repository does
+     * not support the creation of workspaces.
+     * <p/>
+     * A <code>RepositoryException</code> is thrown if another error occurs.
      *
-     * @param workspaceName name of the new workspace
-     * @throws AccessDeniedException if the current session is not allowed to
-     *                               create the workspace
-     * @throws RepositoryException   if a workspace with the given name
-     *                               already exists or if another error occurs
-     * @see #getAccessibleWorkspaceNames()
+     * @param name A <code>String</code>, the name of the new workspace.
+     * @throws AccessDeniedException if the session through which
+     * this <code>Workspace</code> object was acquired does not have permission
+     * to create the new workspace.
+     * @throws UnsupportedRepositoryOperationException if the repository does
+     * not support the creation of workspaces.
+     * @throws RepositoryException if another error occurs.
+     * @since JCR 2.0
      */
-    public void createWorkspace(String workspaceName)
-            throws AccessDeniedException, RepositoryException {
+    public void createWorkspace(String name)
+            throws AccessDeniedException,
+            UnsupportedRepositoryOperationException,
+            RepositoryException {
         // check state of this instance
         sanityCheck();
 
-        session.createWorkspace(workspaceName);
+        session.createWorkspace(name);
     }
 
+    //--------------------------------------------------< JackrabbitWorkspace >
     /**
      * Creates a workspace with the given name and a workspace configuration
      * template.