package org.jeecg.modules.activiti.controller;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
import org.activiti.engine.ActivitiException;
|
import org.activiti.engine.RepositoryService;
|
import org.activiti.engine.repository.Model;
|
import org.apache.batik.transcoder.TranscoderInput;
|
import org.apache.batik.transcoder.TranscoderOutput;
|
import org.apache.batik.transcoder.image.PNGTranscoder;
|
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.lang.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayOutputStream;
|
import java.io.InputStream;
|
import java.nio.charset.StandardCharsets;
|
|
/**
|
* 模型控制
|
*
|
* @author len
|
* @date 2019/06/13
|
*/
|
@RestController
|
@RequestMapping("/service")
|
public class ServiceController {
|
@Autowired
|
ObjectMapper objectMapper;
|
@Autowired
|
private RepositoryService repositoryService;
|
|
/**
|
* stencilset
|
*
|
* @return stencilset.json
|
*/
|
@RequestMapping(value="/editor/stencilset", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
|
public String getStencilset() {
|
InputStream stencilsetStream = this.getClass().getResourceAsStream("/static/stencilset.json");
|
try {
|
return IOUtils.toString(stencilsetStream, "utf-8");
|
} catch (Exception e) {
|
throw new ActivitiException("Error while loading stencil set", e);
|
}
|
}
|
|
/**
|
* 模型详情
|
*
|
* @param modelId
|
* @return
|
*/
|
@RequestMapping(value="/model/{modelId}/json", method = RequestMethod.GET)
|
public ObjectNode getEditorJson(@PathVariable 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("name", model.getName());
|
}
|
modelNode.put("modelId", model.getId());
|
ObjectNode editorJsonNode = (ObjectNode)objectMapper
|
.readTree(new String(repositoryService.getModelEditorSource(model.getId()), "utf-8"));
|
modelNode.set("model", editorJsonNode);
|
|
} catch (Exception e) {
|
throw new ActivitiException("Error creating model JSON", e);
|
}
|
}
|
return modelNode;
|
}
|
|
/**
|
* 保存
|
*
|
* @param modelId
|
* @param name
|
* @param jsonXml
|
* @param svgXml
|
* @param description
|
*/
|
@RequestMapping(value = "/model/{modelId}/save", method=RequestMethod.PUT)
|
public void saveModel(@PathVariable String modelId, @RequestParam("name") String name,
|
@RequestParam("json_xml") String jsonXml, @RequestParam("svg_xml") String svgXml,
|
@RequestParam("description") String description,HttpServletRequest req) {
|
try {
|
String tenantId = req.getHeader("tenant-id");
|
Model model = repositoryService.getModel(modelId);
|
ObjectNode modelJson = (ObjectNode)objectMapper.readTree(model.getMetaInfo());
|
modelJson.put("name", name);
|
modelJson.put("description", description);
|
model.setMetaInfo(modelJson.toString());
|
model.setName(name);
|
model.setVersion(model.getVersion()+1);
|
model.setTenantId(tenantId);
|
repositoryService.saveModel(model);
|
repositoryService.addModelEditorSource(model.getId(), jsonXml.getBytes(StandardCharsets.UTF_8));
|
|
InputStream svgStream = new ByteArrayInputStream(svgXml.getBytes(StandardCharsets.UTF_8));
|
TranscoderInput input = new TranscoderInput(svgStream);
|
PNGTranscoder transcoder = new PNGTranscoder();
|
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
|
TranscoderOutput output = new TranscoderOutput(outStream);
|
transcoder.transcode(input, output);
|
final byte[] result = outStream.toByteArray();
|
repositoryService.addModelEditorSourceExtra(model.getId(), result);
|
outStream.close();
|
} catch (Exception e) {
|
throw new ActivitiException("Error saving model", e);
|
}
|
}
|
}
|