use of org.flowable.engine.repository.Model in project plumdo-work by wengwh.
the class ProcessDefinitionGetModelResource method processDefinitionGetModel.
@RequestMapping(value = "/process-definition/{processDefinitionId}/getModel", method = RequestMethod.GET, produces = "application/json", name = "流程定义获取对应模型")
public ModelResponse processDefinitionGetModel(@PathVariable String processDefinitionId) {
ProcessDefinition processDefinition = getProcessDefinitionFromRequest(processDefinitionId);
try {
Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(processDefinition.getDeploymentId()).singleResult();
if (deployment == null) {
throw new FlowableObjectNotFoundException("Could not find a process deployment with id '" + processDefinition.getDeploymentId() + "'.", Deployment.class);
}
Model modelData = null;
if (deployment.getCategory() != null) {
modelData = repositoryService.getModel(deployment.getCategory());
}
// 如果不存在,创建对应模型
if (modelData == null) {
InputStream bpmnStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getResourceName());
XMLInputFactory xif = XMLInputFactory.newInstance();
InputStreamReader in = new InputStreamReader(bpmnStream, "UTF-8");
XMLStreamReader xtr = xif.createXMLStreamReader(in);
BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr);
BpmnJsonConverter converter = new BpmnJsonConverter();
ObjectNode modelNode = converter.convertToJson(bpmnModel);
modelData = repositoryService.newModel();
modelData.setKey(processDefinition.getKey());
modelData.setName(processDefinition.getName());
modelData.setCategory(processDefinition.getCategory());
ObjectNode modelObjectNode = new ObjectMapper().createObjectNode();
modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processDefinition.getName());
modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, processDefinition.getDescription());
modelData.setMetaInfo(modelObjectNode.toString());
repositoryService.saveModel(modelData);
repositoryService.addModelEditorSource(modelData.getId(), modelNode.toString().getBytes("utf-8"));
repositoryService.addModelEditorSourceExtra(modelData.getId(), IOUtils.toByteArray(managementService.executeCommand(new GetDeploymentProcessDiagramCmd(processDefinitionId))));
repositoryService.setDeploymentCategory(processDefinition.getDeploymentId(), modelData.getId());
}
return restResponseFactory.createModelResponse(modelData);
} catch (Exception e) {
throw new FlowableException("Error process-definition get model", e);
}
}
use of org.flowable.engine.repository.Model in project plumdo-work by wengwh.
the class ProcessDefinitionToModelResource method processDefinitionToModel.
@RequestMapping(value = "/process-definition/{processDefinitionId}/toModel", method = RequestMethod.PUT, produces = "application/json", name = "流程定义转换模型")
@ResponseStatus(value = HttpStatus.OK)
@Transactional(propagation = Propagation.REQUIRED)
public ModelResponse processDefinitionToModel(@PathVariable String processDefinitionId) {
ProcessDefinition processDefinition = getProcessDefinitionFromRequest(processDefinitionId);
try {
InputStream bpmnStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getResourceName());
XMLInputFactory xif = XMLInputFactory.newInstance();
InputStreamReader in = new InputStreamReader(bpmnStream, "UTF-8");
XMLStreamReader xtr = xif.createXMLStreamReader(in);
BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr);
BpmnJsonConverter converter = new BpmnJsonConverter();
ObjectNode modelNode = converter.convertToJson(bpmnModel);
Model modelData = repositoryService.newModel();
modelData.setKey(processDefinition.getKey());
modelData.setName(processDefinition.getName());
modelData.setCategory(processDefinition.getCategory());
ObjectNode modelObjectNode = new ObjectMapper().createObjectNode();
modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processDefinition.getName());
modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, processDefinition.getDescription());
modelData.setMetaInfo(modelObjectNode.toString());
repositoryService.saveModel(modelData);
repositoryService.addModelEditorSource(modelData.getId(), modelNode.toString().getBytes("utf-8"));
repositoryService.addModelEditorSourceExtra(modelData.getId(), IOUtils.toByteArray(repositoryService.getProcessDiagram(processDefinition.getId())));
return restResponseFactory.createModelResponse(modelData);
} catch (Exception e) {
throw new FlowableException("Error converting process-definition to model", e);
}
}
use of org.flowable.engine.repository.Model in project plumdo-work by wengwh.
the class ModelResource method createModel.
@RequestMapping(value = "/model", method = RequestMethod.POST, produces = "application/json", name = "模型创建")
@ResponseStatus(value = HttpStatus.CREATED)
@Transactional(propagation = Propagation.REQUIRED)
public ModelResponse createModel(@RequestBody ModelRequest modelRequest) {
Model model = repositoryService.newModel();
model.setCategory(modelRequest.getCategory());
model.setKey(modelRequest.getKey());
model.setMetaInfo(modelRequest.getMetaInfo());
model.setName(modelRequest.getName());
model.setVersion(modelRequest.getVersion());
model.setTenantId(modelRequest.getTenantId());
repositoryService.saveModel(model);
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode editorNode = objectMapper.createObjectNode();
editorNode.put(EditorJsonConstants.EDITOR_STENCIL_ID, "canvas");
editorNode.put(EditorJsonConstants.EDITOR_SHAPE_ID, "canvas");
// 设置流程定义初始化的key和name
ObjectNode propertieNode = objectMapper.createObjectNode();
if (StringUtils.isNotEmpty(model.getKey())) {
propertieNode.put(StencilConstants.PROPERTY_PROCESS_ID, model.getKey());
} else {
propertieNode.put(StencilConstants.PROPERTY_PROCESS_ID, "model_" + model.getId());
}
propertieNode.put(StencilConstants.PROPERTY_NAME, model.getName());
editorNode.set(EditorJsonConstants.EDITOR_SHAPE_PROPERTIES, propertieNode);
ObjectNode stencilSetNode = objectMapper.createObjectNode();
stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");
editorNode.set("stencilset", stencilSetNode);
try {
repositoryService.addModelEditorSource(model.getId(), editorNode.toString().getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
throw new FlowableConflictException("create model exception :" + e.getMessage());
}
return restResponseFactory.createModelResponse(model);
}
use of org.flowable.engine.repository.Model in project plumdo-work by wengwh.
the class ModelResource method updateModel.
@RequestMapping(value = "/model/{modelId}", method = RequestMethod.PUT, produces = "application/json", name = "模型修改")
public ModelResponse updateModel(@PathVariable String modelId, @RequestBody ModelRequest modelRequest) {
Model model = getModelFromRequest(modelId);
if (modelRequest.isCategoryChanged()) {
model.setCategory(modelRequest.getCategory());
}
if (modelRequest.isKeyChanged()) {
model.setKey(modelRequest.getKey());
}
if (modelRequest.isMetaInfoChanged()) {
model.setMetaInfo(modelRequest.getMetaInfo());
}
if (modelRequest.isNameChanged()) {
model.setName(modelRequest.getName());
}
if (modelRequest.isVersionChanged()) {
model.setVersion(modelRequest.getVersion());
}
if (modelRequest.isTenantIdChanged()) {
model.setTenantId(modelRequest.getTenantId());
}
if (modelRequest.isClearDeployChanged()) {
if (modelRequest.getClearDeployId()) {
model.setDeploymentId(null);
}
}
repositoryService.saveModel(model);
return restResponseFactory.createModelResponse(model);
}
use of org.flowable.engine.repository.Model in project plumdo-work by wengwh.
the class ModelCopyResource method copyModel.
@RequestMapping(value = "/model/{modelId}/copy", method = RequestMethod.POST, produces = "application/json", name = "模型复制")
@ResponseStatus(value = HttpStatus.OK)
@Transactional(propagation = Propagation.REQUIRED)
public ModelResponse copyModel(@PathVariable String modelId, @RequestBody(required = false) ModelRequest modelRequest) {
Model model = getModelFromRequest(modelId);
try {
Model modelData = repositoryService.newModel();
if (modelRequest != null && modelRequest.isKeyChanged()) {
modelData.setKey(modelRequest.getKey());
} else {
modelData.setKey(model.getKey());
}
if (modelRequest != null && modelRequest.isNameChanged()) {
modelData.setName(modelRequest.getName());
} else {
modelData.setName(model.getName());
}
if (modelRequest != null && modelRequest.isCategoryChanged()) {
modelData.setCategory(modelRequest.getCategory());
} else {
modelData.setCategory(model.getCategory());
}
if (modelRequest != null && modelRequest.isMetaInfoChanged()) {
modelData.setMetaInfo(modelRequest.getMetaInfo());
} else {
modelData.setMetaInfo(model.getMetaInfo());
}
if (modelRequest != null && modelRequest.isVersionChanged()) {
modelData.setVersion(modelRequest.getVersion());
} else {
modelData.setVersion(model.getVersion());
}
if (modelRequest != null && modelRequest.isTenantIdChanged()) {
modelData.setTenantId(modelRequest.getTenantId());
} else {
modelData.setTenantId(model.getTenantId());
}
repositoryService.saveModel(modelData);
repositoryService.addModelEditorSource(modelData.getId(), repositoryService.getModelEditorSource(modelId));
repositoryService.addModelEditorSourceExtra(modelData.getId(), repositoryService.getModelEditorSourceExtra(modelId));
return restResponseFactory.createModelResponse(modelData);
} catch (Exception e) {
throw new FlowableException("Error copy model", e);
}
}
Aggregations