mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
Merged 1.4 to HEAD
svn merge svn://svn.alfresco.com:3691/alfresco/BRANCHES/V1.4@4252 svn://svn.alfresco.com:3691/alfresco/BRANCHES/V1.4@4294 . svn revert root\common\common.xml svn resolved root\projects\repository\config\alfresco\script-services-context.xml git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4634 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
109
source/java/org/alfresco/repo/policy/BaseBehaviour.java
Normal file
109
source/java/org/alfresco/repo/policy/BaseBehaviour.java
Normal file
@@ -0,0 +1,109 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package org.alfresco.repo.policy;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Stack;
|
||||
|
||||
import org.alfresco.repo.policy.Behaviour.NotificationFrequency;
|
||||
import org.alfresco.util.ParameterCheck;
|
||||
|
||||
/**
|
||||
* Base behaviour implementation
|
||||
*
|
||||
* @author Roy Wetherall
|
||||
*/
|
||||
public abstract class BaseBehaviour implements Behaviour
|
||||
{
|
||||
/** The notification frequency */
|
||||
protected NotificationFrequency frequency = NotificationFrequency.EVERY_EVENT;
|
||||
|
||||
/** Disabled stack **/
|
||||
private StackThreadLocal disabled = new StackThreadLocal();
|
||||
|
||||
/** Proxies **/
|
||||
protected Map<Class, Object> proxies = new HashMap<Class, Object>();
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
public BaseBehaviour()
|
||||
{
|
||||
// Default constructor
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param frequency the notification frequency
|
||||
*/
|
||||
public BaseBehaviour(NotificationFrequency frequency)
|
||||
{
|
||||
ParameterCheck.mandatory("Frequency", frequency);
|
||||
this.frequency = frequency;
|
||||
}
|
||||
|
||||
public void setNotificationFrequency(NotificationFrequency frequency)
|
||||
{
|
||||
this.frequency = frequency;
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable this behaviour for the curent thread
|
||||
*/
|
||||
public void disable()
|
||||
{
|
||||
Stack<Integer> stack = disabled.get();
|
||||
stack.push(hashCode());
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable this behaviour for the current thread
|
||||
*/
|
||||
public void enable()
|
||||
{
|
||||
Stack<Integer> stack = disabled.get();
|
||||
if (stack.peek().equals(hashCode()) == false)
|
||||
{
|
||||
throw new PolicyException("Cannot enable " + this.toString() + " at this time - mismatched with disable calls");
|
||||
}
|
||||
stack.pop();
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether the this behaviour is current enabled or not
|
||||
*
|
||||
* @return true if the behaviour is enabled, false otherwise
|
||||
*/
|
||||
public boolean isEnabled()
|
||||
{
|
||||
Stack<Integer> stack = disabled.get();
|
||||
return stack.search(hashCode()) == -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification frequency
|
||||
*
|
||||
* @return the notification frequency
|
||||
*/
|
||||
public NotificationFrequency getNotificationFrequency()
|
||||
{
|
||||
return frequency;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stack specific Thread Local
|
||||
*
|
||||
* @author David Caruana
|
||||
*/
|
||||
class StackThreadLocal extends ThreadLocal<Stack<Integer>>
|
||||
{
|
||||
@Override
|
||||
protected Stack<Integer> initialValue()
|
||||
{
|
||||
return new Stack<Integer>();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user