Package com.founder.fix.fixflow.editor.language.json.converter

Source Code of com.founder.fix.fixflow.editor.language.json.converter.UserTaskJsonConverter

/**
*  Copyright 1996-2013 Founder International Co.,Ltd.
*
* 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.
*
* @author ych
* @author kenshin
*/
package com.founder.fix.fixflow.editor.language.json.converter;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.founder.fix.fixflow.editor.language.json.converter.BaseBpmnJsonConverter;
import com.founder.fix.fixflow.editor.language.json.converter.UserTaskJsonConverter;
import org.apache.commons.lang3.StringUtils;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.node.ArrayNode;
import org.codehaus.jackson.node.ObjectNode;
import org.eclipse.bpmn2.BaseElement;
import org.eclipse.bpmn2.Bpmn2Factory;
import org.eclipse.bpmn2.FlowElement;
import org.eclipse.bpmn2.FormalExpression;
import org.eclipse.bpmn2.PotentialOwner;
import org.eclipse.bpmn2.ResourceAssignmentExpression;
import org.eclipse.bpmn2.ResourceRole;
import org.eclipse.bpmn2.UserTask;

import com.founder.fix.bpmn2extensions.fixflow.AssignPolicyType;
import com.founder.fix.bpmn2extensions.fixflow.Expression;
import com.founder.fix.bpmn2extensions.fixflow.FixFlowFactory;
import com.founder.fix.bpmn2extensions.fixflow.FixFlowPackage;
import com.founder.fix.bpmn2extensions.fixflow.FormUri;
import com.founder.fix.bpmn2extensions.fixflow.FormUriView;
import com.founder.fix.bpmn2extensions.fixflow.TaskCommand;
import com.founder.fix.bpmn2extensions.fixflow.TaskPriority;
import com.founder.fix.bpmn2extensions.fixflow.TaskSubject;
import com.founder.fix.fixflow.core.impl.bpmn.behavior.TaskCommandInst;
import com.founder.fix.fixflow.core.impl.bpmn.behavior.UserTaskBehavior;
import com.founder.fix.fixflow.core.impl.util.BpmnModelUtil;
import com.founder.fix.fixflow.core.impl.util.StringUtil;
import com.founder.fix.fixflow.editor.language.json.converter.util.JsonConverterUtil;


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(UserTaskBehavior.class, UserTaskJsonConverter.class);
    }
   
    @Override
    protected String getStencilId(FlowElement flowElement) {
      return STENCIL_TASK_USER;
    }
   
    @Override
    protected void convertElementToJson(ObjectNode propertiesNode, FlowElement flowElement) {
      UserTaskBehavior userTask = (UserTaskBehavior) flowElement;
      List<ResourceRole> resources = userTask.getResources();
      //任务分配
      setPropertyValue(PROPERTY_USERTASK_POLICYTYPE, userTask.getAssignPolicyType().getId(), propertiesNode);
      Expression assigneeExpression = userTask.getAssignPolicyType().getExpression();
      if(assigneeExpression != null){
        setPropertyValue(PROPERTY_USERTASK_ASSIGNEXPRESSION, assigneeExpression.getValue(), propertiesNode);
      }
      if(resources != null){
        ObjectNode assignmentNode = objectMapper.createObjectNode();
        ArrayNode itemsNode = objectMapper.createArrayNode();
        for(ResourceRole resource :resources){
          if(resource != null){
            String resourceType = StringUtil.getString(resource.eGet(FixFlowPackage.Literals.DOCUMENT_ROOT__RESOURCE_TYPE, true));
            String isContainsSub = StringUtil.getString(resource.eGet(FixFlowPackage.Literals.DOCUMENT_ROOT__IS_CONTAINS_SUB, true));
            String resourceExpression = BpmnModelUtil.getExpression(resource.getResourceAssignmentExpression().getExpression());
            String resourceName = resource.getName();
            ObjectNode assignmentItemNode = objectMapper.createObjectNode();
            assignmentItemNode.put(PROPERTY_USERTASK_RESOURCE_TYPE, resourceType);
            assignmentItemNode.put(PROPERTY_USERTASK_RESOURCE_IS_CONTAINSSUB, isContainsSub);
            assignmentItemNode.put(PROPERTY_USERTASK_RESOURCE_EXPRESSION, resourceExpression);
            assignmentItemNode.put(PROPERTY_USERTASK_RESOURCE_NAME, resourceName);
            itemsNode.add(assignmentItemNode);
          }
        }
        assignmentNode.put("totalCount", itemsNode.size());
        assignmentNode.put(EDITOR_PROPERTIES_GENERAL_ITEMS, itemsNode);
        propertiesNode.put(PROPERTY_USERTASK_ASSIGNMENT, assignmentNode);
      }
      //处理命令
      List<TaskCommandInst> commandList =  userTask.getTaskCommands();
      if(commandList != null){
        ObjectNode commandNode = objectMapper.createObjectNode();
        ArrayNode itemsNode = objectMapper.createArrayNode();
        for(TaskCommandInst command :commandList){
          String commandId = command.getId();
          String commandType = command.getTaskCommandType();
          String commandName = command.getName();
          String commandExpression = command.getExpression();
          String isSaveData = StringUtil.getString(command.isSaveData());
          String isVerification = StringUtil.getString(command.isVerification());
          String isSimulationRun = StringUtil.getString(command.isSimulationRun());
          String parameterExpression = command.getExpressionParam();
         
          ObjectNode taskCommandNode = objectMapper.createObjectNode();
          taskCommandNode.put(PROPERTY_TASKCOMMAND_ID, commandId);
          taskCommandNode.put(PROPERTY_TASKCOMMAND_NAME, commandName);
          taskCommandNode.put(PROPERTY_TASKCOMMAND_TYPE, commandType);
          taskCommandNode.put(PROPERTY_TASKCOMMAND_EXPRESSION, commandExpression);
          taskCommandNode.put(PROPERTY_TASKCOMMAND_IS_SAVEDATA, isSaveData);
          taskCommandNode.put(PROPERTY_TASKCOMMAND_IS_SIMULATION_RUN, isSimulationRun);
          taskCommandNode.put(PROPERTY_TASKCOMMAND_IS_VERIFICATION, isVerification);
          taskCommandNode.put(PROPERTY_TASKCOMMAND_PARA_EXPRESSION, parameterExpression);
          itemsNode.add(taskCommandNode);
        }
        commandNode.put("totalCount", itemsNode.size());
        commandNode.put(EDITOR_PROPERTIES_GENERAL_ITEMS, itemsNode);
          propertiesNode.put(PROPERTY_TASKCOMMAND, commandNode);
      }
      //任务主题
      if(userTask.getTaskSubject() !=null){
        setPropertyValue(PROPERTY_USERTASK_SUBJECT, userTask.getTaskSubject().getExpressionValue(), propertiesNode);
      }
      //任务类型
      if(userTask.getTaskInstanceType() != null){
        setPropertyValue(PROPERTY_USERTASK_TASKTYPE, StringUtil.getString(userTask.getTaskInstanceType()), propertiesNode);
      }
      //任务优先级
      if (userTask.getTaskPriority() != null) {
        setPropertyValue(PROPERTY_PRIORITY, userTask.getTaskPriority(), propertiesNode);
      }
      //操作表单
      setPropertyValue(PROPERTY_FORMURI, userTask.getFormUri(), propertiesNode);
      //浏览表单
      setPropertyValue(PROPERTY_FORMURI_VIEW, userTask.getFormUriView(), propertiesNode);
    }
 
    @Override
    protected FlowElement convertJsonToElement(JsonNode elementNode, JsonNode modelNode, Map<String, JsonNode> shapeMap) {
      UserTask task = Bpmn2Factory.eINSTANCE.createUserTask();// UserTask();
      //任务主题
      JsonNode processSubject = JsonConverterUtil.getProperty(PROPERTY_USERTASK_SUBJECT, elementNode);
      if(processSubject != null && StringUtils.isNotEmpty(processSubject.asText())) {
        TaskSubject taskSubject = FixFlowFactory.eINSTANCE.createTaskSubject();
        Expression subjectExpression = FixFlowFactory.eINSTANCE.createExpression();
        subjectExpression.setName(processSubject.asText());
        subjectExpression.setValue(processSubject.asText());
        taskSubject.setExpression(subjectExpression);
        taskSubject.setId("TaskSubject_1");
        BpmnModelUtil.addExtensionElement(task, FixFlowPackage.Literals.DOCUMENT_ROOT__TASK_SUBJECT, taskSubject);
      }
     
      //任务类型
      JsonNode taskTypeNode = getProperty(PROPERTY_USERTASK_TASKTYPE, elementNode);
      if(taskTypeNode != null){
        BpmnModelUtil.addExtensionAttribute(task, FixFlowPackage.Literals.DOCUMENT_ROOT__TASK_TYPE, taskTypeNode.asText());
      }
     
      //任务优先级
      JsonNode taskPriorityNode = getProperty(PROPERTY_PRIORITY, elementNode);
      if(taskPriorityNode != null){
        TaskPriority taskPriority = FixFlowFactory.eINSTANCE.createTaskPriority();
        Expression taskPriorityExpression = FixFlowFactory.eINSTANCE.createExpression();
        taskPriorityExpression.setName(taskPriorityNode.asText());
        taskPriorityExpression.setValue(taskPriorityNode.asText());
        taskPriority.setExpression(taskPriorityExpression);
        BpmnModelUtil.addExtensionElement(task, FixFlowPackage.Literals.DOCUMENT_ROOT__TASK_PRIORITY, taskPriority);
      }
     
      //任务命令
      JsonNode taskCommandNode = getProperty(PROPERTY_TASKCOMMAND, elementNode);
      if(taskCommandNode != null){
        JsonNode itemsNode = taskCommandNode.get(EDITOR_PROPERTIES_GENERAL_ITEMS);
        if(itemsNode !=null){
          Iterator<JsonNode> taskcommandIterator = itemsNode.getElements();
          while(taskcommandIterator.hasNext()) {
            JsonNode taskCommandItemNode = taskcommandIterator.next();
            TaskCommand taskCommand = FixFlowFactory.eINSTANCE.createTaskCommand();
            String commandName = taskCommandItemNode.get(PROPERTY_TASKCOMMAND_NAME).asText();
            String commandId = taskCommandItemNode.get(PROPERTY_TASKCOMMAND_ID).asText();
            String commandType = taskCommandItemNode.get(PROPERTY_TASKCOMMAND_TYPE).asText();
            String isSaveData = taskCommandItemNode.get(PROPERTY_TASKCOMMAND_IS_SAVEDATA).asText();
            String isSimulation =  taskCommandItemNode.get(PROPERTY_TASKCOMMAND_IS_SIMULATION_RUN).asText();
            String isVerify = taskCommandItemNode.get(PROPERTY_TASKCOMMAND_IS_VERIFICATION).asText();
            String paraExpression = taskCommandItemNode.get(PROPERTY_TASKCOMMAND_PARA_EXPRESSION).asText();
            String expression = taskCommandItemNode.get(PROPERTY_TASKCOMMAND_EXPRESSION).asText();
             
            taskCommand.setCommandType(commandType);
            taskCommand.setId(commandId);
            taskCommand.setName(commandName);
            taskCommand.setIsSimulationRun(isSimulation);
            taskCommand.setIsSaveData(isSaveData);
            taskCommand.setIsVerification(isVerify);
            //执行表达式
            Expression expression2 = FixFlowFactory.eINSTANCE.createExpression();
            expression2.setName(expression);
            expression2.setValue(expression);
            taskCommand.setExpression(expression2);
            //参数表达式
            Expression expression3 = FixFlowFactory.eINSTANCE.createExpression();
            expression3.setName(paraExpression);
            expression3.setValue(paraExpression);
            taskCommand.setParameterExpression(expression3);
            BpmnModelUtil.addExtensionElement(task, FixFlowPackage.Literals.DOCUMENT_ROOT__TASK_COMMAND, taskCommand);
          }
        }
      }
     
      //默认表单
      JsonNode usertaskFormUri = JsonConverterUtil.getProperty(PROPERTY_FORMURI, elementNode);
      if(usertaskFormUri != null && StringUtil.isNotEmpty(usertaskFormUri.asText())){
        FormUri formUri = FixFlowFactory.eINSTANCE.createFormUri();
        Expression expression = FixFlowFactory.eINSTANCE.createExpression();
        expression.setName(usertaskFormUri.asText());
        expression.setValue(usertaskFormUri.asText());
        formUri.setExpression(expression);
        BpmnModelUtil.addExtensionElement(task, FixFlowPackage.Literals.DOCUMENT_ROOT__FORM_URI, formUri);
      }
      //浏览表单
      JsonNode usertaskFormUriView = JsonConverterUtil.getProperty(PROPERTY_FORMURI_VIEW, elementNode);
      if(usertaskFormUriView != null && StringUtil.isNotEmpty(usertaskFormUriView.asText())){
        FormUriView formUri = FixFlowFactory.eINSTANCE.createFormUriView();
        Expression expression = FixFlowFactory.eINSTANCE.createExpression();
        expression.setName(usertaskFormUriView.asText());
        expression.setValue(usertaskFormUriView.asText());
        formUri.setExpression(expression);
        BpmnModelUtil.addExtensionElement(task, FixFlowPackage.Literals.DOCUMENT_ROOT__FORM_URI_VIEW, formUri);
      }
      //分配策略
      JsonNode policyTypeNode = getProperty(PROPERTY_USERTASK_POLICYTYPE, elementNode);
      if(policyTypeNode != null){
        AssignPolicyType assignPolicyType = FixFlowFactory.eINSTANCE.createAssignPolicyType();
        assignPolicyType.setId(policyTypeNode.asText());
        String expressionBody = getPropertyValueAsString(PROPERTY_USERTASK_ASSIGNEXPRESSION, elementNode);
        if(StringUtil.isNotEmpty(expressionBody)){
          Expression policyExpression = FixFlowFactory.eINSTANCE.createExpression();
          policyExpression.setValue(expressionBody);
          policyExpression.setName(expressionBody);
          assignPolicyType.setExpression(policyExpression);
        }
        BpmnModelUtil.addExtensionElement(task, FixFlowPackage.Literals.DOCUMENT_ROOT__ASSIGN_POLICY_TYPE, assignPolicyType);
      }
      //转换处理人
      JsonNode assignmentNode = getProperty(PROPERTY_USERTASK_ASSIGNMENT, elementNode);
      if(assignmentNode != null) {
        JsonNode itemsNode = assignmentNode.get(EDITOR_PROPERTIES_GENERAL_ITEMS);
        if(itemsNode != null) {
          Iterator<JsonNode> assignmentIterator = itemsNode.getElements();
          while (assignmentIterator.hasNext()) {
            JsonNode assignmentItemNode = assignmentIterator.next();
            PotentialOwner potentialOwner = Bpmn2Factory.eINSTANCE.createPotentialOwner();
            String resourceType = assignmentItemNode.get(PROPERTY_USERTASK_RESOURCE_TYPE).asText();
            String includeExclusion = "INCLUDE";
            String isContainSub = assignmentItemNode.get(PROPERTY_USERTASK_RESOURCE_IS_CONTAINSSUB).asText();
            String resourceName = assignmentItemNode.get(PROPERTY_USERTASK_RESOURCE_NAME).asText();
            String expressionBody = assignmentItemNode.get(PROPERTY_USERTASK_RESOURCE_EXPRESSION).asText();
           
            BpmnModelUtil.addExtensionAttribute(potentialOwner, FixFlowPackage.Literals.DOCUMENT_ROOT__RESOURCE_TYPE, resourceType);
            BpmnModelUtil.addExtensionAttribute(potentialOwner, FixFlowPackage.Literals.DOCUMENT_ROOT__INCLUDE_EXCLUSION, includeExclusion);
            BpmnModelUtil.addExtensionAttribute(potentialOwner, FixFlowPackage.Literals.DOCUMENT_ROOT__IS_CONTAINS_SUB, isContainSub);
            ResourceAssignmentExpression resourceAssignmentExpression = Bpmn2Factory.eINSTANCE.createResourceAssignmentExpression();
            potentialOwner.setName(resourceName);
            FormalExpression formalExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            formalExpression.setBody(expressionBody);
            formalExpression.setId(expressionBody);
            resourceAssignmentExpression.setExpression(formalExpression);
            potentialOwner.setResourceAssignmentExpression(resourceAssignmentExpression);
            task.getResources().add(potentialOwner);
          }
        }
      }
      return task;
    }
}
TOP

Related Classes of com.founder.fix.fixflow.editor.language.json.converter.UserTaskJsonConverter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.