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