RM-1751 (Merge performance improvements made for RM 2.1.0.3 onto RM 2.2.1)

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.2@89348 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Tuna Aksoy
2014-10-28 22:21:33 +00:00
parent 8e0b8fad0e
commit 59c026d188
6 changed files with 110 additions and 108 deletions

View File

@@ -82,36 +82,96 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
/** root container cache */
private SimpleCache<Pair<NodeRef, String>, NodeRef> rootContainerCache;
/** File plan role service */
private FilePlanRoleService filePlanRoleService;
/** Permission service */
private PermissionService permissionService;
/** Node DAO */
private NodeDAO nodeDAO;
/** Site service */
private SiteService siteService;
/**
* @return file plan role service
* Gets the file plan role service
*
* @return The file plan role service
*/
protected FilePlanRoleService getFilePlanRoleService()
public FilePlanRoleService getFilePlanRoleService()
{
return (FilePlanRoleService)applicationContext.getBean("FilePlanRoleService");
return this.filePlanRoleService;
}
/**
* @return permission service
* Sets the file plan role service
*
* @param filePlanRoleService The file plan role service
*/
protected PermissionService getPermissionService()
public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService)
{
return (PermissionService)applicationContext.getBean("permissionService");
this.filePlanRoleService = filePlanRoleService;
}
/**
* @return node DAO
* Gets the permission service
*
* @return The permission service
*/
protected NodeDAO getNodeDAO()
public PermissionService getPermissionService()
{
return (NodeDAO)applicationContext.getBean("nodeDAO");
return this.permissionService;
}
/**
* @return site service
* Sets the permission service
*
* @param permissionService The permission service
*/
protected SiteService getSiteService()
public void setPermissionService(PermissionService permissionService)
{
return (SiteService)applicationContext.getBean("siteService");
this.permissionService = permissionService;
}
/**
* Gets the node DAO
*
* @return The node DAO
*/
public NodeDAO getNodeDAO()
{
return this.nodeDAO;
}
/**
* Sets the node DAO
*
* @param nodeDAO The node DAO
*/
public void setNodeDAO(NodeDAO nodeDAO)
{
this.nodeDAO = nodeDAO;
}
/**
* Gets the site service
*
* @return The site service
*/
public SiteService getSiteService()
{
return this.siteService;
}
/**
* Sets the site service
*
* @param siteService The site service
*/
public void setSiteService(SiteService siteService)
{
this.siteService = siteService;
}
/**
@@ -166,12 +226,11 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
public NodeRef getFilePlanBySiteId(String siteId)
{
NodeRef filePlan = null;
SiteService siteService = getSiteService();
SiteInfo siteInfo = siteService.getSite(siteId);
if (siteInfo != null && siteService.hasContainer(siteId, FILE_PLAN_CONTAINER))
SiteInfo siteInfo = getSiteService().getSite(siteId);
if (siteInfo != null && getSiteService().hasContainer(siteId, FILE_PLAN_CONTAINER))
{
NodeRef nodeRef = siteService.getContainer(siteId, FILE_PLAN_CONTAINER);
NodeRef nodeRef = getSiteService().getContainer(siteId, FILE_PLAN_CONTAINER);
if (instanceOf(nodeRef, TYPE_FILE_PLAN))
{
filePlan = nodeRef;

View File

@@ -23,7 +23,6 @@ import static org.alfresco.module.org_alfresco_module_rm.security.ExtendedWriter
import static org.alfresco.repo.policy.Behaviour.NotificationFrequency.TRANSACTION_COMMIT;
import static org.alfresco.repo.policy.annotation.BehaviourKind.CLASS;
import static org.alfresco.repo.security.authentication.AuthenticationUtil.getSystemUserName;
import static org.alfresco.service.cmr.security.AccessStatus.ALLOWED;
import static org.alfresco.service.cmr.security.OwnableService.NO_OWNER;
import static org.alfresco.util.ParameterCheck.mandatory;
import static org.apache.commons.lang.BooleanUtils.isTrue;
@@ -43,7 +42,6 @@ import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.security.AccessPermission;
import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.cmr.security.OwnableService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.QName;
@@ -247,45 +245,39 @@ public class FilePlanPermissionServiceImpl extends ServiceBaseImpl
if (nodeService.exists(nodeRef) && nodeService.exists(parent))
{
// initialise permissions
initPermissions(nodeRef, parent);
runAsSystem(new AuthenticationUtil.RunAsWork<Object>()
{
public Object doWork()
{
// setup inherited permissions
Set<AccessPermission> perms = getPermissionService().getAllSetPermissions(parent);
for (AccessPermission perm : perms)
{
// don't copy the extended reader or writer permissions as they have already been set
String authority = perm.getAuthority();
if (!EXTENDED_READER.equals(authority) &&
!EXTENDED_WRITER.equals(authority))
{
// get the access status details
AccessStatus accessStatus = perm.getAccessStatus();
boolean allow = false;
if (ALLOWED.equals(accessStatus))
{
allow = true;
}
// set inheritance
boolean isParentNodeFilePlan = isRecordCategory(nodeRef) && isFilePlan(parent);
boolean inheritanceAllowed = isInheritanceAllowed(nodeRef, isParentNodeFilePlan);
getPermissionService().setInheritParentPermissions(nodeRef, inheritanceAllowed);
// set the permission on the target node
getPermissionService().setPermission(
nodeRef,
authority,
perm.getPermission(),
allow);
}
// clear all existing permissions
getPermissionService().clearPermission(nodeRef, null);
if (!inheritanceAllowed)
{
// set extended reader permissions
getPermissionService().setPermission(nodeRef, EXTENDED_READER, READ_RECORDS, true);
getPermissionService().setPermission(nodeRef, EXTENDED_WRITER, FILING, true);
}
// remove owner
getOwnableService().setOwner(nodeRef, NO_OWNER);
return null;
}
});
}
}
private boolean isInheritanceAllowed(NodeRef nodeRef, Boolean isParentNodeFilePlan)
{
return !(isFilePlan(nodeRef) || isTransfer(nodeRef) || isHold(nodeRef) || isUnfiledRecordsContainer(nodeRef) || (isRecordCategory(nodeRef) && isTrue(isParentNodeFilePlan)));
}
/**
* Sets ups records permission when aspect is added.
*
@@ -371,53 +363,6 @@ public class FilePlanPermissionServiceImpl extends ServiceBaseImpl
}, getSystemUserName());
}
private void initPermissions(final NodeRef nodeRef, final boolean isParentNodeFilePlan)
{
if (nodeService.exists(nodeRef))
{
runAsSystem(new AuthenticationUtil.RunAsWork<Object>()
{
public Object doWork()
{
// set inheritance
boolean inheritanceAllowed = isInheritanceAllowed(nodeRef, isParentNodeFilePlan);
getPermissionService().setInheritParentPermissions(nodeRef, inheritanceAllowed);
// clear all existing permissions
getPermissionService().clearPermission(nodeRef, null);
if (!inheritanceAllowed)
{
// set extended reader permissions
getPermissionService().setPermission(nodeRef, EXTENDED_READER, READ_RECORDS, true);
getPermissionService().setPermission(nodeRef, EXTENDED_WRITER, FILING, true);
}
// remove owner
getOwnableService().setOwner(nodeRef, NO_OWNER);
return null;
}
});
}
}
/**
* Init the permissions for the given node.
*
* @param nodeRef node reference
* @param includeInPlace true if in-place
*/
private void initPermissions(final NodeRef nodeRef, final NodeRef parent)
{
initPermissions(nodeRef, (isRecordCategory(nodeRef) && isFilePlan(parent)));
}
private boolean isInheritanceAllowed(NodeRef nodeRef, Boolean isParentNodeFilePlan)
{
return !(isFilePlan(nodeRef) || isTransfer(nodeRef) || isHold(nodeRef) || isUnfiledRecordsContainer(nodeRef) || (isRecordCategory(nodeRef) && isTrue(isParentNodeFilePlan)));
}
/**
* @see org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService#setPermission(org.alfresco.service.cmr.repository.NodeRef, java.lang.String, java.lang.String, boolean)
*/