ALF-3885: find multiple class behaviours through (super-)class hierarchy (not just first) - warning: pls review/test your registered (super-)class behaviours

Merged BRANCHES/DEV/WORKP1 to HEAD
        21224: ALF-3885: find multiple class behaviours through type hierarchy (not just first)
        21249: ALF-3885: follow-on to r21224 (to fix PersonServiceTest.testSplitDuplicates)


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21253 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jan Vonka
2010-07-19 08:34:35 +00:00
parent 5d2a5e23cf
commit 5db5f0a1a6
4 changed files with 34 additions and 29 deletions

View File

@@ -300,6 +300,9 @@
<property name="policyComponent">
<ref bean="policyComponent"/>
</property>
<property name="policyBehaviourFilter">
<ref bean="policyBehaviourFilter" />
</property>
<property name="personCache">
<ref bean="personCache" />
</property>

View File

@@ -91,6 +91,7 @@ import org.alfresco.service.namespace.QName;
/* (non-Javadoc)
* @see org.alfresco.repo.policy.BehaviourIndex#getAll()
*/
@SuppressWarnings("unchecked")
public Collection<BehaviourDefinition> getAll()
{
lock.readLock().lock();
@@ -134,17 +135,14 @@ import org.alfresco.service.namespace.QName;
{
// Find class behaviour by scanning up the class hierarchy
List<BehaviourDefinition<B>> behaviour = null;
while(behaviour == null && binding != null)
while (binding != null)
{
behaviour = classMap.get(binding);
if (behaviour == null)
{
binding = (B)binding.generaliseBinding();
}
}
if (behaviour != null)
{
behaviours.addAll(behaviour);
behaviours.addAll(0, behaviour); // note: list base/generalised before extended/specific
}
binding = (B)binding.generaliseBinding();
}
}

View File

@@ -225,14 +225,14 @@ public class PolicyComponentTest extends TestCase
// Test NOOP Policy delegate
Collection<TestClassPolicy> 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<TestClassPolicy> 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<TestClassPolicy> 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<TestClassPolicy> 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<TestPropertyPolicy> 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<TestPropertyPolicy> 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<TestPropertyPolicy> 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<TestAssociationPolicy> 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<TestAssociationPolicy> 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);
}

View File

@@ -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;
@@ -115,6 +116,8 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per
private PolicyComponent policyComponent;
private BehaviourFilter policyBehaviourFilter;
private boolean createMissingPeople;
private static Set<QName> mutableProperties;
@@ -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<String, Set<NodeRef>> personCache;
@@ -190,17 +190,16 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per
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
@@ -955,6 +954,11 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per
this.policyComponent = policyComponent;
}
public void setPolicyBehaviourFilter(BehaviourFilter policyBehaviourFilter)
{
this.policyBehaviourFilter = policyBehaviourFilter;
}
public void setStoreUrl(String storeUrl)
{
this.storeRef = new StoreRef(storeUrl);