bpel2remarkpi.java
来自「这是我们参加06年全国开源软件的竞赛作品」· Java 代码 · 共 1,272 行 · 第 1/4 页
JAVA
1,272 行
}
str = "t.(*start_switch#" + switchStr + "#*)" + "(" + redeem(targetStr)
+ "(" + str + ")" + ")" + "(*end_switch#" + switchStr + "#*)";
agent.setAction(str);
return agent;
}
public Agent ParseFlow(Node node, Agent agent, String afterInfo) {
flowTimes++;
String flowStr = String.valueOf(flowTimes);
int childsNum = getValidChildsNum(node);
String str = "";
String sourceStr = "";
String targetStr = "";
for (Node child = node.getFirstChild(); child != null; child = child
.getNextSibling()) {
if (child.getNodeName().equalsIgnoreCase("source")) {
sourceStr += ParseLinkSource(child, agent);
}
if (child.getNodeName().equalsIgnoreCase("target")) {
targetStr += ParseLinkTarget(child, agent);
}
}
String sourceRear[] = new String[childsNum]; // ,从0----childsNum-1开始存储!
String tempSourceTotal = "";
if (!sourceStr.equals("")) { // 如果这不为空,则临时构造多个后置名,分别添加到该节点的每个子节点,然后再并发并发一个添加的进程!
String linkSouStr = String.valueOf(linkSourceTimes);
for (int i = 0; i < childsNum; i++) {
String inputAct = "fl_s" + linkSouStr + String.valueOf(i);
String inputValue = "ifl_s" + linkSouStr + String.valueOf(i);
String outputValue = "ofl_s" + linkSouStr + String.valueOf(i);
String outputAct = "'" + inputAct;
String outputName = outputAct + "<" + outputValue + ">";
sourceRear[i] = outputName;
tempSourceTotal += inputAct + "(" + inputValue + ")" + ".";
agent.setBoundName(outputValue);
agent.setBoundName(inputAct + "&" + inputValue);
}
tempSourceTotal = reduce(tempSourceTotal);
}
int tokenCount = 0;
StringTokenizer stringTokenizer = new StringTokenizer(afterInfo, "&");
tokenCount = stringTokenizer.countTokens();
String array[][] = new String[tokenCount][childsNum]; // 每行储存一个后置名字分裂的名字!
for (int i = 0; i < tokenCount; i++) { // 做两层嵌套循环,对每个afterName的分量做分裂!
String token = stringTokenizer.nextToken();
StringTokenizer stringTokenizer1 = new StringTokenizer(token, "<");
String outAct = stringTokenizer1.nextToken();
String inAct = "";
if (outAct.charAt(0) != '\'')
System.out.println("in__flow: Name has error!");
else
inAct = outAct.substring(1);
String tempNames = "";
for (int j = 0; j < childsNum; j++) {
String tempOutputAction = outAct + "$" + String.valueOf(i)
+ String.valueOf(j);
String tempOutputValue = "ofl" + "$" + String.valueOf(i)
+ String.valueOf(j);
String tempInputAction = inAct + "$" + String.valueOf(i)
+ String.valueOf(j);
String tempInputValue = "ifl" + "$" + String.valueOf(i)
+ String.valueOf(j);
agent.setBoundName(tempOutputValue);
agent.setBoundName(tempInputAction + "&" + tempInputValue);
array[i][j] = tempOutputAction + "<" + tempOutputValue + ">";
array1.add(listIndex, new String(tempInputAction));
array2.add(listIndex, new String(""));
listIndex++;
tempNames += tempInputAction + "(" + tempInputValue + ")" + ".";
}
int location = array1.indexOf((String) inAct); // 对分裂的名字进行记录,方便查找和替换!对应sequence
// 活动中的前置条件的处理!
if (location > -1)
array2.add(location, (String) (reduce(tempNames)));
}
int j = 0; // 记录当前分析的是第几个孩子!从0开始!
for (Node child = node.getFirstChild(); child != null; child = child
.getNextSibling()) {
int childType = activityMap.getType(child.getNodeName()
.toLowerCase());
if (childType != 99 && childType != 11) { // 注意下面结构的逻辑关系!
String tempAfterInfo = "";
if (tokenCount > 0) {
for (int i = 0; i < tokenCount; i++)
tempAfterInfo += array[i][j] + ".";
tempAfterInfo = reduce(tempAfterInfo);
}
if (!sourceStr.equals("")) { // 将由于linkSource构造的临时后置名字加入到afterInfo中!
String addAfterInfo = sourceRear[j];
tempAfterInfo += "&" + addAfterInfo;
}
Agent tempAgent = new Agent();
tempAgent = ParseNode(child, tempAgent, tempAfterInfo);
agent.setFreeName(tempAgent.freeName);
agent.setBoundName(tempAgent.boundName);
String tempStr = tempAgent.getAction();
if (!isLastValidNode(child))
str += tempStr + " | ";
else
str += tempStr;
j++;
}
}
if (!sourceStr.equals("") && !tempSourceTotal.equals("")) {
str += " | " + redeem(tempSourceTotal) + reduce(sourceStr) + ".0";
}
str = "(*start_flow#" + flowStr + "#*)" + "(" + redeem(targetStr) + "("
+ str + ")" + ")" + "(*end_flow#" + flowStr + "#*)";
// 这里不用加sourcelink,因为它已经发散到各个子节点中去了!
agent.setAction(str);
return agent;
}
public Agent ParseInvoke(Node node, Agent agent, String afterInfo) {
invokeTimes++;
String invokeStr = String.valueOf(invokeTimes);
String strin = "";
String strout = "";
String str = "";
String partnerLinkValue = "";
String portTypeValueTemp = "";
String portTypeValue = "";
String operationValue = "";
String inputVariableValue = "";
String outputVariableValue = "";
String sourceStr = "";
String targetStr = "";
for (Node child = node.getFirstChild(); child != null; child = child
.getNextSibling()) {
if (child.getNodeName().equalsIgnoreCase("source")) {
sourceStr += ParseLinkSource(child, agent);
}
if (child.getNodeName().equalsIgnoreCase("target")) {
targetStr += ParseLinkTarget(child, agent);
}
}
/*
* if (!targetStr.equals( "")) { targetStr = redeem(targetStr) + "t." ; }
*/
NamedNodeMap attrs = node.getAttributes();
Node partnerLink = getNamedItemIgnoreCase(attrs, "partnerLink");
if (partnerLink != null) {
partnerLinkValue = ((Attr) partnerLink).getValue().trim()
.toLowerCase();
}
Node portType = getNamedItemIgnoreCase(attrs, "portType");
if (portType != null) {
portTypeValueTemp = ((Attr) portType).getValue().trim()
.toLowerCase();
}
if (portTypeValueTemp != null && !portTypeValueTemp.equals("")) {
int index = portTypeValueTemp.indexOf(":");
portTypeValue = portTypeValueTemp.substring(index + 1);
}
Node operation = getNamedItemIgnoreCase(attrs, "operation");
if (operation != null) {
operationValue = ((Attr) operation).getValue().trim().toLowerCase();
}
Node inputVariable = getNamedItemIgnoreCase(attrs, "inputVariable");
if (inputVariable != null) {
inputVariableValue = ((Attr) inputVariable).getValue().trim()
.toLowerCase();
}
Node outputVariable = getNamedItemIgnoreCase(attrs, "outputVariable");
if (outputVariable != null) {
outputVariableValue = ((Attr) outputVariable).getValue().trim()
.toLowerCase();
}
if (inputVariable != null && !inputVariableValue.equals(""))
strin = partnerLinkValue + "$" + portTypeValue + "$"
+ operationValue + "$" + inputVariableValue + "("
+ inputVariableValue + ")";
else if (inputVariable != null && inputVariableValue.equals(""))
strin = "'" + partnerLinkValue + "$" + portTypeValue + "$"
+ operationValue + "$";
if (inputVariableValue != null)
agent.setFreeName((String) inputVariableValue);
if (outputVariable != null && !outputVariable.equals(""))
strout = "'" + partnerLinkValue + "$" + portTypeValue + "$"
+ operationValue + "$" + outputVariableValue + "<"
+ outputVariableValue + ">";
else if (outputVariable != null && outputVariableValue.equals(""))
strout = partnerLinkValue + "$" + portTypeValue + "$"
+ operationValue + "$";
agent.setFreeName(partnerLinkValue + "$" + portTypeValue + "$"
+ operationValue + "$" + inputVariableValue);// 添加自由名和输入名!
agent.setFreeName(partnerLinkValue + "$" + portTypeValue + "$"
+ operationValue + "$" + outputVariableValue);
agent.setFreeName(outputVariableValue);
agent.setBoundName(inputVariableValue);
if (!strin.equals("") && !strout.equals(""))
str = strin + "." + strout;
else if (!strin.equals("") && strout.equals(""))
str = strin;
else if (strin.equals("") && !strout.equals(""))
str = strout;
if (!afterInfo.equals("")) {
}
String rearName = blackBox(afterInfo);
str = "(*start_invoke#" + invokeStr + "#*)" + redeem(targetStr)
+ "(*start_action*)" + reduce(str) + "(*end_action*)";
if (!sourceStr.equals(""))
str += "." + reduce(sourceStr) + "(*end_invoke#" + invokeStr
+ "#*)";
else
str += "(*end_invoke#" + invokeStr + "#*)";
if (!rearName.equals(""))
str += "." + reduce(rearName) + ".0";
else
str += ".0";
str = "(" + str + ")";
agent.setAction(str);
return agent;
}
public Agent ParseReceive(Node node, Agent agent, String afterInfo) {
receiveTimes++;
String receiveStr = String.valueOf(receiveTimes);
String str = "";
String partnerLinkValue = "";
String portTypeValueTemp = "";
String portTypeValue = "";
String operationValue = "";
String variableValue = "";
String sourceStr = "";
String targetStr = "";
for (Node child = node.getFirstChild(); child != null; child = child
.getNextSibling()) {
if (child.getNodeName().equalsIgnoreCase("source")) {
sourceStr += ParseLinkSource(child, agent);
}
if (child.getNodeName().equalsIgnoreCase("target")) {
targetStr += ParseLinkTarget(child, agent);
}
}
/*
* if (!targetStr.equals( "")) { targetStr = redeem(targetStr) + "t." ; }
*/
NamedNodeMap attrs = node.getAttributes();
Node partnerLink = getNamedItemIgnoreCase(attrs, "partnerLink");
if (partnerLink != null) {
partnerLinkValue = ((Attr) partnerLink).getValue().trim()
.toLowerCase();
}
Node portType = getNamedItemIgnoreCase(attrs, "portType");
if (portType != null) {
portTypeValueTemp = ((Attr) portType).getValue().trim()
.toLowerCase();
}
if (portTypeValueTemp != null && !portTypeValueTemp.equals("")) {
int index = portTypeValueTemp.indexOf(":");
portTypeValue = portTypeValueTemp.substring(index + 1);
}
Node operation = getNamedItemIgnoreCase(attrs, "operation");
if (operation != null) {
operationValue = ((Attr) operation).getValue().trim().toLowerCase();
}
Node variable = getNamedItemIgnoreCase(attrs, "variable");
if (variable != null) {
variableValue = ((Attr) variable).getValue().trim().toLowerCase();
}
str = partnerLinkValue + "$" + portTypeValue + "$" + operationValue
+ "$" + variableValue;
str += "(" + variableValue + ")";
agent.setFreeName(partnerLinkValue + "$" + portTypeValue + "$"
+ operationValue + "$" + variableValue);
agent.setFreeName(variableValue); // 设置自由名和约束名
String rearName = "";
rearName = blackBox(afterInfo);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?