package org.activiti.editor.language.json.converter; import java.util.Iterator; import java.util.Map; import java.util.logging.Level; import org.activiti.bpmn.model.BaseElement; import org.activiti.bpmn.model.FieldExtension; import org.activiti.bpmn.model.FlowElement; import org.activiti.bpmn.model.ImplementationType; //import org.activiti.bpmn.model.JenkinsTask; import org.activiti.bpmn.model.ServiceTask; import org.activiti.bpmn.model.UserTask; import org.apache.commons.lang.StringUtils; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.node.ArrayNode; import org.codehaus.jackson.node.ObjectNode; public class JenkinsTaskJsonConverter extends BaseBpmnJsonConverter { public final static String JSON_JENKINSTASK_JOB_NAME = "job_name"; public final static String JSON_JENKINSTASK_MANUAL_LAUNCH_MODE = "is_manual_job_launch_mode"; public final static String XML_JENKINSTASK_DELEGATE_CLASS = "com.cisco.step.jenkins.plugins.jenkow.JenkinsTaskDelegate"; public final static String XML_JENKINSTASK_JOB_NAME = "jobName"; public final static String XML_JENKINSTASK_MANUAL_LAUNCH_MODE = "isManualJobLaunchMode"; 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_JENKINS, JenkinsTaskJsonConverter.class); } public static void fillBpmnTypes(Map<Class<? extends BaseElement>, Class<? extends BaseBpmnJsonConverter>> convertersToJsonMap) { // Because the Jenkins Task is mapped to a ServiceTask, the ServiceTaskJsonConverter has to map back } @Override protected String getStencilId(FlowElement flowElement) { return STENCIL_TASK_JENKINS; } @Override protected void convertElementToJson(ObjectNode propertiesNode, FlowElement flowElement) { ServiceTask serviceTask = (ServiceTask)flowElement; for (FieldExtension extension : serviceTask.getFieldExtensions()) { ObjectNode propertyItemNode = objectMapper.createObjectNode(); String fn = extension.getFieldName(); String val = extension.getStringValue(); // TODO should have a better way to map these attributes! if (XML_JENKINSTASK_JOB_NAME.equals(fn)){ propertiesNode.put(JSON_JENKINSTASK_JOB_NAME,val); }else if (XML_JENKINSTASK_MANUAL_LAUNCH_MODE.equals(fn)){ propertiesNode.put(JSON_JENKINSTASK_MANUAL_LAUNCH_MODE,val); } } } @Override protected FlowElement convertJsonToElement(JsonNode elementNode, JsonNode modelNode, Map<String, JsonNode> shapeMap) { ServiceTask task = new ServiceTask(); task.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_CLASS); task.setImplementation(XML_JENKINSTASK_DELEGATE_CLASS); String jobName = getPropertyValueAsString(JSON_JENKINSTASK_JOB_NAME, elementNode); if (StringUtils.isNotEmpty(jobName)) { FieldExtension f1 = new FieldExtension(); f1.setFieldName(XML_JENKINSTASK_JOB_NAME); f1.setStringValue(jobName); task.getFieldExtensions().add(f1); } FieldExtension f2 = new FieldExtension(); f2.setFieldName(XML_JENKINSTASK_MANUAL_LAUNCH_MODE); f2.setStringValue(Boolean.toString(getPropertyValueAsBoolean(JSON_JENKINSTASK_MANUAL_LAUNCH_MODE, elementNode))); task.getFieldExtensions().add(f2); convertJsonToFormProperties(elementNode, task); return task; } }