/* 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.HashMap; import java.util.List; import org.activiti.workflow.simple.definition.HumanStepAssignment.HumanStepAssignmentType; import org.activiti.workflow.simple.definition.form.FormDefinition; import org.activiti.workflow.simple.exception.SimpleWorkflowException; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonTypeName; /** * Defines a step that must be executed by a human actor. * * @author Joram Barrez */ @JsonTypeName("human-step") public class HumanStepDefinition extends AbstractNamedStepDefinition implements FormStepDefinition { private static final long serialVersionUID = 1L; protected FormDefinition form; protected HumanStepAssignment assignment; @JsonIgnore public HumanStepAssignmentType getAssignmentType() { return ensureAssignment().getType(); } public String getAssignee() { return ensureAssignment().getAssignee(); } public HumanStepDefinition setAssignee(String assignee) { ensureAssignment().setAssignee(assignee); return this; } public List<String> getCandidateUsers() { return ensureAssignment().getCandidateUsers(); } public HumanStepDefinition setCandidateUsers(List<String> candidateUsers) { ensureAssignment().setCandidateUsers(candidateUsers); return this; } public List<String> getCandidateGroups() { return ensureAssignment().getCandidateGroups(); } public HumanStepDefinition setCandidateGroups(List<String> candidateGroups) { ensureAssignment().setCandidateGroups(candidateGroups); return this; } public FormDefinition getForm() { return form; } public HumanStepDefinition addForm(FormDefinition form) { this.form = form; return this; } public void setForm(FormDefinition form) { this.form = form; } public HumanStepAssignment getAssignment() { return ensureAssignment(); } public void setAssignment(HumanStepAssignment assignment) { this.assignment = assignment; } protected HumanStepAssignment ensureAssignment() { if(assignment == null) { assignment = new HumanStepAssignment(); } return assignment; } @Override public StepDefinition clone() { HumanStepDefinition clone = new HumanStepDefinition(); clone.setValues(this); return clone; } @Override public void setValues(StepDefinition otherDefinition) { if(!(otherDefinition instanceof HumanStepDefinition)) { throw new SimpleWorkflowException("An instance of HumanStepDefinition is required to set values"); } HumanStepDefinition stepDefinition = (HumanStepDefinition) otherDefinition; setAssignee(stepDefinition.getAssignee()); if (stepDefinition.getCandidateGroups() != null && !stepDefinition.getCandidateGroups().isEmpty()) { setCandidateGroups(new ArrayList<String>(stepDefinition.getCandidateGroups())); } if (stepDefinition.getCandidateUsers() != null && !stepDefinition.getCandidateUsers().isEmpty()) { setCandidateUsers(new ArrayList<String>(stepDefinition.getCandidateUsers())); } setDescription(stepDefinition.getDescription()); if (stepDefinition.getForm() != null) { setForm(stepDefinition.getForm().clone()); } else { setForm(null); } setId(stepDefinition.getId()); setName(stepDefinition.getName()); setStartsWithPrevious(stepDefinition.isStartsWithPrevious()); getAssignment().setType(stepDefinition.getAssignmentType()); setParameters(new HashMap<String, Object>(otherDefinition.getParameters())); } }