/* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.activiti.workflow.simple.definition; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @author Joram Barrez * @author Tijs Rademakers */ @SuppressWarnings("unchecked") public abstract class AbstractStepDefinitionContainer<T> implements StepDefinitionContainer<T> { protected String id; protected List<StepDefinition> steps; public AbstractStepDefinitionContainer() { this.steps = new ArrayList<StepDefinition>(); } public String getId() { return id; } public void setId(String id) { this.id = id; } public void addStep(StepDefinition stepDefinition) { steps.add(stepDefinition); } public List<StepDefinition> getSteps() { return steps; } // Human step public T addHumanStep(String id, String name, String assignee) { return (T) addHumanStep(id, name, assignee, false); } public T addHumanStep(String name, String assignee) { return (T) addHumanStep(null, name, assignee, false); } public T addHumanStepForWorkflowInitiator(String id, String name) { return (T) addHumanStep(id, name, null, true); } public T addHumanStepForWorkflowInitiator(String name) { return (T) addHumanStep(null, name, null, true); } public T addHumanStepForGroup(String name, List<String> groups) { HumanStepDefinition humanStepDefinition = createHumanStepDefinition(name); humanStepDefinition.setCandidateGroups(groups); return (T) this; } public T addHumanStepForGroup(String id, String name, List<String> groups) { HumanStepDefinition humanStepDefinition = createHumanStepDefinition(name); humanStepDefinition.setCandidateGroups(groups); return (T) this; } public T addHumanStepForGroup(String name, String...groups) { return addHumanStepForGroup(name, Arrays.asList(groups)); } protected T addHumanStep(String id, String name, String assignee, boolean initiator) { createHumanStepDefinition(name, assignee, initiator); return (T) this; } protected HumanStepDefinition createHumanStepDefinition(String name) { return createHumanStepDefinition(name, null); } protected HumanStepDefinition createHumanStepDefinition(String name, String assignee) { return createHumanStepDefinition(name, assignee, false); } protected HumanStepDefinition createHumanStepDefinition(String name, String assignee, boolean initiator) { return createHumanStepDefinition(null, name, assignee, initiator); } protected HumanStepDefinition createHumanStepDefinition(String id, String name, String assignee, boolean initiator) { HumanStepDefinition humanStepDefinition = new HumanStepDefinition(); humanStepDefinition.setId(id); humanStepDefinition.setName(name); humanStepDefinition.setAssignee(assignee); // TODO // humanStepDefinition.setAssigneeIsInitiator(initiator); addStep(humanStepDefinition); return humanStepDefinition; } // Feedback step public T addFeedbackStep(String name, String initiator) { return addFeedbackStep(name, initiator, null); } public T addFeedbackStep(String name, String initiator, List<String> feedbackProviders) { FeedbackStepDefinition feedbackStepDefinition = new FeedbackStepDefinition(); feedbackStepDefinition.setName(name); feedbackStepDefinition.setFeedbackInitiator(initiator); if (feedbackProviders != null) { feedbackStepDefinition.setFeedbackProviders(feedbackProviders); } addStep(feedbackStepDefinition); return (T) this; } // Script step public T addScriptStep(String script) { return addScriptStep(null, script); } public T addScriptStep(String name, String script) { ScriptStepDefinition scriptStepDefinition = new ScriptStepDefinition(); scriptStepDefinition.setName(name); scriptStepDefinition.setScript(script); addStep(scriptStepDefinition); return (T) this; } }