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
This commit is contained in:
Jan Vonka
2012-10-19 14:14:18 +00:00
parent 7bb82f5143
commit 441926f1f6
3 changed files with 97 additions and 57 deletions

View File

@@ -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);
}

View File

@@ -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;
}
}
}

View File

@@ -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);
}
}