();
+
+ // File plan node reference
+ NodeRef filePlan = filePlanService.getFilePlan(nodeRef);
+ result.put("filePlan", filePlan.toString());
+
+ // Unfiled container node reference
+ NodeRef unfiledRecordContainer = filePlanService.getUnfiledContainer(filePlan);
+ if (unfiledRecordContainer != null)
+ {
+ result.put("unfiledRecordContainer", unfiledRecordContainer.toString());
+ result.put("properties", propertiesToJSON(unfiledRecordContainer, nodeService.getProperties(unfiledRecordContainer), useShortQName));
+ QName type = fileFolderService.getFileInfo(unfiledRecordContainer).getType();
+ result.put("type", useShortQName ? type.toPrefixString(namespaceService) : type.toString());
+ }
+
+ return result;
+ }
+ });
+
+ rmNodeValues.putAll(values);
// Set the indicators array
setIndicators(rmNodeValues, nodeRef);
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v23/RMv23RecordContributorsGroupPatch.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v23/RMv23RecordContributorsGroupPatch.java
new file mode 100644
index 0000000000..ab9d387b53
--- /dev/null
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v23/RMv23RecordContributorsGroupPatch.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2005-2014 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.patch.v23;
+
+import org.alfresco.module.org_alfresco_module_rm.bootstrap.RecordContributorsGroupBootstrapComponent;
+import org.alfresco.module.org_alfresco_module_rm.patch.AbstractModulePatch;
+
+/**
+ * RM v2.3 patch that creates the record contributors group.
+ *
+ * @author Roy Wetherall
+ * @since 2.3
+ */
+public class RMv23RecordContributorsGroupPatch extends AbstractModulePatch
+{
+ /** record contributors group bootstrap component */
+ private RecordContributorsGroupBootstrapComponent recordContributorsGroupBootstrapComponent;
+
+ /**
+ * @param recordContributorsGroupBootstrapComponent record contributors group bootstrap component
+ */
+ public void setRecordContributorsGroupBootstrapComponent(RecordContributorsGroupBootstrapComponent recordContributorsGroupBootstrapComponent)
+ {
+ this.recordContributorsGroupBootstrapComponent = recordContributorsGroupBootstrapComponent;
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.patch.AbstractModulePatch#applyInternal()
+ */
+ @Override
+ public void applyInternal()
+ {
+ // create record contributors group
+ recordContributorsGroupBootstrapComponent.createRecordContributorsGroup();
+ }
+
+}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/FilePlanPermissionService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/FilePlanPermissionService.java
index 18ff94f3e4..a34b4b7da5 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/FilePlanPermissionService.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/FilePlanPermissionService.java
@@ -29,8 +29,9 @@ import org.alfresco.service.cmr.repository.NodeRef;
public interface FilePlanPermissionService
{
/**
+ * Setup permissions for a record category
*
- * @param nodeRef
+ * @param nodeRef record category node reference
*/
void setupRecordCategoryPermissions(NodeRef recordCategory);
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/util/AuthenticationUtil.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/util/AuthenticationUtil.java
index d40dd28420..ab38e037fc 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/util/AuthenticationUtil.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/util/AuthenticationUtil.java
@@ -69,7 +69,7 @@ public class AuthenticationUtil
/**
* Helper method that gets the admin user name.
*
- * Usefule when testing using mocks.
+ * Useful when testing using mocks.
*
* @see org.alfresco.repo.security.authentication.AuthenticationUtil#getAdminUserName()
*/
@@ -77,5 +77,14 @@ public class AuthenticationUtil
{
return org.alfresco.repo.security.authentication.AuthenticationUtil.getAdminUserName();
}
-
+
+ /**
+ * Helper method that gets the system user name.
+ *
+ * @see org.alfresco.repo.security.authentication.AuthenticationUtil#getSystemUserName()
+ */
+ public String getSystemUserName()
+ {
+ return org.alfresco.repo.security.authentication.AuthenticationUtil.getSystemUserName();
+ }
}
diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/bootstrap/BootstrapImporterModuleComponentUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/bootstrap/BootstrapImporterModuleComponentUnitTest.java
new file mode 100644
index 0000000000..102304dd1e
--- /dev/null
+++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/bootstrap/BootstrapImporterModuleComponentUnitTest.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2005-2014 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.bootstrap;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import org.alfresco.module.org_alfresco_module_rm.patch.ModulePatchExecuter;
+import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest;
+import org.alfresco.repo.importer.ImporterBootstrap;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.StoreRef;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+
+/**
+ * Bootstrap importer module component unit test
+ *
+ * @author Roy Wetherall
+ * @since 2.3
+ */
+public class BootstrapImporterModuleComponentUnitTest extends BaseUnitTest
+{
+ /** RM config node */
+ private static final NodeRef configNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, "rm_config_folder");
+
+ /** mocks */
+ @Mock(name="importer") private ImporterBootstrap mockedImporter;
+ @Mock(name="modulePatchExecuter") private ModulePatchExecuter mockedModulePatchExecuter;
+ @Mock(name="recordContributorsGroupBootstrapComponent") private RecordContributorsGroupBootstrapComponent mockedRecordContributorsGroupBootstrapComponent;
+
+ /** importer */
+ @InjectMocks
+ private BootstrapImporterModuleComponent importer;
+
+ /**
+ * Given that the system has already been bootstraped
+ * When I try and boostrap the system
+ * Then the system is not bootstraped again
+ */
+ @Test
+ public void alreadyBootstraped() throws Throwable
+ {
+ // config node exists
+ doReturn(true).when(mockedNodeService).exists(configNodeRef);
+
+ // boostrap
+ importer.executeInternal();
+
+ // not bootstraped
+ verify(mockedImporter, never()).bootstrap();
+ verify(mockedModulePatchExecuter, never()).initSchemaVersion();
+ verify(mockedRecordContributorsGroupBootstrapComponent, never()).createRecordContributorsGroup();
+ }
+
+ /**
+ * Given that the system has not been bootstraped
+ * When I try and bootstrap the system
+ * Then the system is bootstraped
+ */
+ @Test
+ public void boostrap() throws Throwable
+ {
+ // config node does not exist
+ doReturn(false).when(mockedNodeService).exists(configNodeRef);
+
+ // boostrap
+ importer.executeInternal();
+
+ // not bootstraped
+ verify(mockedImporter, times(1)).bootstrap();
+ verify(mockedModulePatchExecuter, times(1)).initSchemaVersion();
+ verify(mockedRecordContributorsGroupBootstrapComponent, times(1)).createRecordContributorsGroup();
+ }
+}
diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/bootstrap/RecordContributorsGroupBootstrapComponentUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/bootstrap/RecordContributorsGroupBootstrapComponentUnitTest.java
new file mode 100644
index 0000000000..48f1d3315c
--- /dev/null
+++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/bootstrap/RecordContributorsGroupBootstrapComponentUnitTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2005-2014 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.bootstrap;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+
+import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest;
+import org.alfresco.service.cmr.security.AuthorityType;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+
+/**
+ * Record contributors group bootstrap component unit test
+ *
+ * @author Roy Wetherall
+ * @since 2.3
+ */
+public class RecordContributorsGroupBootstrapComponentUnitTest extends BaseUnitTest
+{
+ @InjectMocks
+ private RecordContributorsGroupBootstrapComponent component;
+
+ /**
+ * Given that the record contributors group already exists
+ * When I try and create the group
+ * Then nothing happens
+ */
+ @Test
+ public void groupAlreadyExists()
+ {
+ // group already exists
+ doReturn(true).when(mockedAuthorityService).authorityExists(RecordContributorsGroupBootstrapComponent.GROUP_RECORD_CONTRIBUTORS);
+
+ // create group
+ component.createRecordContributorsGroup();
+
+ // group not created
+ verify(mockedAuthorityService, times(1)).authorityExists(RecordContributorsGroupBootstrapComponent.GROUP_RECORD_CONTRIBUTORS);
+ verifyNoMoreInteractions(mockedAuthorityService);
+ }
+
+ /**
+ * Given that the record contributors group does not exist
+ * When I try and create the group
+ * Then the group is successfully created
+ * And 'everyone' is added to the new group
+ */
+ @Test
+ public void createGroup()
+ {
+ // group does not exists
+ doReturn(false).when(mockedAuthorityService).authorityExists(RecordContributorsGroupBootstrapComponent.GROUP_RECORD_CONTRIBUTORS);
+
+ // create group
+ component.createRecordContributorsGroup();
+
+ // group not created
+ verify(mockedAuthorityService, times(1)).createAuthority(AuthorityType.GROUP, RecordContributorsGroupBootstrapComponent.RECORD_CONTRIBUTORS);
+ verify(mockedAuthorityService, times(1)).addAuthority(RecordContributorsGroupBootstrapComponent.GROUP_RECORD_CONTRIBUTORS, "admin");
+ verify(mockedAuthorityService, times(1)).authorityExists(RecordContributorsGroupBootstrapComponent.GROUP_RECORD_CONTRIBUTORS);
+ verifyNoMoreInteractions(mockedAuthorityService);
+ }
+
+}
diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/AllUnitTestSuite.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/AllUnitTestSuite.java
index b71c8ee56e..7bdde55429 100644
--- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/AllUnitTestSuite.java
+++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/AllUnitTestSuite.java
@@ -19,6 +19,8 @@
package org.alfresco.module.org_alfresco_module_rm.test;
import org.alfresco.module.org_alfresco_module_rm.action.impl.FileReportActionUnitTest;
+import org.alfresco.module.org_alfresco_module_rm.bootstrap.BootstrapImporterModuleComponentUnitTest;
+import org.alfresco.module.org_alfresco_module_rm.bootstrap.RecordContributorsGroupBootstrapComponentUnitTest;
import org.alfresco.module.org_alfresco_module_rm.capability.declarative.condition.HoldCapabilityConditionUnitTest;
import org.alfresco.module.org_alfresco_module_rm.forms.RecordsManagementTypeFormFilterUnitTest;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServiceImplUnitTest;
@@ -81,7 +83,11 @@ import org.junit.runners.Suite.SuiteClasses;
// recorded version config
RecordedVersionConfigGetTest.class,
- RecordedVersionConfigPostTest.class
+ RecordedVersionConfigPostTest.class,
+
+ // bootstrap
+ BootstrapImporterModuleComponentUnitTest.class,
+ RecordContributorsGroupBootstrapComponentUnitTest.class
})
public class AllUnitTestSuite
{