Merged FILE-FOLDER-API (5.2.0) to HEAD (5.2)

124972 gjames: RA-884: Posting download/delete activites using a transaction listener


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@126602 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jamal Kaabi-Mofrad
2016-05-10 11:45:19 +00:00
parent bda2c56436
commit 3a8e5593b8

View File

@@ -51,12 +51,14 @@ import org.alfresco.repo.node.getchildren.GetChildrenCannedQuery;
import org.alfresco.repo.policy.BehaviourFilter;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.security.authentication.HashPasswordTransactionListener;
import org.alfresco.repo.security.permissions.AccessDeniedException;
import org.alfresco.repo.site.SiteModel;
import org.alfresco.repo.tenant.TenantUtil;
import org.alfresco.repo.thumbnail.ThumbnailDefinition;
import org.alfresco.repo.thumbnail.ThumbnailHelper;
import org.alfresco.repo.thumbnail.ThumbnailRegistry;
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.repo.version.VersionModel;
import org.alfresco.rest.antlr.WhereClauseParser;
@@ -95,6 +97,7 @@ import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ActionDefinition;
import org.alfresco.service.cmr.action.ActionService;
import org.alfresco.service.cmr.activities.ActivitiesTransactionListener;
import org.alfresco.service.cmr.activities.ActivityInfo;
import org.alfresco.service.cmr.activities.ActivityPoster;
import org.alfresco.service.cmr.dictionary.AspectDefinition;
@@ -1391,10 +1394,9 @@ public class NodesImpl implements Nodes
}
final ActivityInfo activityInfo = getActivityInfo(getParentNodeRef(nodeRef), nodeRef);
postActivity(Activity_Type.DELETED, activityInfo, true);
fileFolderService.delete(nodeRef);
postActivity(Activity_Type.DELETED, activityInfo);
}
@Override
@@ -1548,16 +1550,33 @@ public class NodesImpl implements Nodes
}
ActivityInfo activityInfo = getActivityInfo(parentNodeRef, newNode);
postActivity(Activity_Type.ADDED, activityInfo);
postActivity(Activity_Type.ADDED, activityInfo, false);
return newNode;
}
protected void postActivity(Activity_Type activity_type, ActivityInfo activityInfo)
/**
* Posts activites based on the activity_type.
* If the method is called with aSync=true then a TransactionListener is used post the activity
* afterCommit. Otherwise the activity posting is done synchronously.
* @param activity_type
* @param activityInfo
* @param aSync
*/
protected void postActivity(Activity_Type activity_type, ActivityInfo activityInfo, boolean aSync)
{
if (activityInfo == null) return; //Nothing to do.
String activityType = determineActivityType(activity_type, activityInfo.getFileInfo().isFolder());
if (activityType != null)
{
if (aSync)
{
ActivitiesTransactionListener txListener = new ActivitiesTransactionListener(activityType, activityInfo,
TenantUtil.getCurrentDomain(), APP_TOOL, Client.asType(Client.ClientType.script),
poster, retryingTransactionHelper);
AlfrescoTransactionSupport.bindListener(txListener);
}
else
{
poster.postFileFolderActivity(activityType, null, TenantUtil.getCurrentDomain(),
activityInfo.getSiteId(), activityInfo.getParentNodeRef(), activityInfo.getNodeRef(),
@@ -1565,6 +1584,7 @@ public class NodesImpl implements Nodes
activityInfo.getFileInfo());
}
}
}
protected ActivityInfo getActivityInfo(NodeRef parentNodeRef, NodeRef nodeRef)
{
@@ -1593,7 +1613,7 @@ public class NodesImpl implements Nodes
return null;
}
protected String determineActivityType(Activity_Type activity_type, boolean isFolder)
protected static String determineActivityType(Activity_Type activity_type, boolean isFolder)
{
switch (activity_type)
{
@@ -1825,7 +1845,7 @@ public class NodesImpl implements Nodes
}
ActivityInfo activityInfo = getActivityInfo(getParentNodeRef(nodeRef), nodeRef);
postActivity(Activity_Type.UPDATED, activityInfo);
postActivity(Activity_Type.UPDATED, activityInfo, false);
return getFolderOrDocument(nodeRef.getId(), parameters);
}
@@ -1942,17 +1962,7 @@ public class NodesImpl implements Nodes
String attachFileName = (attach ? name : null);
final ActivityInfo activityInfo = getActivityInfo(getParentNodeRef(nodeRef), nodeRef);
//Activity posting needs a transaction
retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
{
@Override
public Void execute() throws Throwable
{
postActivity(Activity_Type.DOWNLOADED, activityInfo);
return null;
}
}, false, true);
postActivity(Activity_Type.DOWNLOADED, activityInfo, true);
return new NodeBinaryResource(nodeRef, ContentModel.PROP_CONTENT, ci, attachFileName);
}
@@ -2004,7 +2014,7 @@ public class NodesImpl implements Nodes
}
ActivityInfo activityInfo = getActivityInfo(parentNodeRef, nodeRef);
postActivity(Activity_Type.UPDATED, activityInfo);
postActivity(Activity_Type.UPDATED, activityInfo, false);
extractMetadata(nodeRef);
}