/* 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.HashMap; import java.util.Map; import org.activiti.bpmn.converter.BpmnXMLConverter; import org.activiti.bpmn.model.BpmnModel; import org.activiti.workflow.simple.converter.WorkflowDefinitionConversion; import org.activiti.workflow.simple.definition.form.FormDefinition; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; /** * Allows to create simple workflows through an easy, fluent Java API. * * For example: * * WorkflowDefinition workflowDefinition = new WorkflowDefinition() * .name("testWorkflow") * .description("This is a test workflow") * .inParallel() * .addHumanStep("first task", "kermit") * .addHumanStep("second step", "gonzo") * .addHumanStep("thrid task", "mispiggy") * .endParallel() * .addHumanStep("Task in between", "kermit") * .inParallel() * .addHumanStep("fourth task", "gonzo") * .addHumanStep("fifth step", "gonzo") * .endParallel(); * * Feed this {@link WorkflowDefinition} instance to a {@link WorkflowDefinitionConversion} * and it will convert it a to a {@link BpmnModel}, which in it turn can be used * to generate valid BPMN 2.0 through the {@link BpmnXMLConverter}. * * The reason why we're not just using the {@link BpmnModel} and it's related * classes to generate bpmn 2.0 xml, is because this class and it's related classes * are a layer on top of them, allowing to easily create patterns. Such patterns are * for example a parallel block ({@link ParallelStepsDefinition}) or a choice step. * These can be expressed in their {@link BpmnModel} counterpart of course, * but these abstraction are much easier to read and use. * * @author Joram Barrez */ public class WorkflowDefinition extends AbstractStepDefinitionContainer<WorkflowDefinition> { protected String key; protected String name; protected String description; protected String category; protected FormDefinition startFormDefinition; protected ParallelStepsDefinition currentParallelStepsDefinition; protected ChoiceStepsDefinition currentChoiceStepsDefinition; protected Map<String, Object> parameters = new HashMap<String, Object>(); public String getName() { return name; } public void setName(String name) { this.name = name; } public WorkflowDefinition name(String name) { setName(name); return this; } public WorkflowDefinition id(String id) { setId(id); return this; } public void setId(String id) { this.id = id; } public String getId() { return id; } public WorkflowDefinition key(String key) { setKey(key); return this; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public WorkflowDefinition description(String description) { setDescription(description); return this; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public WorkflowDefinition category(String category) { setCategory(category); return this; } @JsonInclude(Include.NON_EMPTY) public Map<String, Object> getParameters() { return parameters; } public void setParameters(Map<String, Object> parameters) { this.parameters = parameters; } public ParallelStepsDefinition inParallel() { currentParallelStepsDefinition = new ParallelStepsDefinition(this); addStep(currentParallelStepsDefinition); return currentParallelStepsDefinition; } public ChoiceStepsDefinition inChoice() { currentChoiceStepsDefinition = new ChoiceStepsDefinition(this); addStep(currentChoiceStepsDefinition); return currentChoiceStepsDefinition; } public FormDefinition getStartFormDefinition() { return startFormDefinition; } public void setStartFormDefinition(FormDefinition startFormDefinition) { this.startFormDefinition = startFormDefinition; } public WorkflowDefinition startFormdefinition(FormDefinition startFormDefinition) { this.startFormDefinition = startFormDefinition; return this; } }