Commit e95ead65 authored by gavin2lee's avatar gavin2lee
Browse files

#2154 add public workflow preview interface

parent e330b498
Showing with 153 additions and 80 deletions
+153 -80
......@@ -14,6 +14,7 @@ import com.webank.wecube.platform.core.dto.plugin.CommonResponseDto;
import com.webank.wecube.platform.core.dto.workflow.DynamicWorkflowInstCreationInfoDto;
import com.webank.wecube.platform.core.dto.workflow.DynamicWorkflowInstInfoDto;
import com.webank.wecube.platform.core.dto.workflow.ProcInstTerminationRequestDto;
import com.webank.wecube.platform.core.dto.workflow.ProcessDataPreviewDto;
import com.webank.wecube.platform.core.dto.workflow.WorkflowDefInfoDto;
import com.webank.wecube.platform.core.dto.workflow.WorkflowNodeDefInfoDto;
import com.webank.wecube.platform.core.service.workflow.WorkflowPublicAccessService;
......@@ -49,4 +50,11 @@ public class WorkflowPublicAccessController {
workflowPublicAccessService.createWorkflowInstanceTerminationRequest(requestDto);
return CommonResponseDto.okay();
}
@GetMapping("/public/process/definitions/{proc-def-id}/preview/entities/{entity-data-id}")
public CommonResponseDto getProcessDataPreview(@PathVariable("proc-def-id") String procDefId,
@PathVariable("entity-data-id") String dataId) {
ProcessDataPreviewDto result = workflowPublicAccessService.generateProcessDataPreview(procDefId, dataId);
return CommonResponseDto.okayWithData(result);
}
}
......@@ -13,6 +13,8 @@ public class GraphNodeDto {
private String displayName;
private String id;
private Object entityData;
private List<String> previousIds = new ArrayList<>();
private List<String> succeedingIds = new ArrayList<>();
......@@ -26,10 +28,10 @@ public class GraphNodeDto {
}
public String getId() {
if(StringUtils.isBlank(id)){
if (StringUtils.isBlank(id)) {
this.id = buildId();
}
return id;
}
......@@ -108,4 +110,13 @@ public class GraphNodeDto {
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public Object getEntityData() {
return entityData;
}
public void setEntityData(Object entityData) {
this.entityData = entityData;
}
}
......@@ -4,30 +4,30 @@ import java.util.ArrayList;
import java.util.List;
public class ProcessDataPreviewDto {
private List<GraphNodeDto> entityTreeNodes = new ArrayList<>();
private String processSessionId;
public List<GraphNodeDto> getEntityTreeNodes() {
return entityTreeNodes;
}
public void setEntityTreeNodes(List<GraphNodeDto> entityTreeNodes) {
this.entityTreeNodes = entityTreeNodes;
}
public void addAllEntityTreeNodes(List<GraphNodeDto> entityTreeNodes) {
if (entityTreeNodes == null) {
return;
}
this.entityTreeNodes.addAll(entityTreeNodes);
}
public String getProcessSessionId() {
return processSessionId;
}
public void setProcessSessionId(String processSessionId) {
this.processSessionId = processSessionId;
}
private List<GraphNodeDto> entityTreeNodes = new ArrayList<>();
private String processSessionId;
public List<GraphNodeDto> getEntityTreeNodes() {
return entityTreeNodes;
}
public void setEntityTreeNodes(List<GraphNodeDto> entityTreeNodes) {
this.entityTreeNodes = entityTreeNodes;
}
public void addAllEntityTreeNodes(List<GraphNodeDto> entityTreeNodes) {
if (entityTreeNodes == null) {
return;
}
this.entityTreeNodes.addAll(entityTreeNodes);
}
public String getProcessSessionId() {
return processSessionId;
}
public void setProcessSessionId(String processSessionId) {
this.processSessionId = processSessionId;
}
}
......@@ -4,34 +4,34 @@ import java.util.ArrayList;
import java.util.List;
public class EntityTreeNodesOverview {
private List<TreeNode> hierarchicalEntityNodes = new ArrayList<>();
private List<TreeNode> leafNodeEntityNodes = new ArrayList<>();
public List<TreeNode> getHierarchicalEntityNodes() {
return hierarchicalEntityNodes;
}
public void setHierarchicalEntityNodes(List<TreeNode> hierarchicalEntityNodes) {
this.hierarchicalEntityNodes = hierarchicalEntityNodes;
}
public List<TreeNode> getLeafNodeEntityNodes() {
return leafNodeEntityNodes;
}
public void setLeafNodeEntityNodes(List<TreeNode> leafNodeEntityNodes) {
this.leafNodeEntityNodes = leafNodeEntityNodes;
}
public void addLeafNodeEntityNodes(TreeNode... leafNodeEntityNodes) {
for (TreeNode tn : leafNodeEntityNodes) {
this.leafNodeEntityNodes.add(tn);
}
}
public void addHierarchicalEntityNodes(TreeNode... hierarchicalEntityNodes) {
for (TreeNode tn : hierarchicalEntityNodes) {
this.hierarchicalEntityNodes.add(tn);
}
}
private List<TreeNode> hierarchicalEntityNodes = new ArrayList<>();
private List<TreeNode> leafNodeEntityNodes = new ArrayList<>();
public List<TreeNode> getHierarchicalEntityNodes() {
return hierarchicalEntityNodes;
}
public void setHierarchicalEntityNodes(List<TreeNode> hierarchicalEntityNodes) {
this.hierarchicalEntityNodes = hierarchicalEntityNodes;
}
public List<TreeNode> getLeafNodeEntityNodes() {
return leafNodeEntityNodes;
}
public void setLeafNodeEntityNodes(List<TreeNode> leafNodeEntityNodes) {
this.leafNodeEntityNodes = leafNodeEntityNodes;
}
public void addLeafNodeEntityNodes(TreeNode... leafNodeEntityNodes) {
for (TreeNode tn : leafNodeEntityNodes) {
this.leafNodeEntityNodes.add(tn);
}
}
public void addHierarchicalEntityNodes(TreeNode... hierarchicalEntityNodes) {
for (TreeNode tn : hierarchicalEntityNodes) {
this.hierarchicalEntityNodes.add(tn);
}
}
}
......@@ -45,6 +45,7 @@ public class StandardEntityQueryExecutor implements EntityQueryExecutor {
currTreeNode.setDisplayName(delegate.getDisplayName());
currTreeNode.setEntityName(delegate.getEntityName());
currTreeNode.setPackageName(delegate.getPackageName());
currTreeNode.setEntityData(delegate.getEntityData());
result.add(currTreeNode);
}
......@@ -59,6 +60,7 @@ public class StandardEntityQueryExecutor implements EntityQueryExecutor {
prevTreeNode.setDisplayName(prevDelegate.getDisplayName());
prevTreeNode.setEntityName(prevDelegate.getEntityName());
prevTreeNode.setPackageName(prevDelegate.getPackageName());
prevTreeNode.setEntityData(prevDelegate.getEntityData());
result.add(prevTreeNode);
}
......@@ -76,6 +78,7 @@ public class StandardEntityQueryExecutor implements EntityQueryExecutor {
succeedingTreeNode.setDisplayName(succeedingDelegate.getDisplayName());
succeedingTreeNode.setEntityName(succeedingDelegate.getEntityName());
succeedingTreeNode.setPackageName(succeedingDelegate.getPackageName());
succeedingTreeNode.setEntityData(succeedingDelegate.getEntityData());
result.add(succeedingTreeNode);
}
......@@ -611,6 +614,7 @@ public class StandardEntityQueryExecutor implements EntityQueryExecutor {
tn.setEntityName(leafLinkNode.getExprNodeInfo().getEntityName());
tn.setDisplayName(delegate.getDisplayName());
tn.setRootId(delegate.getId());
tn.setEntityData(delegate.getEntityData());
result.add(tn);
}
......
......@@ -11,6 +11,7 @@ public class TreeNode {
private String entityName;
private Object rootId;
private Object displayName;
private Object entityData;
private TreeNode parent;
private List<TreeNode> children = new ArrayList<>();
......@@ -122,4 +123,13 @@ public class TreeNode {
return new HashCodeBuilder(17, 37).append(getPackageName()).append(getEntityName()).append(getRootId())
.toHashCode();
}
public Object getEntityData() {
return entityData;
}
public void setEntityData(Object entityData) {
this.entityData = entityData;
}
}
......@@ -590,6 +590,31 @@ public class WorkflowDataService {
return previewDto;
}
/**
*
* @param procDefId
* @param dataId
* @return
*/
public ProcessDataPreviewDto generateProcessDataPreviewWithoutStorage(String procDefId, String dataId) {
if (StringUtils.isBlank(procDefId) || StringUtils.isBlank(dataId)) {
throw new WecubeCoreException("3189", "Process definition ID or entity ID is not provided.");
}
ProcDefOutlineDto procDefOutline = workflowProcDefService.getProcessDefinitionOutline(procDefId);
if (procDefOutline == null) {
log.debug("process definition with id {} does not exist.", procDefId);
throw new WecubeCoreException("3190",
String.format("Such process definition {%s} does not exist.", procDefId), procDefId);
}
ProcessDataPreviewDto previewDto = doFetchProcessPreviewData(procDefOutline, dataId, false);
return previewDto;
}
private List<InterfaceParameterDto> prepareNodeParameters() {
List<InterfaceParameterDto> predefinedParams = new ArrayList<>();
......@@ -790,6 +815,7 @@ public class WorkflowDataService {
currNode.setPackageName(tn.getPackageName());
currNode.setEntityName(tn.getEntityName());
currNode.setDisplayName(tn.getDisplayName() == null ? null : tn.getDisplayName().toString());
currNode.setEntityData(tn.getEntityData());
addToResult(hierarchicalEntityNodes, currNode);
}
......
......@@ -20,6 +20,7 @@ import com.webank.wecube.platform.core.dto.workflow.DynamicWorkflowInstCreationI
import com.webank.wecube.platform.core.dto.workflow.DynamicWorkflowInstInfoDto;
import com.webank.wecube.platform.core.dto.workflow.ProcInstInfoDto;
import com.webank.wecube.platform.core.dto.workflow.ProcInstTerminationRequestDto;
import com.webank.wecube.platform.core.dto.workflow.ProcessDataPreviewDto;
import com.webank.wecube.platform.core.dto.workflow.RegisteredEntityAttrDefDto;
import com.webank.wecube.platform.core.dto.workflow.RegisteredEntityDefDto;
import com.webank.wecube.platform.core.dto.workflow.StartProcInstRequestDto;
......@@ -61,24 +62,35 @@ public class WorkflowPublicAccessService {
@Autowired
private EntityQueryExpressionParser entityQueryExpressionParser;
@Autowired
private WorkflowProcInstService workflowProcInstService;
@Autowired
private WorkflowDataService workflowDataService;
public ProcessDataPreviewDto generateProcessDataPreview(String procDefId, String dataId) {
ProcessDataPreviewDto previewDto = workflowDataService.generateProcessDataPreviewWithoutStorage(procDefId,
dataId);
return previewDto;
}
/**
*
* @param requestDto
*/
public void createWorkflowInstanceTerminationRequest(ProcInstTerminationRequestDto requestDto){
if(requestDto == null){
public void createWorkflowInstanceTerminationRequest(ProcInstTerminationRequestDto requestDto) {
if (requestDto == null) {
throw new WecubeCoreException("3320", "Unknown which process instance to terminate.");
}
if(StringUtils.isBlank(requestDto.getProcInstId())){
if (StringUtils.isBlank(requestDto.getProcInstId())) {
throw new WecubeCoreException("3320", "Unknown which process instance to terminate.");
}
int procInstId = Integer.parseInt(requestDto.getProcInstId());
workflowProcInstService.createProcessInstanceTermination(procInstId);
}
......@@ -203,7 +215,7 @@ public class WorkflowPublicAccessService {
*/
public DynamicWorkflowInstInfoDto createNewWorkflowInstance(DynamicWorkflowInstCreationInfoDto creationInfoDto) {
log.info("try to create new workflow instance with data: {}", creationInfoDto);
StartProcInstRequestDto requestDto = calculateStartProcInstContext(creationInfoDto);
ProcInstInfoDto createdProcInstInfoDto = workflowProcInstService.createProcessInstance(requestDto);
DynamicWorkflowInstInfoDto resultDto = new DynamicWorkflowInstInfoDto();
......@@ -212,43 +224,44 @@ public class WorkflowPublicAccessService {
resultDto.setProcDefKey(createdProcInstInfoDto.getProcDefKey());
resultDto.setProcInstKey(createdProcInstInfoDto.getProcInstKey());
resultDto.setStatus(createdProcInstInfoDto.getStatus());
return resultDto;
}
private StartProcInstRequestDto calculateStartProcInstContext(DynamicWorkflowInstCreationInfoDto creationInfoDto) {
StartProcInstRequestDto requestDto = new StartProcInstRequestDto();
requestDto.setEntityDataId(creationInfoDto.getRootEntityValue().getDataId());
requestDto.setEntityDisplayName(null);
requestDto.setEntityTypeId(creationInfoDto.getRootEntityValue().getPackageName()+":"+creationInfoDto.getRootEntityValue().getEntityName());
requestDto.setEntityTypeId(creationInfoDto.getRootEntityValue().getPackageName() + ":"
+ creationInfoDto.getRootEntityValue().getEntityName());
requestDto.setProcDefId(creationInfoDto.getProcDefId());
List<DynamicTaskNodeBindInfoDto> taskNodeBindInfos = creationInfoDto.getTaskNodeBindInfos();
if(taskNodeBindInfos == null) {
if (taskNodeBindInfos == null) {
taskNodeBindInfos = new ArrayList<>();
}
List<TaskNodeDefObjectBindInfoDto> taskNodeBinds = new ArrayList<>();
for(DynamicTaskNodeBindInfoDto dynamicBindInfoDto : taskNodeBindInfos) {
for (DynamicTaskNodeBindInfoDto dynamicBindInfoDto : taskNodeBindInfos) {
List<DynamicEntityValueDto> boundEntityValues = dynamicBindInfoDto.getBoundEntityValues();
if(boundEntityValues == null || boundEntityValues.isEmpty()) {
if (boundEntityValues == null || boundEntityValues.isEmpty()) {
continue;
}
for(DynamicEntityValueDto entityValueDto : boundEntityValues) {
for (DynamicEntityValueDto entityValueDto : boundEntityValues) {
TaskNodeDefObjectBindInfoDto bindDto = new TaskNodeDefObjectBindInfoDto();
bindDto.setBound("Y");
bindDto.setEntityDataId(entityValueDto.getDataId());
bindDto.setEntityDisplayName(null);
bindDto.setEntityTypeId(entityValueDto.getPackageName()+":"+entityValueDto.getEntityName());
bindDto.setEntityTypeId(entityValueDto.getPackageName() + ":" + entityValueDto.getEntityName());
bindDto.setNodeDefId(dynamicBindInfoDto.getNodeDefId());
bindDto.setOrderedNo("");
taskNodeBinds.add(bindDto);
}
}
requestDto.setTaskNodeBinds(taskNodeBinds);
return requestDto;
}
......@@ -337,7 +350,8 @@ public class WorkflowPublicAccessService {
}
private List<ProcDefAuthInfoQueryEntity> retrieveAllAuthorizedProcDefs(Set<String> roleNames) {
List<ProcDefAuthInfoQueryEntity> procDefInfos = this.procDefInfoRepository.selectAllAuthorizedProcDefs(roleNames);
List<ProcDefAuthInfoQueryEntity> procDefInfos = this.procDefInfoRepository
.selectAllAuthorizedProcDefs(roleNames);
return procDefInfos;
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment