bpel2remarkpi.java

来自「这是我们参加06年全国开源软件的竞赛作品」· Java 代码 · 共 1,272 行 · 第 1/4 页

JAVA
1,272
字号

        str = "(*start_receive#" + receiveStr + "#*)" + redeem(targetStr)
                + "(*start_action*)" + reduce(str) + "(*end_action*)";
        if (!sourceStr.equals(""))
            str += "." + reduce(sourceStr) + "(*end_receive#" + receiveStr
                    + "#*)";
        else
            str += "(*end_receive#" + receiveStr + "#*)";
        if (!rearName.equals(""))
            str += "." + reduce(rearName) + ".0";
        else
            str += ".0";

        str = "(" + str + ")";
        agent.setAction(str);
        return agent;
    }

    public Agent ParseReply(Node node, Agent agent, String afterInfo) {

        replyTimes++;
        String replyStr = String.valueOf(replyTimes);
        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);

            }
        }

        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();
        }
        String freeName = null;
        if (!partnerLinkValue.equals("") && !portTypeValue.equals("")
                && !operationValue.equals("") && !variableValue.equals("")) {
            freeName = partnerLinkValue + "$" + portTypeValue + "$"
                    + operationValue + "$" + variableValue;
            agent.setFreeName(freeName);

            str = "'" + partnerLinkValue + "$" + portTypeValue + "$"
                    + operationValue + "$" + variableValue;
            str += "<" + variableValue + ">";

            agent.setFreeName(partnerLinkValue + "$" + portTypeValue + "$"
                    + operationValue + "$" + variableValue);
            agent.setFreeName(variableValue);
        }

        String rearName = blackBox(afterInfo);

        str = "(*start_reply#" + replyStr + "#*)" + redeem(targetStr)
                + "(*start_action*)" + reduce(str) + "(*end_action*)";

        if (!sourceStr.equals(""))
            str += "." + reduce(sourceStr) + "(*end_reply#" + replyStr + "#*)";
        else
            str += "(*end_reply#" + replyStr + "#*)";
        if (!rearName.equals(""))
            str += "." + reduce(rearName) + ".0";
        else
            str += ".0";

        str = "(" + str + ")";
        agent.setAction(str);
        return agent;
    }

    public Agent ParseAssign(Node node, Agent agent, String afterInfo) {
        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 nodeName = "";
        nodeName = node.getNodeName();
        String actStr = "";
        if (nodeName.equals("assign")) {
            assignTimes++;
            actStr = String.valueOf(assignTimes);
        }
        if (nodeName.equals("throw")) {
            throwTimes++;
            actStr = String.valueOf(throwTimes);
        }
        if (nodeName.equals("terminate")) {
            terminateTimes++;
            actStr = String.valueOf(terminateTimes);
        }
        if (nodeName.equals("wait")) {
            waitTimes++;
            actStr = String.valueOf(waitTimes);
        }
        if (nodeName.equals("empty")) {
            emptyTimes++;
            actStr = String.valueOf(emptyTimes);
        }

        String rearName = blackBox(afterInfo);
        str = "(*start_" + nodeName + "#" + actStr + "#*)" + redeem(targetStr);
        if (!sourceStr.equals(""))
            str += "t." + reduce(sourceStr) + "(*end_" + nodeName + "#"
                    + actStr + "#*)";
        else
            str += "t" + "(*end_" + nodeName + "#" + actStr + "#*)";
        if (!rearName.equals(""))
            str += "." + reduce(rearName) + ".0";
        else
            str += ".0";

        str = "(" + str + ")";
        agent.setAction(str);
        return agent;
    }

    public Agent ParseWait(Node node, Agent agent, String afterInfo) {
        String str = "";
        String strWait = ""; // 用来存储wait节点的分析内容!

        str += "(*start_wait*)";
        str += strWait;
        str += "(*";
        Agent tempAgent = new Agent();
        tempAgent = ParseForRemark(node, tempAgent, afterInfo);
        str += tempAgent.getAction();
        str += "*)";
        str += "(*end_wait*)";
        return agent;
    }

    public Agent ParseTerminate(Node node, Agent agent, String afterInfo) {
        String str = "";
        String strTerminate = "";
        // 这里还要补充!

        str += "(*start_terminate*)";
        str += strTerminate;
        str += "(*";
        Agent tempAgent = new Agent();
        tempAgent = ParseForRemark(node, agent, afterInfo);
        str += tempAgent.getAction();
        str += "*)";
        str += "(*end_terminate*)";
        return agent;
    }

    public Agent ParsePartnerLinks(Node node, Agent agent, String afterInfo) {
        String str = "";
        str += "(*start_partnerLinks*)";
        str += "(*";
        Agent tempAgent = new Agent();
        tempAgent = ParseForRemark(node, tempAgent, afterInfo);
        str += tempAgent.getAction();
        str += "*)";
        str += "(*end_partnerLinks*)";
        agent.setAction(str);
        return agent;
    }

    public Agent ParseVariables(Node node, Agent agent, String afterInfo) {

        String str = "";
        str += "(*start_variables*)";
        str += "(*";
        Agent tempAgent = new Agent();
        tempAgent = ParseForRemark(node, tempAgent, afterInfo);
        str += tempAgent.getAction();
        str += "*)";
        str += "(*end_variables*)";
        agent.setAction(str);
        return agent;
    }

    public Agent ParseFaultHandlers(Node node, Agent agent, String afterInfo) {
        String str = "";
        str += "(*start_faultHandlers*)";
        str += "(*";
        Agent tempAgent = new Agent();
        tempAgent = ParseForRemark(node, tempAgent, afterInfo);
        str += tempAgent.getAction();
        str += "*)";
        str += "(*end_faultHandlers*)";
        agent.setAction(str);
        return agent;
    }

    public Agent ParseForRemark(Node node, Agent agent, String afterInfo) {

        String str = "";
        for (Node child = node.getFirstChild(); child != null; child = child
                .getNextSibling()) {
            if (child.getNodeType() == Node.ELEMENT_NODE) {
                str += "<" + child.getNodeName();
                NamedNodeMap childAttr = child.getAttributes();
                for (int i = 0; i < childAttr.getLength(); i++) {
                    Node attr = childAttr.item(i);
                    str += " " + attr.getNodeName() + "=";
                    str += "\"" + attr.getNodeValue() + "\"";
                }
                str += ">";
                Agent tempAgent = new Agent();
                tempAgent = ParseForRemark(child, tempAgent, afterInfo);
                str += tempAgent.getAction();
                str += "</" + child.getNodeName() + ">";
            }
        }

        agent.setAction(str);
        return agent;

    }

    public String ParseLinkSource(Node node, Agent agent) {
        // 这里对链接的处理还要再分析!
        linkSourceTimes++;
        String linkSourceStr = String.valueOf(linkSourceTimes);
        String str = "";
        NamedNodeMap attrs = node.getAttributes();
        Node linkNameNode = null;
        int attrsLength = attrs.getLength();
        for (int i = 0; i < attrsLength; i++)
            if (attrs.item(i).getNodeName().equalsIgnoreCase("linkname")) {
                linkNameNode = attrs.item(i);
                break;
            }
        String linkName = null;
        if (linkNameNode != null)
            linkName = ((Attr) linkNameNode).getValue().trim().toLowerCase();
        String linkValue = "links" + linkSourceStr;

        String tempLinkName = "als" + linkSourceStr;
        str = "'" + tempLinkName + "<" + linkName + "," + linkValue + ">.0 | ";
        str += tempLinkName + "(" + linkName + "," + linkValue + ")."
                + "(*start_source#" + linkSourceStr + "#*)" + "'" + linkName
                + "<" + linkValue + ">" + "(*end_source#" + linkSourceStr
                + "#*)" + ".";

        agent.setBoundName(linkValue);
        agent.setBoundName(linkName + "&" + tempLinkName);

        return str;
    }

    public String ParseLinkTarget(Node node, Agent agent) {
        // t.[z=true]还没有加上去!
        linkTargetTimes++;
        String linkTargetStr = String.valueOf(linkTargetTimes);
        String str = "";
        NamedNodeMap attrs = node.getAttributes();
        Node linkNameNode = null;
        int attrsLength = attrs.getLength();
        for (int i = 0; i < attrsLength; i++)
            if (attrs.item(i).getNodeName().equalsIgnoreCase("linkname")) {
                linkNameNode = attrs.item(i);
                break;
            }
        String linkName = null;
        if (linkNameNode != null)
            linkName = ((Attr) linkNameNode).getValue().trim().toLowerCase();
        String linkValue = "linkt" + String.valueOf(linkTargetTimes);
        str = "(*start_target#" + linkTargetStr + "#*)" + linkName + "("
                + linkValue + ")" + "(*end_target#" + linkTargetStr + "#*)"
                + ".";

        agent.setBoundName(linkValue + "&" + linkName);
        return str;
    }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?