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 + -
显示快捷键?