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<String, String> 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();
|
}
|
}
|