端到端功能 节点展开部分代码提交
This commit is contained in:
parent
acb645d381
commit
9ca7ae12d2
Binary file not shown.
@ -105,44 +105,71 @@ public class GraphNodeExpandHandle {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 节点展开
|
* 节点展开
|
||||||
|
* @param direction 排布方向
|
||||||
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public void handleNodeExpand() throws Exception{
|
public void handleNodeExpand(String direction) throws Exception{
|
||||||
|
|
||||||
Thread t1 = new Thread(() -> {
|
Thread t1 = new Thread(() -> {
|
||||||
// 1、子流程节点内部元素处理 包括范围标注框处理
|
// 1、总图节点以及连线处理
|
||||||
handleRelationModelNodePosition();
|
handleEndToEndGraphNodeAndLinker(direction);
|
||||||
});
|
});
|
||||||
t1.start();
|
t1.start();
|
||||||
|
|
||||||
Thread t2 = new Thread(() -> {
|
Thread t2 = new Thread(() -> {
|
||||||
// 2、子流程节点外部其它节点的位置处理
|
// 2、子流程节点内部元素处理
|
||||||
handleEndToEndGraphNodeExcluedExpandNode();
|
handleRelationModelNodePosition();
|
||||||
});
|
});
|
||||||
t2.start();
|
t2.start();
|
||||||
|
|
||||||
t1.join();
|
t1.join();
|
||||||
t2.join();
|
t2.join();
|
||||||
|
|
||||||
// 3、构建邻接矩阵
|
|
||||||
NodeExpandAdjMatrix expandAdjMatrix = buildEndToEndGraphAdjMatrix();
|
|
||||||
expandAdjMatrix.buildAdjMatrix();
|
|
||||||
// 5、根据邻接矩阵重新连线
|
|
||||||
|
|
||||||
// 6、保存总图模型信息 以及 子流程模型信息备份
|
// 6、保存总图模型信息 以及 子流程模型信息备份
|
||||||
|
BaseModel baseModel = apiManager.getDefinition(repositoryId, 0);
|
||||||
|
baseModel.setDefinition(endToEndProcessDefine.toJSONString());
|
||||||
|
apiManager.storeDefinition(baseModel);
|
||||||
|
|
||||||
|
apiManager.storeChildProcessDefine(baseModel, relationFileId, childProcessDefine.toJSONString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理子流程中所有节点的坐标
|
* 处理总图中的节点与连线
|
||||||
|
* 1、删除待展开的节点
|
||||||
|
* 2、替换为范围选择框
|
||||||
|
* 3、节点x > 范围标注框x || 节点y < 范围标注框y 针对符合条件的节点 进行坐标调整
|
||||||
|
* 4、根据旧有连线关系构建邻接矩阵
|
||||||
|
* 5、获取当前总图中的所有节点的坐标
|
||||||
|
* 6、删除旧有连线关系
|
||||||
|
* 7、构建新的连线关系
|
||||||
*/
|
*/
|
||||||
private void handleRelationModelNodePosition(){
|
private void handleEndToEndGraphNodeAndLinker(String direction){
|
||||||
|
// 1、删除当前要展开的节点
|
||||||
// 删除当前要展开的节点
|
|
||||||
removeEndToEndGraphElements(shapeId);
|
removeEndToEndGraphElements(shapeId);
|
||||||
|
|
||||||
// 添加到总图中
|
// 2、添加到总图中
|
||||||
addEndToEndGraphElements(scopeLimitationShape);
|
addEndToEndGraphElements(scopeLimitationShape);
|
||||||
|
|
||||||
|
// 3、总图中符合范围选择框条件的节点 坐标更新
|
||||||
|
handleEndToEndGraphNodeExcluedExpandNode();
|
||||||
|
|
||||||
|
// 4、构建邻接矩阵
|
||||||
|
NodeExpandAdjMatrix expandAdjMatrix = buildEndToEndGraphAdjMatrix();
|
||||||
|
expandAdjMatrix.buildAdjMatrix();
|
||||||
|
// 5、删除节点展开前的连线
|
||||||
|
removeEndToEndGraphOldLinker();
|
||||||
|
// 6、获取所有节点坐标
|
||||||
|
JSONObject elements = endToEndProcessDefine.getJSONObject("elements");
|
||||||
|
double[][] vertexPosition = expandAdjMatrix.getVertexPosition(elements);
|
||||||
|
// 7、构建新的连线
|
||||||
|
NodeExpandLinkerRender linkerRender = new NodeExpandLinkerRender(vertexPosition, expandAdjMatrix);
|
||||||
|
linkerRender.toAssembleLinker(direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理待展开节点所代表的流程文件中的节点的坐标
|
||||||
|
*/
|
||||||
|
private void handleRelationModelNodePosition(){
|
||||||
// 范围标注框 坐标
|
// 范围标注框 坐标
|
||||||
JSONObject scopeShapeProps = scopeLimitationShape.getJSONObject("props");
|
JSONObject scopeShapeProps = scopeLimitationShape.getJSONObject("props");
|
||||||
double scopeShapeX = scopeShapeProps.getDoubleValue("x");
|
double scopeShapeX = scopeShapeProps.getDoubleValue("x");
|
||||||
@ -185,6 +212,7 @@ public class GraphNodeExpandHandle {
|
|||||||
|
|
||||||
for (String key : elements.keySet()) {
|
for (String key : elements.keySet()) {
|
||||||
JSONObject ele = elements.getJSONObject(key);
|
JSONObject ele = elements.getJSONObject(key);
|
||||||
|
if ("linker".equals(ele.getString("name"))) continue; // 连线先不处理
|
||||||
JSONObject props = ele.getJSONObject("props");
|
JSONObject props = ele.getJSONObject("props");
|
||||||
if (props.getDoubleValue("x") > scopeShapeX) { // 当前元素在待展开节点的右侧
|
if (props.getDoubleValue("x") > scopeShapeX) { // 当前元素在待展开节点的右侧
|
||||||
props.put("x", props.getDoubleValue("x") + scopeShapeW);
|
props.put("x", props.getDoubleValue("x") + scopeShapeW);
|
||||||
@ -197,7 +225,6 @@ public class GraphNodeExpandHandle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建节点展开前 端到端总图的邻接矩阵
|
* 构建节点展开前 端到端总图的邻接矩阵
|
||||||
* 方便后续节点展开或者闭合进行重新连线
|
* 方便后续节点展开或者闭合进行重新连线
|
||||||
@ -208,11 +235,9 @@ public class GraphNodeExpandHandle {
|
|||||||
List<JSONObject> linkerList = new ArrayList<>();
|
List<JSONObject> linkerList = new ArrayList<>();
|
||||||
JSONObject endToEndProcessElements = endToEndProcessDefine.getJSONObject("elements");
|
JSONObject endToEndProcessElements = endToEndProcessDefine.getJSONObject("elements");
|
||||||
for (String key : endToEndProcessElements.keySet()) {
|
for (String key : endToEndProcessElements.keySet()) {
|
||||||
JSONObject ele = endToEndProcessDefine.getJSONObject(key);
|
JSONObject ele = endToEndProcessElements.getJSONObject(key);
|
||||||
if ("linker".equals(ele.getString("name"))) {
|
if ("linker".equals(ele.getString("name"))) {
|
||||||
linkerList.add(ele);
|
linkerList.add(ele);
|
||||||
// 删除旧有的连线
|
|
||||||
removeEndToEndGraphElements(key);
|
|
||||||
}else {
|
}else {
|
||||||
nodeIdList.add(key);
|
nodeIdList.add(key);
|
||||||
}
|
}
|
||||||
@ -221,6 +246,19 @@ public class GraphNodeExpandHandle {
|
|||||||
return expandAdjMatrix;
|
return expandAdjMatrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除总图中节点展开前的连线
|
||||||
|
*/
|
||||||
|
private void removeEndToEndGraphOldLinker(){
|
||||||
|
JSONObject elements = endToEndProcessDefine.getJSONObject("elements");
|
||||||
|
for (String key : elements.keySet()) {
|
||||||
|
JSONObject ele = elements.getJSONObject(key);
|
||||||
|
if ("linker".equals(ele.getString("name"))){
|
||||||
|
removeEndToEndGraphElements(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 存储子流程模型信息
|
* 存储子流程模型信息
|
||||||
* 在总图存储的同一级目录下
|
* 在总图存储的同一级目录下
|
||||||
@ -260,6 +298,9 @@ public class GraphNodeExpandHandle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 节点展开的邻接矩阵
|
||||||
|
*/
|
||||||
class NodeExpandAdjMatrix{
|
class NodeExpandAdjMatrix{
|
||||||
|
|
||||||
private int[][] adjMatrix;
|
private int[][] adjMatrix;
|
||||||
@ -307,6 +348,14 @@ class NodeExpandAdjMatrix{
|
|||||||
return adjMatrix;
|
return adjMatrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String> getNodeIds() {
|
||||||
|
return nodeIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<JSONObject> getLinkerList() {
|
||||||
|
return linkerList;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建邻接矩阵
|
* 构建邻接矩阵
|
||||||
*/
|
*/
|
||||||
@ -319,4 +368,56 @@ class NodeExpandAdjMatrix{
|
|||||||
addEdge(fromIndex, toIndex);
|
addEdge(fromIndex, toIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 输出邻接矩阵
|
||||||
|
public void printAdjMatrix() {
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
for (int i = 0; i < nodeIds.size(); i++) {
|
||||||
|
for (int j = 0; j < nodeIds.size(); j++) {
|
||||||
|
sb.append(adjMatrix[i][j]).append(" ");
|
||||||
|
}
|
||||||
|
sb.append("\n");
|
||||||
|
}
|
||||||
|
System.out.println(sb.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取总图中节点展开前的所有节点坐标
|
||||||
|
* @param elements
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public double[][] getVertexPosition(JSONObject elements){
|
||||||
|
double[][] position = new double[nodeIds.size()][2];
|
||||||
|
for (int i = 0; i < nodeIds.size(); i++) {
|
||||||
|
JSONObject shape = elements.getJSONObject(nodeIds.get(i));
|
||||||
|
JSONObject props = shape.getJSONObject("props");
|
||||||
|
double x = props.getDoubleValue("x");
|
||||||
|
double y = props.getDoubleValue("y");
|
||||||
|
position[i][0] = x;
|
||||||
|
position[i][1] = y;
|
||||||
|
}
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 节点展开后连线重构
|
||||||
|
*/
|
||||||
|
class NodeExpandLinkerRender{
|
||||||
|
|
||||||
|
private List<String> nodeIds; // 图形节点ID集合
|
||||||
|
private double[][] vertexPosition; // 所有节点的坐标
|
||||||
|
private NodeExpandAdjMatrix expandAdjMatrix; // 节点矩阵
|
||||||
|
|
||||||
|
public NodeExpandLinkerRender(double[][] vertexPosition, NodeExpandAdjMatrix expandAdjMatrix) {
|
||||||
|
this.nodeIds = expandAdjMatrix.getNodeIds();
|
||||||
|
this.vertexPosition = vertexPosition;
|
||||||
|
this.expandAdjMatrix = expandAdjMatrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JSONArray toAssembleLinker(String direction){
|
||||||
|
JSONArray linkers = new JSONArray();
|
||||||
|
|
||||||
|
return linkers;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -303,7 +303,7 @@ public class SubProcessWeb extends ActionWeb {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void shapeNodeExpand(String repositoryId, String shapeId){
|
public void shapeNodeExpand(String repositoryId, String shapeId, String direction){
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 以当前节点展开涉及到动作拆分:
|
* 以当前节点展开涉及到动作拆分:
|
||||||
@ -323,7 +323,7 @@ public class SubProcessWeb extends ActionWeb {
|
|||||||
|
|
||||||
GraphNodeExpandHandle nodeExpandHandle = new GraphNodeExpandHandle(repositoryId, shapeId);
|
GraphNodeExpandHandle nodeExpandHandle = new GraphNodeExpandHandle(repositoryId, shapeId);
|
||||||
try {
|
try {
|
||||||
nodeExpandHandle.handleNodeExpand();
|
nodeExpandHandle.handleNodeExpand(direction);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user