/** * Remove an action from this workflow completely. * * <p>This method will check global actions and all steps. * * @return true if the action was successfully removed, false if it was not found */ public boolean removeAction(ActionDescriptor actionToRemove) { // global actions for (Iterator iterator = getGlobalActions().iterator(); iterator.hasNext(); ) { ActionDescriptor actionDescriptor = (ActionDescriptor) iterator.next(); if (actionDescriptor.getId() == actionToRemove.getId()) { getGlobalActions().remove(actionDescriptor); return true; } } // steps for (Iterator iterator = getSteps().iterator(); iterator.hasNext(); ) { StepDescriptor stepDescriptor = (StepDescriptor) iterator.next(); ActionDescriptor actionDescriptor = stepDescriptor.getAction(actionToRemove.getId()); if (actionDescriptor != null) { stepDescriptor.getActions().remove(actionDescriptor); return true; } } return false; }
public void validate() throws InvalidWorkflowDescriptorException { ValidationHelper.validate(this.getRegisters()); ValidationHelper.validate(this.getTriggerFunctions().values()); ValidationHelper.validate(this.getGlobalActions()); ValidationHelper.validate(this.getInitialActions()); ValidationHelper.validate(this.getCommonActions().values()); ValidationHelper.validate(this.getSteps()); ValidationHelper.validate(this.getSplits()); ValidationHelper.validate(this.getJoins()); Set actions = new HashSet(); Iterator i = globalActions.iterator(); while (i.hasNext()) { ActionDescriptor action = (ActionDescriptor) i.next(); actions.add(new Integer(action.getId())); } i = getSteps().iterator(); while (i.hasNext()) { StepDescriptor step = (StepDescriptor) i.next(); Iterator j = step.getActions().iterator(); while (j.hasNext()) { ActionDescriptor action = (ActionDescriptor) j.next(); // check to see if it's a common action (dups are ok, since that's the point of common // actions!) if (!action.isCommon()) { if (!actions.add(new Integer(action.getId()))) { throw new InvalidWorkflowDescriptorException( "Duplicate occurance of action ID " + action.getId() + " found in step " + step.getId()); } } } } // now we have all our unique actions, let's check that no common action id's exist in them i = commonActions.keySet().iterator(); while (i.hasNext()) { Integer action = (Integer) i.next(); if (actions.contains(action)) { throw new InvalidWorkflowDescriptorException( "common-action ID " + action + " is duplicated in a step action"); } } i = initialActions.iterator(); while (i.hasNext()) { ActionDescriptor action = (ActionDescriptor) i.next(); if (actions.contains(new Integer(action.getId()))) { throw new InvalidWorkflowDescriptorException( "initial-action ID " + action + " is duplicated in a step action"); } } validateDTD(); }