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 c19cdd615b..e8c4868a69 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
@@ -416,18 +416,85 @@
-
+
+
+
+
+
+
+ org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${server.transaction.mode.default}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -970,7 +1037,7 @@
-
+
@@ -978,7 +1045,7 @@
-
+
@@ -991,7 +1058,7 @@
- org.alfresco.module.org_alfresco_module_rm.disposableitem.RecordService
+ org.alfresco.module.org_alfresco_module_rm.record.RecordService
@@ -1029,13 +1096,13 @@
diff --git a/rm-server/source/compatibility/org/alfresco/module/org_alfresco_module_rm/security/Role.java b/rm-server/source/compatibility/org/alfresco/module/org_alfresco_module_rm/security/Role.java
new file mode 100644
index 0000000000..6bcff592f4
--- /dev/null
+++ b/rm-server/source/compatibility/org/alfresco/module/org_alfresco_module_rm/security/Role.java
@@ -0,0 +1,64 @@
+/*
+ * 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.security;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.alfresco.module.org_alfresco_module_rm.capability.Capability;
+
+/**
+ * Records management role class
+ *
+ * @author Roy Wetherall
+ *
+ * @deprecated As of release 2.1, see {@link org.alfresco.module.org_alfresco_module_rm.role.Role}
+ */
+public class Role extends org.alfresco.module.org_alfresco_module_rm.role.Role
+{
+ /**
+ * Compatibility method
+ */
+ public static Role toRole(org.alfresco.module.org_alfresco_module_rm.role.Role role)
+ {
+ return new Role(role.getName(), role.getDisplayLabel(), role.getCapabilities(), role.getRoleGroupName());
+ }
+
+ /**
+ * Compatibility method
+ */
+ public static Set toRoleSet(Set roles)
+ {
+ Set result = new HashSet(roles.size());
+ for (org.alfresco.module.org_alfresco_module_rm.role.Role role : roles)
+ {
+ result.add(Role.toRole(role));
+ }
+ return result;
+ }
+
+ /**
+ * Constructor
+ */
+ @Deprecated
+ public Role(String name, String displayLabel, Set capabilities, String roleGroupName)
+ {
+ super(name, displayLabel, capabilities, roleGroupName);
+ }
+}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementService.java
index 9e8c2abdb3..3703074787 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementService.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementService.java
@@ -23,8 +23,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import org.alfresco.module.org_alfresco_module_rm.disposableitem.RecordService;
import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName;
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 c43e310367..f0e8283cf7 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
@@ -21,10 +21,11 @@ package org.alfresco.module.org_alfresco_module_rm;
import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService;
import org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService;
import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
-import org.alfresco.module.org_alfresco_module_rm.disposableitem.RecordService;
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.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.RecordsManagementSecurityService;
import org.alfresco.service.NotAuditable;
@@ -51,6 +52,7 @@ public interface RecordsManagementServiceRegistry extends ServiceRegistry
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");
/**
* @return records management service
@@ -117,4 +119,10 @@ public interface RecordsManagementServiceRegistry extends ServiceRegistry
*/
@NotAuditable
ExtendedSecurityService getExtendedSecurityService();
+
+ /**
+ * @return file plan role service
+ */
+ @NotAuditable
+ FilePlanRoleService getFilePlanRoleService();
}
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 d46e73b6d6..52dcfde275 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
@@ -21,10 +21,11 @@ package org.alfresco.module.org_alfresco_module_rm;
import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService;
import org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService;
import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
-import org.alfresco.module.org_alfresco_module_rm.disposableitem.RecordService;
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.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.RecordsManagementSecurityService;
import org.alfresco.repo.service.ServiceDescriptorRegistry;
@@ -37,101 +38,110 @@ import org.alfresco.repo.service.ServiceDescriptorRegistry;
public class RecordsManagementServiceRegistryImpl extends ServiceDescriptorRegistry
implements RecordsManagementServiceRegistry
{
- /**
- * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementActionService()
- */
- @Override
- public RecordsManagementActionService getRecordsManagementActionService()
- {
- return (RecordsManagementActionService)getService(RECORDS_MANAGEMENT_ACTION_SERVICE);
- }
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementActionService()
+ */
+ @Override
+ public RecordsManagementActionService getRecordsManagementActionService()
+ {
+ return (RecordsManagementActionService) getService(RECORDS_MANAGEMENT_ACTION_SERVICE);
+ }
- /**
- * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementAdminService()
- */
- @Override
- public RecordsManagementAdminService getRecordsManagementAdminService()
- {
- return (RecordsManagementAdminService)getService(RECORDS_MANAGEMENT_ADMIN_SERVICE);
- }
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementAdminService()
+ */
+ @Override
+ public RecordsManagementAdminService getRecordsManagementAdminService()
+ {
+ return (RecordsManagementAdminService) getService(RECORDS_MANAGEMENT_ADMIN_SERVICE);
+ }
- /**
- * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementEventService()
- */
- @Override
- public RecordsManagementEventService getRecordsManagementEventService()
- {
- return (RecordsManagementEventService)getService(RECORDS_MANAGEMENT_EVENT_SERVICE);
- }
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementEventService()
+ */
+ @Override
+ public RecordsManagementEventService getRecordsManagementEventService()
+ {
+ return (RecordsManagementEventService) getService(RECORDS_MANAGEMENT_EVENT_SERVICE);
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementService()
+ */
+ @Override
+ public RecordsManagementService getRecordsManagementService()
+ {
+ return (RecordsManagementService) getService(RECORDS_MANAGEMENT_SERVICE);
+ }
- /**
- * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementService()
- */
- @Override
- public RecordsManagementService getRecordsManagementService()
- {
- return (RecordsManagementService)getService(RECORDS_MANAGEMENT_SERVICE);
- }
-
/**
* @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordService()
*/
public RecordService getRecordService()
{
- return (RecordService)getService(RECORD_SERVICE);
+ return (RecordService) getService(RECORD_SERVICE);
}
- /**
- * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementSecurityService()
- */
- @Override
- public RecordsManagementSecurityService getRecordsManagementSecurityService()
- {
- return (RecordsManagementSecurityService)getService(RECORDS_MANAGEMENT_SECURITY_SERVICE);
- }
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementSecurityService()
+ */
+ @Override
+ public RecordsManagementSecurityService getRecordsManagementSecurityService()
+ {
+ return (RecordsManagementSecurityService) getService(RECORDS_MANAGEMENT_SECURITY_SERVICE);
+ }
- /**
- * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementAuditService()
- */
- @Override
- public RecordsManagementAuditService getRecordsManagementAuditService()
- {
- return (RecordsManagementAuditService)getService(RECORDS_MANAGEMENT_AUDIT_SERVICE);
- }
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getRecordsManagementAuditService()
+ */
+ @Override
+ public RecordsManagementAuditService getRecordsManagementAuditService()
+ {
+ return (RecordsManagementAuditService) getService(RECORDS_MANAGEMENT_AUDIT_SERVICE);
+ }
- /**
- * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getDictionaryService()
- */
- @Override
- public DispositionService getDispositionService()
- {
- return (DispositionService)getService(DISPOSITION_SERVICE);
- }
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getDictionaryService()
+ */
+ @Override
+ public DispositionService getDispositionService()
+ {
+ return (DispositionService) getService(DISPOSITION_SERVICE);
+ }
- /**
- * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getCapabilityService()
- */
- @Override
- public CapabilityService getCapabilityService()
- {
- return (CapabilityService)getService(CAPABILITY_SERVICE);
- }
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getCapabilityService()
+ */
+ @Override
+ public CapabilityService getCapabilityService()
+ {
+ return (CapabilityService) getService(CAPABILITY_SERVICE);
+ }
- /**
- * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getFreezeService()
- */
- @Override
- public FreezeService getFreezeService()
- {
- return (FreezeService)getService(FREEZE_SERVICE);
- }
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getFreezeService()
+ */
+ @Override
+ public FreezeService getFreezeService()
+ {
+ return (FreezeService) getService(FREEZE_SERVICE);
+ }
- /**
- * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getExtendedSecurityService()
- */
- @Override
- public ExtendedSecurityService getExtendedSecurityService()
- {
- return (ExtendedSecurityService)getService(EXTENDED_SECURITY_SERVICE);
- }
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getExtendedSecurityService()
+ */
+ @Override
+ public ExtendedSecurityService getExtendedSecurityService()
+ {
+ return (ExtendedSecurityService) getService(EXTENDED_SECURITY_SERVICE);
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry#getFilePlanRoleService()
+ */
+ @Override
+ public FilePlanRoleService getFilePlanRoleService()
+ {
+ return (FilePlanRoleService) getService(FILE_PLAN_ROLE_SERVICE);
+ }
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java
index 8445f2bef4..f3b6a56988 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/RMActionExecuterAbstractBase.java
@@ -27,7 +27,6 @@ import java.util.Map;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementAdminService;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
import org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService;
-import org.alfresco.module.org_alfresco_module_rm.disposableitem.RecordService;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionAction;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionActionDefinition;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule;
@@ -38,6 +37,7 @@ import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventSe
import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventType;
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.record.RecordService;
import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService;
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.service.cmr.action.Action;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/CreateRecordAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/CreateRecordAction.java
index cae82f6e79..e405fa0034 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/CreateRecordAction.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/dm/CreateRecordAction.java
@@ -23,8 +23,8 @@ import java.util.List;
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.disposableitem.RecordService;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.repo.action.ParameterDefinitionImpl;
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.service.cmr.action.Action;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/AbstractCapabilityCondition.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/AbstractCapabilityCondition.java
index 912588b833..4d8e8fbc5e 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/AbstractCapabilityCondition.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/AbstractCapabilityCondition.java
@@ -19,9 +19,9 @@
package org.alfresco.module.org_alfresco_module_rm.capability.declarative;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
-import org.alfresco.module.org_alfresco_module_rm.disposableitem.RecordService;
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.record.RecordService;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.PermissionService;
import org.springframework.beans.factory.BeanNameAware;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/CreateCapability.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/CreateCapability.java
index 971f87c018..9c00f2320c 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/CreateCapability.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/CreateCapability.java
@@ -26,7 +26,7 @@ import net.sf.acegisecurity.vote.AccessDecisionVoter;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
import org.alfresco.module.org_alfresco_module_rm.capability.declarative.DeclarativeCapability;
-import org.alfresco.module.org_alfresco_module_rm.disposableitem.RecordService;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.namespace.QName;
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 3377921ded..df2ac18bc9 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
@@ -17,11 +17,11 @@ 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.disposableitem.RecordFolderServiceImpl;
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.repo.security.authentication.AuthenticationUtil;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementFormFilter.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementFormFilter.java
index 167d78367d..5768888b3c 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementFormFilter.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementFormFilter.java
@@ -25,7 +25,7 @@ import java.util.Map;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementAdminService;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry;
-import org.alfresco.module.org_alfresco_module_rm.disposableitem.RecordService;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.repo.forms.Field;
import org.alfresco.repo.forms.FieldGroup;
import org.alfresco.repo.forms.Form;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/BaseEvaluator.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/BaseEvaluator.java
index 92318836d9..c8302ffa1c 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/BaseEvaluator.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/BaseEvaluator.java
@@ -27,9 +27,9 @@ import org.alfresco.module.org_alfresco_module_rm.FilePlanComponentKind;
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.disposableitem.RecordService;
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.record.RecordService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.AccessStatus;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java
index ffec926eed..e94d1a1ae2 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java
@@ -25,7 +25,7 @@ import org.alfresco.module.org_alfresco_module_rm.FilePlanComponentKind;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
-import org.alfresco.module.org_alfresco_module_rm.disposableitem.RecordService;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.security.AccessStatus;
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 7920fd6caa..befe398219 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,6 +28,7 @@ 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.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;
@@ -144,13 +145,13 @@ public class RMv21InPlacePatch extends AbstractModuleComponent
// create the properties map
Map properties = new HashMap(1);
- properties.put(ContentModel.PROP_NAME, RecordsManagementSecurityServiceImpl.NAME_UNFILED_CONTAINER);
+ properties.put(ContentModel.PROP_NAME, FilePlanRoleServiceImpl.NAME_UNFILED_CONTAINER);
// create the unfiled container
NodeRef container = nodeService.createNode(
filePlan,
ASSOC_UNFILED_RECORDS,
- QName.createQName(RM_URI, RecordsManagementSecurityServiceImpl.NAME_UNFILED_CONTAINER),
+ QName.createQName(RM_URI, FilePlanRoleServiceImpl.NAME_UNFILED_CONTAINER),
TYPE_UNFILED_RECORD_CONTAINER,
properties).getChildRef();
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposableitem/RecordService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java
similarity index 94%
rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposableitem/RecordService.java
rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java
index 6a4001b5fd..234b0f1ba4 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposableitem/RecordService.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java
@@ -17,7 +17,7 @@
* along with Alfresco. If not, see .
*/
-package org.alfresco.module.org_alfresco_module_rm.disposableitem;
+package org.alfresco.module.org_alfresco_module_rm.record;
import java.util.Set;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposableitem/RecordServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java
similarity index 97%
rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposableitem/RecordServiceImpl.java
rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java
index 31f0304c01..f9d6cc198a 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposableitem/RecordServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java
@@ -16,7 +16,7 @@
* 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.disposableitem;
+package org.alfresco.module.org_alfresco_module_rm.record;
import java.util.Calendar;
import java.util.Collection;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposableitem/RecordFolderService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/recordfolder/RecordFolderService.java
similarity index 90%
rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposableitem/RecordFolderService.java
rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/recordfolder/RecordFolderService.java
index fa119df470..9ed54bdf32 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposableitem/RecordFolderService.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/recordfolder/RecordFolderService.java
@@ -16,7 +16,7 @@
* 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.disposableitem;
+package org.alfresco.module.org_alfresco_module_rm.recordfolder;
/**
* Record folder service interface
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposableitem/RecordFolderServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/recordfolder/RecordFolderServiceImpl.java
similarity index 95%
rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposableitem/RecordFolderServiceImpl.java
rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/recordfolder/RecordFolderServiceImpl.java
index 2a06648e16..737da325da 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposableitem/RecordFolderServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/recordfolder/RecordFolderServiceImpl.java
@@ -16,7 +16,7 @@
* 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.disposableitem;
+package org.alfresco.module.org_alfresco_module_rm.recordfolder;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule;
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleService.java
new file mode 100644
index 0000000000..ff9c072143
--- /dev/null
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleService.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2005-2012 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.role;
+
+import java.util.Set;
+
+import org.alfresco.module.org_alfresco_module_rm.capability.Capability;
+import org.alfresco.service.cmr.repository.NodeRef;
+
+/**
+ * Role service interface
+ *
+ * @author Roy Wetherall
+ * @since 2.1
+ */
+public interface FilePlanRoleService
+{
+ /**
+ * Returns the name of the container group for all roles of a specified file
+ * plan.
+ *
+ * @param filePlan file plan node reference
+ * @return String group name
+ */
+ String getAllRolesContainerGroup(NodeRef filePlan);
+
+ /**
+ * Get all the available roles for the given records management root node
+ *
+ * @param filePlan file plan
+ * @return
+ */
+ Set getRoles(NodeRef filePlan);
+
+ /**
+ * Gets the roles for a given user
+ *
+ * @param filePlan file plan
+ * @param user user
+ * @return
+ */
+ Set getRolesByUser(NodeRef filePlan, String user);
+
+ /**
+ * Get a role by name
+ *
+ * @param filePlan file plan
+ * @param role role
+ * @return
+ */
+ Role getRole(NodeRef filePlan, String role);
+
+ /**
+ * Indicate whether a role exists for a given records management root node
+ * @param filePlan file plan
+ * @param role role
+ * @return
+ */
+ boolean existsRole(NodeRef filePlan, String role);
+
+ /**
+ * Determines whether the given user has the RM Admin role
+ *
+ * @param filePlan filePlan
+ * @param user user name to check
+ * @return true if the user has the RM Admin role, false otherwise
+ */
+ boolean hasRMAdminRole(NodeRef filePlan, String user);
+
+ /**
+ * Create a new role
+ *
+ * @param filePlan file plan
+ * @param role
+ * @param roleDisplayLabel
+ * @param capabilities
+ * @return
+ */
+ Role createRole(NodeRef filePlan, String role, String roleDisplayLabel, Set capabilities);
+
+ /**
+ * Update an existing role
+ *
+ * @param filePlan file plan
+ * @param role
+ * @param roleDisplayLabel
+ * @param capabilities
+ * @return
+ */
+ Role updateRole(NodeRef filePlan, String role, String roleDisplayLabel, Set capabilities);
+
+ /**
+ * Delete a role
+ *
+ * @param filePlan file plan
+ * @param role role
+ */
+ void deleteRole(NodeRef filePlan, String role);
+
+ /**
+ * Assign a role to an authority
+ *
+ * @param filePlan file plan
+ * @param role role
+ * @param authorityName authority name
+ */
+ void assignRoleToAuthority(NodeRef filePlan, String role, String authorityName);
+}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleServiceImpl.java
new file mode 100644
index 0000000000..e5913077fb
--- /dev/null
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleServiceImpl.java
@@ -0,0 +1,719 @@
+/*
+ * Copyright (C) 2005-2012 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.role;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.alfresco.error.AlfrescoRuntimeException;
+import org.alfresco.model.ContentModel;
+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.capability.RMPermissionModel;
+import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
+import org.alfresco.module.org_alfresco_module_rm.security.ExtendedReaderDynamicAuthority;
+import org.alfresco.repo.node.NodeServicePolicies;
+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.ChildAssociationRef;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.cmr.repository.StoreRef;
+import org.alfresco.service.cmr.security.AccessPermission;
+import org.alfresco.service.cmr.security.AuthorityService;
+import org.alfresco.service.cmr.security.AuthorityType;
+import org.alfresco.service.cmr.security.PermissionService;
+import org.alfresco.service.namespace.QName;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * Role service implementation
+ *
+ * @author Roy Wetherall
+ * @since 2.1
+ */
+public class FilePlanRoleServiceImpl implements FilePlanRoleService,
+ RecordsManagementModel
+{
+ /** Capability service */
+ private CapabilityService capabilityService;
+
+ /** Authority service */
+ private AuthorityService authorityService;
+
+ /** Permission service */
+ private PermissionService permissionService;
+
+ /** Policy component */
+ private PolicyComponent policyComponent;
+
+ /** Record service */
+ private RecordService recordService;
+
+ /** Node service */
+ private NodeService nodeService;
+
+ /** Records management role zone */
+ public static final String RM_ROLE_ZONE_PREFIX = "rmRoleZone";
+
+ /** Unfiled record container name */
+ public static final String NAME_UNFILED_CONTAINER = "Unfiled Records";
+
+ /** Logger */
+ private static Log logger = LogFactory.getLog(FilePlanRoleServiceImpl.class);
+
+ /**
+ * @param capabilityService capability service
+ */
+ public void setCapabilityService(CapabilityService capabilityService)
+ {
+ this.capabilityService = capabilityService;
+ }
+
+ /**
+ * @param authorityService authority service
+ */
+ public void setAuthorityService(AuthorityService authorityService)
+ {
+ this.authorityService = authorityService;
+ }
+
+ /**
+ * @param permissionService permission service
+ */
+ public void setPermissionService(PermissionService permissionService)
+ {
+ this.permissionService = permissionService;
+ }
+
+ /**
+ * @param policyComponent policy component
+ */
+ public void setPolicyComponent(PolicyComponent policyComponent)
+ {
+ this.policyComponent = policyComponent;
+ }
+
+ /**
+ * @param nodeService node service
+ */
+ public void setNodeService(NodeService nodeService)
+ {
+ this.nodeService = nodeService;
+ }
+
+ /**
+ * @param recordService record service
+ */
+ public void setRecordService(RecordService recordService)
+ {
+ this.recordService = recordService;
+ }
+
+ /**
+ * Initialisation method
+ */
+ public void init()
+ {
+ policyComponent.bindClassBehaviour(
+ NodeServicePolicies.OnCreateNodePolicy.QNAME,
+ TYPE_FILE_PLAN,
+ new JavaBehaviour(this, "onCreateRootNode", NotificationFrequency.TRANSACTION_COMMIT));
+ policyComponent.bindClassBehaviour(
+ NodeServicePolicies.OnDeleteNodePolicy.QNAME,
+ TYPE_FILE_PLAN,
+ new JavaBehaviour(this, "onDeleteRootNode", NotificationFrequency.TRANSACTION_COMMIT));
+ }
+
+ /**
+ * Create root node behaviour
+ *
+ * @param childAssocRef
+ */
+ public void onCreateRootNode(ChildAssociationRef childAssocRef)
+ {
+ final NodeRef rmRootNode = childAssocRef.getChildRef();
+
+ // Do not execute behaviour if this has been created in the archive store
+ if(rmRootNode.getStoreRef().equals(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE) == true)
+ {
+ // This is not the spaces store - probably the archive store
+ return;
+ }
+
+ if (nodeService.exists(rmRootNode) == true)
+ {
+ NodeRef unfiledContainer = AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork()
+ {
+ public NodeRef doWork()
+ {
+ // Create "all" role group for root node
+ String allRoles = authorityService.createAuthority(AuthorityType.GROUP, getAllRolesGroupShortName(rmRootNode), "All Roles", null);
+
+ // Set the permissions
+ permissionService.setInheritParentPermissions(rmRootNode, false);
+ permissionService.setPermission(rmRootNode, allRoles, RMPermissionModel.READ_RECORDS, true);
+ permissionService.setPermission(rmRootNode, ExtendedReaderDynamicAuthority.EXTENDED_READER, RMPermissionModel.READ_RECORDS, true);
+ permissionService.setPermission(rmRootNode, ExtendedReaderDynamicAuthority.EXTENDED_READER, RMPermissionModel.VIEW_RECORDS, true);
+
+ // Create the unfiled record container
+ return createUnfiledContainer(rmRootNode, allRoles);
+ }
+ }, AuthenticationUtil.getSystemUserName());
+
+ // Bootstrap in the default set of roles for the newly created root node
+ bootstrapDefaultRoles(rmRootNode, unfiledContainer);
+ }
+ }
+
+ /**
+ * Creates unfiled container node and sets up permissions
+ *
+ * @param rmRootNode
+ * @param allRoles
+ */
+ private NodeRef createUnfiledContainer(NodeRef rmRootNode, String allRoles)
+ {
+ NodeRef container = recordService.getUnfiledContainer(rmRootNode);
+
+ if (container == null)
+ {
+ // create the properties map
+ Map properties = new HashMap(1);
+ properties.put(ContentModel.PROP_NAME, NAME_UNFILED_CONTAINER);
+
+ // create the unfiled container
+ container = nodeService.createNode(
+ rmRootNode,
+ ASSOC_UNFILED_RECORDS,
+ QName.createQName(RM_URI, NAME_UNFILED_CONTAINER),
+ TYPE_UNFILED_RECORD_CONTAINER,
+ properties).getChildRef();
+
+ // set inheritance to false
+ permissionService.setInheritParentPermissions(container, false);
+ permissionService.setPermission(container, allRoles, RMPermissionModel.READ_RECORDS, true);
+ permissionService.setPermission(container, ExtendedReaderDynamicAuthority.EXTENDED_READER, RMPermissionModel.READ_RECORDS, true);
+ }
+
+ return container;
+ }
+
+ /**
+ * Delete root node behaviour
+ *
+ * @param childAssocRef
+ */
+ public void onDeleteRootNode(ChildAssociationRef childAssocRef, boolean isNodeArchived)
+ {
+ logger.debug("onDeleteRootNode called");
+
+ // get the deleted node
+ final NodeRef rmRootNode = childAssocRef.getChildRef();
+
+ AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork