params);
+
+ /**
+ * Create a composite actionCondition
+ * @return the composite actionCondition
+ */
+ @Auditable()
+ CompositeActionCondition createCompositeActionCondition();
+
+ /**
+ * The actions conditions are always checked.
+ *
+ * @see ActionService#executeAction(Action, NodeRef, boolean)
+ *
+ * @param action the action
+ * @param actionedUponNodeRef the actioned upon node reference
+ */
@Auditable(key = Auditable.Key.ARG_1, parameters = {"action", "actionedUponNodeRef" })
- void executeAction(Action action, NodeRef actionedUponNodeRef);
-
- /**
- * The action is executed based on the asynchronous attribute of the action.
- *
- * @see ActionService#executeAction(Action, NodeRef, boolean, boolean)
- *
- * @param action the action
- * @param actionedUponNodeRef the actioned upon node reference
- * @param checkConditions indicates whether the conditions should be checked
- */
+ void executeAction(Action action, NodeRef actionedUponNodeRef);
+
+ /**
+ * The action is executed based on the asynchronous attribute of the action.
+ *
+ * @see ActionService#executeAction(Action, NodeRef, boolean, boolean)
+ *
+ * @param action the action
+ * @param actionedUponNodeRef the actioned upon node reference
+ * @param checkConditions indicates whether the conditions should be checked
+ */
@Auditable(key = Auditable.Key.ARG_1, parameters = {"action", "actionedUponNodeRef", "checkConditions" })
- void executeAction(Action action, NodeRef actionedUponNodeRef, boolean checkConditions);
-
- /**
- * Executes the specified action upon the node reference provided.
- *
- * If specified that the conditions should be checked then any conditions
- * set on the action are evaluated.
- *
- * If the conditions fail then the action is not executed.
- *
- * If an action has no conditions then the action will always be executed.
- *
- * If the conditions are not checked then the action will always be executed.
- *
- * @param action the action
- * @param actionedUponNodeRef the actioned upon node reference
- * @param checkConditions indicates whether the conditions should be checked before
- * executing the action
- * @param executeAsynchronously indicates whether the action should be executed asychronously or not, this value overrides
- * the value set on the action its self
- */
+ void executeAction(Action action, NodeRef actionedUponNodeRef, boolean checkConditions);
+
+ /**
+ * Executes the specified action upon the node reference provided.
+ *
+ * If specified that the conditions should be checked then any conditions
+ * set on the action are evaluated.
+ *
+ * If the conditions fail then the action is not executed.
+ *
+ * If an action has no conditions then the action will always be executed.
+ *
+ * If the conditions are not checked then the action will always be executed.
+ *
+ * @param action the action
+ * @param actionedUponNodeRef the actioned upon node reference
+ * @param checkConditions indicates whether the conditions should be checked before
+ * executing the action
+ * @param executeAsynchronously indicates whether the action should be executed asychronously or not, this value overrides
+ * the value set on the action its self
+ */
@Auditable(key = Auditable.Key.ARG_1, parameters = {"action", "actionedUponNodeRef", "checkConditions", "executeAsynchronously" })
- void executeAction(Action action, NodeRef actionedUponNodeRef, boolean checkConditions, boolean executeAsynchronously);
-
- /**
- * Evaluted the conditions set on an action.
- *
- * Returns true if the action has no conditions.
- *
- * If the action has more than one condition their results are combined using the 'AND'
- * logical operator.
- *
- * @param action the action
- * @param actionedUponNodeRef the actioned upon node reference
- * @return true if the condition succeeds, false otherwise
- */
+ void executeAction(Action action, NodeRef actionedUponNodeRef, boolean checkConditions, boolean executeAsynchronously);
+
+ /**
+ * Evaluted the conditions set on an action.
+ *
+ * Returns true if the action has no conditions.
+ *
+ * If the action has more than one condition their results are combined using the 'AND'
+ * logical operator.
+ *
+ * @param action the action
+ * @param actionedUponNodeRef the actioned upon node reference
+ * @return true if the condition succeeds, false otherwise
+ */
@Auditable(key = Auditable.Key.ARG_1, parameters = {"action", "actionedUponNodeRef" })
- boolean evaluateAction(Action action, NodeRef actionedUponNodeRef);
-
- /**
- * Evaluate an action condition.
- *
- * @param condition the action condition
- * @param actionedUponNodeRef the actioned upon node reference
- * @return true if the condition succeeds, false otherwise
- */
+ boolean evaluateAction(Action action, NodeRef actionedUponNodeRef);
+
+ /**
+ * Evaluate an action condition.
+ *
+ * @param condition the action condition
+ * @param actionedUponNodeRef the actioned upon node reference
+ * @return true if the condition succeeds, false otherwise
+ */
@Auditable(key = Auditable.Key.ARG_1, parameters = {"condition", "actionedUponNodeRef" })
- boolean evaluateActionCondition(ActionCondition condition, NodeRef actionedUponNodeRef);
-
- /**
- * Save an action against a node reference.
- *
- * The node will be made configurable if it is not already.
- *
- * If the action already exists then its details will be updated.
- *
- * @param nodeRef the node reference
- * @param action the action
- */
+ boolean evaluateActionCondition(ActionCondition condition, NodeRef actionedUponNodeRef);
+
+ /**
+ * Save an action against a node reference.
+ *
+ * The node will be made configurable if it is not already.
+ *
+ * If the action already exists then its details will be updated.
+ *
+ * @param nodeRef the node reference
+ * @param action the action
+ */
@Auditable(key = Auditable.Key.ARG_0, parameters = {"nodeRef", "action" })
- void saveAction(NodeRef nodeRef, Action action);
-
- /**
- * Gets all the actions currently saved on the given node reference.
- *
- * @param nodeRef the node reference
- * @return the list of actions
- */
+ void saveAction(NodeRef nodeRef, Action action);
+
+ /**
+ * Gets all the actions currently saved on the given node reference.
+ *
+ * @param nodeRef the node reference
+ * @return the list of actions
+ */
@Auditable(key = Auditable.Key.ARG_0, parameters = {"nodeRef"})
- List getActions(NodeRef nodeRef);
-
- /**
- * Gets an action stored against a given node reference.
- *
- * Returns null if the action can not be found.
- *
- * @param nodeRef the node reference
- * @param actionId the action id
- * @return the action
- */
+ List getActions(NodeRef nodeRef);
+
+ /**
+ * Gets an action stored against a given node reference.
+ *
+ * Returns null if the action can not be found.
+ *
+ * @param nodeRef the node reference
+ * @param actionId the action id
+ * @return the action
+ */
@Auditable(key = Auditable.Key.ARG_0, parameters = {"nodeRef", "actionId"})
- Action getAction(NodeRef nodeRef, String actionId);
-
- /**
- * Removes an action associated with a node reference.
- *
- * @param nodeRef the node reference
- * @param action the action
- */
+ Action getAction(NodeRef nodeRef, String actionId);
+
+ /**
+ * Removes an action associated with a node reference.
+ *
+ * @param nodeRef the node reference
+ * @param action the action
+ */
@Auditable(key = Auditable.Key.ARG_0, parameters = {"nodeRef", "action" })
- void removeAction(NodeRef nodeRef, Action action);
-
- /**
- * Removes all actions associated with a node reference
- *
- * @param nodeRef the node reference
- */
+ void removeAction(NodeRef nodeRef, Action action);
+
+ /**
+ * Removes all actions associated with a node reference
+ *
+ * @param nodeRef the node reference
+ */
@Auditable(key = Auditable.Key.ARG_0, parameters = {"nodeRef"})
- void removeAllActions(NodeRef nodeRef);
-
+ void removeAllActions(NodeRef nodeRef);
+
}
diff --git a/source/java/org/alfresco/service/cmr/action/CompositeActionCondition.java b/source/java/org/alfresco/service/cmr/action/CompositeActionCondition.java
new file mode 100644
index 0000000000..69e6e55cd1
--- /dev/null
+++ b/source/java/org/alfresco/service/cmr/action/CompositeActionCondition.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2005-2008 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.service.cmr.action;
+
+import java.util.List;
+
+/**
+ * Composite action condition
+ *
+ * @author Jean Barmash
+ */
+public interface CompositeActionCondition extends ActionCondition
+{
+
+ public static String COMPOSITE_CONDITION = "composite-condition";
+
+ /**
+ * Indicates whether there are any Conditions
+ *
+ * @return true if there are ActionConditions, false otherwise
+ */
+ boolean hasActionConditions();
+
+ /**
+ * Add an ActionCondition to the end of the list
+ *
+ * @param ActionCondition the ActionCondition
+ */
+ void addActionCondition(ActionCondition ActionCondition);
+
+ /**
+ * Add an ActionCondition to the list at the index specified
+ *
+ * @param index the index
+ * @param ActionCondition the ActionCondition
+ */
+ void addActionCondition(int index, ActionCondition ActionCondition);
+
+ /**
+ * Replace the ActionCondition at the specified index with the passed ActionCondition.
+ *
+ * @param index the index
+ * @param ActionCondition the ActionCondition
+ */
+ void setActionCondition(int index, ActionCondition ActionCondition);
+
+ /**
+ * Gets the index of an ActionCondition
+ *
+ * @param ActionCondition the ActionCondition
+ * @return the index
+ */
+ int indexOfActionCondition(ActionCondition ActionCondition);
+
+ /**
+ * Get list containing the ActionConditions in their current order
+ *
+ * @return the list of ActionConditions
+ */
+ List getActionConditions();
+
+ /**
+ * Get an ActionCondition at a given index
+ *
+ * @param index the index
+ * @return the ActionCondition
+ */
+ ActionCondition getActionCondition(int index);
+
+ /**
+ * Remove an ActionCondition from the list
+ *
+ * @param ActionCondition the ActionCondition
+ */
+ void removeActionCondition(ActionCondition ActionCondition);
+
+ /**
+ * Remove all ActionConditions from the list
+ */
+ void removeAllActionConditions();
+
+ public boolean isORCondition();
+
+ public void setORCondition(boolean andOr);
+
+}