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)
{