package com.highdatas.mdm.service.impl; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.highdatas.mdm.pojo.Result; import com.highdatas.mdm.service.ModelEditorService; import com.highdatas.mdm.util.DbUtils; import org.activiti.editor.constants.ModelDataJsonConstants; import org.activiti.engine.ActivitiException; import org.activiti.engine.RepositoryService; import org.activiti.engine.repository.Model; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.MultiValueMap; import java.io.InputStream; import java.io.UnsupportedEncodingException; /** * @author kimi * @description * @date 2019-12-11 14:41 */ @Service public class ModelEditorServiceImpl implements ModelEditorService, ModelDataJsonConstants { protected static final Logger LOGGER = LoggerFactory.getLogger(ModelEditorServiceImpl.class); @Autowired private RepositoryService repositoryService; @Autowired private ObjectMapper objectMapper; @Override public ObjectNode getEditorJson(String modelId) { ObjectNode modelNode = null; Model model = repositoryService.getModel(modelId); if (model != null) { try { if (StringUtils.isNotEmpty(model.getMetaInfo())) { modelNode = (ObjectNode) objectMapper.readTree(model.getMetaInfo()); } else { modelNode = objectMapper.createObjectNode(); modelNode.put(MODEL_NAME, model.getName()); } modelNode.put(MODEL_ID, model.getId()); byte[] modelEditorSource = repositoryService.getModelEditorSource(model.getId()); String s = new String(modelEditorSource, "utf-8"); ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(s); modelNode.put("model", editorJsonNode); } catch (Exception e) { LOGGER.error("Error creating model JSON", e); throw new ActivitiException("Error creating model JSON", e); } }else { } return modelNode; } @Override public Result saveModel(String modelId, MultiValueMap values) { return null; } @Override public String getStencilset() { InputStream stencilsetStream = this.getClass().getClassLoader().getResourceAsStream("static/process/stencilset_cn.json"); try { return IOUtils.toString(stencilsetStream, "utf-8"); } catch (Exception e) { throw new ActivitiException("Error while loading stencil set", e); } } @Override public String createModel() { //初始化一个空模型 Model model = repositoryService.newModel(); //设置一些默认信息 String name = "new-process"; String description = ""; int revision = 1; String key = DbUtils.getRandomString(8); ObjectNode modelNode = objectMapper.createObjectNode(); modelNode.put(ModelDataJsonConstants.MODEL_NAME, name); modelNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description); modelNode.put(ModelDataJsonConstants.MODEL_REVISION, revision); model.setName(name); model.setKey(key); model.setMetaInfo(modelNode.toString()); repositoryService.saveModel(model); String id = model.getId(); //完善ModelEditorSource ObjectNode editorNode = objectMapper.createObjectNode(); editorNode.put("id", "canvas"); editorNode.put("resourceId", "canvas"); ObjectNode stencilSetNode = objectMapper.createObjectNode(); stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#"); editorNode.put("stencilset", stencilSetNode); try { repositoryService.addModelEditorSource(id,editorNode.toString().getBytes("utf-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return model.getId(); } }