Merge branch 'feature/RM-7035_AddPoliciesForHolds' into feature/RM-7026_Add_HoldCreated_ToAudit

This commit is contained in:
Sara Aspery
2019-10-29 15:01:33 +00:00
10 changed files with 82 additions and 64 deletions

3
.gitignore vendored
View File

@@ -6,6 +6,7 @@
.project .project
.settings .settings
.history .history
*.bak
*.eml *.eml
*.iml *.iml
*.log* *.log*
@@ -16,6 +17,8 @@ build.local.properties
dist dist
explodedDeps explodedDeps
local.properties local.properties
rebel.xml
rebel-remote.xml
target target
test-output test-output

View File

@@ -170,3 +170,10 @@ docker-compose up
> Be aware of the fact that the Share images can not be started independently from Repo > Be aware of the fact that the Share images can not be started independently from Repo
e.g. In order to start an instance of rm-enterprise-repo and rm-enterprise-share, the above command must be run in rm-enterprise-share after the images have been built. e.g. In order to start an instance of rm-enterprise-repo and rm-enterprise-share, the above command must be run in rm-enterprise-share after the images have been built.
## Start the Docker images with jRebel in remote server mode
If you have a license for jRebel then this can be used from the rm-community-share or rm-enterprise-share directories with:
```
docker-compose -f docker-compose.yml -f jrebel-docker-compose.yml --project-name agsdev up --build --force-recreate
```

View File

@@ -592,6 +592,7 @@
<image.registry>quay.io</image.registry> <image.registry>quay.io</image.registry>
<javax-jaxb.version>2.3.0</javax-jaxb.version> <javax-jaxb.version>2.3.0</javax-jaxb.version>
<apache-compress.version>1.19</apache-compress.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
@@ -1120,7 +1121,7 @@
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId> <artifactId>commons-compress</artifactId>
<version>1.18</version> <version>${apache-compress.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.alfresco.maven.plugin</groupId> <groupId>org.alfresco.maven.plugin</groupId>

View File

@@ -5,15 +5,6 @@
http://www.springframework.org/schema/beans/spring-beans.xsd"> http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- I18N -->
<bean id="rmActionResourceBundles" class="org.alfresco.i18n.ResourceBundleBootstrapComponent">
<property name="resourceBundles">
<list>
<value>alfresco.module.org_alfresco_module_rm.messages.actions</value>
</list>
</property>
</bean>
<!-- Declare as Record action --> <!-- Declare as Record action -->
<!-- TODO rename --> <!-- TODO rename -->
<bean id="create-record" parent="action-executer" class="org.alfresco.module.org_alfresco_module_rm.action.dm.CreateRecordAction"> <bean id="create-record" parent="action-executer" class="org.alfresco.module.org_alfresco_module_rm.action.dm.CreateRecordAction">

View File

@@ -64,6 +64,7 @@
<value>alfresco.module.org_alfresco_module_rm.messages.admin-service</value> <value>alfresco.module.org_alfresco_module_rm.messages.admin-service</value>
<value>alfresco.module.org_alfresco_module_rm.messages.records-management-service</value> <value>alfresco.module.org_alfresco_module_rm.messages.records-management-service</value>
<value>alfresco.module.org_alfresco_module_rm.messages.action-service</value> <value>alfresco.module.org_alfresco_module_rm.messages.action-service</value>
<value>alfresco.module.org_alfresco_module_rm.messages.actions</value>
<value>alfresco.module.org_alfresco_module_rm.messages.audit-service</value> <value>alfresco.module.org_alfresco_module_rm.messages.audit-service</value>
<value>alfresco.module.org_alfresco_module_rm.messages.rm-events</value> <value>alfresco.module.org_alfresco_module_rm.messages.rm-events</value>
<value>alfresco.module.org_alfresco_module_rm.messages.capability-service</value> <value>alfresco.module.org_alfresco_module_rm.messages.capability-service</value>

View File

@@ -28,6 +28,7 @@
package org.alfresco.module.org_alfresco_module_rm.hold; package org.alfresco.module.org_alfresco_module_rm.hold;
import static org.alfresco.model.ContentModel.ASPECT_LOCKABLE; import static org.alfresco.model.ContentModel.ASPECT_LOCKABLE;
import static org.alfresco.model.ContentModel.PROP_NAME;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
@@ -41,7 +42,6 @@ import java.util.Set;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementPolicies.BeforeFileRecord;
import org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService; import org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService;
import org.alfresco.module.org_alfresco_module_rm.audit.event.AuditEvent; import org.alfresco.module.org_alfresco_module_rm.audit.event.AuditEvent;
import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService; import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
@@ -253,7 +253,6 @@ public class HoldServiceImpl extends ServiceBaseImpl
transactionalResourceHelper.getSet("frozen").add(frozenNode); transactionalResourceHelper.getSet("frozen").add(frozenNode);
removeFreezeAspect(frozenNode, 1); removeFreezeAspect(frozenNode, 1);
} }
return null; return null;
} }
}; };
@@ -571,10 +570,14 @@ public class HoldServiceImpl extends ServiceBaseImpl
} }
invokeBeforeDeleteHold(hold); invokeBeforeDeleteHold(hold);
String holdName = (String) nodeService.getProperty(hold, PROP_NAME);
Set<QName> classQNames = getTypeAndApsects(hold);
// delete the hold node // delete the hold node
nodeService.deleteNode(hold); nodeService.deleteNode(hold);
//invokeOnDeleteHold(hold); invokeOnDeleteHold(holdName, classQNames);
} }
/** /**
@@ -902,12 +905,15 @@ public class HoldServiceImpl extends ServiceBaseImpl
/** /**
* Invoke onDeleteHold policy * Invoke onDeleteHold policy
* *
* @param nodeRef node reference * @param holdName name of the hold
* @param classQNames hold types and aspects
*/ */
protected void invokeOnDeleteHold(NodeRef nodeRef) protected void invokeOnDeleteHold(String holdName, Set<QName> classQNames)
{ {
// execute policy for node type and aspects // execute policy for node type and aspects
OnDeleteHoldPolicy policy = onDeleteHoldPolicyDelegate.get(getTypeAndApsects(nodeRef)); OnDeleteHoldPolicy policy = onDeleteHoldPolicyDelegate.get(classQNames);
policy.onDeleteHold(nodeRef); policy.onDeleteHold(holdName);
} }
} }

