Java tutorial
/** * *//* * Copyright 2015-2017 the original author or authors. * * 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 com.funtl.framework.smoke.core.modules.act.service; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.List; import javax.servlet.http.HttpServletResponse; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.funtl.framework.smoke.core.commons.persistence.Page; import com.funtl.framework.smoke.core.commons.service.BaseService; import org.activiti.bpmn.converter.BpmnXMLConverter; import org.activiti.bpmn.model.BpmnModel; import org.activiti.editor.constants.ModelDataJsonConstants; import org.activiti.editor.language.json.converter.BpmnJsonConverter; import org.activiti.engine.ActivitiException; import org.activiti.engine.RepositoryService; import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.Model; import org.activiti.engine.repository.ModelQuery; import org.activiti.engine.repository.ProcessDefinition; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * ?Controller * * @author * @version 2013-11-03 */ @Service @Transactional(readOnly = true) public class ActModelService extends BaseService { @Autowired private RepositoryService repositoryService; // @Autowired // private ObjectMapper objectMapper; protected ObjectMapper objectMapper = new ObjectMapper(); /** * ? */ public Page<Model> modelList(Page<Model> page, String category) { ModelQuery modelQuery = repositoryService.createModelQuery().latestVersion().orderByLastUpdateTime().desc(); if (StringUtils.isNotEmpty(category)) { modelQuery.modelCategory(category); } page.setCount(modelQuery.count()); page.setList(modelQuery.listPage(page.getFirstResult(), page.getMaxResults())); return page; } /** * * * @throws UnsupportedEncodingException */ @Transactional(readOnly = false) public Model create(String name, String key, String description, String category) throws UnsupportedEncodingException { ObjectNode editorNode = objectMapper.createObjectNode(); editorNode.put("id", "canvas"); editorNode.put("resourceId", "canvas"); ObjectNode properties = objectMapper.createObjectNode(); properties.put("process_author", "lusifer"); editorNode.set("properties", properties); // editorNode.put("properties", properties); // - 2016-09-03 by Lusifer ObjectNode stencilset = objectMapper.createObjectNode(); stencilset.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#"); editorNode.set("stencilset", stencilset); // editorNode.put("stencilset", stencilset); // - 2016-09-03 by Lusifer Model modelData = repositoryService.newModel(); description = StringUtils.defaultString(description); modelData.setKey(StringUtils.defaultString(key)); modelData.setName(name); modelData.setCategory(category); modelData.setVersion(Integer.parseInt( String.valueOf(repositoryService.createModelQuery().modelKey(modelData.getKey()).count() + 1))); ObjectNode modelObjectNode = objectMapper.createObjectNode(); modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, name); modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, modelData.getVersion()); modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description); modelData.setMetaInfo(modelObjectNode.toString()); repositoryService.saveModel(modelData); repositoryService.addModelEditorSource(modelData.getId(), editorNode.toString().getBytes("utf-8")); return modelData; } /** * ?Model? */ @Transactional(readOnly = false) public String deploy(String id) { String message = ""; try { Model modelData = repositoryService.getModel(id); BpmnJsonConverter jsonConverter = new BpmnJsonConverter(); JsonNode editorNode = new ObjectMapper() .readTree(repositoryService.getModelEditorSource(modelData.getId())); BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editorNode); BpmnXMLConverter xmlConverter = new BpmnXMLConverter(); byte[] bpmnBytes = xmlConverter.convertToXML(bpmnModel); String processName = modelData.getName(); if (!StringUtils.endsWith(processName, ".bpmn20.xml")) { processName += ".bpmn20.xml"; } // System.out.println("========="+processName+"============"+modelData.getName()); ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes); Deployment deployment = repositoryService.createDeployment().name(modelData.getName()) .addInputStream(processName, in).deploy(); // .addString(processName, new String(bpmnBytes)).deploy(); // ? List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery() .deploymentId(deployment.getId()).list(); for (ProcessDefinition processDefinition : list) { repositoryService.setProcessDefinitionCategory(processDefinition.getId(), modelData.getCategory()); message = "??ID=" + processDefinition.getId(); } if (list.size() == 0) { message = "?"; } } catch (Exception e) { throw new ActivitiException("?ID=" + id, e); } return message; } /** * modelxml * * @throws IOException * @throws JsonProcessingException */ public void export(String id, HttpServletResponse response) { try { Model modelData = repositoryService.getModel(id); BpmnJsonConverter jsonConverter = new BpmnJsonConverter(); JsonNode editorNode = new ObjectMapper() .readTree(repositoryService.getModelEditorSource(modelData.getId())); BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editorNode); BpmnXMLConverter xmlConverter = new BpmnXMLConverter(); byte[] bpmnBytes = xmlConverter.convertToXML(bpmnModel); ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes); IOUtils.copy(in, response.getOutputStream()); String filename = bpmnModel.getMainProcess().getId() + ".bpmn20.xml"; response.setHeader("Content-Disposition", "attachment; filename=" + filename); response.flushBuffer(); } catch (Exception e) { throw new ActivitiException("modelxmlID=" + id, e); } } /** * Model */ @Transactional(readOnly = false) public void updateCategory(String id, String category) { Model modelData = repositoryService.getModel(id); modelData.setCategory(category); repositoryService.saveModel(modelData); } /** * * * @param id * @return */ @Transactional(readOnly = false) public void delete(String id) { repositoryService.deleteModel(id); } }