/* 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.form; import java.util.ArrayList; import java.util.List; import org.activiti.workflow.simple.definition.HumanStepDefinition; import org.activiti.workflow.simple.exception.SimpleWorkflowException; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * A {@link HumanStepDefinition} (or other) can have a form associated with it * that a user must complete to continue the workflow. * Such a form contains {@link FormPropertyDefinition}s and {@link FormPropertyGroup}s * or potentially a form key, when the properties are not used. * * @author Joram Barrez * @author Frederik Heremans */ public class FormDefinition implements FormPropertyDefinitionContainer { protected String description; protected String formKey; protected List<FormPropertyDefinition> formProperties = new ArrayList<FormPropertyDefinition>(); protected List<FormPropertyGroup> formGroups = new ArrayList<FormPropertyGroup>(); public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } /** * @return All {@link FormPropertyDefinition}s that are not part of any {@link FormPropertyGroup}. */ @JsonDeserialize(contentAs=FormPropertyDefinition.class) @JsonProperty(value="formProperties") public List<FormPropertyDefinition> getFormPropertyDefinitions() { return formProperties; } public void getFormPropertyDefinitions(List<FormPropertyDefinition> formProperties) { this.formProperties = formProperties; } /** * Adds a form property to the form, not part of any group. * @param formProperty the property to add. */ public void addFormProperty(FormPropertyDefinition definition) { formProperties.add(definition); } @Override public boolean removeFormProperty(FormPropertyDefinition definition) { return formProperties.remove(definition); } @JsonSerialize(contentAs=FormPropertyGroup.class) public List<FormPropertyGroup> getFormGroups() { return formGroups; } public void setFormGroups(List<FormPropertyGroup> formGroups) { this.formGroups = formGroups; } /** * Adds a group of properties to this form. * @param group the group to add. */ public void addFormPropertyGroup(FormPropertyGroup group) { this.formGroups.add(group); } public void setFormKey(String formKey) { this.formKey = formKey; } public String getFormKey() { return formKey; } public FormDefinition clone() { FormDefinition clone = new FormDefinition(); clone.setValues(this); return clone; } public void setValues(FormDefinition otherDefinition) { if(!(otherDefinition instanceof FormDefinition)) { throw new SimpleWorkflowException("An instance of FormDefinition is required to set values"); } FormDefinition formDefinition = (FormDefinition) otherDefinition; setFormKey(formDefinition.getFormKey()); setDescription(formDefinition.getDescription()); List<FormPropertyGroup> groupList = new ArrayList<FormPropertyGroup>(); if (formDefinition.getFormGroups() != null && !formDefinition.getFormGroups().isEmpty()) { for (FormPropertyGroup propertyGroup : formDefinition.getFormGroups()) { groupList.add(propertyGroup.clone()); } } setFormGroups(groupList); formProperties = new ArrayList<FormPropertyDefinition>(); if (formDefinition.getFormGroups() != null && !formDefinition.getFormGroups().isEmpty()) { for (FormPropertyDefinition propertyDefinition : formDefinition.getFormPropertyDefinitions()) { formProperties.add(propertyDefinition.clone()); } } } }