mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
Merged V2.1 to HEAD
6535: adding in handlers for renames and deletes of webforms to update web project configurations. 6536: fix to monthpicker. 6537: Cluster sample config for ticketsCache defaults to replicating puts 6538: Invite web users wizard was not correctly initialising 6539: AWC-1474 - Email Space Users dialog - if no email recipients then show message 6540: Fixed remote classpath check for SDK projects 6541: AR-1544: Inbound Rules Being Fired on Name Property Update 6542: Fix for AWC-1216 - changed NavigationBean to spot when CIFS server is disabled (as the method has changed in repo) 6543: AR-1623: WebServices authentication errors during concurrent load test 6544: AWC-1253: AddContent action should be externally configurable/overridable 6545: Fixed AR-1586: Nicer message when installing older module or duplicate module 6546: AWC-1301: Access Denied viewing details of content with association 6547: AWC-1499: It is impossible to remove 'Complianceable' aspect with the help of Run action 6548: Missing file ... should fix build issues 6549: Missed file .. fixed build issue 6550: AWC-1092: sorting by version number in version history is alpha, not numeric 6551: AWC-1217: Cannot differentiate between two users with same name in user picker search results 6552: Fixed AR-1572: Export of ML-enabled documents can now be imported 6553: Removed tabs 6554: Fixed handling of SC_NOT_FOUND message 6555: Fixed AR-1627: Removed ability to flush transaction resources on demand git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6744 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -70,6 +70,7 @@ import org.alfresco.service.cmr.coci.CheckOutCheckInService;
|
||||
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
||||
import org.alfresco.service.cmr.lock.LockService;
|
||||
import org.alfresco.service.cmr.lock.LockStatus;
|
||||
import org.alfresco.service.cmr.model.FileFolderService;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
import org.alfresco.service.cmr.repository.ContentData;
|
||||
import org.alfresco.service.cmr.repository.ContentService;
|
||||
@@ -118,6 +119,7 @@ public class RuleServiceCoverageTest extends TestCase
|
||||
private ContentTransformerRegistry transformerRegistry;
|
||||
private CopyService copyService;
|
||||
private AuthenticationComponent authenticationComponent;
|
||||
private FileFolderService fileFolderService;
|
||||
|
||||
/**
|
||||
* Category related values
|
||||
@@ -157,6 +159,7 @@ public class RuleServiceCoverageTest extends TestCase
|
||||
this.transactionService = serviceRegistry.getTransactionService();
|
||||
this.transformerRegistry = (ContentTransformerRegistry)applicationContext.getBean("contentTransformerRegistry");
|
||||
this.authenticationComponent = (AuthenticationComponent)applicationContext.getBean("authenticationComponent");
|
||||
this.fileFolderService = serviceRegistry.getFileFolderService();
|
||||
|
||||
//authenticationComponent.setCurrentUser(authenticationComponent.getSystemUserName());
|
||||
//authenticationComponent.setSystemUserAsCurrentUser();
|
||||
@@ -359,6 +362,48 @@ public class RuleServiceCoverageTest extends TestCase
|
||||
// System.out.println(NodeStoreInspector.dumpNodeStore(this.nodeService, this.testStoreRef));
|
||||
}
|
||||
|
||||
public void testModifyNameTriggersInboundRule()
|
||||
throws Exception
|
||||
{
|
||||
//this.nodeService.addAspect(this.nodeRef, ContentModel.ASPECT_LOCKABLE, null);
|
||||
Map<QName, Serializable> folderProps = new HashMap<QName, Serializable>(1);
|
||||
folderProps.put(ContentModel.PROP_NAME, "myTestFolder");
|
||||
NodeRef folder = this.nodeService.createNode(
|
||||
this.rootNodeRef,
|
||||
ContentModel.ASSOC_CHILDREN,
|
||||
ContentModel.ASSOC_CHILDREN,
|
||||
ContentModel.TYPE_FOLDER,
|
||||
folderProps).getChildRef();
|
||||
|
||||
Map<String, Serializable> params = new HashMap<String, Serializable>(1);
|
||||
params.put("aspect-name", ContentModel.ASPECT_VERSIONABLE);
|
||||
|
||||
Rule rule = createRule(
|
||||
RuleType.INBOUND,
|
||||
AddFeaturesActionExecuter.NAME,
|
||||
params,
|
||||
NoConditionEvaluator.NAME,
|
||||
null);
|
||||
|
||||
this.ruleService.saveRule(folder, rule);
|
||||
|
||||
Map<QName, Serializable> contentProps = new HashMap<QName, Serializable>(1);
|
||||
contentProps.put(ContentModel.PROP_NAME, "myTestDocument.txt");
|
||||
NodeRef newNodeRef = this.nodeService.createNode(
|
||||
folder,
|
||||
ContentModel.ASSOC_CONTAINS,
|
||||
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "myTestDocument.txt"),
|
||||
ContentModel.TYPE_CONTENT,
|
||||
contentProps).getChildRef();
|
||||
//addContentToNode(newNodeRef);
|
||||
assertFalse(this.nodeService.hasAspect(newNodeRef, ContentModel.ASPECT_VERSIONABLE));
|
||||
|
||||
// Use the file folder to change the name of the node
|
||||
this.fileFolderService.rename(newNodeRef, "myNewName.txt");
|
||||
assertFalse(this.nodeService.hasAspect(newNodeRef, ContentModel.ASPECT_VERSIONABLE));
|
||||
|
||||
}
|
||||
|
||||
public void testDisableIndividualRules()
|
||||
{
|
||||
Map<String, Serializable> params = new HashMap<String, Serializable>(1);
|
||||
|
@@ -35,8 +35,6 @@ import org.alfresco.repo.action.evaluator.ComparePropertyValueEvaluator;
|
||||
import org.alfresco.repo.action.executer.ImageTransformActionExecuter;
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.repo.content.transform.AbstractContentTransformerTest;
|
||||
import org.alfresco.repo.transaction.TransactionUtil;
|
||||
import org.alfresco.repo.transaction.TransactionUtil.TransactionWork;
|
||||
import org.alfresco.service.cmr.action.Action;
|
||||
import org.alfresco.service.cmr.action.ActionCondition;
|
||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
||||
@@ -47,7 +45,6 @@ import org.alfresco.service.cmr.rule.RuleType;
|
||||
import org.alfresco.service.cmr.security.AuthenticationService;
|
||||
import org.alfresco.service.cmr.security.PermissionService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.apache.commons.digester.SetRootRule;
|
||||
|
||||
|
||||
/**
|
||||
|
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2007 Alfresco Software Limited.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
* As a special exception to the terms and conditions of version 2.0 of
|
||||
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||
* FLOSS exception. You should have recieved a copy of the text describing
|
||||
* the FLOSS exception, and it is also available here:
|
||||
* http://www.alfresco.com/legal/licensing"
|
||||
*/
|
||||
package org.alfresco.repo.rule.ruletrigger;
|
||||
|
||||
import org.alfresco.repo.node.NodeServicePolicies;
|
||||
import org.alfresco.repo.policy.JavaBehaviour;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* A rule trigger for the creation of <b>secondary child associations</b>.
|
||||
* <p>
|
||||
* Policy names supported are:
|
||||
* <ul>
|
||||
* <li>{@linkplain NodeServicePolicies.BeforeDeleteChildAssociationPolicy}</li>
|
||||
* </ul>
|
||||
*
|
||||
* @author Roy Wetherall
|
||||
*/
|
||||
public class BeforeDeleteChildAssociationRuleTrigger
|
||||
extends RuleTriggerAbstractBase
|
||||
implements NodeServicePolicies.BeforeDeleteChildAssociationPolicy
|
||||
|
||||
{
|
||||
/**
|
||||
* The logger
|
||||
*/
|
||||
private static Log logger = LogFactory.getLog(BeforeDeleteChildAssociationRuleTrigger.class);
|
||||
|
||||
private static final String POLICY = "beforeDeleteChildAssociation";
|
||||
|
||||
private boolean isClassBehaviour = false;
|
||||
|
||||
public void setIsClassBehaviour(boolean isClassBehaviour)
|
||||
{
|
||||
this.isClassBehaviour = isClassBehaviour;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.alfresco.repo.rule.ruletrigger.RuleTrigger#registerRuleTrigger()
|
||||
*/
|
||||
public void registerRuleTrigger()
|
||||
{
|
||||
if (isClassBehaviour == true)
|
||||
{
|
||||
this.policyComponent.bindClassBehaviour(
|
||||
QName.createQName(NamespaceService.ALFRESCO_URI, POLICY),
|
||||
this,
|
||||
new JavaBehaviour(this, POLICY));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.policyComponent.bindAssociationBehaviour(
|
||||
QName.createQName(NamespaceService.ALFRESCO_URI, POLICY),
|
||||
this,
|
||||
new JavaBehaviour(this, POLICY));
|
||||
}
|
||||
}
|
||||
|
||||
public void beforeDeleteChildAssociation(ChildAssociationRef childAssocRef)
|
||||
{
|
||||
if (logger.isDebugEnabled() == true)
|
||||
{
|
||||
logger.debug("Single child assoc trigger (policy = " + POLICY + ") fired for parent node " + childAssocRef.getParentRef() + " and child node " + childAssocRef.getChildRef());
|
||||
}
|
||||
|
||||
triggerRules(childAssocRef.getParentRef(), childAssocRef.getChildRef());
|
||||
}
|
||||
}
|
@@ -25,12 +25,14 @@
|
||||
package org.alfresco.repo.rule.ruletrigger;
|
||||
|
||||
import org.alfresco.repo.node.NodeServicePolicies;
|
||||
import org.alfresco.repo.policy.JavaBehaviour;
|
||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
||||
import org.alfresco.service.cmr.dictionary.ClassDefinition;
|
||||
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@@ -49,7 +51,7 @@ import org.apache.commons.logging.LogFactory;
|
||||
*
|
||||
* @author Roy Wetherall
|
||||
*/
|
||||
public class CreateNodeRuleTrigger extends SingleChildAssocRefPolicyRuleTrigger
|
||||
public class CreateNodeRuleTrigger extends RuleTriggerAbstractBase
|
||||
implements NodeServicePolicies.OnCreateNodePolicy
|
||||
{
|
||||
/**
|
||||
@@ -57,12 +59,42 @@ public class CreateNodeRuleTrigger extends SingleChildAssocRefPolicyRuleTrigger
|
||||
*/
|
||||
private static Log logger = LogFactory.getLog(CreateNodeRuleTrigger.class);
|
||||
|
||||
private static final String POLICY = "onCreateNode";
|
||||
|
||||
private boolean isClassBehaviour = false;
|
||||
|
||||
public void setIsClassBehaviour(boolean isClassBehaviour)
|
||||
{
|
||||
this.isClassBehaviour = isClassBehaviour;
|
||||
}
|
||||
|
||||
DictionaryService dictionaryService;
|
||||
|
||||
public void setDictionaryService(DictionaryService dictionaryService)
|
||||
{
|
||||
this.dictionaryService = dictionaryService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.alfresco.repo.rule.ruletrigger.RuleTrigger#registerRuleTrigger()
|
||||
*/
|
||||
public void registerRuleTrigger()
|
||||
{
|
||||
if (isClassBehaviour == true)
|
||||
{
|
||||
this.policyComponent.bindClassBehaviour(
|
||||
QName.createQName(NamespaceService.ALFRESCO_URI, POLICY),
|
||||
this,
|
||||
new JavaBehaviour(this, POLICY));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.policyComponent.bindAssociationBehaviour(
|
||||
QName.createQName(NamespaceService.ALFRESCO_URI, POLICY),
|
||||
this,
|
||||
new JavaBehaviour(this, POLICY));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
|
@@ -26,8 +26,8 @@ package org.alfresco.repo.rule.ruletrigger;
|
||||
|
||||
import org.alfresco.repo.node.NodeServicePolicies;
|
||||
import org.alfresco.repo.policy.JavaBehaviour;
|
||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
import org.alfresco.service.cmr.rule.RuleServiceException;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.apache.commons.logging.Log;
|
||||
@@ -39,40 +39,23 @@ import org.apache.commons.logging.LogFactory;
|
||||
* Policy names supported are:
|
||||
* <ul>
|
||||
* <li>{@linkplain NodeServicePolicies.OnCreateChildAssociationPolicy}</li>
|
||||
* <li>{@linkplain NodeServicePolicies.BeforeDeleteChildAssociationPolicy}</li>
|
||||
* </ul>
|
||||
*
|
||||
* @author Roy Wetherall
|
||||
*/
|
||||
public class SingleChildAssocRefPolicyRuleTrigger
|
||||
public class OnCreateChildAssociationRuleTrigger
|
||||
extends RuleTriggerAbstractBase
|
||||
implements NodeServicePolicies.OnCreateChildAssociationPolicy,
|
||||
NodeServicePolicies.BeforeDeleteChildAssociationPolicy
|
||||
|
||||
implements NodeServicePolicies.OnCreateChildAssociationPolicy
|
||||
{
|
||||
private static final String ERR_POLICY_NAME_NOT_SET = "Unable to register rule trigger since policy name has not been set.";
|
||||
|
||||
/**
|
||||
* The logger
|
||||
*/
|
||||
private static Log logger = LogFactory.getLog(SingleChildAssocRefPolicyRuleTrigger.class);
|
||||
private static Log logger = LogFactory.getLog(OnCreateChildAssociationRuleTrigger.class);
|
||||
|
||||
private static final String POLICY_NAME = "onCreateChildAssociation";
|
||||
|
||||
private String policyNamespace = NamespaceService.ALFRESCO_URI;
|
||||
|
||||
private String policyName;
|
||||
|
||||
private boolean isClassBehaviour = false;
|
||||
|
||||
public void setPolicyNamespace(String policyNamespace)
|
||||
{
|
||||
this.policyNamespace = policyNamespace;
|
||||
}
|
||||
|
||||
public void setPolicyName(String policyName)
|
||||
{
|
||||
this.policyName = policyName;
|
||||
}
|
||||
|
||||
private boolean isClassBehaviour = false;
|
||||
|
||||
public void setIsClassBehaviour(boolean isClassBehaviour)
|
||||
{
|
||||
this.isClassBehaviour = isClassBehaviour;
|
||||
@@ -83,37 +66,22 @@ public class SingleChildAssocRefPolicyRuleTrigger
|
||||
*/
|
||||
public void registerRuleTrigger()
|
||||
{
|
||||
if (policyName == null)
|
||||
{
|
||||
throw new RuleServiceException(ERR_POLICY_NAME_NOT_SET);
|
||||
}
|
||||
|
||||
if (isClassBehaviour == true)
|
||||
{
|
||||
this.policyComponent.bindClassBehaviour(
|
||||
QName.createQName(this.policyNamespace, this.policyName),
|
||||
QName.createQName(NamespaceService.ALFRESCO_URI, POLICY_NAME),
|
||||
this,
|
||||
new JavaBehaviour(this, policyName));
|
||||
new JavaBehaviour(this, POLICY_NAME));
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
this.policyComponent.bindAssociationBehaviour(
|
||||
QName.createQName(this.policyNamespace, this.policyName),
|
||||
QName.createQName(NamespaceService.ALFRESCO_URI, POLICY_NAME),
|
||||
this,
|
||||
new JavaBehaviour(this, policyName));
|
||||
new JavaBehaviour(this, POLICY_NAME));
|
||||
}
|
||||
}
|
||||
|
||||
public void beforeDeleteChildAssociation(ChildAssociationRef childAssocRef)
|
||||
{
|
||||
if (logger.isDebugEnabled() == true)
|
||||
{
|
||||
logger.debug("Single child assoc trigger (policy = " + this.policyName + ") fired for parent node " + childAssocRef.getParentRef() + " and child node " + childAssocRef.getChildRef());
|
||||
}
|
||||
|
||||
triggerRules(childAssocRef.getParentRef(), childAssocRef.getChildRef());
|
||||
}
|
||||
|
||||
public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean isNewNode)
|
||||
{
|
||||
if (isNewNode)
|
||||
@@ -122,9 +90,23 @@ public class SingleChildAssocRefPolicyRuleTrigger
|
||||
}
|
||||
if (logger.isDebugEnabled() == true)
|
||||
{
|
||||
logger.debug("Single child assoc trigger (policy = " + this.policyName + ") fired for parent node " + childAssocRef.getParentRef() + " and child node " + childAssocRef.getChildRef());
|
||||
logger.debug("Single child assoc trigger (policy = " + POLICY_NAME + ") fired for parent node " + childAssocRef.getParentRef() + " and child node " + childAssocRef.getChildRef());
|
||||
}
|
||||
|
||||
triggerRules(childAssocRef.getParentRef(), childAssocRef.getChildRef());
|
||||
// NOTE:
|
||||
//
|
||||
// We check for the presence of this resource in the transaction to determine whether a rename has been issued. If that is the case
|
||||
// then we don't want to trigger any associated rules.
|
||||
//
|
||||
// See http://issues.alfresco.com/browse/AR-1544
|
||||
if (AlfrescoTransactionSupport.getResource(childAssocRef.getChildRef().toString()+"rename") == null)
|
||||
{
|
||||
triggerRules(childAssocRef.getParentRef(), childAssocRef.getChildRef());
|
||||
}
|
||||
else
|
||||
{
|
||||
// Remove the marker
|
||||
AlfrescoTransactionSupport.unbindResource(childAssocRef.getChildRef().toString()+"rename");
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user