View File

@@ -82,8 +82,8 @@ public interface HoldServicePolicies
/** /**
* Called when a hold is deleted. * Called when a hold is deleted.
* *
* @param hold node reference * @param holdname name of the deleted hold
*/ */
void onDeleteHold(NodeRef hold); void onDeleteHold(String holdname);
} }
} }

View File

@@ -39,9 +39,7 @@ import java.util.Set;
import org.alfresco.module.org_alfresco_module_rm.capability.Capability; import org.alfresco.module.org_alfresco_module_rm.capability.Capability;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies; import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.BeforeCreateHoldPolicy; import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.BeforeCreateHoldPolicy;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.BeforeDeleteHoldPolicy;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.OnCreateHoldPolicy; import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.OnCreateHoldPolicy;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.OnDeleteHoldPolicy;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.module.org_alfresco_module_rm.role.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.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
@@ -150,38 +148,43 @@ public class CreateHoldTest extends BaseRMTestCase implements BeforeCreateHoldPo
public void testPolicyNotificationForCreateHold() throws Exception public void testPolicyNotificationForCreateHold() throws Exception
{ {
doTestInTransaction(new Test<Void>() doBehaviourDrivenTest(new BehaviourDrivenTest()
{ {
private NodeRef hold; BehaviourDefinition<ClassBehaviourBinding> beforeCreateHoldBehaviour;
BehaviourDefinition<ClassBehaviourBinding> onCreateHoldBehaviour;
@Override public void given()
public Void run()
{ {
BehaviourDefinition<ClassBehaviourBinding> beforeCreateHoldBehaviour = policyComponent.bindClassBehaviour( beforeCreateHoldBehaviour = policyComponent.bindClassBehaviour(HoldServicePolicies.BeforeCreateHoldPolicy.BEFORE_CREATE_HOLD,
HoldServicePolicies.BeforeCreateHoldPolicy.BEFORE_CREATE_HOLD, RecordsManagementModel.TYPE_HOLD_CONTAINER, RecordsManagementModel.TYPE_HOLD_CONTAINER,
new JavaBehaviour(CreateHoldTest.this, "beforeCreateHold", NotificationFrequency.EVERY_EVENT)); new JavaBehaviour(CreateHoldTest.this, "beforeCreateHold", NotificationFrequency.EVERY_EVENT));
BehaviourDefinition<ClassBehaviourBinding> onCreateHoldBehaviour = policyComponent.bindClassBehaviour( onCreateHoldBehaviour = policyComponent.bindClassBehaviour(HoldServicePolicies.OnCreateHoldPolicy.ON_CREATE_HOLD,
HoldServicePolicies.OnCreateHoldPolicy.ON_CREATE_HOLD, RecordsManagementModel.TYPE_HOLD, RecordsManagementModel.TYPE_HOLD,
new JavaBehaviour(CreateHoldTest.this, "onCreateHold", NotificationFrequency.EVERY_EVENT)); new JavaBehaviour(CreateHoldTest.this, "onCreateHold", NotificationFrequency.EVERY_EVENT));
assertFalse(beforeCreateHoldFlag); assertFalse(beforeCreateHoldFlag);
assertFalse(onCreateHoldFlag); assertFalse(onCreateHoldFlag);
// Create a hold
hold = holdService.createHold(filePlan, generate(), generate(), generate());
assertTrue(beforeCreateHoldFlag);
assertTrue(onCreateHoldFlag);
//clean up
policyComponent.removeClassDefinition(beforeCreateHoldBehaviour);
policyComponent.removeClassDefinition(onCreateHoldBehaviour);
return null;
} }
}, getAdminUserName()); public void when()
{
// Create a hold
NodeRef hold = holdService.createHold(filePlan, generate(), generate(), generate());
}
public void then()
{
assertTrue(beforeCreateHoldFlag);
assertTrue(onCreateHoldFlag);
}
public void after()
{
policyComponent.removeClassDefinition(beforeCreateHoldBehaviour);
policyComponent.removeClassDefinition(onCreateHoldBehaviour);
}
});
} }

