/* 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.editor.language.json.converter; import java.util.Map; import org.activiti.bpmn.model.BaseElement; import org.activiti.bpmn.model.FlowElement; import org.activiti.bpmn.model.UserTask; import org.activiti.editor.language.json.converter.util.CollectionUtils; import org.apache.commons.lang3.StringUtils; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers */ public class UserTaskJsonConverter extends BaseBpmnJsonConverter { public static void fillTypes(Map<String, Class<? extends BaseBpmnJsonConverter>> convertersToBpmnMap, Map<Class<? extends BaseElement>, Class<? extends BaseBpmnJsonConverter>> convertersToJsonMap) { fillJsonTypes(convertersToBpmnMap); fillBpmnTypes(convertersToJsonMap); } public static void fillJsonTypes(Map<String, Class<? extends BaseBpmnJsonConverter>> convertersToBpmnMap) { convertersToBpmnMap.put(STENCIL_TASK_USER, UserTaskJsonConverter.class); } public static void fillBpmnTypes(Map<Class<? extends BaseElement>, Class<? extends BaseBpmnJsonConverter>> convertersToJsonMap) { convertersToJsonMap.put(UserTask.class, UserTaskJsonConverter.class); } @Override protected String getStencilId(BaseElement baseElement) { return STENCIL_TASK_USER; } @Override protected void convertElementToJson(ObjectNode propertiesNode, BaseElement baseElement) { UserTask userTask = (UserTask) baseElement; String assignee = userTask.getAssignee(); String owner = userTask.getOwner(); if (StringUtils.isNotEmpty(assignee) || StringUtils.isNotEmpty(owner) || CollectionUtils.isNotEmpty(userTask.getCandidateUsers()) || CollectionUtils.isNotEmpty(userTask.getCandidateGroups())) { ObjectNode assignmentNode = objectMapper.createObjectNode(); ObjectNode assignmentValuesNode = objectMapper.createObjectNode(); if (StringUtils.isNotEmpty(assignee)) { assignmentValuesNode.put(PROPERTY_USERTASK_ASSIGNEE, assignee); } if (StringUtils.isNotEmpty(owner)) { assignmentValuesNode.put(PROPERTY_USERTASK_OWNER, owner); } if (CollectionUtils.isNotEmpty(userTask.getCandidateUsers())) { ArrayNode candidateArrayNode = objectMapper.createArrayNode(); for (String candidateUser : userTask.getCandidateUsers()) { ObjectNode candidateNode = objectMapper.createObjectNode(); candidateNode.put("value", candidateUser); candidateArrayNode.add(candidateNode); } assignmentValuesNode.put(PROPERTY_USERTASK_CANDIDATE_USERS, candidateArrayNode); } if (CollectionUtils.isNotEmpty(userTask.getCandidateGroups())) { ArrayNode candidateArrayNode = objectMapper.createArrayNode(); for (String candidateGroup : userTask.getCandidateGroups()) { ObjectNode candidateNode = objectMapper.createObjectNode(); candidateNode.put("value", candidateGroup); candidateArrayNode.add(candidateNode); } assignmentValuesNode.put(PROPERTY_USERTASK_CANDIDATE_GROUPS, candidateArrayNode); } assignmentNode.put("assignment", assignmentValuesNode); propertiesNode.put(PROPERTY_USERTASK_ASSIGNMENT, assignmentNode); } if (userTask.getPriority() != null) { setPropertyValue(PROPERTY_USERTASK_PRIORITY, userTask.getPriority().toString(), propertiesNode); } if (StringUtils.isNotEmpty(userTask.getFormKey())) { setPropertyValue(PROPERTY_FORMKEY, userTask.getFormKey(), propertiesNode); } setPropertyValue(PROPERTY_USERTASK_DUEDATE, userTask.getDueDate(), propertiesNode); setPropertyValue(PROPERTY_USERTASK_CATEGORY, userTask.getCategory(), propertiesNode); addFormProperties(userTask.getFormProperties(), propertiesNode); } @Override protected FlowElement convertJsonToElement(JsonNode elementNode, JsonNode modelNode, Map<String, JsonNode> shapeMap) { UserTask task = new UserTask(); task.setPriority(getPropertyValueAsString(PROPERTY_USERTASK_PRIORITY, elementNode)); String formKey = getPropertyValueAsString(PROPERTY_FORMKEY, elementNode); if (StringUtils.isNotEmpty(formKey)) { task.setFormKey(formKey); } task.setDueDate(getPropertyValueAsString(PROPERTY_USERTASK_DUEDATE, elementNode)); task.setCategory(getPropertyValueAsString(PROPERTY_USERTASK_CATEGORY, elementNode)); JsonNode assignmentNode = getProperty(PROPERTY_USERTASK_ASSIGNMENT, elementNode); if (assignmentNode != null) { JsonNode assignmentDefNode = assignmentNode.get("assignment"); if (assignmentDefNode != null) { JsonNode assigneeNode = assignmentDefNode.get(PROPERTY_USERTASK_ASSIGNEE); if (assigneeNode != null && assigneeNode.isNull() == false) { task.setAssignee(assigneeNode.asText()); } JsonNode ownerNode = assignmentDefNode.get(PROPERTY_USERTASK_OWNER); if (ownerNode != null && ownerNode.isNull() == false) { task.setOwner(ownerNode.asText()); } task.setCandidateUsers(getValueAsList(PROPERTY_USERTASK_CANDIDATE_USERS, assignmentDefNode)); task.setCandidateGroups(getValueAsList(PROPERTY_USERTASK_CANDIDATE_GROUPS, assignmentDefNode)); } } convertJsonToFormProperties(elementNode, task); return task; } }