diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/module-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/module-context.xml index 00236abc2c..48a203f7b7 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/module-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/module-context.xml @@ -97,7 +97,7 @@ - + @@ -209,6 +209,7 @@ + @@ -249,7 +250,7 @@ class="org.alfresco.module.org_alfresco_module_rm.forms.RecordsManagementNodeFormFilter"> - + - @@ -101,13 +100,6 @@ - - - - - diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml index 88b15c0626..0e48f81d15 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml @@ -43,7 +43,8 @@ - + + \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index 2351bd2b9e..f4d133e2c9 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -18,7 +18,6 @@ - @@ -610,7 +609,7 @@ - + @@ -891,6 +890,7 @@ + @@ -1175,7 +1175,7 @@ - + @@ -1313,10 +1313,9 @@ - - + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml index 269f9daa09..d591b88429 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml @@ -67,7 +67,6 @@ class="org.alfresco.module.org_alfresco_module_rm.script.CustomReferenceDefinitionsGet" parent="webscript"> - @@ -227,7 +226,7 @@ - + @@ -270,14 +269,14 @@ class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmRolesGet" parent="webscript"> - + - + @@ -285,14 +284,14 @@ class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmRoleGet" parent="webscript"> - + - + @@ -300,7 +299,7 @@ class="org.alfresco.module.org_alfresco_module_rm.script.admin.RmRoleDelete" parent="webscript"> - + @@ -386,7 +385,7 @@ - + diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceImpl.java index 4081812ce8..ba4206e6f1 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceImpl.java @@ -30,7 +30,6 @@ import java.util.Set; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; import org.alfresco.model.RenditionModel; -import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementCustomModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.security.ExtendedSecurityService; @@ -98,9 +97,6 @@ public class RecordsManagementServiceImpl implements RecordsManagementService, /** Policy component */ private PolicyComponent policyComponent; - - /** Records management action service */ - private RecordsManagementActionService rmActionService; /** Well-known location of the scripts folder. */ private NodeRef scriptsFolderNodeRef = new NodeRef("workspace", "SpacesStore", "rm_scripts"); @@ -150,16 +146,6 @@ public class RecordsManagementServiceImpl implements RecordsManagementService, this.nodeDAO = nodeDAO; } - /** - * Set records management action service - * - * @param rmActionService records management action service - */ - public void setRmActionService(RecordsManagementActionService rmActionService) - { - this.rmActionService = rmActionService; - } - /** * Sets the default RM store reference * @param defaultStoreRef store reference diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceRegistry.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceRegistry.java index f0e8283cf7..38206e6091 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceRegistry.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceRegistry.java @@ -24,9 +24,11 @@ import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService; import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService; import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService; +import org.alfresco.module.org_alfresco_module_rm.model.security.ModelSecurityService; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; import org.alfresco.module.org_alfresco_module_rm.security.ExtendedSecurityService; +import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService; import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; import org.alfresco.service.NotAuditable; import org.alfresco.service.ServiceRegistry; @@ -38,6 +40,7 @@ import org.alfresco.service.namespace.QName; * * @author Roy Wetherall */ +@SuppressWarnings("deprecation") public interface RecordsManagementServiceRegistry extends ServiceRegistry { /** Service QName constants */ @@ -46,13 +49,16 @@ public interface RecordsManagementServiceRegistry extends ServiceRegistry static final QName RECORDS_MANAGEMENT_ADMIN_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "RecordsManagementAdminService"); static final QName RECORDS_MANAGEMENT_ACTION_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "RecordsManagementActionService"); static final QName RECORDS_MANAGEMENT_EVENT_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "RecordsManagementEventService"); - static final QName RECORDS_MANAGEMENT_SECURITY_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "RecordsManagementSecurityService"); static final QName RECORDS_MANAGEMENT_AUDIT_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "RecordsManagementAuditService"); static final QName CAPABILITY_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "CapabilityService"); static final QName RECORD_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "RecordService"); static final QName FREEZE_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "FreezeService"); static final QName EXTENDED_SECURITY_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "ExtendedSecurityService"); static final QName FILE_PLAN_ROLE_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "FilePlanRoleService"); + static final QName FILE_PLAN_PERMISSION_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "FilePlanPermissionService"); + @Deprecated + static final QName RECORDS_MANAGEMENT_SECURITY_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "RecordsManagementSecurityService"); + /** * @return records management service @@ -92,7 +98,10 @@ public interface RecordsManagementServiceRegistry extends ServiceRegistry /** * @return records management security service + * + * @deprecated As of release 2.1, replaced with {@link FilePlanRoleService}, {@link FilePlanPermissionService} and {@link ModelSecurityService} */ + @Deprecated @NotAuditable RecordsManagementSecurityService getRecordsManagementSecurityService(); @@ -104,25 +113,36 @@ public interface RecordsManagementServiceRegistry extends ServiceRegistry /** * @return capability service + * @since 2.0 */ @NotAuditable CapabilityService getCapabilityService(); /** * @return freeze service + * @since 2.1 */ @NotAuditable FreezeService getFreezeService(); /** * @return extended security service + * @since 2.1 */ @NotAuditable ExtendedSecurityService getExtendedSecurityService(); /** * @return file plan role service + * @since 2.1 */ @NotAuditable FilePlanRoleService getFilePlanRoleService(); + + /** + * @return file plan permission service + * @since 2.1 + */ + @NotAuditable + FilePlanPermissionService getFilePlanPermissionService(); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceRegistryImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceRegistryImpl.java index 52dcfde275..31d3fc3a54 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceRegistryImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceRegistryImpl.java @@ -27,6 +27,7 @@ import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; import org.alfresco.module.org_alfresco_module_rm.security.ExtendedSecurityService; +import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService; import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; import org.alfresco.repo.service.ServiceDescriptorRegistry; @@ -35,6 +36,7 @@ import org.alfresco.repo.service.ServiceDescriptorRegistry; * * @author Roy Wetherall */ +@SuppressWarnings("deprecation") public class RecordsManagementServiceRegistryImpl extends ServiceDescriptorRegistry implements RecordsManagementServiceRegistry { @@ -86,6 +88,7 @@ public class RecordsManagementServiceRegistryImpl extends ServiceDescriptorRegis * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementSecurityService() */ @Override + @Deprecated public RecordsManagementSecurityService getRecordsManagementSecurityService() { return (RecordsManagementSecurityService) getService(RECORDS_MANAGEMENT_SECURITY_SERVICE); @@ -144,4 +147,13 @@ public class RecordsManagementServiceRegistryImpl extends ServiceDescriptorRegis { return (FilePlanRoleService) getService(FILE_PLAN_ROLE_SERVICE); } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getFilePlanPermissionService() + */ + @Override + public FilePlanPermissionService getFilePlanPermissionService() + { + return (FilePlanPermissionService) getService(FILE_PLAN_PERMISSION_SERVICE); + } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/AuthenticatedUserRolesDataExtractor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/AuthenticatedUserRolesDataExtractor.java index abd6fc71b4..57ca95cd83 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/AuthenticatedUserRolesDataExtractor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/AuthenticatedUserRolesDataExtractor.java @@ -23,8 +23,8 @@ import java.util.Set; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; -import org.alfresco.module.org_alfresco_module_rm.security.Role; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; +import org.alfresco.module.org_alfresco_module_rm.role.Role; import org.alfresco.repo.audit.extractor.AbstractDataExtractor; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.cmr.repository.NodeRef; @@ -42,7 +42,7 @@ public final class AuthenticatedUserRolesDataExtractor extends AbstractDataExtra { private NodeService nodeService; private RecordsManagementService rmService; - private RecordsManagementSecurityService rmSecurityService; + private FilePlanRoleService filePlanRoleService; /** * Used to check that the node in the context is a fileplan component @@ -61,11 +61,11 @@ public final class AuthenticatedUserRolesDataExtractor extends AbstractDataExtra } /** - * Used to get roles + * @param filePlanRoleService file plan role service */ - public void setRmSecurityService(RecordsManagementSecurityService rmSecurityService) + public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) { - this.rmSecurityService = rmSecurityService; + this.filePlanRoleService = filePlanRoleService; } /** @@ -94,7 +94,7 @@ public final class AuthenticatedUserRolesDataExtractor extends AbstractDataExtra // Get the rm root NodeRef rmRootNodeRef = rmService.getFilePlan(nodeRef); - Set roles = rmSecurityService.getRolesByUser(rmRootNodeRef, user); + Set roles = filePlanRoleService.getRolesByUser(rmRootNodeRef, user); StringBuilder sb = new StringBuilder(100); for (Role role : roles) { diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java index f483d59f5e..88c0f6d486 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java @@ -100,14 +100,12 @@ public class RecordsManagementAuditServiceImpl private static final String MSG_DELETE_OBJECT = "rm.audit.delte-object"; private static final String MSG_LOGIN_SUCCEEDED = "rm.audit.login-succeeded"; private static final String MSG_LOGIN_FAILED = "rm.audit.login-failed"; - private static final String MSG_FILED_RECORD = "rm.audit.filed-record"; private static final String MSG_REVIEWED = "rm.audit.reviewed"; private static final String MSG_CUT_OFF = "rm.audit.cut-off"; private static final String MSG_REVERSED_CUT_OFF = "rm.audit.reversed-cut-off"; private static final String MSG_DESTROYED_ITEM = "rm.audit.destroyed-item"; private static final String MSG_OPENED_RECORD_FOLDER = "rm.audit.opened-record-folder"; private static final String MSG_CLOSED_RECORD_FOLDER = "rm.audit.closed-record-folder"; - private static final String MSG_SETUP_RECORD_FOLDER = "rm.audit.setup-recorder-folder"; private static final String MSG_DECLARED_RECORD = "rm.audit.declared-record"; private static final String MSG_UNDECLARED_RECORD = "rm.audit.undeclared-record"; private static final String MSG_FROZE_ITEM = "rm.audit.froze-item"; @@ -920,8 +918,6 @@ public class RecordsManagementAuditServiceImpl Long fromTime = (params.getDateFrom() == null ? null : new Long(params.getDateFrom().getTime())); Long toTime = (params.getDateTo() == null ? null : new Long(params.getDateTo().getTime())); NodeRef nodeRef = params.getNodeRef(); - String eventName = params.getEvent(); - QName propertyQName = params.getProperty(); int maxEntries = params.getMaxEntries(); boolean forward = maxEntries > 0 ? false : true; // Reverse order if the results are limited diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java index 6f24815db7..4b7b0fd118 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java @@ -64,6 +64,7 @@ import org.springframework.beans.factory.InitializingBean; /** * RM After Invocation Provider */ +@SuppressWarnings("unused") public class RMAfterInvocationProvider extends RMSecurityCommon implements AfterInvocationProvider, InitializingBean { diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/ClosedCapabilityCondition.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/ClosedCapabilityCondition.java index 7e9464d573..80f81730c6 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/ClosedCapabilityCondition.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/ClosedCapabilityCondition.java @@ -42,7 +42,7 @@ public class ClosedCapabilityCondition extends AbstractCapabilityCondition { result = rmService.isRecordFolderClosed(nodeRef); } - else if (rmService.isRecord(nodeRef) == true) + else if (recordService.isRecord(nodeRef) == true) { List assocs = nodeService.getParentAssocs(nodeRef, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); for (ChildAssociationRef assoc : assocs) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/MayBeScheduledCapabilityCondition.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/MayBeScheduledCapabilityCondition.java index a0f7c09ba2..a3d5de7236 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/MayBeScheduledCapabilityCondition.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/MayBeScheduledCapabilityCondition.java @@ -91,7 +91,7 @@ public class MayBeScheduledCapabilityCondition extends AbstractCapabilityConditi { boolean result = false; boolean isRecordLevelDisposition = dispositionSchedule.isRecordLevelDisposition(); - if (rmService.isRecord(nodeRef) == true && isRecordLevelDisposition == true) + if (recordService.isRecord(nodeRef) == true && isRecordLevelDisposition == true) { result = true; } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/VitalRecordOrFolderCapabilityCondition.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/VitalRecordOrFolderCapabilityCondition.java index 3160caf29a..26d1342e50 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/VitalRecordOrFolderCapabilityCondition.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/VitalRecordOrFolderCapabilityCondition.java @@ -32,7 +32,7 @@ public class VitalRecordOrFolderCapabilityCondition extends AbstractCapabilityCo { boolean result = false; - if (rmService.isRecord(nodeRef) == true) + if (recordService.isRecord(nodeRef) == true) { // Check the record for the vital record aspect result = nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_VITAL_RECORD); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/caveat/RMCaveatConfigComponentImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/caveat/RMCaveatConfigComponentImpl.java index 09a94de97a..30dc9fd22f 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/caveat/RMCaveatConfigComponentImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/caveat/RMCaveatConfigComponentImpl.java @@ -22,7 +22,6 @@ import java.io.File; import java.io.InputStream; import java.io.Serializable; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -511,7 +510,7 @@ public class RMCaveatConfigComponentImpl implements ContentServicePolicies.OnCon if (! (AuthenticationUtil.isMtEnabled() && AuthenticationUtil.isRunAsUserTheSystemUser())) { // note: userName and userGroupNames must not be null - Map> caveatConstraintDef = caveatConfig.get(constraintName); + caveatConfig.get(constraintName); Set userGroupFullNames = authorityService.getAuthoritiesForUser(userName); allowedValues = getRMAllowedValues(userName, userGroupFullNames, constraintName); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetServiceImpl.java index df2ac18bc9..709e56a933 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetServiceImpl.java @@ -15,15 +15,14 @@ import java.util.Map.Entry; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; -import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService; import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RecordsManagementSearchBehaviour; import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderServiceImpl; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; -import org.alfresco.module.org_alfresco_module_rm.security.Role; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; +import org.alfresco.module.org_alfresco_module_rm.role.Role; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; @@ -67,17 +66,14 @@ public class DataSetServiceImpl implements DataSetService, RecordsManagementMode /** Records management service */ private RecordsManagementService recordsManagementService; - /** Records management action service */ - private RecordsManagementActionService recordsManagementActionService; - /** Permission service */ private PermissionService permissionService; /** Authority service */ private AuthorityService authorityService; - /** Records management security service */ - private RecordsManagementSecurityService recordsManagementSecurityService; + /** File plan role service */ + private FilePlanRoleService filePlanRoleService; /** Records management search behaviour */ private RecordsManagementSearchBehaviour recordsManagementSearchBehaviour; @@ -137,17 +133,6 @@ public class DataSetServiceImpl implements DataSetService, RecordsManagementMode this.recordsManagementService = recordsManagementService; } - /** - * Set records management action service - * - * @param recordsManagementActionService the records management action - * service - */ - public void setRecordsManagementActionService(RecordsManagementActionService recordsManagementActionService) - { - this.recordsManagementActionService = recordsManagementActionService; - } - /** * Set permission service * @@ -169,14 +154,11 @@ public class DataSetServiceImpl implements DataSetService, RecordsManagementMode } /** - * Set records management security service - * - * @param recordsManagementSecurityService the records management security - * service + * @param filePlanRoleService file plan role service */ - public void setRecordsManagementSecurityService(RecordsManagementSecurityService recordsManagementSecurityService) + public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) { - this.recordsManagementSecurityService = recordsManagementSecurityService; + this.filePlanRoleService = filePlanRoleService; } /** @@ -392,7 +374,7 @@ public class DataSetServiceImpl implements DataSetService, RecordsManagementMode "All Roles", null); // Put all the role groups in it - Set roles = recordsManagementSecurityService.getRoles(rmRoot); + Set roles = filePlanRoleService.getRoles(rmRoot); for (Role role : roles) { logger.info(" - adding role group " + role.getRoleGroupName() + " to all roles group"); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/event/OnReferencedRecordActionedUpon.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/event/OnReferencedRecordActionedUpon.java index ad8dc7558a..d81a4a1788 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/event/OnReferencedRecordActionedUpon.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/event/OnReferencedRecordActionedUpon.java @@ -32,6 +32,7 @@ import org.alfresco.module.org_alfresco_module_rm.action.impl.CompleteEventActio import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionAction; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.repo.policy.JavaBehaviour; import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.policy.Behaviour.NotificationFrequency; @@ -44,7 +45,7 @@ import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.RegexQNamePattern; /** - * + * Behaviour executed when a references record is actioned upon. * * @author Roy Wetherall */ @@ -69,6 +70,9 @@ public class OnReferencedRecordActionedUpon extends SimpleRecordsManagementEvent /** Policy component */ private PolicyComponent policyComponent; + + /** Record service */ + private RecordService recordService; /** Action name */ private String actionName; @@ -100,19 +104,31 @@ public class OnReferencedRecordActionedUpon extends SimpleRecordsManagementEvent this.recordsManagementActionService = recordsManagementActionService; } + /** + * @param recordsManagementAdminService record management admin service + */ public void setRecordsManagementAdminService(RecordsManagementAdminService recordsManagementAdminService) { this.recordsManagementAdminService = recordsManagementAdminService; } + /** + * @param nodeService node service + */ public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; } /** - * Set policy components - * + * @param recordService record service + */ + public void setRecordService(RecordService recordService) + { + this.recordService = recordService; + } + + /** * @param policyComponent policy component */ public void setPolicyComponent(PolicyComponent policyComponent) @@ -121,15 +137,16 @@ public class OnReferencedRecordActionedUpon extends SimpleRecordsManagementEvent } /** - * Set the reference - * - * @param reference + * @param reference reference name */ public void setReferenceName(String reference) { this.reference = QName.createQName(reference); } + /** + * @param actionName action name + */ public void setActionName(String actionName) { this.actionName = actionName; @@ -157,6 +174,13 @@ public class OnReferencedRecordActionedUpon extends SimpleRecordsManagementEvent return true; } + /** + * Before action exeuction behaviour. + * + * @param nodeRef + * @param name + * @param parameters + */ public void beforeActionExecution(final NodeRef nodeRef, final String name, final Map parameters) { AuthenticationUtil.RunAsWork work = new AuthenticationUtil.RunAsWork() @@ -193,7 +217,7 @@ public class OnReferencedRecordActionedUpon extends SimpleRecordsManagementEvent private void processRecordFolder(NodeRef recordFolder) { - if (recordsManagementService.isRecord(recordFolder) == true) + if (recordService.isRecord(recordFolder) == true) { processRecord(recordFolder); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/event/RecordsManagementEventServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/event/RecordsManagementEventServiceImpl.java index bc83fe244b..e503cfbd34 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/event/RecordsManagementEventServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/event/RecordsManagementEventServiceImpl.java @@ -20,7 +20,6 @@ package org.alfresco.module.org_alfresco_module_rm.event; import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; @@ -45,34 +44,35 @@ public class RecordsManagementEventServiceImpl implements RecordsManagementEvent { /** Reference to the rm event config node */ private static final StoreRef SPACES_STORE = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, "SpacesStore"); + private static final NodeRef CONFIG_NODE_REF = new NodeRef(SPACES_STORE, "rm_event_config"); - + /** Node service */ private NodeService nodeService; - + /** Content service */ private ContentService contentService; - + /** Registered event types */ private Map eventTypes = new HashMap(7); - + /** Available events */ private Map events; - + /** * Set the node service * - * @param nodeService node service + * @param nodeService node service */ public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; } - + /** * Set the content service * - * @param contentService content service + * @param contentService content service */ public void setContentService(ContentService contentService) { @@ -94,7 +94,7 @@ public class RecordsManagementEventServiceImpl implements RecordsManagementEvent { return new ArrayList(this.eventTypes.values()); } - + /** * @see org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService#getEvents() */ @@ -102,19 +102,17 @@ public class RecordsManagementEventServiceImpl implements RecordsManagementEvent { return new ArrayList(this.getEventMap().values()); } - + /** * @see org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService#getEvent(java.lang.String) */ - public RecordsManagementEvent getEvent(String eventName) + public RecordsManagementEvent getEvent(String eventName) { - if (getEventMap().containsKey(eventName) == false) - { - throw new AlfrescoRuntimeException("The event " + eventName + " does not exist."); - } + if (getEventMap().containsKey(eventName) == false) { throw new AlfrescoRuntimeException("The event " + + eventName + " does not exist."); } return getEventMap().get(eventName); } - + /** * @see org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService#existsEvent(java.lang.String) */ @@ -122,46 +120,36 @@ public class RecordsManagementEventServiceImpl implements RecordsManagementEvent { return getEventMap().containsKey(eventName); } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService#existsEventDisplayLabel(java.lang.String) - */ - @SuppressWarnings("rawtypes") - public boolean existsEventDisplayLabel(String eventDisplayLabel) - { - for (Iterator iterator = getEventMap().values().iterator(); iterator.hasNext();) - { - RecordsManagementEvent recordsManagementEvent = (RecordsManagementEvent) iterator.next(); - if (recordsManagementEvent.getDisplayLabel().equalsIgnoreCase(eventDisplayLabel)) - { - return true; - } - } - return false; - } - + /** - * @see org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService#addEvent(java.lang.String, java.lang.String, java.lang.String) + * @see org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService#existsEventDisplayLabel(java.lang.String) + */ + public boolean existsEventDisplayLabel(String eventDisplayLabel) + { + for (RecordsManagementEvent recordsManagementEvent : getEventMap().values()) + { + if (recordsManagementEvent.getDisplayLabel().equalsIgnoreCase(eventDisplayLabel)) { return true; } + } + return false; + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService#addEvent(java.lang.String, + * java.lang.String, java.lang.String) */ public RecordsManagementEvent addEvent(String eventType, String eventName, String eventDisplayLabel) { // Check that the eventType is valid - if (eventTypes.containsKey(eventType) == false) - { - throw new AlfrescoRuntimeException( - "Can not add event because event " + - eventName + - " has an undefined eventType. (" - + eventType + ")"); - } - + if (eventTypes.containsKey(eventType) == false) { throw new AlfrescoRuntimeException( + "Can not add event because event " + eventName + " has an undefined eventType. (" + eventType + ")"); } + // Create event and add to map RecordsManagementEvent event = new RecordsManagementEvent(eventType, eventName, eventDisplayLabel); getEventMap().put(event.getName(), event); - + // Persist the changes to the event list saveEvents(); - + return new RecordsManagementEvent(eventType, eventName, eventDisplayLabel); } @@ -172,15 +160,17 @@ public class RecordsManagementEventServiceImpl implements RecordsManagementEvent { // Remove the event from the map getEventMap().remove(eventName); - + // Persist the changes to the event list saveEvents(); - } - + } + /** - * Helper method to get the event map. Loads initial instance from persisted configuration file. + * Helper method to get the event map. Loads initial instance from persisted + * configuration file. * - * @return Map map of available events by event name + * @return Map map of available events by + * event name */ private Map getEventMap() { @@ -190,7 +180,7 @@ public class RecordsManagementEventServiceImpl implements RecordsManagementEvent } return this.events; } - + /** * Load the events from the persistant storage */ @@ -201,50 +191,43 @@ public class RecordsManagementEventServiceImpl implements RecordsManagementEvent public Object doWork() throws Exception { // Get the event config node - if (nodeService.exists(CONFIG_NODE_REF) == false) - { - throw new AlfrescoRuntimeException("Unable to find records management event configuration node."); - } - + if (nodeService.exists(CONFIG_NODE_REF) == false) { throw new AlfrescoRuntimeException( + "Unable to find records management event configuration node."); } + // Read content from config node ContentReader reader = contentService.getReader(CONFIG_NODE_REF, ContentModel.PROP_CONTENT); String jsonString = reader.getContentString(); - + JSONObject configJSON = new JSONObject(jsonString); JSONArray eventsJSON = configJSON.getJSONArray("events"); - + events = new HashMap(eventsJSON.length()); - + for (int i = 0; i < eventsJSON.length(); i++) { // Get the JSON object that represents the event JSONObject eventJSON = eventsJSON.getJSONObject(i); - + // Get the details of the event String eventType = eventJSON.getString("eventType"); String eventName = eventJSON.getString("eventName"); String eventDisplayLabel = eventJSON.getString("eventDisplayLabel"); - + // Check that the eventType is valid - if (eventTypes.containsKey(eventType) == false) - { - throw new AlfrescoRuntimeException( - "Can not load rm event configuration because event " + - eventName + - " has an undefined eventType. (" - + eventType + ")"); - } - + if (eventTypes.containsKey(eventType) == false) { throw new AlfrescoRuntimeException( + "Can not load rm event configuration because event " + eventName + + " has an undefined eventType. (" + eventType + ")"); } + // Create event and add to map RecordsManagementEvent event = new RecordsManagementEvent(eventType, eventName, eventDisplayLabel); - events.put(event.getName(), event); + events.put(event.getName(), event); } return null; } - + }, AuthenticationUtil.getSystemUserName()); } - + /** * Save the events to the peristant storage */ @@ -255,14 +238,12 @@ public class RecordsManagementEventServiceImpl implements RecordsManagementEvent public Object doWork() throws Exception { // Get the event config node - if (nodeService.exists(CONFIG_NODE_REF) == false) - { - throw new AlfrescoRuntimeException("Unable to find records management event configuration node."); - } - - JSONObject configJSON = new JSONObject(); + if (nodeService.exists(CONFIG_NODE_REF) == false) { throw new AlfrescoRuntimeException( + "Unable to find records management event configuration node."); } + + JSONObject configJSON = new JSONObject(); JSONArray eventsJSON = new JSONArray(); - + int index = 0; for (RecordsManagementEvent event : events.values()) { @@ -270,19 +251,20 @@ public class RecordsManagementEventServiceImpl implements RecordsManagementEvent eventJSON.put("eventType", event.getType()); eventJSON.put("eventName", event.getName()); eventJSON.put("eventDisplayLabel", event.getDisplayLabel()); - + eventsJSON.put(index, eventJSON); index++; - } + } configJSON.put("events", eventsJSON); - + // Get content writer - ContentWriter contentWriter = contentService.getWriter(CONFIG_NODE_REF, ContentModel.PROP_CONTENT, true); + ContentWriter contentWriter = contentService + .getWriter(CONFIG_NODE_REF, ContentModel.PROP_CONTENT, true); contentWriter.putContent(configJSON.toString()); - + return null; } - + }, AuthenticationUtil.getSystemUserName()); } @@ -294,5 +276,3 @@ public class RecordsManagementEventServiceImpl implements RecordsManagementEvent return this.eventTypes.get(eventTypeName); } } - - diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementNodeFormFilter.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementNodeFormFilter.java index 296515b7a9..c25756bcef 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementNodeFormFilter.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementNodeFormFilter.java @@ -213,7 +213,7 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter protected void addTransientProperties(Form form, NodeRef nodeRef) { - if (rmService.isRecord(nodeRef) == true) + if (recordService.isRecord(nodeRef) == true) { addTransientPropertyField(form, TRANSIENT_DECLARED, DataTypeDefinition.BOOLEAN, recordService.isDeclared(nodeRef)); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java index 6c132c28e2..80fbb69908 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java @@ -30,10 +30,11 @@ import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.repo.node.NodeServicePolicies; -import org.alfresco.repo.policy.Behaviour.NotificationFrequency; import org.alfresco.repo.policy.JavaBehaviour; import org.alfresco.repo.policy.PolicyComponent; +import org.alfresco.repo.policy.Behaviour.NotificationFrequency; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.permissions.AccessDeniedException; @@ -55,677 +56,698 @@ import org.springframework.extensions.surf.util.I18NUtil; * Freeze Service Implementation * * @author Roy Wetherall + * @author Tuna Askoy + * @since 2.1 */ public class FreezeServiceImpl implements FreezeService, - RecordsManagementModel, + RecordsManagementModel, NodeServicePolicies.BeforeDeleteNodePolicy { - /** Logger */ - private static Log logger = LogFactory.getLog(FreezeServiceImpl.class); + /** Logger */ + private static Log logger = LogFactory.getLog(FreezeServiceImpl.class); - /** I18N */ - private static final String MSG_FREEZE_ONLY_RECORDS_FOLDERS = "rm.action.freeze-only-records-folders"; + /** I18N */ + private static final String MSG_FREEZE_ONLY_RECORDS_FOLDERS = "rm.action.freeze-only-records-folders"; - /** Hold node reference key */ - private static final String KEY_HOLD_NODEREF = "holdNodeRef"; + /** Hold node reference key */ + private static final String KEY_HOLD_NODEREF = "holdNodeRef"; - /** Policy Component */ - private PolicyComponent policyComponent; + /** Policy Component */ + private PolicyComponent policyComponent; - /** Node Service */ - private NodeService nodeService; + /** Node Service */ + private NodeService nodeService; - /** Records Management Service */ - private RecordsManagementService recordsManagementService; + /** Records Management Service */ + private RecordsManagementService recordsManagementService; - /** Dictionary Service */ - private DictionaryService dictionaryService; + /** Dictionary Service */ + private DictionaryService dictionaryService; - /** - * @param policyComponent policy component - */ - public void setPolicyComponent(PolicyComponent policyComponent) - { - this.policyComponent = policyComponent; - } + /** Record service */ + private RecordService recordService; - /** - * @param nodeService node service - */ - public void setNodeService(NodeService nodeService) - { - this.nodeService = nodeService; - } - - /** - * @param recordsManagementService records management service - */ - public void setRecordsManagementService(RecordsManagementService recordsManagementService) - { - this.recordsManagementService = recordsManagementService; - } - - /** - * @param dictionaryService dictionary service - */ - public void setDictionaryService(DictionaryService dictionaryService) - { - this.dictionaryService = dictionaryService; - } - - /** - * Init service - */ - public void init() - { - policyComponent.bindClassBehaviour( - NodeServicePolicies.BeforeDeleteNodePolicy.QNAME, - this, - new JavaBehaviour(this, "beforeDeleteNode", NotificationFrequency.FIRST_EVENT)); + /** + * @param policyComponent policy component + */ + public void setPolicyComponent(PolicyComponent policyComponent) + { + this.policyComponent = policyComponent; } - /** - * @see org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy#beforeDeleteNode(org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - public void beforeDeleteNode(final NodeRef nodeRef) - { - AuthenticationUtil.runAsSystem(new RunAsWork(){ + /** + * @param nodeService node service + */ + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } - @Override - public Void doWork() throws Exception - { - if (nodeService.exists(nodeRef) == true && - recordsManagementService.isFilePlanComponent(nodeRef) == true) + /** + * @param recordsManagementService records management service + */ + public void setRecordsManagementService(RecordsManagementService recordsManagementService) + { + this.recordsManagementService = recordsManagementService; + } + + /** + * @param dictionaryService dictionary service + */ + public void setDictionaryService(DictionaryService dictionaryService) + { + this.dictionaryService = dictionaryService; + } + + /** + * @param recordService record service + */ + public void setRecordService(RecordService recordService) + { + this.recordService = recordService; + } + + /** + * Init service + */ + public void init() + { + policyComponent.bindClassBehaviour(NodeServicePolicies.BeforeDeleteNodePolicy.QNAME, this, new JavaBehaviour( + this, "beforeDeleteNode", NotificationFrequency.FIRST_EVENT)); + } + + /** + * @see org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy#beforeDeleteNode(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public void beforeDeleteNode(final NodeRef nodeRef) + { + AuthenticationUtil.runAsSystem(new RunAsWork() + { + + @Override + public Void doWork() throws Exception { - if (isFrozen(nodeRef) == true) - { - // never allowed to delete a frozen node - throw new AccessDeniedException("Frozen nodes can not be deleted."); - } - - // check children - checkChildren(nodeService.getChildAssocs(nodeRef)); + if (nodeService.exists(nodeRef) == true + && recordsManagementService.isFilePlanComponent(nodeRef) == true) + { + if (isFrozen(nodeRef) == true) + { + // never allowed to delete a frozen node + throw new AccessDeniedException("Frozen nodes can not be deleted."); + } + + // check children + checkChildren(nodeService.getChildAssocs(nodeRef)); + } + return null; } - return null; - } - }); + }); } - /** - * Checks the children for frozen nodes. Throws security error if any are found. - * - * @param assocs - */ - private void checkChildren(List assocs) - { - for (ChildAssociationRef assoc : assocs) - { - // we only care about primary children - if (assoc.isPrimary() == true) - { - NodeRef nodeRef = assoc.getChildRef(); - if (isFrozen(nodeRef) == true) + /** + * Checks the children for frozen nodes. Throws security error if any are + * found. + * + * @param assocs + */ + private void checkChildren(List assocs) + { + for (ChildAssociationRef assoc : assocs) + { + // we only care about primary children + if (assoc.isPrimary() == true) { - // never allowed to delete a node with a frozen child - throw new AccessDeniedException("Can not delete node, because it contains a frozen child node."); - } + NodeRef nodeRef = assoc.getChildRef(); + if (isFrozen(nodeRef) == true) + { + // never allowed to delete a node with a frozen child + throw new AccessDeniedException("Can not delete node, because it contains a frozen child node."); + } - // check children - checkChildren(nodeService.getChildAssocs(nodeRef)); - } - } + // check children + checkChildren(nodeService.getChildAssocs(nodeRef)); + } + } } - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#isHold(org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - public boolean isHold(NodeRef nodeRef) - { - ParameterCheck.mandatory("nodeRef", nodeRef); + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#isHold(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public boolean isHold(NodeRef nodeRef) + { + ParameterCheck.mandatory("nodeRef", nodeRef); - QName type = nodeService.getType(nodeRef); - if (nodeService.exists(nodeRef) && (TYPE_HOLD.equals(type)) || dictionaryService.isSubClass(type, TYPE_HOLD)) - { - return true; - } - else - { - return false; - } - } + QName type = nodeService.getType(nodeRef); + if (nodeService.exists(nodeRef) && (TYPE_HOLD.equals(type)) || dictionaryService.isSubClass(type, TYPE_HOLD)) + { + return true; + } + else + { + return false; + } + } - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#isFrozen(org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - public boolean isFrozen(NodeRef nodeRef) - { - ParameterCheck.mandatory("nodeRef", nodeRef); + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#isFrozen(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public boolean isFrozen(NodeRef nodeRef) + { + ParameterCheck.mandatory("nodeRef", nodeRef); - return nodeService.hasAspect(nodeRef, ASPECT_FROZEN); - } + return nodeService.hasAspect(nodeRef, ASPECT_FROZEN); + } - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getFrozen(org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - public Set getFrozen(NodeRef hold) - { - ParameterCheck.mandatory("hold", hold); + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getFrozen(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public Set getFrozen(NodeRef hold) + { + ParameterCheck.mandatory("hold", hold); - Set frozenNodes = new HashSet(); - List childAssocs = nodeService.getChildAssocs(hold, ASSOC_FROZEN_RECORDS, RegexQNamePattern.MATCH_ALL); - if (childAssocs != null && !childAssocs.isEmpty()) - { - for (ChildAssociationRef childAssociationRef : childAssocs) - { - frozenNodes.add(childAssociationRef.getChildRef()); - } - } - return frozenNodes; - } + Set frozenNodes = new HashSet(); + List childAssocs = nodeService.getChildAssocs(hold, ASSOC_FROZEN_RECORDS, + RegexQNamePattern.MATCH_ALL); + if (childAssocs != null && !childAssocs.isEmpty()) + { + for (ChildAssociationRef childAssociationRef : childAssocs) + { + frozenNodes.add(childAssociationRef.getChildRef()); + } + } + return frozenNodes; + } - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#freeze(java.lang.String, org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - public NodeRef freeze(String reason, NodeRef nodeRef) - { - ParameterCheck.mandatoryString("reason", reason); - ParameterCheck.mandatory("nodeRef", nodeRef); + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#freeze(java.lang.String, + * org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public NodeRef freeze(String reason, NodeRef nodeRef) + { + ParameterCheck.mandatoryString("reason", reason); + ParameterCheck.mandatory("nodeRef", nodeRef); - // FIXME: Should we consider only records and record folders or 'any' node references - // Check if the actionedUponNodeRef is a valid file plan component - boolean isRecord = recordsManagementService.isRecord(nodeRef); - boolean isFolder = recordsManagementService.isRecordFolder(nodeRef); + // FIXME: Should we consider only records and record folders or 'any' + // node references + // Check if the actionedUponNodeRef is a valid file plan component + boolean isRecord = recordService.isRecord(nodeRef); + boolean isFolder = recordsManagementService.isRecordFolder(nodeRef); - if (!(isRecord || isFolder)) - { - throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_FREEZE_ONLY_RECORDS_FOLDERS)); - } + if (!(isRecord || isFolder)) { throw new AlfrescoRuntimeException(I18NUtil + .getMessage(MSG_FREEZE_ONLY_RECORDS_FOLDERS)); } - // Log a message about freezing the node with the reason - if (logger.isDebugEnabled()) - { - StringBuilder msg = new StringBuilder(); - msg.append("Freezing node '").append(nodeRef).append("'"); - if (isFolder) - { - msg.append(" (folder)"); - } - msg.append(" with reason '").append(reason).append("'."); - logger.debug(msg.toString()); - } + // Log a message about freezing the node with the reason + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Freezing node '").append(nodeRef).append("'"); + if (isFolder) + { + msg.append(" (folder)"); + } + msg.append(" with reason '").append(reason).append("'."); + logger.debug(msg.toString()); + } - // Create the hold object - NodeRef holdNodeRef = createHold(nodeRef, reason); + // Create the hold object + NodeRef holdNodeRef = createHold(nodeRef, reason); - // Freeze the node and add it to the hold - freeze(holdNodeRef, nodeRef); + // Freeze the node and add it to the hold + freeze(holdNodeRef, nodeRef); - return holdNodeRef; - } + return holdNodeRef; + } - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#freeze(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - public void freeze(NodeRef hold, NodeRef nodeRef) - { - ParameterCheck.mandatory("hold", hold); - ParameterCheck.mandatory("nodeRef", nodeRef); + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#freeze(org.alfresco.service.cmr.repository.NodeRef, + * org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public void freeze(NodeRef hold, NodeRef nodeRef) + { + ParameterCheck.mandatory("hold", hold); + ParameterCheck.mandatory("nodeRef", nodeRef); - // Link the record to the hold - nodeService.addChild(hold, nodeRef, ASSOC_FROZEN_RECORDS, ASSOC_FROZEN_RECORDS); + // Link the record to the hold + nodeService.addChild(hold, nodeRef, ASSOC_FROZEN_RECORDS, ASSOC_FROZEN_RECORDS); - // Apply the freeze aspect - Map props = new HashMap(2); - props.put(PROP_FROZEN_AT, new Date()); - props.put(PROP_FROZEN_BY, AuthenticationUtil.getFullyAuthenticatedUser()); - nodeService.addAspect(nodeRef, ASPECT_FROZEN, props); + // Apply the freeze aspect + Map props = new HashMap(2); + props.put(PROP_FROZEN_AT, new Date()); + props.put(PROP_FROZEN_BY, AuthenticationUtil.getFullyAuthenticatedUser()); + nodeService.addAspect(nodeRef, ASPECT_FROZEN, props); - // Log a message about applying the the frozen aspect - if (logger.isDebugEnabled()) - { - StringBuilder msg = new StringBuilder(); - msg.append("Frozen aspect applied to '").append(nodeRef).append("'."); - logger.debug(msg.toString()); - } + // Log a message about applying the the frozen aspect + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Frozen aspect applied to '").append(nodeRef).append("'."); + logger.debug(msg.toString()); + } - // Mark all the folders contents as frozen - if (recordsManagementService.isRecordFolder(nodeRef)) - { - List records = recordsManagementService.getRecords(nodeRef); - for (NodeRef record : records) - { - nodeService.addAspect(record, ASPECT_FROZEN, props); + // Mark all the folders contents as frozen + if (recordsManagementService.isRecordFolder(nodeRef)) + { + List records = recordsManagementService.getRecords(nodeRef); + for (NodeRef record : records) + { + nodeService.addAspect(record, ASPECT_FROZEN, props); + + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Frozen aspect applied to '").append(record).append("'."); + logger.debug(msg.toString()); + } + } + } + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#freeze(java.lang.String, + * java.util.Set) + */ + @Override + public NodeRef freeze(String reason, Set nodeRefs) + { + ParameterCheck.mandatoryString("reason", reason); + ParameterCheck.mandatoryCollection("nodeRefs", nodeRefs); + + // FIXME: Can we assume that the nodeRefs are in the same filePlan??? + NodeRef nodeRef = nodeRefs.iterator().next(); + NodeRef hold = createHold(nodeRef, reason); + + freeze(hold, nodeRefs); + + return hold; + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#freeze(org.alfresco.service.cmr.repository.NodeRef, + * java.util.Set) + */ + @Override + public void freeze(NodeRef hold, Set nodeRefs) + { + ParameterCheck.mandatory("hold", hold); + ParameterCheck.mandatoryCollection("nodeRefs", nodeRefs); + + for (NodeRef nodeRef : nodeRefs) + { + freeze(hold, nodeRef); + } + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#unFreeze(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public void unFreeze(NodeRef nodeRef) + { + ParameterCheck.mandatory("nodeRef", nodeRef); + + if (nodeService.hasAspect(nodeRef, ASPECT_FROZEN)) + { + boolean isRecordFolder = recordsManagementService.isRecordFolder(nodeRef); if (logger.isDebugEnabled()) { - StringBuilder msg = new StringBuilder(); - msg.append("Frozen aspect applied to '").append(record).append("'."); - logger.debug(msg.toString()); - } - } - } - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#freeze(java.lang.String, java.util.Set) - */ - @Override - public NodeRef freeze(String reason, Set nodeRefs) - { - ParameterCheck.mandatoryString("reason", reason); - ParameterCheck.mandatoryCollection("nodeRefs", nodeRefs); - - // FIXME: Can we assume that the nodeRefs are in the same filePlan??? - NodeRef nodeRef = nodeRefs.iterator().next(); - NodeRef hold = createHold(nodeRef, reason); - - freeze(hold, nodeRefs); - - return hold; - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#freeze(org.alfresco.service.cmr.repository.NodeRef, java.util.Set) - */ - @Override - public void freeze(NodeRef hold, Set nodeRefs) - { - ParameterCheck.mandatory("hold", hold); - ParameterCheck.mandatoryCollection("nodeRefs", nodeRefs); - - for (NodeRef nodeRef : nodeRefs) - { - freeze(hold, nodeRef); - } - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#unFreeze(org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - public void unFreeze(NodeRef nodeRef) - { - ParameterCheck.mandatory("nodeRef", nodeRef); - - if (nodeService.hasAspect(nodeRef, ASPECT_FROZEN)) - { - boolean isRecordFolder = recordsManagementService.isRecordFolder(nodeRef); - - if (logger.isDebugEnabled()) - { - StringBuilder msg = new StringBuilder(); - msg.append("Unfreezing node '").append(nodeRef).append("'"); - if (isRecordFolder) - { - msg.append(" (folder)"); - } - msg.append("."); - logger.debug(msg.toString()); - } - - // Remove freeze from node - removeFreeze(nodeRef); - - // Remove freeze from records if a record folder - if (isRecordFolder) - { - List records = recordsManagementService.getRecords(nodeRef); - for (NodeRef record : records) - { - removeFreeze(record); - } - } - } - else - { - StringBuilder msg = new StringBuilder(); - msg.append("The node '").append(nodeRef).append("' was not frozen. So it cannot be unfrozen!"); - logger.info(msg.toString()); - } - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#unFreeze(java.util.Set) - */ - @Override - public void unFreeze(Set nodeRefs) - { - ParameterCheck.mandatoryCollection("nodeRefs", nodeRefs); - - for (NodeRef nodeRef : nodeRefs) - { - unFreeze(nodeRef); - } - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#relinquish(org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - public void relinquish(NodeRef hold) - { - ParameterCheck.mandatory("hold", hold); - - List frozenNodeAssocs = nodeService.getChildAssocs(hold, ASSOC_FROZEN_RECORDS, RegexQNamePattern.MATCH_ALL); - - if (logger.isDebugEnabled()) - { - StringBuilder msg = new StringBuilder(); - msg.append("Relinquishing hold '").append(hold) - .append("' which has '").append(frozenNodeAssocs.size()).append("' frozen node(s)."); - logger.debug(msg.toString()); - } - - for (ChildAssociationRef assoc : frozenNodeAssocs) - { - // Remove the freeze if this is the only hold that references the node - removeFreeze(assoc.getChildRef(), hold); - } - - if (logger.isDebugEnabled()) - { - StringBuilder msg = new StringBuilder(); - msg.append("Deleting hold object '").append(hold) - .append("' with name '").append(nodeService.getProperty(hold, ContentModel.PROP_NAME)) - .append("'."); - logger.debug(msg.toString()); - } - - // Delete the hold node - nodeService.deleteNode(hold); - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getReason(org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - public String getReason(NodeRef hold) - { - ParameterCheck.mandatory("hold", hold); - - return (String) nodeService.getProperty(hold, PROP_HOLD_REASON); - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#updateReason(org.alfresco.service.cmr.repository.NodeRef, java.lang.String) - */ - @Override - public void updateReason(NodeRef hold, String reason) - { - ParameterCheck.mandatory("hold", hold); - ParameterCheck.mandatoryString("reason", reason); - - nodeService.setProperty(hold, PROP_HOLD_REASON, reason); - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getHold(org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - public Set getHolds(NodeRef filePlan) - { - ParameterCheck.mandatory("filePlan", filePlan); - - Set holds = new HashSet(); - - List childAssocs = nodeService.getChildAssocs(filePlan, ASSOC_HOLDS, RegexQNamePattern.MATCH_ALL); - if (childAssocs != null && !childAssocs.isEmpty()) - { - for (ChildAssociationRef childAssoc : childAssocs) - { - holds.add(childAssoc.getChildRef()); - } - } - - return holds; - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#hasFrozenChildren(org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - public boolean hasFrozenChildren(NodeRef nodeRef) - { - ParameterCheck.mandatory("nodeRef", nodeRef); - - List childAssocs = nodeService.getChildAssocs(nodeRef, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); - if (childAssocs != null && !childAssocs.isEmpty()) - { - for (ChildAssociationRef childAssociationRef : childAssocs) - { - if (isFrozen(childAssociationRef.getChildRef())) - { - return true; - } - } - } - - return false; - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getFreezeDate(org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - public Date getFreezeDate(NodeRef nodeRef) - { - ParameterCheck.mandatory("nodeRef", nodeRef); - - if (isFrozen(nodeRef)) - { - Serializable property = nodeService.getProperty(nodeRef, PROP_FROZEN_AT); - if (property != null) - { - return (Date) property; - } - } - - return null; - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getFreezeInitiator(org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - public String getFreezeInitiator(NodeRef nodeRef) - { - ParameterCheck.mandatory("nodeRef", nodeRef); - - if (isFrozen(nodeRef)) - { - Serializable property = nodeService.getProperty(nodeRef, PROP_FROZEN_BY); - if (property != null) - { - return (String) property; - } - } - - return null; - } - - /** - * Helper Methods - */ - - /** - * Creates a hold using the given nodeRef and reason - * - * @param nodeRef the nodeRef which will be frozen - * @param reason the reason why the record will be frozen - * @return NodeRef of the created hold - */ - private NodeRef createHold(NodeRef nodeRef, String reason) - { - NodeRef holdNodeRef = null; - - // Calculate a transfer name - QName nodeDbid = QName.createQName(NamespaceService.SYSTEM_MODEL_1_0_URI, "node-dbid"); - Long dbId = (Long) nodeService.getProperty(nodeRef, nodeDbid); - String transferName = StringUtils.leftPad(dbId.toString(), 10, "0"); - - // Create the properties for the hold object - Map holdProps = new HashMap(2); - holdProps.put(ContentModel.PROP_NAME, transferName); - holdProps.put(PROP_HOLD_REASON, reason); - - // Get the root rm node and create the hold object - NodeRef root = recordsManagementService.getFilePlan(nodeRef); - QName transferQName = QName.createQName(RM_URI, transferName); - holdNodeRef = nodeService.createNode(root, ASSOC_HOLDS, transferQName, TYPE_HOLD, holdProps).getChildRef(); - - if (logger.isDebugEnabled()) - { - StringBuilder msg = new StringBuilder(); - msg.append("Created hold object '").append(holdNodeRef) - .append("' with transfer name '").append(transferQName) - .append("'."); - logger.debug(msg.toString()); - } - - // Bind the hold node reference to the transaction - AlfrescoTransactionSupport.bindResource(KEY_HOLD_NODEREF, holdNodeRef); - - return holdNodeRef; - } - - /** - * Removes a freeze from a node. The unfrozen node is automatically removed from the hold(s) it is in. - * If the hold is subsequently empty, the hold is automatically deleted. - * - * @param nodeRef node reference - */ - private void removeFreeze(NodeRef nodeRef) - { - // Get all the holds and remove this node from them - List assocs = nodeService.getParentAssocs(nodeRef, ASSOC_FROZEN_RECORDS, RegexQNamePattern.MATCH_ALL); - - if (logger.isDebugEnabled()) - { - StringBuilder msg = new StringBuilder(); - msg.append("Removing freeze from node '").append(nodeRef) - .append("' which has '").append(assocs.size()).append("' holds."); - logger.debug(msg.toString()); - } - - for (ChildAssociationRef assoc : assocs) - { - // Remove the frozen node as a child - NodeRef holdNodeRef = assoc.getParentRef(); - nodeService.removeChild(holdNodeRef, nodeRef); - - if (logger.isDebugEnabled()) - { - StringBuilder msg = new StringBuilder(); - msg.append("Removed frozen node '").append(nodeRef) - .append("' from hold '").append(holdNodeRef).append("'."); - logger.debug(msg.toString()); - } - - // Check to see if we should delete the hold - List holdAssocs = nodeService.getChildAssocs(holdNodeRef, ASSOC_FROZEN_RECORDS, RegexQNamePattern.MATCH_ALL); - if (holdAssocs != null && holdAssocs.isEmpty()) - { - if (logger.isDebugEnabled()) - { StringBuilder msg = new StringBuilder(); - msg.append("Hold node '").append(holdNodeRef) - .append("' with name '").append(nodeService.getProperty(holdNodeRef, ContentModel.PROP_NAME)) - .append("' has no frozen nodes. Hence deleting it."); + msg.append("Unfreezing node '").append(nodeRef).append("'"); + if (isRecordFolder) + { + msg.append(" (folder)"); + } + msg.append("."); logger.debug(msg.toString()); - } + } - // Delete the hold object - nodeService.deleteNode(holdNodeRef); - } - } + // Remove freeze from node + removeFreeze(nodeRef); - // Remove the aspect - nodeService.removeAspect(nodeRef, ASPECT_FROZEN); - - if (logger.isDebugEnabled()) - { - StringBuilder msg = new StringBuilder(); - msg.append("Removed frozen aspect from '").append(nodeRef).append("'."); - logger.debug(msg.toString()); - } - } - - /** - * Removes a freeze from a node from the given hold - * - * @param nodeRef node reference - * @param hold hold - */ - private void removeFreeze(NodeRef nodeRef, NodeRef hold) - { - // We should only remove the frozen aspect if there are no other 'holds' in effect for this node. - // One complication to consider is that holds can be placed on records or on folders. - // Therefore if the nodeRef here is a record, we need to go up the containment hierarchy looking - // for holds at each level. - - // Get all the holds and remove this node from them. - List parentAssocs = nodeService.getParentAssocs(nodeRef, ASSOC_FROZEN_RECORDS, RegexQNamePattern.MATCH_ALL); - // If the nodeRef is a record, there could also be applicable holds as parents of the folder(s). - if (recordsManagementService.isRecord(nodeRef)) - { - List parentFolders = recordsManagementService.getRecordFolders(nodeRef); - for (NodeRef folder : parentFolders) - { - List moreAssocs = nodeService.getParentAssocs(folder, ASSOC_FROZEN_RECORDS, RegexQNamePattern.MATCH_ALL); - parentAssocs.addAll(moreAssocs); - } - } - - if (logger.isDebugEnabled()) - { - StringBuilder msg = new StringBuilder(); - msg.append("Removing freeze from ").append(nodeRef).append(" which has ") - .append(parentAssocs.size()).append(" holds"); - logger.debug(msg.toString()); - } - - boolean otherHoldsAreInEffect = false; - for (ChildAssociationRef chAssRef : parentAssocs) - { - if (!chAssRef.getParentRef().equals(hold)) - { - otherHoldsAreInEffect = true; - break; - } - } - - if (!otherHoldsAreInEffect) - { - if (logger.isDebugEnabled()) - { + // Remove freeze from records if a record folder + if (isRecordFolder) + { + List records = recordsManagementService.getRecords(nodeRef); + for (NodeRef record : records) + { + removeFreeze(record); + } + } + } + else + { StringBuilder msg = new StringBuilder(); - msg.append("Removing frozen aspect from ").append(nodeRef); - logger.debug(msg.toString()); - } + msg.append("The node '").append(nodeRef).append("' was not frozen. So it cannot be unfrozen!"); + logger.info(msg.toString()); + } + } - // Remove the aspect - nodeService.removeAspect(nodeRef, ASPECT_FROZEN); - } + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#unFreeze(java.util.Set) + */ + @Override + public void unFreeze(Set nodeRefs) + { + ParameterCheck.mandatoryCollection("nodeRefs", nodeRefs); - // Remove the freezes on the child records as long as there is no other hold referencing them - if (recordsManagementService.isRecordFolder(nodeRef) == true) - { - if (logger.isDebugEnabled()) - { + for (NodeRef nodeRef : nodeRefs) + { + unFreeze(nodeRef); + } + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#relinquish(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public void relinquish(NodeRef hold) + { + ParameterCheck.mandatory("hold", hold); + + List frozenNodeAssocs = nodeService.getChildAssocs(hold, ASSOC_FROZEN_RECORDS, + RegexQNamePattern.MATCH_ALL); + + if (logger.isDebugEnabled()) + { StringBuilder msg = new StringBuilder(); - msg.append(nodeRef).append(" is a record folder"); + msg.append("Relinquishing hold '").append(hold).append("' which has '").append(frozenNodeAssocs.size()) + .append("' frozen node(s)."); logger.debug(msg.toString()); - } - for (NodeRef record : recordsManagementService.getRecords(nodeRef)) - { - removeFreeze(record, hold); - } - } - } + } + + for (ChildAssociationRef assoc : frozenNodeAssocs) + { + // Remove the freeze if this is the only hold that references the + // node + removeFreeze(assoc.getChildRef(), hold); + } + + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Deleting hold object '").append(hold).append("' with name '").append( + nodeService.getProperty(hold, ContentModel.PROP_NAME)).append("'."); + logger.debug(msg.toString()); + } + + // Delete the hold node + nodeService.deleteNode(hold); + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getReason(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public String getReason(NodeRef hold) + { + ParameterCheck.mandatory("hold", hold); + + return (String) nodeService.getProperty(hold, PROP_HOLD_REASON); + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#updateReason(org.alfresco.service.cmr.repository.NodeRef, + * java.lang.String) + */ + @Override + public void updateReason(NodeRef hold, String reason) + { + ParameterCheck.mandatory("hold", hold); + ParameterCheck.mandatoryString("reason", reason); + + nodeService.setProperty(hold, PROP_HOLD_REASON, reason); + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getHold(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public Set getHolds(NodeRef filePlan) + { + ParameterCheck.mandatory("filePlan", filePlan); + + Set holds = new HashSet(); + + List childAssocs = nodeService.getChildAssocs(filePlan, ASSOC_HOLDS, + RegexQNamePattern.MATCH_ALL); + if (childAssocs != null && !childAssocs.isEmpty()) + { + for (ChildAssociationRef childAssoc : childAssocs) + { + holds.add(childAssoc.getChildRef()); + } + } + + return holds; + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#hasFrozenChildren(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public boolean hasFrozenChildren(NodeRef nodeRef) + { + ParameterCheck.mandatory("nodeRef", nodeRef); + + List childAssocs = nodeService.getChildAssocs(nodeRef, ContentModel.ASSOC_CONTAINS, + RegexQNamePattern.MATCH_ALL); + if (childAssocs != null && !childAssocs.isEmpty()) + { + for (ChildAssociationRef childAssociationRef : childAssocs) + { + if (isFrozen(childAssociationRef.getChildRef())) { return true; } + } + } + + return false; + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getFreezeDate(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public Date getFreezeDate(NodeRef nodeRef) + { + ParameterCheck.mandatory("nodeRef", nodeRef); + + if (isFrozen(nodeRef)) + { + Serializable property = nodeService.getProperty(nodeRef, PROP_FROZEN_AT); + if (property != null) { return (Date) property; } + } + + return null; + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getFreezeInitiator(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public String getFreezeInitiator(NodeRef nodeRef) + { + ParameterCheck.mandatory("nodeRef", nodeRef); + + if (isFrozen(nodeRef)) + { + Serializable property = nodeService.getProperty(nodeRef, PROP_FROZEN_BY); + if (property != null) { return (String) property; } + } + + return null; + } + + /** + * Helper Methods + */ + + /** + * Creates a hold using the given nodeRef and reason + * + * @param nodeRef the nodeRef which will be frozen + * @param reason the reason why the record will be frozen + * @return NodeRef of the created hold + */ + private NodeRef createHold(NodeRef nodeRef, String reason) + { + NodeRef holdNodeRef = null; + + // Calculate a transfer name + QName nodeDbid = QName.createQName(NamespaceService.SYSTEM_MODEL_1_0_URI, "node-dbid"); + Long dbId = (Long) nodeService.getProperty(nodeRef, nodeDbid); + String transferName = StringUtils.leftPad(dbId.toString(), 10, "0"); + + // Create the properties for the hold object + Map holdProps = new HashMap(2); + holdProps.put(ContentModel.PROP_NAME, transferName); + holdProps.put(PROP_HOLD_REASON, reason); + + // Get the root rm node and create the hold object + NodeRef root = recordsManagementService.getFilePlan(nodeRef); + QName transferQName = QName.createQName(RM_URI, transferName); + holdNodeRef = nodeService.createNode(root, ASSOC_HOLDS, transferQName, TYPE_HOLD, holdProps).getChildRef(); + + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Created hold object '").append(holdNodeRef).append("' with transfer name '").append( + transferQName).append("'."); + logger.debug(msg.toString()); + } + + // Bind the hold node reference to the transaction + AlfrescoTransactionSupport.bindResource(KEY_HOLD_NODEREF, holdNodeRef); + + return holdNodeRef; + } + + /** + * Removes a freeze from a node. The unfrozen node is automatically removed + * from the hold(s) it is in. If the hold is subsequently empty, the hold is + * automatically deleted. + * + * @param nodeRef node reference + */ + private void removeFreeze(NodeRef nodeRef) + { + // Get all the holds and remove this node from them + List assocs = nodeService.getParentAssocs(nodeRef, ASSOC_FROZEN_RECORDS, + RegexQNamePattern.MATCH_ALL); + + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Removing freeze from node '").append(nodeRef).append("' which has '").append(assocs.size()) + .append("' holds."); + logger.debug(msg.toString()); + } + + for (ChildAssociationRef assoc : assocs) + { + // Remove the frozen node as a child + NodeRef holdNodeRef = assoc.getParentRef(); + nodeService.removeChild(holdNodeRef, nodeRef); + + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Removed frozen node '").append(nodeRef).append("' from hold '").append(holdNodeRef).append( + "'."); + logger.debug(msg.toString()); + } + + // Check to see if we should delete the hold + List holdAssocs = nodeService.getChildAssocs(holdNodeRef, ASSOC_FROZEN_RECORDS, + RegexQNamePattern.MATCH_ALL); + if (holdAssocs != null && holdAssocs.isEmpty()) + { + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Hold node '").append(holdNodeRef).append("' with name '").append( + nodeService.getProperty(holdNodeRef, ContentModel.PROP_NAME)).append( + "' has no frozen nodes. Hence deleting it."); + logger.debug(msg.toString()); + } + + // Delete the hold object + nodeService.deleteNode(holdNodeRef); + } + } + + // Remove the aspect + nodeService.removeAspect(nodeRef, ASPECT_FROZEN); + + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Removed frozen aspect from '").append(nodeRef).append("'."); + logger.debug(msg.toString()); + } + } + + /** + * Removes a freeze from a node from the given hold + * + * @param nodeRef node reference + * @param hold hold + */ + private void removeFreeze(NodeRef nodeRef, NodeRef hold) + { + // We should only remove the frozen aspect if there are no other 'holds' + // in effect for this node. + // One complication to consider is that holds can be placed on records + // or on folders. + // Therefore if the nodeRef here is a record, we need to go up the + // containment hierarchy looking + // for holds at each level. + + // Get all the holds and remove this node from them. + List parentAssocs = nodeService.getParentAssocs(nodeRef, ASSOC_FROZEN_RECORDS, + RegexQNamePattern.MATCH_ALL); + // If the nodeRef is a record, there could also be applicable holds as + // parents of the folder(s). + if (recordService.isRecord(nodeRef)) + { + List parentFolders = recordsManagementService.getRecordFolders(nodeRef); + for (NodeRef folder : parentFolders) + { + List moreAssocs = nodeService.getParentAssocs(folder, ASSOC_FROZEN_RECORDS, + RegexQNamePattern.MATCH_ALL); + parentAssocs.addAll(moreAssocs); + } + } + + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Removing freeze from ").append(nodeRef).append(" which has ").append(parentAssocs.size()) + .append(" holds"); + logger.debug(msg.toString()); + } + + boolean otherHoldsAreInEffect = false; + for (ChildAssociationRef chAssRef : parentAssocs) + { + if (!chAssRef.getParentRef().equals(hold)) + { + otherHoldsAreInEffect = true; + break; + } + } + + if (!otherHoldsAreInEffect) + { + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Removing frozen aspect from ").append(nodeRef); + logger.debug(msg.toString()); + } + + // Remove the aspect + nodeService.removeAspect(nodeRef, ASPECT_FROZEN); + } + + // Remove the freezes on the child records as long as there is no other + // hold referencing them + if (recordsManagementService.isRecordFolder(nodeRef) == true) + { + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append(nodeRef).append(" is a record folder"); + logger.debug(msg.toString()); + } + for (NodeRef record : recordsManagementService.getRecords(nodeRef)) + { + removeFreeze(record, hold); + } + } + } } \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/ScriptRecordsManagmentService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/ScriptRecordsManagmentService.java index c8515d457d..3cec52667f 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/ScriptRecordsManagmentService.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/ScriptRecordsManagmentService.java @@ -21,7 +21,7 @@ package org.alfresco.module.org_alfresco_module_rm.jscript; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.notification.RecordsManagementNotificationHelper; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; +import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService; import org.alfresco.repo.jscript.BaseScopableProcessorExtension; import org.alfresco.repo.jscript.ScriptNode; import org.alfresco.scripts.ScriptException; @@ -93,8 +93,8 @@ public class ScriptRecordsManagmentService extends BaseScopableProcessorExtensio */ public void setPermission(ScriptNode node, String permission, String authority) { - RecordsManagementSecurityService securityService = rmServices.getRecordsManagementSecurityService(); - securityService.setPermission(node.getNodeRef(), authority, permission); + FilePlanPermissionService filePlanPermissionService = rmServices.getFilePlanPermissionService(); + filePlanPermissionService.setPermission(node.getNodeRef(), authority, permission); } /** @@ -106,8 +106,8 @@ public class ScriptRecordsManagmentService extends BaseScopableProcessorExtensio */ public void deletePermission(ScriptNode node, String permission, String authority) { - RecordsManagementSecurityService securityService = rmServices.getRecordsManagementSecurityService(); - securityService.deletePermission(node.getNodeRef(), authority, permission); + FilePlanPermissionService filePlanPermissionService = rmServices.getFilePlanPermissionService(); + filePlanPermissionService.deletePermission(node.getNodeRef(), authority, permission); } /** diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/FilePlanType.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/FilePlanType.java deleted file mode 100644 index 350e2ea7a9..0000000000 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/FilePlanType.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2005-2011 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.module.org_alfresco_module_rm.model.behaviour; - -import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; -import org.alfresco.repo.node.NodeServicePolicies; -import org.alfresco.repo.policy.PolicyComponent; -import org.alfresco.service.cmr.repository.ChildAssociationRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.security.PermissionService; - -/** - * Behaviour associated with the file plan type - * - * @author Roy Wetherall - */ -public class FilePlanType implements RecordsManagementModel, - NodeServicePolicies.OnCreateNodePolicy -{ - /** Policy component */ - private PolicyComponent policyComponent; - - /** Node service */ - private NodeService nodeService; - - /** Permission service */ - private PermissionService permissionService; - - /** New record container name */ - private static final String NAME_NR_CONTAINER = "New Records"; - - /** - * Set the policy component - * @param policyComponent policy component - */ - public void setPolicyComponent(PolicyComponent policyComponent) - { - this.policyComponent = policyComponent; - } - - /** - * Set node service - * @param nodeService node service - */ - public void setNodeService(NodeService nodeService) - { - this.nodeService = nodeService; - } - - public void setPermissionService(PermissionService permissionService) - { - this.permissionService = permissionService; - } - - /** - * Bean initialisation method - */ - public void init() - { - // policyComponent.bindClassBehaviour( - // NodeServicePolicies.OnCreateNodePolicy.QNAME, - // TYPE_FILE_PLAN, - // new JavaBehaviour(this, "onCreateNode", NotificationFrequency.TRANSACTION_COMMIT)); - } - - /** - * @see org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy#onCreateNode(org.alfresco.service.cmr.repository.ChildAssociationRef) - */ - @Override - public void onCreateNode(ChildAssociationRef assoc) - { - // TODO refactor the file plan behaviours from the service code - } -} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordContainerType.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordContainerType.java index f72d409d27..a0b7e0133c 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordContainerType.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordContainerType.java @@ -19,7 +19,6 @@ package org.alfresco.module.org_alfresco_module_rm.model.behaviour; import org.alfresco.model.ContentModel; -import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService; import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.node.NodeServicePolicies; @@ -47,9 +46,6 @@ public class RecordContainerType implements RecordsManagementModel, /** Policy component */ private PolicyComponent policyComponent; - /** Records Management Action Service */ - private RecordsManagementActionService recordsManagementActionService; - /** Node service */ private NodeService nodeService; @@ -68,16 +64,6 @@ public class RecordContainerType implements RecordsManagementModel, this.policyComponent = policyComponent; } - /** - * Set the records management action service - * - * @param recordsManagementActionService records management action service - */ - public void setRecordsManagementActionService(RecordsManagementActionService recordsManagementActionService) - { - this.recordsManagementActionService = recordsManagementActionService; - } - /** * Set node service * diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/security/ModelSecurityServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/security/ModelSecurityServiceImpl.java index 79bbfa3b0c..f66934e8d4 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/security/ModelSecurityServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/security/ModelSecurityServiceImpl.java @@ -26,12 +26,12 @@ import java.util.Set; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; -import org.alfresco.module.org_alfresco_module_rm.security.Role; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; +import org.alfresco.module.org_alfresco_module_rm.role.Role; import org.alfresco.repo.node.NodeServicePolicies; -import org.alfresco.repo.policy.Behaviour.NotificationFrequency; import org.alfresco.repo.policy.JavaBehaviour; import org.alfresco.repo.policy.PolicyComponent; +import org.alfresco.repo.policy.Behaviour.NotificationFrequency; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; @@ -66,8 +66,8 @@ public class ModelSecurityServiceImpl implements ModelSecurityService, /** Namespace service */ private NamespaceService namespaceService; - /** Security service */ - private RecordsManagementSecurityService securityService; + /** File plan role service */ + private FilePlanRoleService filePlanRoleService; /** Records management service */ private RecordsManagementService recordsManagementService; @@ -130,11 +130,11 @@ public class ModelSecurityServiceImpl implements ModelSecurityService, } /** - * @param securityService records management security service + * @param filePlanRoleService file plan role service */ - public void setSecurityService(RecordsManagementSecurityService securityService) + public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) { - this.securityService = securityService; + this.filePlanRoleService = filePlanRoleService; } /** @@ -246,7 +246,7 @@ public class ModelSecurityServiceImpl implements ModelSecurityService, NodeRef filePlan = recordsManagementService.getFilePlan(nodeRef); if (filePlan != null) { - Set roles = securityService.getRolesByUser(filePlan, AuthenticationUtil.getFullyAuthenticatedUser()); + Set roles = filePlanRoleService.getRolesByUser(filePlan, AuthenticationUtil.getFullyAuthenticatedUser()); for (Role role : roles) { if (Collections.disjoint(role.getCapabilities(), artifact.getCapabilities()) == false) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/notification/RecordsManagementNotificationHelper.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/notification/RecordsManagementNotificationHelper.java index 0f03ea0721..0c35b8973a 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/notification/RecordsManagementNotificationHelper.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/notification/RecordsManagementNotificationHelper.java @@ -26,8 +26,8 @@ import java.util.Set; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; -import org.alfresco.module.org_alfresco_module_rm.security.Role; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; +import org.alfresco.module.org_alfresco_module_rm.role.Role; import org.alfresco.repo.notification.EMailNotificationProvider; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; @@ -70,7 +70,7 @@ public class RecordsManagementNotificationHelper /** Services */ private NotificationService notificationService; private RecordsManagementService recordsManagementService; - private RecordsManagementSecurityService securityService; + private FilePlanRoleService filePlanRoleService; private SearchService searchService; private NamespaceService namespaceService; private SiteService siteService; @@ -102,11 +102,11 @@ public class RecordsManagementNotificationHelper } /** - * @param securityService rm security service + * @param filePlanRoleService file plan role service */ - public void setSecurityService(RecordsManagementSecurityService securityService) + public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) { - this.securityService = securityService; + this.filePlanRoleService = filePlanRoleService; } /** @@ -325,7 +325,7 @@ public class RecordsManagementNotificationHelper public String doWork() throws Exception { // Find the authority for the given role - Role role = securityService.getRole(root, notificationRole); + Role role = filePlanRoleService.getRole(root, notificationRole); return role.getRoleGroupName(); } }, AuthenticationUtil.getSystemUserName()); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv21InPlacePatch.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv21InPlacePatch.java index befe398219..48549f6a51 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv21InPlacePatch.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv21InPlacePatch.java @@ -28,10 +28,10 @@ import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; import org.alfresco.module.org_alfresco_module_rm.dod5015.DOD5015Model; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleServiceImpl; import org.alfresco.module.org_alfresco_module_rm.security.ExtendedReaderDynamicAuthority; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityServiceImpl; +import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService; import org.alfresco.repo.module.AbstractModuleComponent; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; @@ -62,8 +62,11 @@ public class RMv21InPlacePatch extends AbstractModuleComponent /** Records management service */ private RecordsManagementService recordsManagementService; - /** Records management security service */ - private RecordsManagementSecurityService recordsManagementSecurityService; + /** File plan permission service */ + private FilePlanPermissionService filePlanPermissionService; + + /** File plan role service */ + private FilePlanRoleService filePlanRoleService; /** * @param nodeService node service @@ -90,11 +93,19 @@ public class RMv21InPlacePatch extends AbstractModuleComponent } /** - * @param recordsManagementSecurityService records management security service + * @param filePlanPermissionService file plan permission service */ - public void setRecordsManagementSecurityService(RecordsManagementSecurityService recordsManagementSecurityService) + public void setFilePlanPermissionService(FilePlanPermissionService filePlanPermissionService) { - this.recordsManagementSecurityService = recordsManagementSecurityService; + this.filePlanPermissionService = filePlanPermissionService; + } + + /** + * @param filePlanRoleService file plan role service + */ + public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) + { + this.filePlanRoleService = filePlanRoleService; } /** @@ -123,7 +134,7 @@ public class RMv21InPlacePatch extends AbstractModuleComponent } // set permissions - recordsManagementSecurityService.setPermission(filePlan, ExtendedReaderDynamicAuthority.EXTENDED_READER, RMPermissionModel.READ_RECORDS); + filePlanPermissionService.setPermission(filePlan, ExtendedReaderDynamicAuthority.EXTENDED_READER, RMPermissionModel.READ_RECORDS); permissionService.setPermission(filePlan, ExtendedReaderDynamicAuthority.EXTENDED_READER, RMPermissionModel.VIEW_RECORDS, true); // create unfiled container @@ -141,7 +152,7 @@ public class RMv21InPlacePatch extends AbstractModuleComponent */ private NodeRef createUnfiledContainer(NodeRef filePlan) { - String allRoles = recordsManagementSecurityService.getAllRolesContainerGroup(filePlan); + String allRoles = filePlanRoleService.getAllRolesContainerGroup(filePlan); // create the properties map Map properties = new HashMap(1); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomPropertyDefinitionPost.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomPropertyDefinitionPost.java index 1ddace840a..893486c63e 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomPropertyDefinitionPost.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomPropertyDefinitionPost.java @@ -28,7 +28,6 @@ import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.module.org_alfresco_module_rm.CustomMetadataException; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementAdminService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementCustomModel; -import org.alfresco.service.cmr.dictionary.DictionaryException; import org.alfresco.service.namespace.QName; import org.json.JSONException; import org.json.JSONObject; diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomReferenceDefinitionPut.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomReferenceDefinitionPut.java index 3abc94d457..963269abb8 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomReferenceDefinitionPut.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomReferenceDefinitionPut.java @@ -53,6 +53,7 @@ public class CustomReferenceDefinitionPut extends AbstractRmWebScript private static final String SOURCE = "source"; private static final String LABEL = "label"; + @SuppressWarnings("unused") private static Log logger = LogFactory.getLog(CustomReferenceDefinitionPut.class); private RecordsManagementAdminService rmAdminService; diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomReferenceDefinitionsGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomReferenceDefinitionsGet.java index 208102feba..026962c944 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomReferenceDefinitionsGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/CustomReferenceDefinitionsGet.java @@ -29,15 +29,14 @@ import javax.servlet.http.HttpServletResponse; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementAdminService; import org.alfresco.service.cmr.dictionary.AssociationDefinition; import org.alfresco.service.cmr.dictionary.ChildAssociationDefinition; -import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; /** * This class provides the implementation for the customrefdefinitions.get webscript. @@ -55,12 +54,6 @@ public class CustomReferenceDefinitionsGet extends DeclarativeWebScript private static Log logger = LogFactory.getLog(CustomReferenceDefinitionsGet.class); private RecordsManagementAdminService rmAdminService; - private NamespaceService namespaceService; - - public void setNamespaceService(NamespaceService namespaceService) - { - this.namespaceService = namespaceService; - } public void setRecordsManagementAdminService(RecordsManagementAdminService rmAdminService) { diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/ImportPost.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/ImportPost.java index dfe1a2c8de..7c40fa21e4 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/ImportPost.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/ImportPost.java @@ -30,7 +30,7 @@ import javax.servlet.http.HttpServletResponse; import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; import org.alfresco.repo.exporter.ACPExportPackageHandler; import org.alfresco.repo.importer.ACPImportPackageHandler; import org.alfresco.repo.security.authentication.AuthenticationUtil; @@ -41,6 +41,8 @@ import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.view.ImporterService; import org.alfresco.service.cmr.view.Location; import org.alfresco.util.TempFileProvider; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; @@ -49,8 +51,6 @@ import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WrappingWebScriptRequest; import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest; import org.springframework.extensions.webscripts.servlet.FormData.FormField; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.springframework.util.FileCopyUtils; /** @@ -72,7 +72,7 @@ public class ImportPost extends DeclarativeWebScript protected DictionaryService dictionaryService; protected ImporterService importerService; protected RecordsManagementService rmService; - protected RecordsManagementSecurityService rmSecurityService; + protected FilePlanRoleService filePlanRoleService; /** * @param nodeService @@ -103,13 +103,11 @@ public class ImportPost extends DeclarativeWebScript } /** - * Sets the RecordsManagementSecurityService instance - * - * @param rmSecurityService The RecordsManagementSecurityService instance + * @param filePlanRoleService file plan role service */ - public void setRecordsManagementSecurityService(RecordsManagementSecurityService rmSecurityService) + public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) { - this.rmSecurityService = rmSecurityService; + this.filePlanRoleService = filePlanRoleService; } /** @@ -179,7 +177,7 @@ public class ImportPost extends DeclarativeWebScript // as there is no 'import capability' and the RM admin user is different from // the DM admin user (meaning the webscript 'admin' authentication can't be used) // perform a manual check here to ensure the current user has the RM admin role. - boolean isAdmin = this.rmSecurityService.hasRMAdminRole( + boolean isAdmin = filePlanRoleService.hasRMAdminRole( this.rmService.getFilePlan(destination), AuthenticationUtil.getRunAsUser()); if (!isAdmin) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/RMConstraintGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/RMConstraintGet.java index dc8cb88530..b6816c4b15 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/RMConstraintGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/RMConstraintGet.java @@ -41,7 +41,6 @@ public class RMConstraintGet extends DeclarativeWebScript @Override protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { - String requestUrl = req.getURL(); String extensionPath = req.getExtensionPath(); String constraintName = extensionPath.replace('_', ':'); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/UserRightsReportGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/UserRightsReportGet.java index 343a7d9e29..c45f30a702 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/UserRightsReportGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/UserRightsReportGet.java @@ -28,8 +28,8 @@ import javax.servlet.http.HttpServletResponse; import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; -import org.alfresco.module.org_alfresco_module_rm.security.Role; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; +import org.alfresco.module.org_alfresco_module_rm.role.Role; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.security.AuthorityService; @@ -51,7 +51,7 @@ public class UserRightsReportGet extends DeclarativeWebScript protected PersonService personService; protected NodeService nodeService; protected RecordsManagementService rmService; - protected RecordsManagementSecurityService rmSecurityService; + protected FilePlanRoleService filePlanRoleService; /** * Sets the AuthorityService instance @@ -84,23 +84,19 @@ public class UserRightsReportGet extends DeclarativeWebScript } /** - * Sets the RecordsManagementService instance - * - * @param rmService The RecordsManagementService instance + * @param recordsManagementService records management service */ - public void setRecordsManagementService(RecordsManagementService rmService) + public void setRecordsManagementService(RecordsManagementService recordsManagementService) { - this.rmService = rmService; + this.rmService = recordsManagementService; } /** - * Sets the RecordsManagementSecurityService instance - * - * @param rmSecurityService The RecordsManagementSecurityService instance + * @param filePlanRoleService file plan role service */ - public void setRecordsManagementSecurityService(RecordsManagementSecurityService rmSecurityService) + public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) { - this.rmSecurityService = rmSecurityService; + this.filePlanRoleService = filePlanRoleService; } /* @@ -128,7 +124,7 @@ public class UserRightsReportGet extends DeclarativeWebScript NodeRef rmRootNode = rmRoots.get(0); // iterate over all the roles for the file plan and construct models - Set roles = this.rmSecurityService.getRoles(rmRootNode); + Set roles = this.filePlanRoleService.getRoles(rmRootNode); for (Role role : roles) { // get or create the RoleModel object for current role diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRoleDelete.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRoleDelete.java index 0f0fa50180..20c66be130 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRoleDelete.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRoleDelete.java @@ -23,15 +23,15 @@ import java.util.List; import java.util.Map; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; import org.alfresco.service.cmr.repository.NodeRef; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; /** * @@ -44,11 +44,11 @@ public class RmRoleDelete extends DeclarativeWebScript private static Log logger = LogFactory.getLog(RmRoleDelete.class); private RecordsManagementService rmService; - private RecordsManagementSecurityService rmSecurityService; + private FilePlanRoleService filePlanRoleService; - public void setRecordsManagementSecurityService(RecordsManagementSecurityService rmSecurityService) + public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) { - this.rmSecurityService = rmSecurityService; + this.filePlanRoleService = filePlanRoleService; } public void setRecordsManagementService(RecordsManagementService rmService) @@ -73,12 +73,12 @@ public class RmRoleDelete extends DeclarativeWebScript NodeRef root = roots.get(0); // Check that the role exists - if (rmSecurityService.existsRole(root, roleParam) == false) + if (filePlanRoleService.existsRole(root, roleParam) == false) { throw new WebScriptException(Status.STATUS_NOT_FOUND, "The role " + roleParam + " does not exist on the records managment root " + root); } - rmSecurityService.deleteRole(root, roleParam); + filePlanRoleService.deleteRole(root, roleParam); return model; } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRoleGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRoleGet.java index 85e008cf55..be10a6ec37 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRoleGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRoleGet.java @@ -23,15 +23,15 @@ import java.util.List; import java.util.Map; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; import org.alfresco.service.cmr.repository.NodeRef; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; /** * @@ -44,11 +44,11 @@ public class RmRoleGet extends DeclarativeWebScript private static Log logger = LogFactory.getLog(RmRoleGet.class); private RecordsManagementService rmService; - private RecordsManagementSecurityService rmSecurityService; + private FilePlanRoleService filePlanRoleService; - public void setRecordsManagementSecurityService(RecordsManagementSecurityService rmSecurityService) + public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) { - this.rmSecurityService = rmSecurityService; + this.filePlanRoleService = filePlanRoleService; } public void setRecordsManagementService(RecordsManagementService rmService) @@ -75,12 +75,12 @@ public class RmRoleGet extends DeclarativeWebScript NodeRef root = roots.get(0); // Check that the role exists - if (rmSecurityService.existsRole(root, roleParam) == false) + if (filePlanRoleService.existsRole(root, roleParam) == false) { throw new WebScriptException(Status.STATUS_NOT_FOUND, "The role " + roleParam + " does not exist on the records managment root " + root); } - model.put("role", rmSecurityService.getRole(root, roleParam)); + model.put("role", filePlanRoleService.getRole(root, roleParam)); return model; } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRolePut.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRolePut.java index 7be59a5aec..b32510ec48 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRolePut.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRolePut.java @@ -28,8 +28,8 @@ import java.util.Set; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; import org.alfresco.module.org_alfresco_module_rm.capability.Capability; import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; -import org.alfresco.module.org_alfresco_module_rm.security.Role; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; +import org.alfresco.module.org_alfresco_module_rm.role.Role; import org.alfresco.service.cmr.repository.NodeRef; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -54,12 +54,12 @@ public class RmRolePut extends DeclarativeWebScript private static Log logger = LogFactory.getLog(RmRolePut.class); private RecordsManagementService rmService; - private RecordsManagementSecurityService rmSecurityService; private CapabilityService capabilityService; + private FilePlanRoleService filePlanRoleService; - public void setRecordsManagementSecurityService(RecordsManagementSecurityService rmSecurityService) + public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) { - this.rmSecurityService = rmSecurityService; + this.filePlanRoleService = filePlanRoleService; } public void setRecordsManagementService(RecordsManagementService rmService) @@ -105,12 +105,12 @@ public class RmRolePut extends DeclarativeWebScript NodeRef root = roots.get(0); // Check that the role exists - if (rmSecurityService.existsRole(root, roleParam) == false) + if (filePlanRoleService.existsRole(root, roleParam) == false) { throw new WebScriptException(Status.STATUS_NOT_FOUND, "The role " + roleParam + " does not exist on the records managment root " + root); } - Role role = rmSecurityService.updateRole(root, name, displayLabel, capabilites); + Role role = filePlanRoleService.updateRole(root, name, displayLabel, capabilites); model.put("role", role); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRolesGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRolesGet.java index 3e920deae0..69cf04da03 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRolesGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRolesGet.java @@ -25,69 +25,70 @@ import java.util.Map; import java.util.Set; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; -import org.alfresco.module.org_alfresco_module_rm.security.Role; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; +import org.alfresco.module.org_alfresco_module_rm.role.Role; import org.alfresco.service.cmr.repository.NodeRef; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; /** * Get information about record management roles - * + * * @author Roy Wetherall */ public class RmRolesGet extends DeclarativeWebScript { - @SuppressWarnings("unused") - private static Log logger = LogFactory.getLog(RmRolesGet.class); + @SuppressWarnings("unused") + private static Log logger = LogFactory.getLog(RmRolesGet.class); - private RecordsManagementService rmService; - private RecordsManagementSecurityService rmSecurityService; + private RecordsManagementService rmService; - public void setRecordsManagementSecurityService(RecordsManagementSecurityService rmSecurityService) - { - this.rmSecurityService = rmSecurityService; - } + private FilePlanRoleService filePlanRoleService; - public void setRecordsManagementService(RecordsManagementService rmService) - { - this.rmService = rmService; - } + public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) + { + this.filePlanRoleService = filePlanRoleService; + } - @Override - public Map executeImpl(WebScriptRequest req, Status status, Cache cache) - { - Map model = new HashMap(); - Set roles = null; + public void setRecordsManagementService(RecordsManagementService rmService) + { + this.rmService = rmService; + } - // TODO should be passed - List roots = rmService.getFilePlans(); - if (roots != null && roots.size() > 0) - { - NodeRef root = roots.get(0); + @Override + public Map executeImpl(WebScriptRequest req, Status status, Cache cache) + { + Map model = new HashMap(); + Set roles = null; - // Get the user filter - String user = req.getParameter("user"); - if (user != null && user.length() != 0) - { - roles = rmSecurityService.getRolesByUser(root, user); - } - else - { - roles = rmSecurityService.getRoles(root); - } - } - else - { - roles = new HashSet(1); - } + // TODO should be passed + List roots = rmService.getFilePlans(); + if (roots != null && roots.size() > 0) + { + NodeRef root = roots.get(0); - model.put("roles", roles); + // Get the user filter + String user = req.getParameter("user"); + if (user != null && user.length() != 0) + { + roles = filePlanRoleService.getRolesByUser(root, user); + } + else + { + roles = filePlanRoleService.getRoles(root); + } + } + else + { + roles = new HashSet(1); + } - return model; + model.put("roles", roles); + + return model; } } \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRolesPost.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRolesPost.java index 9155904703..09980eee6b 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRolesPost.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/admin/RmRolesPost.java @@ -28,8 +28,8 @@ import java.util.Set; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; import org.alfresco.module.org_alfresco_module_rm.capability.Capability; import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; -import org.alfresco.module.org_alfresco_module_rm.security.Role; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; +import org.alfresco.module.org_alfresco_module_rm.role.Role; import org.alfresco.service.cmr.repository.NodeRef; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -54,12 +54,12 @@ public class RmRolesPost extends DeclarativeWebScript private static Log logger = LogFactory.getLog(RmRolesPost.class); private RecordsManagementService rmService; - private RecordsManagementSecurityService rmSecurityService; + private FilePlanRoleService filePlanRoleService; private CapabilityService capabilityService; - public void setRecordsManagementSecurityService(RecordsManagementSecurityService rmSecurityService) + public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService) { - this.rmSecurityService = rmSecurityService; + this.filePlanRoleService = filePlanRoleService; } public void setRecordsManagementService(RecordsManagementService rmService) @@ -96,7 +96,7 @@ public class RmRolesPost extends DeclarativeWebScript List roots = rmService.getFilePlans(); NodeRef root = roots.get(0); - Role role = rmSecurityService.createRole(root, name, displayString, capabilites); + Role role = filePlanRoleService.createRole(root, name, displayString, capabilites); //Set roles = rmSecurityService.getRoles(root); model.put("role", role); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/capabilities/CompositeCapabilityTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/capabilities/CompositeCapabilityTest.java index 263ab13516..7b66ab33e2 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/capabilities/CompositeCapabilityTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/capabilities/CompositeCapabilityTest.java @@ -85,7 +85,7 @@ public class CompositeCapabilityTest extends BaseRMTestCase // Give all the users file permission objects for (String user : testUsers) { - securityService.setPermission(rmContainer, user, RMPermissionModel.FILING); + filePlanPermissionService.setPermission(rmContainer, user, RMPermissionModel.FILING); } } diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/capabilities/DeclarativeCapabilityTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/capabilities/DeclarativeCapabilityTest.java index 9b3df0110e..0ee94a85d7 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/capabilities/DeclarativeCapabilityTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/capabilities/DeclarativeCapabilityTest.java @@ -32,7 +32,7 @@ import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; import org.alfresco.module.org_alfresco_module_rm.capability.declarative.CapabilityCondition; import org.alfresco.module.org_alfresco_module_rm.capability.declarative.CompositeCapability; import org.alfresco.module.org_alfresco_module_rm.capability.declarative.DeclarativeCapability; -import org.alfresco.module.org_alfresco_module_rm.security.Role; +import org.alfresco.module.org_alfresco_module_rm.role.Role; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; @@ -134,9 +134,9 @@ public class DeclarativeCapabilityTest extends BaseRMTestCase // Give all the users file permission objects for (String user : testUsers) { - securityService.setPermission(rmFolder, user, RMPermissionModel.FILING); - securityService.setPermission(moveToFolder, user, RMPermissionModel.READ_RECORDS); - securityService.setPermission(moveToCategory, user, RMPermissionModel.READ_RECORDS); + filePlanPermissionService.setPermission(rmFolder, user, RMPermissionModel.FILING); + filePlanPermissionService.setPermission(moveToFolder, user, RMPermissionModel.READ_RECORDS); + filePlanPermissionService.setPermission(moveToCategory, user, RMPermissionModel.READ_RECORDS); } } @@ -177,7 +177,7 @@ public class DeclarativeCapabilityTest extends BaseRMTestCase { AccessStatus accessStatus = capability.hasPermission(filePlanComponent); - Set roles = securityService.getRolesByUser(filePlan, userName); + Set roles = filePlanRoleService.getRolesByUser(filePlan, userName); if (roles.isEmpty() == true) { assertEquals("User " + userName + " has no RM role so we expect access to be denied for capability " + capability.getName(), @@ -339,7 +339,7 @@ public class DeclarativeCapabilityTest extends BaseRMTestCase { for (String user : testUsers) { - securityService.setPermission(moveToFolder, user, RMPermissionModel.FILING); + filePlanPermissionService.setPermission(moveToFolder, user, RMPermissionModel.FILING); } return null; } @@ -435,7 +435,7 @@ public class DeclarativeCapabilityTest extends BaseRMTestCase { for (String user : testUsers) { - securityService.setPermission(moveToCategory, user, RMPermissionModel.FILING); + filePlanPermissionService.setPermission(moveToCategory, user, RMPermissionModel.FILING); } return null; } diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/security/MethodSecurityTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/security/MethodSecurityTest.java index f0693b44f3..ae7c92a4ab 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/security/MethodSecurityTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/security/MethodSecurityTest.java @@ -18,11 +18,8 @@ */ package org.alfresco.module.org_alfresco_module_rm.test.security; -import java.net.URL; - import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; -import org.apache.log4j.PropertyConfigurator; /** * Tests method level security of core alfresco services. @@ -66,7 +63,7 @@ public class MethodSecurityTest extends BaseRMTestCase implements RMPermissionMo @Override public Void run() { - securityService.setPermission(rmContainer, rmUserName, READ_RECORDS); + filePlanPermissionService.setPermission(rmContainer, rmUserName, READ_RECORDS); return null; } diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/RecordsManagementAuditServiceImplTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/RecordsManagementAuditServiceImplTest.java index 982e230b8d..c351a2c2bf 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/RecordsManagementAuditServiceImplTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/RecordsManagementAuditServiceImplTest.java @@ -134,8 +134,8 @@ public class RecordsManagementAuditServiceImplTest extends BaseRMTestCase // Give all the users file permission objects for (String user : testUsers) { - securityService.setPermission(filePlan, user, FILING); - securityService.setPermission(rmContainer, user, FILING); + filePlanPermissionService.setPermission(filePlan, user, FILING); + filePlanPermissionService.setPermission(rmContainer, user, FILING); } } diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/RecordsManagementSearchServiceImplTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/RecordsManagementSearchServiceImplTest.java index 085ef35879..5edf2b2428 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/RecordsManagementSearchServiceImplTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/RecordsManagementSearchServiceImplTest.java @@ -32,6 +32,7 @@ import org.alfresco.util.TestWithUserUtils; * * @author Roy Wetherall */ +@SuppressWarnings("unused") public class RecordsManagementSearchServiceImplTest extends BaseRMTestCase { @Override @@ -50,7 +51,7 @@ public class RecordsManagementSearchServiceImplTest extends BaseRMTestCase private NodeRef folderLevelRecordFolder; private NodeRef recordLevelRecordFolder; - + private NodeRef recordOne; private NodeRef recordTwo; private NodeRef recordThree; diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/system/NotificationServiceHelperSystemTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/system/NotificationServiceHelperSystemTest.java index dbdcc71dc3..d6efc9ab7b 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/system/NotificationServiceHelperSystemTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/system/NotificationServiceHelperSystemTest.java @@ -23,7 +23,7 @@ import java.util.ArrayList; import java.util.List; import org.alfresco.module.org_alfresco_module_rm.notification.RecordsManagementNotificationHelper; -import org.alfresco.module.org_alfresco_module_rm.security.Role; +import org.alfresco.module.org_alfresco_module_rm.role.Role; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; @@ -92,7 +92,7 @@ public class NotificationServiceHelperSystemTest extends BaseRMTestCase person = personService.createPerson(props); // Find the authority for the given role - Role role = securityService.getRole(filePlan, NOTIFICATION_ROLE); + Role role = filePlanRoleService.getRole(filePlan, NOTIFICATION_ROLE); assertNotNull("Notification role could not be retrieved", role); String roleGroup = role.getRoleGroupName(); assertNotNull("Notification role group can not be null.", roleGroup); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java index 849ce34036..caa5d648f1 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java @@ -36,8 +36,9 @@ import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RmSiteType; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchService; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; +import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService; import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService; import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; @@ -122,7 +123,8 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase protected RecordsManagementAdminService adminService; protected RecordsManagementActionService actionService; protected RecordsManagementSearchService rmSearchService; - protected RecordsManagementSecurityService securityService; + protected FilePlanRoleService filePlanRoleService; + protected FilePlanPermissionService filePlanPermissionService; protected CapabilityService capabilityService; protected VitalRecordService vitalRecordService; protected DataSetService dataSetService; @@ -338,7 +340,8 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase adminService = (RecordsManagementAdminService)applicationContext.getBean("RecordsManagementAdminService"); actionService = (RecordsManagementActionService)this.applicationContext.getBean("RecordsManagementActionService"); rmSearchService = (RecordsManagementSearchService)this.applicationContext.getBean("RecordsManagementSearchService"); - securityService = (RecordsManagementSecurityService)this.applicationContext.getBean("RecordsManagementSecurityService"); + filePlanRoleService = (FilePlanRoleService)this.applicationContext.getBean("FilePlanRoleService"); + filePlanPermissionService = (FilePlanPermissionService)this.applicationContext.getBean("FilePlanPermissionService"); capabilityService = (CapabilityService)this.applicationContext.getBean("CapabilityService"); vitalRecordService = (VitalRecordService)this.applicationContext.getBean("VitalRecordService"); dataSetService = (DataSetService) applicationContext.getBean("DataSetService"); @@ -505,23 +508,23 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase rmUserName = GUID.generate(); rmUserPerson = createPerson(rmUserName); - securityService.assignRoleToAuthority(filePlan, "User", rmUserName); + filePlanRoleService.assignRoleToAuthority(filePlan, "User", rmUserName); powerUserName = GUID.generate(); powerUserPerson = createPerson(powerUserName); - securityService.assignRoleToAuthority(filePlan, "PowerUser", powerUserName); + filePlanRoleService.assignRoleToAuthority(filePlan, "PowerUser", powerUserName); securityOfficerName = GUID.generate(); securityOfficerPerson = createPerson(securityOfficerName); - securityService.assignRoleToAuthority(filePlan, "SecurityOfficer", securityOfficerName); + filePlanRoleService.assignRoleToAuthority(filePlan, "SecurityOfficer", securityOfficerName); recordsManagerName = GUID.generate(); recordsManagerPerson = createPerson(recordsManagerName); - securityService.assignRoleToAuthority(filePlan, "RecordsManager", recordsManagerName); + filePlanRoleService.assignRoleToAuthority(filePlan, "RecordsManager", recordsManagerName); rmAdminName = GUID.generate(); rmAdminPerson = createPerson(rmAdminName); - securityService.assignRoleToAuthority(filePlan, "Administrator", rmAdminName); + filePlanRoleService.assignRoleToAuthority(filePlan, "Administrator", rmAdminName); testUsers = new String[] { @@ -538,8 +541,8 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase // Give all the users file permission objects for (String user : testUsers) { - securityService.setPermission(filePlan, user, FILING); - securityService.setPermission(rmContainer, user, FILING); + filePlanPermissionService.setPermission(filePlan, user, FILING); + filePlanPermissionService.setPermission(rmContainer, user, FILING); } } } diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMWebScriptTestCase.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMWebScriptTestCase.java index 50bcd6f5ba..7474c0c690 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMWebScriptTestCase.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMWebScriptTestCase.java @@ -33,8 +33,9 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RmSiteType; +import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchService; -import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; +import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService; import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService; import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; @@ -89,7 +90,8 @@ public class BaseRMWebScriptTestCase extends BaseWebScriptTest protected RecordsManagementAdminService adminService; protected RecordsManagementActionService actionService; protected RecordsManagementSearchService rmSearchService; - protected RecordsManagementSecurityService securityService; + protected FilePlanRoleService filePlanRoleService; + protected FilePlanPermissionService filePlanPermissionService; protected RecordsManagementAuditService auditService; protected CapabilityService capabilityService; protected VitalRecordService vitalRecordService; @@ -148,7 +150,8 @@ public class BaseRMWebScriptTestCase extends BaseWebScriptTest adminService = (RecordsManagementAdminService)applicationContext.getBean("RecordsManagementAdminService"); actionService = (RecordsManagementActionService)applicationContext.getBean("RecordsManagementActionService"); rmSearchService = (RecordsManagementSearchService)applicationContext.getBean("RecordsManagementSearchService"); - securityService = (RecordsManagementSecurityService)applicationContext.getBean("RecordsManagementSecurityService"); + filePlanRoleService = (FilePlanRoleService)applicationContext.getBean("FilePlanRoleService"); + filePlanPermissionService = (FilePlanPermissionService)applicationContext.getBean("FilePlanPermissionService"); auditService = (RecordsManagementAuditService)applicationContext.getBean("RecordsManagementAuditService"); capabilityService = (CapabilityService)applicationContext.getBean("CapabilityService"); vitalRecordService = (VitalRecordService)applicationContext.getBean("VitalRecordService"); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/webscript/RMCaveatConfigScriptTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/webscript/RMCaveatConfigScriptTest.java index c7e17a2ba6..924e955e60 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/webscript/RMCaveatConfigScriptTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/webscript/RMCaveatConfigScriptTest.java @@ -24,7 +24,6 @@ import java.util.List; import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.caveat.RMCaveatConfigService; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMWebScriptTestCase; -import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.cmr.security.MutableAuthenticationService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.util.PropertyMap; @@ -42,6 +41,7 @@ import org.springframework.extensions.webscripts.TestWebScriptServer.Response; * * @author Mark Rogers */ +@SuppressWarnings("unused") public class RMCaveatConfigScriptTest extends BaseRMWebScriptTestCase { private MutableAuthenticationService authenticationService; @@ -90,7 +90,7 @@ public class RMCaveatConfigScriptTest extends BaseRMWebScriptTestCase JSONObject top = new JSONObject(response.getContentAsString()); System.out.println(response.getContentAsString()); - JSONArray data = top.getJSONArray("data"); + assertNotNull(top.getJSONArray("data")); } /** @@ -167,7 +167,7 @@ public class RMCaveatConfigScriptTest extends BaseRMWebScriptTestCase String constraintName = data.getString("constraintName"); assertNotNull("constraintName is null", constraintName); - JSONArray allowedValues = data.getJSONArray("allowedValues"); +// JSONArray allowedValues = data.getJSONArray("allowedValues"); // assertTrue("values not correct", compare(array, allowedValues)); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/webscript/RoleRestApiTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/webscript/RoleRestApiTest.java index 8658be6bf9..0c9975a7fc 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/webscript/RoleRestApiTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/webscript/RoleRestApiTest.java @@ -38,7 +38,8 @@ import org.springframework.extensions.webscripts.TestWebScriptServer.Response; * * @author Roy Wetherall */ -public class RoleRestApiTest extends BaseRMWebScriptTestCase implements RecordsManagementModel +public class RoleRestApiTest extends BaseRMWebScriptTestCase + implements RecordsManagementModel { protected static final String GET_ROLES_URL = "/api/rma/admin/rmroles"; protected static final String SERVICE_URL_PREFIX = "/alfresco/service"; @@ -50,11 +51,11 @@ public class RoleRestApiTest extends BaseRMWebScriptTestCase implements RecordsM String role2 = GUID.generate(); // Create a couple or roles by hand - securityService.createRole(filePlan, role1, "My Test Role", getListOfCapabilities(5)); - securityService.createRole(filePlan, role2, "My Test Role Too", getListOfCapabilities(5)); + filePlanRoleService.createRole(filePlan, role1, "My Test Role", getListOfCapabilities(5)); + filePlanRoleService.createRole(filePlan, role2, "My Test Role Too", getListOfCapabilities(5)); // Add the admin user to one of the roles - securityService.assignRoleToAuthority(filePlan, role1, "admin"); + filePlanRoleService.assignRoleToAuthority(filePlan, role1, "admin"); try { @@ -103,8 +104,8 @@ public class RoleRestApiTest extends BaseRMWebScriptTestCase implements RecordsM finally { // Clean up - securityService.deleteRole(filePlan, role1); - securityService.deleteRole(filePlan, role2); + filePlanRoleService.deleteRole(filePlan, role1); + filePlanRoleService.deleteRole(filePlan, role2); } } @@ -143,7 +144,7 @@ public class RoleRestApiTest extends BaseRMWebScriptTestCase implements RecordsM } finally { - securityService.deleteRole(filePlan, roleName); + filePlanRoleService.deleteRole(filePlan, roleName); } } @@ -151,7 +152,7 @@ public class RoleRestApiTest extends BaseRMWebScriptTestCase implements RecordsM public void testPutRole() throws Exception { String role1 = GUID.generate(); - securityService.createRole(filePlan, role1, "My Test Role", getListOfCapabilities(5)); + filePlanRoleService.createRole(filePlan, role1, "My Test Role", getListOfCapabilities(5)); try { @@ -189,7 +190,7 @@ public class RoleRestApiTest extends BaseRMWebScriptTestCase implements RecordsM finally { // Clean up - securityService.deleteRole(filePlan, role1); + filePlanRoleService.deleteRole(filePlan, role1); } } @@ -197,7 +198,7 @@ public class RoleRestApiTest extends BaseRMWebScriptTestCase implements RecordsM public void testGetRole() throws Exception { String role1 = GUID.generate(); - securityService.createRole(filePlan, role1, "My Test Role", getListOfCapabilities(5)); + filePlanRoleService.createRole(filePlan, role1, "My Test Role", getListOfCapabilities(5)); try { @@ -222,7 +223,7 @@ public class RoleRestApiTest extends BaseRMWebScriptTestCase implements RecordsM finally { // Clean up - securityService.deleteRole(filePlan, role1); + filePlanRoleService.deleteRole(filePlan, role1); } } @@ -230,11 +231,11 @@ public class RoleRestApiTest extends BaseRMWebScriptTestCase implements RecordsM public void testDeleteRole() throws Exception { String role1 = GUID.generate(); - assertFalse(securityService.existsRole(filePlan, role1)); - securityService.createRole(filePlan, role1, "My Test Role", getListOfCapabilities(5)); - assertTrue(securityService.existsRole(filePlan, role1)); + assertFalse(filePlanRoleService.existsRole(filePlan, role1)); + filePlanRoleService.createRole(filePlan, role1, "My Test Role", getListOfCapabilities(5)); + assertTrue(filePlanRoleService.existsRole(filePlan, role1)); sendRequest(new DeleteRequest(GET_ROLES_URL + "/" + role1),200); - assertFalse(securityService.existsRole(filePlan, role1)); + assertFalse(filePlanRoleService.existsRole(filePlan, role1)); // Bad request sendRequest(new DeleteRequest(GET_ROLES_URL + "/cheese"), 404);