You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2005/05/19 16:05:27 UTC

svn commit: r170927 - /lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Paste.java

Author: andreas
Date: Thu May 19 07:05:25 2005
New Revision: 170927

URL: http://svn.apache.org/viewcvs?rev=170927&view=rev
Log:
added locking to paste usecase

Modified:
    lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Paste.java

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Paste.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Paste.java?rev=170927&r1=170926&r2=170927&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Paste.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Paste.java Thu May 19 07:05:25 2005
@@ -16,17 +16,26 @@
  */
 package org.apache.lenya.cms.site.usecases;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.avalon.framework.service.ServiceException;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentBuildException;
 import org.apache.lenya.cms.publication.DocumentIdentityMap;
 import org.apache.lenya.cms.publication.DocumentManager;
+import org.apache.lenya.cms.repository.Node;
+import org.apache.lenya.cms.site.SiteException;
 import org.apache.lenya.cms.site.SiteUtil;
 import org.apache.lenya.cms.usecase.DocumentUsecase;
+import org.apache.lenya.cms.usecase.UsecaseException;
+import org.apache.lenya.transaction.Transactionable;
 
 /**
  * Paste a document from the clipboard.
  * 
- * @version $Id:$
+ * @version $Id$
  */
 public class Paste extends DocumentUsecase {
 
@@ -48,6 +57,9 @@
         }
     }
 
+    /**
+     * @see org.apache.lenya.cms.usecase.AbstractUsecase#initParameters()
+     */
     protected void initParameters() {
         super.initParameters();
 
@@ -64,17 +76,69 @@
     }
 
     /**
+     * @see org.apache.lenya.cms.usecase.AbstractUsecase#getObjectsToLock()
+     */
+    protected Transactionable[] getObjectsToLock() throws UsecaseException {
+        List nodes = new ArrayList();
+
+        try {
+            Node siteNode = SiteUtil.getSiteStructure(this.manager, getSourceDocument())
+                    .getRepositoryNode();
+            nodes.add(siteNode);
+
+            Clipboard clipboard = new ClipboardHelper().getClipboard(getContext());
+            if (clipboard.getMethod() == Clipboard.METHOD_CUT) {
+                DocumentIdentityMap identityMap = getDocumentIdentityMap();
+                Document clippedDocument = clipboard.getDocument(identityMap);
+                nodes.addAll(Arrays.asList(clippedDocument.getRepositoryNodes()));
+            }
+
+            Document targetDocument = getTargetDocument();
+            nodes.addAll(Arrays.asList(targetDocument.getRepositoryNodes()));
+
+        } catch (Exception e) {
+            throw new UsecaseException(e);
+        }
+
+        return (Transactionable[]) nodes.toArray(new Transactionable[nodes.size()]);
+    }
+
+    /**
      * @see org.apache.lenya.cms.usecase.AbstractUsecase#doExecute()
      */
     protected void doExecute() throws Exception {
         super.doExecute();
 
         DocumentIdentityMap identityMap = getDocumentIdentityMap();
-        String targetArea = getSourceDocument().getArea();
+        Clipboard clipboard = new ClipboardHelper().getClipboard(getContext());
+        Document clippedDocument = clipboard.getDocument(identityMap);
+
+        Document targetDocument = getTargetDocument();
+        DocumentManager documentManager = null;
+        try {
+            documentManager = (DocumentManager) this.manager.lookup(DocumentManager.ROLE);
 
+            if (clipboard.getMethod() == Clipboard.METHOD_COPY) {
+                documentManager.copyAll(clippedDocument, targetDocument);
+            } else if (clipboard.getMethod() == Clipboard.METHOD_CUT) {
+                documentManager.moveAll(clippedDocument, targetDocument);
+            } else {
+                throw new RuntimeException("This clipboard method is not supported!");
+            }
+        } finally {
+            if (documentManager != null) {
+                this.manager.release(documentManager);
+            }
+        }
+    }
+
+    protected Document getTargetDocument() throws SiteException, DocumentBuildException,
+            ServiceException {
+        DocumentIdentityMap identityMap = getDocumentIdentityMap();
         Clipboard clipboard = new ClipboardHelper().getClipboard(getContext());
         Document clippedDocument = clipboard.getDocument(identityMap);
 
+        String targetArea = getSourceDocument().getArea();
         String language = clippedDocument.getLanguage();
         String nodeId = clippedDocument.getName();
         String potentialDocumentId = getSourceDocument().getId() + "/" + nodeId;
@@ -84,21 +148,15 @@
                 potentialDocumentId,
                 language);
         DocumentManager documentManager = null;
+        Document availableDocument = null;
         try {
             documentManager = (DocumentManager) this.manager.lookup(DocumentManager.ROLE);
-            Document availableDocument = SiteUtil.getAvailableDocument(this.manager, potentialDocument);
-
-            if (clipboard.getMethod() == Clipboard.METHOD_COPY) {
-                documentManager.copyAll(clippedDocument, availableDocument);
-            } else if (clipboard.getMethod() == Clipboard.METHOD_CUT) {
-                documentManager.moveAll(clippedDocument, availableDocument);
-            } else {
-                throw new RuntimeException("This clipboard method is not supported!");
-            }
+            availableDocument = SiteUtil.getAvailableDocument(this.manager, potentialDocument);
         } finally {
             if (documentManager != null) {
                 this.manager.release(documentManager);
             }
         }
+        return availableDocument;
     }
-}
+}
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org