View File

@@ -27,13 +27,11 @@
package org.alfresco.module.org_alfresco_module_rm.test.integration.hold; package org.alfresco.module.org_alfresco_module_rm.test.integration.hold;
import static org.alfresco.repo.security.authentication.AuthenticationUtil.getAdminUserName;
import static org.alfresco.util.GUID.generate; import static org.alfresco.util.GUID.generate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.BeforeDeleteHoldPolicy; import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.BeforeDeleteHoldPolicy;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.OnDeleteHoldPolicy; import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.OnDeleteHoldPolicy;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
@@ -251,39 +249,47 @@ public class DeleteHoldTest extends BaseRMTestCase implements BeforeDeleteHoldPo
public void testPolicyNotificationForDeleteHold() throws Exception public void testPolicyNotificationForDeleteHold() throws Exception
{ {
doTestInTransaction(new Test<Void>() doBehaviourDrivenTest(new BehaviourDrivenTest()
{ {
BehaviourDefinition<ClassBehaviourBinding> beforeDeleteHoldBehaviour;
BehaviourDefinition<ClassBehaviourBinding> onDeleteHoldBehaviour;
NodeRef hold;
@Override public void given()
public Void run()
{ {
BehaviourDefinition<ClassBehaviourBinding> beforeDeleteHoldBehaviour = policyComponent.bindClassBehaviour( beforeDeleteHoldBehaviour = policyComponent.bindClassBehaviour(BeforeDeleteHoldPolicy.BEFORE_DELETE_HOLD,
HoldServicePolicies.BeforeDeleteHoldPolicy.BEFORE_DELETE_HOLD, RecordsManagementModel.TYPE_HOLD, RecordsManagementModel.TYPE_HOLD,
new JavaBehaviour(DeleteHoldTest.this, "beforeDeleteHold", NotificationFrequency.EVERY_EVENT)); new JavaBehaviour(DeleteHoldTest.this, "beforeDeleteHold", NotificationFrequency.EVERY_EVENT));
BehaviourDefinition<ClassBehaviourBinding> onDeleteHoldBehaviour = policyComponent.bindClassBehaviour( onDeleteHoldBehaviour = policyComponent.bindClassBehaviour(OnDeleteHoldPolicy.ON_DELETE_HOLD, RecordsManagementModel.TYPE_HOLD,
HoldServicePolicies.OnDeleteHoldPolicy.ON_DELETE_HOLD, RecordsManagementModel.TYPE_HOLD,
new JavaBehaviour(DeleteHoldTest.this, "onDeleteHold", NotificationFrequency.EVERY_EVENT)); new JavaBehaviour(DeleteHoldTest.this, "onDeleteHold", NotificationFrequency.EVERY_EVENT));
NodeRef hold = holdService.createHold(filePlan, generate(), generate(), generate()); // Create a hold
hold = holdService.createHold(filePlan, generate(), generate(), generate());
assertFalse(beforeDeleteHoldFlag); assertFalse(beforeDeleteHoldFlag);
assertFalse(onDeleteHoldFlag); assertFalse(beforeDeleteHoldFlag);
}
public void when()
{
// Delete the hold // Delete the hold
holdService.deleteHold(hold); holdService.deleteHold(hold);
assertTrue(beforeDeleteHoldFlag);
assertTrue(onDeleteHoldFlag);
//clean up
policyComponent.removeClassDefinition(beforeDeleteHoldBehaviour);
policyComponent.removeClassDefinition(onDeleteHoldBehaviour);
return null;
} }
}, getAdminUserName()); public void then()
{
assertTrue(beforeDeleteHoldFlag);
assertTrue(onDeleteHoldFlag);
}
public void after()
{
policyComponent.removeClassDefinition(beforeDeleteHoldBehaviour);
policyComponent.removeClassDefinition(onDeleteHoldBehaviour);
}
});
} }
@@ -294,7 +300,7 @@ public class DeleteHoldTest extends BaseRMTestCase implements BeforeDeleteHoldPo
} }
@Override @Override
public void onDeleteHold(NodeRef hold) public void onDeleteHold(String holdName)
{ {
onDeleteHoldFlag = true; onDeleteHoldFlag = true;
} }

View File

@@ -314,7 +314,7 @@ public class HoldServiceImplUnitTest extends BaseUnitTest
{ {
// mocks for policies // mocks for policies
doNothing().when(holdService).invokeBeforeDeleteHold(any()); doNothing().when(holdService).invokeBeforeDeleteHold(any());
doNothing().when(holdService).invokeOnDeleteHold(any()); doNothing().when(holdService).invokeOnDeleteHold(any(), any());
// delete hold // delete hold
holdService.deleteHold(hold); holdService.deleteHold(hold);