|
@ -2,6 +2,9 @@ package com.yihu.hos.system.service;
|
|
|
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.yihu.hos.common.graph.BFSGraph;
|
|
|
import com.yihu.hos.common.graph.DGraph;
|
|
|
import com.yihu.hos.common.graph.Edge;
|
|
|
import com.yihu.hos.config.MongoConfig;
|
|
|
import com.yihu.hos.core.datatype.StringUtil;
|
|
|
import com.yihu.hos.core.encrypt.DES;
|
|
@ -108,60 +111,41 @@ public class ProcessManager {
|
|
|
" }\n" +
|
|
|
" }\n" +
|
|
|
"}";
|
|
|
|
|
|
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
JsonNode flowJson = objectMapper.readValue(flowJsonStr, JsonNode.class);
|
|
|
String code = flowJson.get("code").asText();
|
|
|
//sort flow by lines
|
|
|
JsonNode lines = flowJson.get("lines");
|
|
|
Iterator<JsonNode> lineIterator = lines.iterator();
|
|
|
String[] nodeNameArray = new String[lines.size() + 1];
|
|
|
Boolean isFirstLineFlg = true;
|
|
|
while (lineIterator.hasNext()) {
|
|
|
JsonNode line = lineIterator.next();
|
|
|
String nodeNameFrom = line.get("from").asText();
|
|
|
String nodeNameTo = line.get("to").asText();
|
|
|
if (isFirstLineFlg) {
|
|
|
nodeNameArray[0] = nodeNameFrom;
|
|
|
nodeNameArray[1] = nodeNameTo;
|
|
|
isFirstLineFlg = false;
|
|
|
continue;
|
|
|
}
|
|
|
for (int i=0; i<nodeNameArray.length; i++) {
|
|
|
if (nodeNameArray[i].equals(nodeNameFrom)) {
|
|
|
if (StringUtil.isEmpty(nodeNameArray[i + 1])) {
|
|
|
nodeNameArray[i + 1] = nodeNameTo;
|
|
|
} else {
|
|
|
insertArray(nodeNameTo, nodeNameArray, i + 1);
|
|
|
}
|
|
|
break;
|
|
|
} else if (nodeNameArray[i].equals(nodeNameTo)) {
|
|
|
insertArray(nodeNameFrom, nodeNameArray, i);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
JsonNode lines = flowJson.get("lines");
|
|
|
Iterator<Map.Entry<String, JsonNode>> lineIterator = lines.fields();
|
|
|
//get nodeMap by nodes
|
|
|
JsonNode nodes = flowJson.get("nodes");
|
|
|
Map<String, JsonNode> nodeMap = new HashMap<>();
|
|
|
Iterator<Map.Entry<String, JsonNode>> nodeIterator = nodes.fields();
|
|
|
//for the java code import processor class
|
|
|
List<String> processorImport = new ArrayList<>();
|
|
|
Map<String, JsonNode> nodeMap = new HashMap<>();
|
|
|
Map<String, JsonNode> lineMap = new HashMap<>();
|
|
|
DGraph<String> mDG = new BFSGraph<String>();
|
|
|
while (nodeIterator.hasNext()) {
|
|
|
Map.Entry<String, JsonNode> map = nodeIterator.next();
|
|
|
JsonNode node = map.getValue();
|
|
|
String type = node.get("type").asText();
|
|
|
if (type.equals("processor")) {
|
|
|
processorImport.add(node.get("value").asText());
|
|
|
}
|
|
|
nodeMap.put(map.getKey(), map.getValue());
|
|
|
mDG.add(map.getKey());
|
|
|
}
|
|
|
|
|
|
while (lineIterator.hasNext()) {
|
|
|
Map.Entry<String, JsonNode> map = lineIterator.next();
|
|
|
lineMap.put(map.getKey(), map.getValue());
|
|
|
String nodeNameFrom = map.getValue().get("from").asText();
|
|
|
String nodeNameTo = map.getValue().get("to").asText();
|
|
|
mDG.add(new Edge<String>(nodeNameFrom, nodeNameTo, map.getKey()));
|
|
|
}
|
|
|
|
|
|
//generate the java code
|
|
|
return generate(code, processorImport, nodeMap, nodeNameArray);
|
|
|
return generate(code, lineMap, nodeMap, mDG);
|
|
|
}
|
|
|
|
|
|
public String generate(String code, List<String> processorImport, Map<String, JsonNode> nodeMap, String[] nodeNameArray) throws IOException {
|
|
|
public String generate(String code, Map<String, JsonNode> lineMap, Map<String, JsonNode> nodeMap, DGraph<String> mDG) throws IOException {
|
|
|
Boolean isFirstNodeFlg = true;
|
|
|
StringBuilder javaBuilder = new StringBuilder();
|
|
|
String javaName = toUpperCaseFirstOne(code)+"Route";
|
|
@ -169,14 +153,19 @@ public class ProcessManager {
|
|
|
javaBuilder.append("package "+code+".route;\n\n");
|
|
|
javaBuilder.append("import org.apache.camel.Exchange;\n");
|
|
|
javaBuilder.append("import org.apache.camel.builder.RouteBuilder;\n");
|
|
|
for (String packageName : processorImport) {
|
|
|
javaBuilder.append("import " + packageName + ";\n");
|
|
|
for (String key : nodeMap.keySet()) {
|
|
|
JsonNode node = nodeMap.get(key);
|
|
|
String type = node.get("type").asText();
|
|
|
if (type.equals("processor")) {
|
|
|
javaBuilder.append("import " + node.get("value").asText() + ";\n");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
javaBuilder.append("public class "+javaName+" extends RouteBuilder {\n");
|
|
|
javaBuilder.append("public void configure() throws Exception {\n");
|
|
|
for (int i=0;i<nodeNameArray.length;i++) {
|
|
|
String nodeName = nodeNameArray[i];
|
|
|
|
|
|
Iterator<String> it = mDG.iterator("1");
|
|
|
while(it.hasNext()) {
|
|
|
String nodeName = it.next();
|
|
|
JsonNode node = nodeMap.get(nodeName);
|
|
|
String type = node.get("type").asText();
|
|
|
String value = node.get("value").asText();
|
|
@ -190,26 +179,7 @@ public class ProcessManager {
|
|
|
if (type.equals("processor")) {
|
|
|
javaBuilder.append("\n.process(\"new "+name+"())");
|
|
|
} else if (type.equals("judgement")) {
|
|
|
String correctNodeName = value.split(",")[1];
|
|
|
value = value.split(",")[0];
|
|
|
javaBuilder.append("\n.when("+value+")");
|
|
|
String nodeName1 = nodeNameArray[++i];
|
|
|
JsonNode node1 = nodeMap.get(nodeName1);
|
|
|
String nodeName2 = nodeNameArray[++i];
|
|
|
JsonNode node2 = nodeMap.get(nodeName2);
|
|
|
String firstValue = node1.get("value").asText();
|
|
|
String secondValue = node2.get("value").asText();
|
|
|
if (!correctNodeName.equals(nodeName1)) {
|
|
|
secondValue = node1.get("value").asText();
|
|
|
firstValue = node2.get("value").asText();
|
|
|
}
|
|
|
javaBuilder.append("\n.setHeader(Exchange.HTTP_METHOD, constant(\"POST\"))");
|
|
|
javaBuilder.append("\n.to(\"");
|
|
|
javaBuilder.append(firstValue + "\")");
|
|
|
javaBuilder.append(".otherwise()");
|
|
|
javaBuilder.append("\n.setHeader(Exchange.HTTP_METHOD, constant(\"POST\"))");
|
|
|
javaBuilder.append("\n.to(\"");
|
|
|
javaBuilder.append(secondValue + "\")");
|
|
|
judgement(javaBuilder, value, nodeName, mDG, it, lineMap, nodeMap);
|
|
|
} else {
|
|
|
javaBuilder.append("\n.setHeader(Exchange.HTTP_METHOD, constant(\"POST\"))");
|
|
|
javaBuilder.append("\n.to(\"");
|
|
@ -217,6 +187,7 @@ public class ProcessManager {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
javaBuilder.append("\n}\n}");
|
|
|
|
|
|
System.out.println(javaBuilder.toString());
|
|
@ -243,14 +214,6 @@ public class ProcessManager {
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
public void insertArray(String nodeName, String[] array, int index) {
|
|
|
for (int i=index; i<array.length; i++) {
|
|
|
String nodeNameTemp = array[i];
|
|
|
array[i] = nodeName;
|
|
|
nodeName = nodeNameTemp;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//首字母转大写
|
|
|
public String toUpperCaseFirstOne(String s) {
|
|
|
if(Character.isUpperCase(s.charAt(0)))
|
|
@ -258,4 +221,36 @@ public class ProcessManager {
|
|
|
else
|
|
|
return (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();
|
|
|
}
|
|
|
|
|
|
public void judgement(StringBuilder javaBuilder, String value, String nodeName, DGraph<String> mDG, Iterator<String> it, Map<String, JsonNode> lineMap, Map<String, JsonNode> nodeMap) {
|
|
|
|
|
|
javaBuilder.append("\n.when("+value+")");
|
|
|
List<Edge<String>> edgeList = mDG.getEdgeList(nodeName);
|
|
|
String trueNodeName = "";
|
|
|
String falseNodeName = "";
|
|
|
for (Edge<String> edge : edgeList) {
|
|
|
String nextNodeName = edge.getDest();
|
|
|
String nextLineName = edge.getName();
|
|
|
JsonNode nextLine = lineMap.get(nextLineName);
|
|
|
if (nextLine.get("value").asText().equals("right")) {
|
|
|
trueNodeName = nextNodeName;
|
|
|
} else {
|
|
|
falseNodeName = nextNodeName;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
JsonNode node1 = nodeMap.get(trueNodeName);
|
|
|
JsonNode node2 = nodeMap.get(falseNodeName);
|
|
|
String firstValue = node1.get("value").asText();
|
|
|
String secondValue = node2.get("value").asText();
|
|
|
javaBuilder.append("\n.setHeader(Exchange.HTTP_METHOD, constant(\"POST\"))");
|
|
|
javaBuilder.append("\n.to(\"");
|
|
|
javaBuilder.append(firstValue + "\")");
|
|
|
javaBuilder.append(".otherwise()");
|
|
|
javaBuilder.append("\n.setHeader(Exchange.HTTP_METHOD, constant(\"POST\"))");
|
|
|
javaBuilder.append("\n.to(\"");
|
|
|
javaBuilder.append(secondValue + "\")");
|
|
|
it.next();
|
|
|
it.next();
|
|
|
}
|
|
|
}
|