mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
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:
@@ -300,6 +300,9 @@
|
|||||||
<property name="policyComponent">
|
<property name="policyComponent">
|
||||||
<ref bean="policyComponent"/>
|
<ref bean="policyComponent"/>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="policyBehaviourFilter">
|
||||||
|
<ref bean="policyBehaviourFilter" />
|
||||||
|
</property>
|
||||||
<property name="personCache">
|
<property name="personCache">
|
||||||
<ref bean="personCache" />
|
<ref bean="personCache" />
|
||||||
</property>
|
</property>
|
||||||
|
@@ -91,6 +91,7 @@ import org.alfresco.service.namespace.QName;
|
|||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.alfresco.repo.policy.BehaviourIndex#getAll()
|
* @see org.alfresco.repo.policy.BehaviourIndex#getAll()
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public Collection<BehaviourDefinition> getAll()
|
public Collection<BehaviourDefinition> getAll()
|
||||||
{
|
{
|
||||||
lock.readLock().lock();
|
lock.readLock().lock();
|
||||||
@@ -134,17 +135,14 @@ import org.alfresco.service.namespace.QName;
|
|||||||
{
|
{
|
||||||
// Find class behaviour by scanning up the class hierarchy
|
// Find class behaviour by scanning up the class hierarchy
|
||||||
List<BehaviourDefinition<B>> behaviour = null;
|
List<BehaviourDefinition<B>> behaviour = null;
|
||||||
while(behaviour == null && binding != null)
|
while (binding != null)
|
||||||
{
|
{
|
||||||
behaviour = classMap.get(binding);
|
behaviour = classMap.get(binding);
|
||||||
if (behaviour == null)
|
|
||||||
{
|
|
||||||
binding = (B)binding.generaliseBinding();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (behaviour != null)
|
if (behaviour != null)
|
||||||
{
|
{
|
||||||
behaviours.addAll(behaviour);
|
behaviours.addAll(0, behaviour); // note: list base/generalised before extended/specific
|
||||||
|
}
|
||||||
|
binding = (B)binding.generaliseBinding();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -225,14 +225,14 @@ public class PolicyComponentTest extends TestCase
|
|||||||
// Test NOOP Policy delegate
|
// Test NOOP Policy delegate
|
||||||
Collection<TestClassPolicy> basePolicies = delegate.getList(BASE_TYPE);
|
Collection<TestClassPolicy> basePolicies = delegate.getList(BASE_TYPE);
|
||||||
assertNotNull(basePolicies);
|
assertNotNull(basePolicies);
|
||||||
assertTrue(basePolicies.size() == 0);
|
assertEquals(0, basePolicies.size());
|
||||||
TestClassPolicy basePolicy = delegate.get(BASE_TYPE);
|
TestClassPolicy basePolicy = delegate.get(BASE_TYPE);
|
||||||
assertNotNull(basePolicy);
|
assertNotNull(basePolicy);
|
||||||
|
|
||||||
// Test single Policy delegate
|
// Test single Policy delegate
|
||||||
Collection<TestClassPolicy> filePolicies = delegate.getList(FILE_TYPE);
|
Collection<TestClassPolicy> filePolicies = delegate.getList(FILE_TYPE);
|
||||||
assertNotNull(filePolicies);
|
assertNotNull(filePolicies);
|
||||||
assertTrue(filePolicies.size() == 1);
|
assertEquals(1, filePolicies.size());
|
||||||
TestClassPolicy filePolicy = delegate.get(FILE_TYPE);
|
TestClassPolicy filePolicy = delegate.get(FILE_TYPE);
|
||||||
assertNotNull(filePolicy);
|
assertNotNull(filePolicy);
|
||||||
assertEquals(filePolicies.iterator().next(), filePolicy);
|
assertEquals(filePolicies.iterator().next(), filePolicy);
|
||||||
@@ -244,7 +244,7 @@ public class PolicyComponentTest extends TestCase
|
|||||||
// Test multi Policy delegate
|
// Test multi Policy delegate
|
||||||
Collection<TestClassPolicy> file2Policies = delegate.getList(FILE_TYPE);
|
Collection<TestClassPolicy> file2Policies = delegate.getList(FILE_TYPE);
|
||||||
assertNotNull(file2Policies);
|
assertNotNull(file2Policies);
|
||||||
assertTrue(file2Policies.size() == 2);
|
assertEquals(2, file2Policies.size());
|
||||||
TestClassPolicy filePolicy2 = delegate.get(FILE_TYPE);
|
TestClassPolicy filePolicy2 = delegate.get(FILE_TYPE);
|
||||||
assertNotNull(filePolicy2);
|
assertNotNull(filePolicy2);
|
||||||
|
|
||||||
@@ -253,7 +253,7 @@ public class PolicyComponentTest extends TestCase
|
|||||||
policyComponent.bindClassBehaviour(policyName, FILE_TYPE, file2Behaviour);
|
policyComponent.bindClassBehaviour(policyName, FILE_TYPE, file2Behaviour);
|
||||||
Collection<TestClassPolicy> file3Policies = delegate.getList(FILE_TYPE);
|
Collection<TestClassPolicy> file3Policies = delegate.getList(FILE_TYPE);
|
||||||
assertNotNull(file3Policies);
|
assertNotNull(file3Policies);
|
||||||
assertTrue(file3Policies.size() == 3);
|
assertEquals(3, file3Policies.size());
|
||||||
TestClassPolicy filePolicy3 = delegate.get(FILE_TYPE);
|
TestClassPolicy filePolicy3 = delegate.get(FILE_TYPE);
|
||||||
assertNotNull(filePolicy3);
|
assertNotNull(filePolicy3);
|
||||||
}
|
}
|
||||||
@@ -329,7 +329,7 @@ public class PolicyComponentTest extends TestCase
|
|||||||
String fileResult3 = filePolicy3.test("file");
|
String fileResult3 = filePolicy3.test("file");
|
||||||
assertEquals("NewBase: file", fileResult3);
|
assertEquals("NewBase: file", fileResult3);
|
||||||
TestClassPolicy folderPolicy3 = delegate.get(FOLDER_TYPE);
|
TestClassPolicy folderPolicy3 = delegate.get(FOLDER_TYPE);
|
||||||
assertTrue(folderPolicy3 == folderPolicy2);
|
assertTrue(folderPolicy3 != folderPolicy2);
|
||||||
String folderResult3 = folderPolicy3.test("folder");
|
String folderResult3 = folderPolicy3.test("folder");
|
||||||
assertEquals("Folder: folder", folderResult3);
|
assertEquals("Folder: folder", folderResult3);
|
||||||
|
|
||||||
@@ -347,7 +347,7 @@ public class PolicyComponentTest extends TestCase
|
|||||||
String fileResult4 = filePolicy4.test("file");
|
String fileResult4 = filePolicy4.test("file");
|
||||||
assertEquals("File: file", fileResult4);
|
assertEquals("File: file", fileResult4);
|
||||||
TestClassPolicy folderPolicy4 = delegate.get(FOLDER_TYPE);
|
TestClassPolicy folderPolicy4 = delegate.get(FOLDER_TYPE);
|
||||||
assertTrue(folderPolicy4 == folderPolicy4);
|
assertTrue(folderPolicy4 == folderPolicy3);
|
||||||
String folderResult4 = folderPolicy4.test("folder");
|
String folderResult4 = folderPolicy4.test("folder");
|
||||||
assertEquals("Folder: folder", folderResult4);
|
assertEquals("Folder: folder", folderResult4);
|
||||||
}
|
}
|
||||||
@@ -366,14 +366,14 @@ public class PolicyComponentTest extends TestCase
|
|||||||
// Test NOOP Policy delegate
|
// Test NOOP Policy delegate
|
||||||
Collection<TestPropertyPolicy> basePolicies = delegate.getList(BASE_TYPE, BASE_PROP_A);
|
Collection<TestPropertyPolicy> basePolicies = delegate.getList(BASE_TYPE, BASE_PROP_A);
|
||||||
assertNotNull(basePolicies);
|
assertNotNull(basePolicies);
|
||||||
assertTrue(basePolicies.size() == 0);
|
assertEquals(0, basePolicies.size());
|
||||||
TestPropertyPolicy basePolicy = delegate.get(BASE_TYPE, BASE_PROP_A);
|
TestPropertyPolicy basePolicy = delegate.get(BASE_TYPE, BASE_PROP_A);
|
||||||
assertNotNull(basePolicy);
|
assertNotNull(basePolicy);
|
||||||
|
|
||||||
// Test single Policy delegate
|
// Test single Policy delegate
|
||||||
Collection<TestPropertyPolicy> filePolicies = delegate.getList(FILE_TYPE, FILE_PROP_B);
|
Collection<TestPropertyPolicy> filePolicies = delegate.getList(FILE_TYPE, FILE_PROP_B);
|
||||||
assertNotNull(filePolicies);
|
assertNotNull(filePolicies);
|
||||||
assertTrue(filePolicies.size() == 1);
|
assertEquals(1, filePolicies.size());
|
||||||
TestPropertyPolicy filePolicy = delegate.get(FILE_TYPE, FILE_PROP_B);
|
TestPropertyPolicy filePolicy = delegate.get(FILE_TYPE, FILE_PROP_B);
|
||||||
assertNotNull(filePolicy);
|
assertNotNull(filePolicy);
|
||||||
assertEquals(filePolicies.iterator().next(), filePolicy);
|
assertEquals(filePolicies.iterator().next(), filePolicy);
|
||||||
@@ -385,7 +385,7 @@ public class PolicyComponentTest extends TestCase
|
|||||||
// Test multi Policy delegate
|
// Test multi Policy delegate
|
||||||
Collection<TestPropertyPolicy> file2Policies = delegate.getList(FILE_TYPE, FILE_PROP_B);
|
Collection<TestPropertyPolicy> file2Policies = delegate.getList(FILE_TYPE, FILE_PROP_B);
|
||||||
assertNotNull(file2Policies);
|
assertNotNull(file2Policies);
|
||||||
assertTrue(file2Policies.size() == 2);
|
assertEquals(2, file2Policies.size());
|
||||||
TestPropertyPolicy filePolicy2 = delegate.get(FILE_TYPE, FILE_PROP_B);
|
TestPropertyPolicy filePolicy2 = delegate.get(FILE_TYPE, FILE_PROP_B);
|
||||||
assertNotNull(filePolicy2);
|
assertNotNull(filePolicy2);
|
||||||
}
|
}
|
||||||
@@ -515,7 +515,7 @@ public class PolicyComponentTest extends TestCase
|
|||||||
// Test single Policy delegate
|
// Test single Policy delegate
|
||||||
Collection<TestAssociationPolicy> filePolicies = delegate.getList(FILE_TYPE, BASE_ASSOC_A);
|
Collection<TestAssociationPolicy> filePolicies = delegate.getList(FILE_TYPE, BASE_ASSOC_A);
|
||||||
assertNotNull(filePolicies);
|
assertNotNull(filePolicies);
|
||||||
assertTrue(filePolicies.size() == 1);
|
assertEquals(1, filePolicies.size());
|
||||||
TestAssociationPolicy filePolicy = delegate.get(FILE_TYPE, BASE_ASSOC_A);
|
TestAssociationPolicy filePolicy = delegate.get(FILE_TYPE, BASE_ASSOC_A);
|
||||||
assertNotNull(filePolicy);
|
assertNotNull(filePolicy);
|
||||||
String fileResult = filePolicy.test("file");
|
String fileResult = filePolicy.test("file");
|
||||||
@@ -528,7 +528,7 @@ public class PolicyComponentTest extends TestCase
|
|||||||
// Test multi Policy delegate
|
// Test multi Policy delegate
|
||||||
Collection<TestAssociationPolicy> file2Policies = delegate.getList(FILE_TYPE, BASE_ASSOC_A);
|
Collection<TestAssociationPolicy> file2Policies = delegate.getList(FILE_TYPE, BASE_ASSOC_A);
|
||||||
assertNotNull(file2Policies);
|
assertNotNull(file2Policies);
|
||||||
assertTrue(file2Policies.size() == 2);
|
assertEquals(2, file2Policies.size());
|
||||||
TestAssociationPolicy filePolicy2 = delegate.get(FILE_TYPE, BASE_ASSOC_A);
|
TestAssociationPolicy filePolicy2 = delegate.get(FILE_TYPE, BASE_ASSOC_A);
|
||||||
assertNotNull(filePolicy2);
|
assertNotNull(filePolicy2);
|
||||||
}
|
}
|
||||||
|
@@ -38,6 +38,7 @@ import org.alfresco.repo.node.NodeServicePolicies;
|
|||||||
import org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy;
|
import org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy;
|
||||||
import org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy;
|
import org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy;
|
||||||
import org.alfresco.repo.node.NodeServicePolicies.OnUpdatePropertiesPolicy;
|
import org.alfresco.repo.node.NodeServicePolicies.OnUpdatePropertiesPolicy;
|
||||||
|
import org.alfresco.repo.policy.BehaviourFilter;
|
||||||
import org.alfresco.repo.policy.JavaBehaviour;
|
import org.alfresco.repo.policy.JavaBehaviour;
|
||||||
import org.alfresco.repo.policy.PolicyComponent;
|
import org.alfresco.repo.policy.PolicyComponent;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationException;
|
import org.alfresco.repo.security.authentication.AuthenticationException;
|
||||||
@@ -115,6 +116,8 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per
|
|||||||
|
|
||||||
private PolicyComponent policyComponent;
|
private PolicyComponent policyComponent;
|
||||||
|
|
||||||
|
private BehaviourFilter policyBehaviourFilter;
|
||||||
|
|
||||||
private boolean createMissingPeople;
|
private boolean createMissingPeople;
|
||||||
|
|
||||||
private static Set<QName> mutableProperties;
|
private static Set<QName> mutableProperties;
|
||||||
@@ -133,9 +136,6 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per
|
|||||||
|
|
||||||
private PermissionsManager permissionsManager;
|
private PermissionsManager permissionsManager;
|
||||||
|
|
||||||
// Behaviours
|
|
||||||
JavaBehaviour onUpdatePropertiesBehaviour;
|
|
||||||
|
|
||||||
/** a transactionally-safe cache to be injected */
|
/** a transactionally-safe cache to be injected */
|
||||||
private SimpleCache<String, Set<NodeRef>> personCache;
|
private SimpleCache<String, Set<NodeRef>> personCache;
|
||||||
|
|
||||||
@@ -190,17 +190,16 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per
|
|||||||
OnCreateNodePolicy.QNAME,
|
OnCreateNodePolicy.QNAME,
|
||||||
ContentModel.TYPE_PERSON,
|
ContentModel.TYPE_PERSON,
|
||||||
new JavaBehaviour(this, "onCreateNode"));
|
new JavaBehaviour(this, "onCreateNode"));
|
||||||
|
|
||||||
this.policyComponent.bindClassBehaviour(
|
this.policyComponent.bindClassBehaviour(
|
||||||
BeforeDeleteNodePolicy.QNAME,
|
BeforeDeleteNodePolicy.QNAME,
|
||||||
ContentModel.TYPE_PERSON,
|
ContentModel.TYPE_PERSON,
|
||||||
new JavaBehaviour(this, "beforeDeleteNode"));
|
new JavaBehaviour(this, "beforeDeleteNode"));
|
||||||
|
|
||||||
onUpdatePropertiesBehaviour = new JavaBehaviour(this, "onUpdateProperties");
|
|
||||||
|
|
||||||
this.policyComponent.bindClassBehaviour(
|
this.policyComponent.bindClassBehaviour(
|
||||||
OnUpdatePropertiesPolicy.QNAME,
|
OnUpdatePropertiesPolicy.QNAME,
|
||||||
ContentModel.TYPE_PERSON,
|
ContentModel.TYPE_PERSON,
|
||||||
onUpdatePropertiesBehaviour);
|
new JavaBehaviour(this, "onUpdateProperties"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserNameMatcher getUserNameMatcher()
|
public UserNameMatcher getUserNameMatcher()
|
||||||
@@ -461,7 +460,7 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
onUpdatePropertiesBehaviour.disable();
|
policyBehaviourFilter.disableBehaviour(ContentModel.TYPE_PERSON);
|
||||||
|
|
||||||
if (duplicateMode.equalsIgnoreCase(SPLIT))
|
if (duplicateMode.equalsIgnoreCase(SPLIT))
|
||||||
{
|
{
|
||||||
@@ -485,7 +484,7 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
onUpdatePropertiesBehaviour.enable();
|
policyBehaviourFilter.enableBehaviour(ContentModel.TYPE_PERSON);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
@@ -955,6 +954,11 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per
|
|||||||
this.policyComponent = policyComponent;
|
this.policyComponent = policyComponent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setPolicyBehaviourFilter(BehaviourFilter policyBehaviourFilter)
|
||||||
|
{
|
||||||
|
this.policyBehaviourFilter = policyBehaviourFilter;
|
||||||
|
}
|
||||||
|
|
||||||
public void setStoreUrl(String storeUrl)
|
public void setStoreUrl(String storeUrl)
|
||||||
{
|
{
|
||||||
this.storeRef = new StoreRef(storeUrl);
|
this.storeRef = new StoreRef(storeUrl);
|
||||||
|
Reference in New Issue
Block a user