mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-06-16 17:55:15 +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:
parent
ab0e9db542
commit
652b9406db
@ -488,10 +488,10 @@
|
||||
|
||||
<cacheEventListenerFactory
|
||||
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
|
||||
properties="replicatePuts = false,
|
||||
properties="replicatePuts = true,
|
||||
replicateUpdates = true,
|
||||
replicateRemovals = true,
|
||||
replicateUpdatesViaCopy = false,
|
||||
replicateUpdatesViaCopy = true,
|
||||
replicateAsynchronously = false"/>
|
||||
</cache>
|
||||
|
||||
|
@ -364,18 +364,15 @@
|
||||
|
||||
<aspect name="cm:complianceable">
|
||||
<title>Complianceable</title>
|
||||
<parent>cm:auditable</parent>
|
||||
<!-- TODO: Support mandatory-aspects on an aspect in the meta-model
|
||||
<mandatory-aspects>
|
||||
<aspect>cm:auditable</aspect>
|
||||
</mandatory-aspects>
|
||||
-->
|
||||
<properties>
|
||||
<property name="cm:removeAfter">
|
||||
<title>Remove After</title>
|
||||
<type>d:datetime</type>
|
||||
</property>
|
||||
</properties>
|
||||
<mandatory-aspects>
|
||||
<aspect>cm:auditable</aspect>
|
||||
</mandatory-aspects>
|
||||
</aspect>
|
||||
|
||||
<aspect name="cm:ownable">
|
||||
|
@ -116,9 +116,6 @@
|
||||
<property name="dictionaryService">
|
||||
<ref bean="dictionaryService"/>
|
||||
</property>
|
||||
<property name="policyName">
|
||||
<value>onCreateNode</value>
|
||||
</property>
|
||||
<property name="isClassBehaviour">
|
||||
<value>true</value>
|
||||
</property>
|
||||
@ -133,16 +130,10 @@
|
||||
<bean id="on-property-update-trigger" class="org.alfresco.repo.rule.ruletrigger.OnPropertyUpdateRuleTrigger" parent="rule-trigger-base">
|
||||
</bean>
|
||||
|
||||
<bean id="on-create-child-association-trigger" class="org.alfresco.repo.rule.ruletrigger.SingleChildAssocRefPolicyRuleTrigger" parent="rule-trigger-base">
|
||||
<property name="policyName">
|
||||
<value>onCreateChildAssociation</value>
|
||||
</property>
|
||||
<bean id="on-create-child-association-trigger" class="org.alfresco.repo.rule.ruletrigger.OnCreateChildAssociationRuleTrigger" parent="rule-trigger-base">
|
||||
</bean>
|
||||
|
||||
<bean id="on-delete-child-association-trigger" class="org.alfresco.repo.rule.ruletrigger.SingleChildAssocRefPolicyRuleTrigger" parent="rule-trigger-base">
|
||||
<property name="policyName">
|
||||
<value>beforeDeleteChildAssociation</value>
|
||||
</property>
|
||||
<bean id="on-delete-child-association-trigger" class="org.alfresco.repo.rule.ruletrigger.BeforeDeleteChildAssociationRuleTrigger" parent="rule-trigger-base">
|
||||
<property name="executeRuleImmediately">
|
||||
<value>true</value>
|
||||
</property>
|
||||
|
@ -173,7 +173,7 @@ public class HttpAlfrescoContentReader extends AbstractContentReader
|
||||
else
|
||||
{
|
||||
// Check the return codes
|
||||
if (statusCode == HttpServletResponse.SC_NOT_FOUND)
|
||||
if (statusCode == HttpServletResponse.SC_NO_CONTENT)
|
||||
{
|
||||
// It doesn't exist, which is not an error. The defaults are fine.
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
||||
@ -375,7 +376,15 @@ public class ExporterComponent
|
||||
Set<QName> aspects = nodeService.getAspects(nodeRef);
|
||||
for (QName aspect : aspects)
|
||||
{
|
||||
if (!isExcludedURI(parameters.getExcludeNamespaceURIs(), aspect.getNamespaceURI()))
|
||||
if (isExcludedURI(parameters.getExcludeNamespaceURIs(), aspect.getNamespaceURI()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if (isExcludeAspect(aspect))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
exporter.startAspect(nodeRef, aspect);
|
||||
exporter.endAspect(nodeRef, aspect);
|
||||
@ -686,6 +695,25 @@ public class ExporterComponent
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the aspect unexportable?
|
||||
*
|
||||
* @param aspectQName the aspect name
|
||||
* @return <tt>true</tt> if the aspect can't be exported
|
||||
*/
|
||||
private boolean isExcludeAspect(QName aspectQName)
|
||||
{
|
||||
if (aspectQName.equals(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT) ||
|
||||
aspectQName.equals(ContentModel.ASPECT_MULTILINGUAL_EMPTY_TRANSLATION))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if specified Node Reference is within the set of nodes to be exported
|
||||
*
|
||||
|
@ -36,6 +36,7 @@ import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.search.QueryParameterDefImpl;
|
||||
import org.alfresco.repo.tenant.TenantService;
|
||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
||||
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.model.FileExistsException;
|
||||
@ -521,12 +522,20 @@ public class FileFolderServiceImpl implements FileFolderService
|
||||
// done
|
||||
return nodeRefs;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see #move(NodeRef, NodeRef, String)
|
||||
*/
|
||||
public FileInfo rename(NodeRef sourceNodeRef, String newName) throws FileExistsException, FileNotFoundException
|
||||
{
|
||||
// NOTE:
|
||||
//
|
||||
// This information is placed in the transaction to indicate that a rename has taken place. This information is
|
||||
// used by the rule trigger to ensure inbound rule is not triggered by a file rename
|
||||
//
|
||||
// See http://issues.alfresco.com/browse/AR-1544
|
||||
AlfrescoTransactionSupport.bindResource(sourceNodeRef.toString()+"rename", sourceNodeRef);
|
||||
|
||||
return moveOrCopy(sourceNodeRef, null, newName, true);
|
||||
}
|
||||
|
||||
@ -643,12 +652,12 @@ public class FileFolderServiceImpl implements FileFolderService
|
||||
ContentData contentData = (ContentData)nodeService.getProperty(targetNodeRef, ContentModel.PROP_CONTENT);
|
||||
if (contentData != null)
|
||||
{
|
||||
String targetMimetype = contentData.getMimetype();
|
||||
String newMimetype = mimetypeService.guessMimetype(newName);
|
||||
if (!targetMimetype.equalsIgnoreCase(newMimetype))
|
||||
String targetMimetype = contentData.getMimetype();
|
||||
String newMimetype = mimetypeService.guessMimetype(newName);
|
||||
if (!targetMimetype.equalsIgnoreCase(newMimetype))
|
||||
{
|
||||
contentData = ContentData.setMimetype(contentData, newMimetype);
|
||||
nodeService.setProperty(targetNodeRef, ContentModel.PROP_CONTENT, contentData);
|
||||
contentData = ContentData.setMimetype(contentData, newMimetype);
|
||||
nodeService.setProperty(targetNodeRef, ContentModel.PROP_CONTENT, contentData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -768,16 +768,25 @@ public class ModuleManagementTool
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (directory == false)
|
||||
|
||||
try
|
||||
{
|
||||
// Install the module
|
||||
manager.installModule(aepFileLocation, warFileLocation, previewInstall, forceInstall, backup);
|
||||
if (directory == false)
|
||||
{
|
||||
// Install the module
|
||||
manager.installModule(aepFileLocation, warFileLocation, previewInstall, forceInstall, backup);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Install the modules from the directory
|
||||
manager.installModules(aepFileLocation, warFileLocation, previewInstall, forceInstall, backup);
|
||||
}
|
||||
}
|
||||
else
|
||||
catch (ModuleManagementToolException e)
|
||||
{
|
||||
// Install the modules from the directory
|
||||
manager.installModules(aepFileLocation, warFileLocation, previewInstall, forceInstall, backup);
|
||||
// These are user-friendly
|
||||
manager.outputMessage(e.getMessage());
|
||||
outputUsage();
|
||||
}
|
||||
}
|
||||
else if (OP_LIST.equals(operation) == true && args.length == 2)
|
||||
|
@ -1013,9 +1013,6 @@ public abstract class BaseNodeServiceTest extends BaseSpringTest
|
||||
getSession().flush();
|
||||
getSession().clear();
|
||||
|
||||
// make sure that our integrity allows this
|
||||
AlfrescoTransactionSupport.flush();
|
||||
|
||||
// now get them back
|
||||
Map<QName, Serializable> checkMap = nodeService.getProperties(nodeRef);
|
||||
assertNotNull("Properties were not set/retrieved", checkMap);
|
||||
@ -1717,14 +1714,12 @@ public abstract class BaseNodeServiceTest extends BaseSpringTest
|
||||
ASSOC_TYPE_QNAME_TEST_CONTAINS,
|
||||
QName.createQName("pathB"),
|
||||
ContentModel.TYPE_CONTENT);
|
||||
AlfrescoTransactionSupport.flush();
|
||||
// there should be no issue with a duplicate association names any more
|
||||
ChildAssociationRef pathBDuplicateRef = nodeService.createNode(
|
||||
parentRef,
|
||||
ASSOC_TYPE_QNAME_TEST_CONTAINS,
|
||||
QName.createQName("pathB"),
|
||||
ContentModel.TYPE_CONTENT);
|
||||
AlfrescoTransactionSupport.flush();
|
||||
// Now create nodes with duplicate cm:name properties
|
||||
Map<QName, Serializable> props = new HashMap<QName, Serializable>(5);
|
||||
props.put(ContentModel.PROP_NAME, "ABC");
|
||||
@ -1734,7 +1729,6 @@ public abstract class BaseNodeServiceTest extends BaseSpringTest
|
||||
QName.createQName("ABC"),
|
||||
ContentModel.TYPE_CONTENT,
|
||||
props);
|
||||
AlfrescoTransactionSupport.flush();
|
||||
try
|
||||
{
|
||||
// now check that the duplicate is detected with attention to being case-insensitive
|
||||
@ -1774,7 +1768,6 @@ public abstract class BaseNodeServiceTest extends BaseSpringTest
|
||||
ContentModel.TYPE_CONTENT,
|
||||
props);
|
||||
NodeRef abcRef = pathAbcRef.getChildRef();
|
||||
AlfrescoTransactionSupport.flush();
|
||||
// delete ABC
|
||||
nodeService.deleteNode(abcRef);
|
||||
// create it again
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
@ -554,21 +554,7 @@ public abstract class AlfrescoTransactionSupport
|
||||
*/
|
||||
public void flush()
|
||||
{
|
||||
// check integrity
|
||||
for (IntegrityChecker integrityChecker : integrityCheckers)
|
||||
{
|
||||
integrityChecker.checkIntegrity();
|
||||
}
|
||||
// flush listeners
|
||||
for (TransactionListener listener : getListenersIterable())
|
||||
{
|
||||
listener.flush();
|
||||
}
|
||||
// flush changes
|
||||
for (TransactionalDao daoService : getDaoServices())
|
||||
{
|
||||
daoService.flush();
|
||||
}
|
||||
throw new UnsupportedOperationException("Manual flush no longer supported.");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -627,8 +613,12 @@ public abstract class AlfrescoTransactionSupport
|
||||
listener.beforeCommit(readOnly);
|
||||
}
|
||||
|
||||
// flush
|
||||
flush();
|
||||
// Check integrity
|
||||
for (IntegrityChecker integrityChecker : integrityCheckers)
|
||||
{
|
||||
integrityChecker.checkIntegrity();
|
||||
}
|
||||
|
||||
// prepare the indexes
|
||||
for (LuceneIndexerAndSearcher lucene : lucenes)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user