From 441926f1f675aa1a6ec1c511c08cc0aa21d77d9e Mon Sep 17 00:00:00 2001 From: Jan Vonka Date: Fri, 19 Oct 2012 14:14:18 +0000 Subject: [PATCH] Merged BRANCHES/DEV/CLOUD1-BUG-FIX to HEAD: 42847: CLOUD-794: "Activities should be posted for CMIS (to enable both Public API + Mobile clients)" git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@42869 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/opencmis/ActivityPoster.java | 10 +- .../alfresco/opencmis/ActivityPosterImpl.java | 123 +++++++++++++----- .../org/alfresco/opencmis/CMISConnector.java | 21 +-- 3 files changed, 97 insertions(+), 57 deletions(-) diff --git a/source/java/org/alfresco/opencmis/ActivityPoster.java b/source/java/org/alfresco/opencmis/ActivityPoster.java index 175726d95d..0deb955696 100644 --- a/source/java/org/alfresco/opencmis/ActivityPoster.java +++ b/source/java/org/alfresco/opencmis/ActivityPoster.java @@ -18,6 +18,7 @@ */ package org.alfresco.opencmis; +import org.alfresco.opencmis.ActivityPosterImpl.ActivityInfo; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.NodeRef; @@ -32,12 +33,7 @@ public interface ActivityPoster void postFileUpdated(NodeRef nodeRef); - void postFileDeleted( - String parentPath, - NodeRef parentNodeRef, - NodeRef nodeRef, - String siteId, - String fileName); + void postFileDeleted(ActivityInfo activityInfo); - String getParentPath(NodeRef nodeRef); + ActivityInfo getActivityInfo(NodeRef nodeRef); } diff --git a/source/java/org/alfresco/opencmis/ActivityPosterImpl.java b/source/java/org/alfresco/opencmis/ActivityPosterImpl.java index de4b53e617..6769932aeb 100644 --- a/source/java/org/alfresco/opencmis/ActivityPosterImpl.java +++ b/source/java/org/alfresco/opencmis/ActivityPosterImpl.java @@ -106,11 +106,6 @@ public class ActivityPosterImpl implements ActivityPoster, InitializingBean { this.activitiesEnabled = activitiesEnabled; } - - private boolean isHidden(NodeRef nodeRef) - { - return nodeService.hasAspect(nodeRef, ContentModel.ASPECT_HIDDEN); - } private final String getPathFromNode(NodeRef rootNodeRef, NodeRef nodeRef) throws FileNotFoundException { @@ -177,9 +172,12 @@ public class ActivityPosterImpl implements ActivityPoster, InitializingBean NodeRef nodeRef = fileInfo.getNodeRef(); SiteInfo siteInfo = siteService.getSite(nodeRef); String siteId = (siteInfo != null ? siteInfo.getShortName() : null); - NodeRef parentNodeRef = nodeService.getPrimaryParent(nodeRef).getParentRef(); - - postFileActivity(ActivityType.FILE_ADDED, null, parentNodeRef, nodeRef, siteId, fileInfo.getName()); + if(siteId != null && !siteId.equals("")) + { + // post only for nodes within sites + NodeRef parentNodeRef = nodeService.getPrimaryParent(nodeRef).getParentRef(); + postFileActivity(ActivityType.FILE_ADDED, null, parentNodeRef, nodeRef, siteId, fileInfo.getName()); + } } } @@ -193,9 +191,12 @@ public class ActivityPosterImpl implements ActivityPoster, InitializingBean { SiteInfo siteInfo = siteService.getSite(nodeRef); String siteId = (siteInfo != null ? siteInfo.getShortName() : null); - String fileName = (String)nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); - - postFileActivity(ActivityType.FILE_UPDATED, null, null, nodeRef, siteId, fileName); + if(siteId != null && !siteId.equals("")) + { + // post only for nodes within sites + String fileName = (String)nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); + postFileActivity(ActivityType.FILE_UPDATED, null, null, nodeRef, siteId, fileName); + } } } @@ -203,39 +204,44 @@ public class ActivityPosterImpl implements ActivityPoster, InitializingBean * {@inheritDoc} */ @Override - public void postFileDeleted( - String parentPath, - NodeRef parentNodeRef, - NodeRef nodeRef, - String siteId, - String fileName) + public void postFileDeleted(ActivityInfo activityInfo) { - if(activitiesEnabled) - { - postFileActivity(ActivityType.FILE_DELETED, parentPath, parentNodeRef, nodeRef, siteId, fileName); + if(activitiesEnabled && activityInfo.getSiteId() != null) + { + // post only for nodes within sites + postFileActivity(ActivityType.FILE_DELETED, activityInfo.getParentPath(), activityInfo.getParentNodeRef(), activityInfo.getNodeRef(), + activityInfo.getSiteId(), activityInfo.getFileName()); } } - public String getParentPath(NodeRef nodeRef) + public ActivityInfo getActivityInfo(NodeRef nodeRef) { - SiteInfo siteInfo = siteService.getSite(nodeRef); - String siteId = (siteInfo != null ? siteInfo.getShortName() : null); NodeRef parentNodeRef = nodeService.getPrimaryParent(nodeRef).getParentRef(); - NodeRef documentLibrary = siteService.getContainer(siteId, SiteService.DOCUMENT_LIBRARY); - String parentPath = "/"; - try - { - parentPath = getPathFromNode(documentLibrary, parentNodeRef); - } - catch (FileNotFoundException error) - { - if (logger.isDebugEnabled()) + String fileName = (String)nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); + SiteInfo siteInfo = siteService.getSite(nodeRef); + String siteId = (siteInfo != null ? siteInfo.getShortName() : null); + if(siteId != null && !siteId.equals("")) + { + NodeRef documentLibrary = siteService.getContainer(siteId, SiteService.DOCUMENT_LIBRARY); + String parentPath = "/"; + try { - logger.debug("No " + SiteService.DOCUMENT_LIBRARY + " container found."); - } - } + parentPath = getPathFromNode(documentLibrary, parentNodeRef); + } + catch (FileNotFoundException error) + { + if (logger.isDebugEnabled()) + { + logger.debug("No " + SiteService.DOCUMENT_LIBRARY + " container found."); + } + } - return parentPath; + return new ActivityInfo(nodeRef, parentPath, parentNodeRef, siteId, fileName); + } + else + { + return null; + } } private void postFileActivity( @@ -308,4 +314,49 @@ public class ActivityPosterImpl implements ActivityPoster, InitializingBean return json; } + + public static class ActivityInfo + { + private NodeRef nodeRef; + private String parentPath; + private NodeRef parentNodeRef; + private String siteId; + private String fileName; + + public ActivityInfo(NodeRef nodeRef, String parentPath, NodeRef parentNodeRef, + String siteId, String fileName) + { + super(); + this.nodeRef = nodeRef; + this.parentPath = parentPath; + this.parentNodeRef = parentNodeRef; + this.siteId = siteId; + this.fileName = fileName; + } + + public NodeRef getNodeRef() + { + return nodeRef; + } + + public String getParentPath() + { + return parentPath; + } + + public NodeRef getParentNodeRef() + { + return parentNodeRef; + } + + public String getSiteId() + { + return siteId; + } + + public String getFileName() + { + return fileName; + } + } } \ No newline at end of file diff --git a/source/java/org/alfresco/opencmis/CMISConnector.java b/source/java/org/alfresco/opencmis/CMISConnector.java index 8db99ec2f8..d24be87fd7 100644 --- a/source/java/org/alfresco/opencmis/CMISConnector.java +++ b/source/java/org/alfresco/opencmis/CMISConnector.java @@ -41,6 +41,7 @@ import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import org.alfresco.model.ContentModel; +import org.alfresco.opencmis.ActivityPosterImpl.ActivityInfo; import org.alfresco.opencmis.dictionary.CMISActionEvaluator; import org.alfresco.opencmis.dictionary.CMISAllowedActionEnum; import org.alfresco.opencmis.dictionary.CMISDictionaryService; @@ -738,30 +739,22 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen public void deleteNode(NodeRef nodeRef, boolean postActivity) { + ActivityInfo activityInfo = null; + // post activity after removal of the node postActivity &= hiddenAspect.getVisibility(Client.cmis, nodeRef) == Visibility.Visible; - String parentPath = null; - NodeRef parentNodeRef = null; - SiteInfo siteInfo = null; - String siteId = null; - String fileName = null; - - // get this information before the node is deleted if(postActivity) { - parentPath = activityPoster.getParentPath(nodeRef); - parentNodeRef = getNodeService().getPrimaryParent(nodeRef).getParentRef(); - siteInfo = siteService.getSite(nodeRef); - siteId = (siteInfo != null ? siteInfo.getShortName() : null); - fileName = (String)nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); + // get this information before the node is deleted + activityInfo = activityPoster.getActivityInfo(nodeRef); } getNodeService().deleteNode(nodeRef); // post activity after removal of the node - if(postActivity) + if(postActivity && activityInfo != null) { - activityPoster.postFileDeleted(parentPath, parentNodeRef, nodeRef, siteId, fileName); + activityPoster.postFileDeleted(activityInfo); } }