diff --git a/config/alfresco/authentication-services-context.xml b/config/alfresco/authentication-services-context.xml index 6a6f35832b..512797c653 100644 --- a/config/alfresco/authentication-services-context.xml +++ b/config/alfresco/authentication-services-context.xml @@ -300,6 +300,9 @@ + + + diff --git a/source/java/org/alfresco/repo/policy/ClassBehaviourIndex.java b/source/java/org/alfresco/repo/policy/ClassBehaviourIndex.java index 9e612cf60f..a9bea6d1ce 100644 --- a/source/java/org/alfresco/repo/policy/ClassBehaviourIndex.java +++ b/source/java/org/alfresco/repo/policy/ClassBehaviourIndex.java @@ -91,6 +91,7 @@ import org.alfresco.service.namespace.QName; /* (non-Javadoc) * @see org.alfresco.repo.policy.BehaviourIndex#getAll() */ + @SuppressWarnings("unchecked") public Collection getAll() { lock.readLock().lock(); @@ -129,28 +130,25 @@ import org.alfresco.service.namespace.QName; QName className = binding.getClassQName(); isEnabled = (nodeRef == null) ? filter.isEnabled(className) : filter.isEnabled(nodeRef, className); } - + if (isEnabled) { // Find class behaviour by scanning up the class hierarchy List> behaviour = null; - while(behaviour == null && binding != null) + while (binding != null) { behaviour = classMap.get(binding); - if (behaviour == null) + if (behaviour != null) { - binding = (B)binding.generaliseBinding(); + behaviours.addAll(0, behaviour); // note: list base/generalised before extended/specific } - } - if (behaviour != null) - { - behaviours.addAll(behaviour); + binding = (B)binding.generaliseBinding(); } } // Append all service-level behaviours behaviours.addAll(serviceMap.getAll()); - + return behaviours; } finally diff --git a/source/java/org/alfresco/repo/policy/PolicyComponentTest.java b/source/java/org/alfresco/repo/policy/PolicyComponentTest.java index d54b385240..454a007ac5 100644 --- a/source/java/org/alfresco/repo/policy/PolicyComponentTest.java +++ b/source/java/org/alfresco/repo/policy/PolicyComponentTest.java @@ -225,14 +225,14 @@ public class PolicyComponentTest extends TestCase // Test NOOP Policy delegate Collection basePolicies = delegate.getList(BASE_TYPE); assertNotNull(basePolicies); - assertTrue(basePolicies.size() == 0); + assertEquals(0, basePolicies.size()); TestClassPolicy basePolicy = delegate.get(BASE_TYPE); assertNotNull(basePolicy); // Test single Policy delegate Collection filePolicies = delegate.getList(FILE_TYPE); assertNotNull(filePolicies); - assertTrue(filePolicies.size() == 1); + assertEquals(1, filePolicies.size()); TestClassPolicy filePolicy = delegate.get(FILE_TYPE); assertNotNull(filePolicy); assertEquals(filePolicies.iterator().next(), filePolicy); @@ -244,7 +244,7 @@ public class PolicyComponentTest extends TestCase // Test multi Policy delegate Collection file2Policies = delegate.getList(FILE_TYPE); assertNotNull(file2Policies); - assertTrue(file2Policies.size() == 2); + assertEquals(2, file2Policies.size()); TestClassPolicy filePolicy2 = delegate.get(FILE_TYPE); assertNotNull(filePolicy2); @@ -253,7 +253,7 @@ public class PolicyComponentTest extends TestCase policyComponent.bindClassBehaviour(policyName, FILE_TYPE, file2Behaviour); Collection file3Policies = delegate.getList(FILE_TYPE); assertNotNull(file3Policies); - assertTrue(file3Policies.size() == 3); + assertEquals(3, file3Policies.size()); TestClassPolicy filePolicy3 = delegate.get(FILE_TYPE); assertNotNull(filePolicy3); } @@ -329,7 +329,7 @@ public class PolicyComponentTest extends TestCase String fileResult3 = filePolicy3.test("file"); assertEquals("NewBase: file", fileResult3); TestClassPolicy folderPolicy3 = delegate.get(FOLDER_TYPE); - assertTrue(folderPolicy3 == folderPolicy2); + assertTrue(folderPolicy3 != folderPolicy2); String folderResult3 = folderPolicy3.test("folder"); assertEquals("Folder: folder", folderResult3); @@ -347,7 +347,7 @@ public class PolicyComponentTest extends TestCase String fileResult4 = filePolicy4.test("file"); assertEquals("File: file", fileResult4); TestClassPolicy folderPolicy4 = delegate.get(FOLDER_TYPE); - assertTrue(folderPolicy4 == folderPolicy4); + assertTrue(folderPolicy4 == folderPolicy3); String folderResult4 = folderPolicy4.test("folder"); assertEquals("Folder: folder", folderResult4); } @@ -366,14 +366,14 @@ public class PolicyComponentTest extends TestCase // Test NOOP Policy delegate Collection basePolicies = delegate.getList(BASE_TYPE, BASE_PROP_A); assertNotNull(basePolicies); - assertTrue(basePolicies.size() == 0); + assertEquals(0, basePolicies.size()); TestPropertyPolicy basePolicy = delegate.get(BASE_TYPE, BASE_PROP_A); assertNotNull(basePolicy); // Test single Policy delegate Collection filePolicies = delegate.getList(FILE_TYPE, FILE_PROP_B); assertNotNull(filePolicies); - assertTrue(filePolicies.size() == 1); + assertEquals(1, filePolicies.size()); TestPropertyPolicy filePolicy = delegate.get(FILE_TYPE, FILE_PROP_B); assertNotNull(filePolicy); assertEquals(filePolicies.iterator().next(), filePolicy); @@ -385,7 +385,7 @@ public class PolicyComponentTest extends TestCase // Test multi Policy delegate Collection file2Policies = delegate.getList(FILE_TYPE, FILE_PROP_B); assertNotNull(file2Policies); - assertTrue(file2Policies.size() == 2); + assertEquals(2, file2Policies.size()); TestPropertyPolicy filePolicy2 = delegate.get(FILE_TYPE, FILE_PROP_B); assertNotNull(filePolicy2); } @@ -515,7 +515,7 @@ public class PolicyComponentTest extends TestCase // Test single Policy delegate Collection filePolicies = delegate.getList(FILE_TYPE, BASE_ASSOC_A); assertNotNull(filePolicies); - assertTrue(filePolicies.size() == 1); + assertEquals(1, filePolicies.size()); TestAssociationPolicy filePolicy = delegate.get(FILE_TYPE, BASE_ASSOC_A); assertNotNull(filePolicy); String fileResult = filePolicy.test("file"); @@ -528,7 +528,7 @@ public class PolicyComponentTest extends TestCase // Test multi Policy delegate Collection file2Policies = delegate.getList(FILE_TYPE, BASE_ASSOC_A); assertNotNull(file2Policies); - assertTrue(file2Policies.size() == 2); + assertEquals(2, file2Policies.size()); TestAssociationPolicy filePolicy2 = delegate.get(FILE_TYPE, BASE_ASSOC_A); assertNotNull(filePolicy2); } diff --git a/source/java/org/alfresco/repo/security/person/PersonServiceImpl.java b/source/java/org/alfresco/repo/security/person/PersonServiceImpl.java index 4f64e7368d..b7a0b343e8 100644 --- a/source/java/org/alfresco/repo/security/person/PersonServiceImpl.java +++ b/source/java/org/alfresco/repo/security/person/PersonServiceImpl.java @@ -38,6 +38,7 @@ import org.alfresco.repo.node.NodeServicePolicies; import org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy; import org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy; import org.alfresco.repo.node.NodeServicePolicies.OnUpdatePropertiesPolicy; +import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.repo.policy.JavaBehaviour; import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.security.authentication.AuthenticationException; @@ -114,6 +115,8 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per private HomeFolderManager homeFolderManager; private PolicyComponent policyComponent; + + private BehaviourFilter policyBehaviourFilter; private boolean createMissingPeople; @@ -133,9 +136,6 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per private PermissionsManager permissionsManager; - // Behaviours - JavaBehaviour onUpdatePropertiesBehaviour; - /** a transactionally-safe cache to be injected */ private SimpleCache> personCache; @@ -185,22 +185,21 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per PropertyCheck.mandatory(this, "personCache", personCache); PropertyCheck.mandatory(this, "aclDao", aclDao); PropertyCheck.mandatory(this, "homeFolderManager", homeFolderManager); - + this.policyComponent.bindClassBehaviour( OnCreateNodePolicy.QNAME, ContentModel.TYPE_PERSON, new JavaBehaviour(this, "onCreateNode")); + this.policyComponent.bindClassBehaviour( BeforeDeleteNodePolicy.QNAME, ContentModel.TYPE_PERSON, new JavaBehaviour(this, "beforeDeleteNode")); - onUpdatePropertiesBehaviour = new JavaBehaviour(this, "onUpdateProperties"); - this.policyComponent.bindClassBehaviour( OnUpdatePropertiesPolicy.QNAME, ContentModel.TYPE_PERSON, - onUpdatePropertiesBehaviour); + new JavaBehaviour(this, "onUpdateProperties")); } public UserNameMatcher getUserNameMatcher() @@ -461,7 +460,7 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per { try { - onUpdatePropertiesBehaviour.disable(); + policyBehaviourFilter.disableBehaviour(ContentModel.TYPE_PERSON); if (duplicateMode.equalsIgnoreCase(SPLIT)) { @@ -485,7 +484,7 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per } finally { - onUpdatePropertiesBehaviour.enable(); + policyBehaviourFilter.enableBehaviour(ContentModel.TYPE_PERSON); } // Done @@ -954,6 +953,11 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per { this.policyComponent = policyComponent; } + + public void setPolicyBehaviourFilter(BehaviourFilter policyBehaviourFilter) + { + this.policyBehaviourFilter = policyBehaviourFilter; + } public void setStoreUrl(String storeUrl) {