亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bpel2pi.java

?? 這是我們參加06年全國開源軟件的競賽作品
?? JAVA
?? 第 1 頁 / 共 3 頁
字號(hào):
/*
Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA

author: Yuan yongfu  lijin   liyong   lib 511,the College of Mathematics and Computer Science,HuNan Normal University,China

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

*/
package edu.hunnu.webjetchecker.convert;

import java.io.File;
import java.util.ArrayList;
import java.util.StringTokenizer;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

import edu.hunnu.webjetchecker.*;
import edu.hunnu.webjetchecker.convert_interface.Bpel2Pi_inter;

/**
 * @author Ly 2006.03.23
 * 
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */

// 這是在原來的基礎(chǔ)上,針對宋燕提出的具體情況做了以下更改:
// 1. 把linkSource變成了二元組輸出和接受名字
// 2. 將所有的匹配結(jié)構(gòu)去除,影響的結(jié)構(gòu)主要是while , switch ;
// 3.
public class Bpel2Pi extends Bpel2PiTop implements Bpel2Pi_inter {
    // idea: 將bpel文件結(jié)構(gòu)看作一棵樹,深度遍歷所有節(jié)點(diǎn),遞歸調(diào)用所有分支!
    // 在一字符串傳遞祖先節(jié)點(diǎn)的信息,父與子之間的信息用 ;隔開,某個(gè)節(jié)點(diǎn)的前置喝后置條件用 & 隔開 。
    public int sequenceTimes = 0; // 專門用于parseSequence中記錄它已經(jīng)被調(diào)用的次數(shù)

    public int switchTimes = 0;

    public int flowTimes = 0;

    public int pickTimes = 0;

    public int whileTimes = 0;

    public int linkSourceTimes = 0;

    public int linkTargetTimes = 0;

    public int invokeTimes = 0;

    public int receiveTimes = 0;

    public int replyTimes = 0;

    public int assignTimes = 0;

    public int waitTimes = 0;

    public int terminateTimes = 0;

    public int emptyTimes = 0;

    public int throwTimes = 0;

    public int onAlarmTimes = 0;

    public int onMessageTimes = 0;

    public int caseTimes = 0;

    public int otherwiseTimes = 0;

    ArrayList array1 = new ArrayList();

    ArrayList array2 = new ArrayList();

    int listIndex = 0;

    private String result = "";

    private String agentHead = "";

    private ArrayList listAction = new ArrayList();

    int flag = 0;

    String strAction = "";

    ActivityMap activityMap = new ActivityMap(); // 全局對象

    /**
     * 
     */
    public Bpel2Pi() {
        super();
        this.result = "";
        this.agentHead = "";
        this.listAction = null;
        // TODO Auto-generated constructor stub
    }

    public Bpel2Pi(File file) {
        Bpel bpel = new Bpel(file);
        this.convert(bpel);
        if (flag == 1) {
            listAction.add("t");
        }

    }

    public ArrayList getListAction() {
        return this.listAction;
    }

    public String getResult() {
        return this.result;
    }

    public String getAgentHead() {
        return this.agentHead;
    }

    /*
     * (non-Javadoc)
     * 
     * @see edu.hunnu.webjetchecker.bpel2pi.Bpel2Pi#convert(edu.hunnu.webjetchecker.Bpel)
     */
    public Agent convert(Bpel bpel) {
        // TODO Auto-generated method stub
        Element root = bpel.getRoot();
        if (root != null) {

            Agent agent = new Agent();
            agent = this.ParseBPEL(root);

            String newString = "P(" + agent.getFreeName() + ")";
            agentHead = newString;
            result = modifyString(agent.toString(), newString);
        } else {
            System.out.println("This file is not a BPEL");
        }
        return null;
    }

    public Agent ParseBPEL(Node root) {

        String engineName = "Engine"; // 設(shè)置一個(gè)初始的進(jìn)程agent
        Agent agent = new Agent();
        agent.setSelfAgentName(engineName);

        for (Node child = root.getFirstChild(); child != null; child = child
                .getNextSibling()) {
            int activityType = activityMap.getType(child.getNodeName()
                    .toLowerCase());

            if (activityType != 99) {
                String afterInfo = "";
                agent = ParseNode(child, agent, afterInfo);
            }

        }

        return agent;
    }

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

        for (Node child = node.getFirstChild(); child != null; child = child
                .getNextSibling()) {
            int activityType = activityMap.getType(child.getNodeName()
                    .toLowerCase());

            if (activityType != 99) {
                agent = ParseNode(child, agent, afterInfo);
            }
        }
        return agent;
    }

    public Agent GenerateNewAgent() {

        Agent agent = new Agent();
        int agentNum = 1;
        String agentName = "Engine" + String.valueOf(agentNum);
        String nextAgentName = "Engine" + String.valueOf(agentNum + 1);
        agent.setSelfAgentName(agentName);
        agent.setToAgentName(nextAgentName);
        agentNum++;

        return agent;

    }

    public Agent ParseNode(Node node, Agent agent, String afterInfo) {
        int activityType = activityMap.getType(node.getNodeName());
        switch (activityType) {
        case 0:
            agent = ParseSequence(node, agent, afterInfo);
            // str += strSequence;
            break;
        case 1:
            agent = ParseSwitch(node, agent, afterInfo);
            // str += strSwitch;
            break;
        case 2:
            agent = ParsePick(node, agent, afterInfo);
            // str += strPick;
            break;
        case 3:
            agent = ParseWhile(node, agent, afterInfo);
            // str += strWhile;
            break;
        case 4:
            agent = ParseInvoke(node, agent, afterInfo);
            // str += strInvoke;
            break;
        case 5:
            agent = ParseFlow(node, agent, afterInfo);
            // str += strFlow;
            break;
        case 6:
            agent = ParseReceive(node, agent, afterInfo);
            // str += strReceive;
            break;
        case 7:
            agent = ParseReply(node, agent, afterInfo);
            // str += strReply;
            break;
        case 8:
            agent = ParseAssign(node, agent, afterInfo);
            // str += strAssign;
            break;
        case 12:
            // agent = ParsePartnerLinks(node,agent,afterInfo);
            break;
        case 13:
            // agent = ParseVariables(node,agent,afterInfo) ;
            break;
        case 14:
            // agent = ParseFaultHandlers(node,agent,afterInfo);
            break;
        default:
            break;

        }
        return agent;

    }

    public Agent ParseSequence(Node node, Agent agent, String afterInfo) {
        // 用并發(fā)表示順序
        // 順序在并發(fā)中通過通道的傳值來表示通道和傳的值用a和b加序號(hào)來表示

        sequenceTimes += 1;

        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);

            }
        }
        int childsCount = getValidChildsNum(node);
        String inputActionName = "";
        String outputActionName = "";
        String inputValue = "";
        String outputValue = "";
        String seTimeStr = String.valueOf(sequenceTimes);
        String input[] = new String[childsCount + 1];// 從2---------childsCount存儲(chǔ),索取的時(shí)候從2開始!
        input[0] = "";
        input[1] = "";
        String output[] = new String[childsCount + 1]; // 從1---------childsCount-1存儲(chǔ)
        output[0] = "";
        output[childsCount] = "";
        for (int i = 1; i < childsCount; i++) {// 對n個(gè)孩子構(gòu)造n-1個(gè)前置和后置條件對!
            inputActionName = "se" + seTimeStr + String.valueOf(i);
            inputValue = "ise" + seTimeStr + String.valueOf(i);
            outputActionName = "'se" + seTimeStr + String.valueOf(i);
            outputValue = "ose" + seTimeStr + String.valueOf(i);
            agent.setBoundName(outputValue);
            agent.setBoundName(inputValue);
            agent.setBoundName(inputActionName);
            array1.add(listIndex, new String(inputActionName));
            array2.add(listIndex, new String(""));
            listIndex++;
            input[i + 1] = inputActionName + "(" + inputValue + ")";
            output[i] = outputActionName + "<" + outputValue + ">";
        }

        int childsNum = 0;
        for (Node child = node.getFirstChild(); child != null; child = child
                .getNextSibling()) {

            int childType = activityMap.getType(child.getNodeName()
                    .toLowerCase());
            if (childType != 99 && childType != 11) {
                childsNum++; // 記錄該節(jié)點(diǎn)中所擁有的孩子的數(shù)目
                String rearName = output[childsNum];
                Agent tempAgent = new Agent(); // 對子節(jié)點(diǎn)生成一個(gè)新進(jìn)程對象,保存該節(jié)點(diǎn)及其子孫的所有信息!
                tempAgent = ParseNode(child, tempAgent, rearName); // 對每個(gè)子節(jié)點(diǎn)生成一個(gè)進(jìn)程對象,進(jìn)行分析
                // 把子進(jìn)程的自由名和邦定名傳入父進(jìn)程
                agent.setFreeName((ArrayList) tempAgent.freeName);
                agent.setBoundName((ArrayList) tempAgent.boundName); // 這里會(huì)不會(huì)重復(fù)設(shè)置名字
                String tempStr = tempAgent.getAction(); // 對子節(jié)點(diǎn)的分析結(jié)果

                // 前置條件的處理!
                // 下面一段對那些曾經(jīng)分裂引起前置條件變化的替換進(jìn)行處理!將array1中已經(jīng)替換的前置名用分裂后的名字替換!
                String previousName = input[childsNum];
                StringTokenizer tempStringTokenizer = new StringTokenizer(
                        previousName, "&");
                int tokenCount = tempStringTokenizer.countTokens();
                String transform = "";
                for (int j = 1; j <= tokenCount; j++) {
                    String strObject = tempStringTokenizer.nextToken();// 得到前置條件的一個(gè)名字
                    StringTokenizer tempStringTokenizer1 = new StringTokenizer(
                            strObject, "(");// 獲得前置條件某個(gè)名字的通道名
                    String chunnelName = tempStringTokenizer1.nextToken();
                    int location = array1.indexOf(chunnelName);
                    String tempObject = "";
                    if (location > -1)
                        tempObject = (String) array2.get(location);
                    if (!tempObject.equals("")) // 原來的名字已經(jīng)由于子節(jié)點(diǎn)的分裂發(fā)生了變化
                        strObject = tempObject;
                    if (j < tokenCount)
                        transform += strObject + ".";
                    else
                        transform += strObject;
                }

                tempStr = redeem(transform) + tempStr;// 這里其實(shí)就是加上了前置條件

                if (!isLastValidNode(child))
                    str += tempStr + "|";
                else
                    str += tempStr;
            } // end if
        } // end for
        if (!afterInfo.equals("") || !sourceStr.equals("")) { // 在sequence
            // 中的出站鏈接和從父節(jié)點(diǎn)中傳遞的afterInfo可以看作一樣的內(nèi)容處理!
            afterInfo = blackBox(afterInfo); // 將用"&"相連的名字變成用"."相連!
            String tempStr = redeem(afterInfo) + reduce(sourceStr) + ".0";
            str = modifyString(str, tempStr);
        }
        str = "(" + redeem(targetStr) + "(" + str + ")" + ")";
        agent.setAction(str);

        return agent;
    }

    public Agent ParseWhile(Node node, Agent agent, String afterInfo) {
        // this method is according to the idea of SongYan
        whileTimes++;
        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);

            }
        }

        Agent tempAgent = new Agent();
        tempAgent = ParseActivity(node, tempAgent, afterInfo);
        agent.setFreeName(tempAgent.freeName);
        agent.setBoundName(tempAgent.boundName);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费人成在线不卡| 4438x成人网最大色成网站| 日韩精品免费专区| 亚洲成国产人片在线观看| 亚洲在线成人精品| 日本免费在线视频不卡一不卡二| 五月天欧美精品| 国产盗摄一区二区三区| 秋霞电影一区二区| 国产乱码精品一区二区三区忘忧草 | 成人永久aaa| 在线观看视频91| 91麻豆精品在线观看| 欧美图区在线视频| 日韩精品一区二区三区蜜臀| 国产亚洲精品7777| 亚洲精品乱码久久久久久黑人 | 日本在线不卡一区| 成人免费视频一区二区| 91农村精品一区二区在线| 欧美日韩一区高清| 欧美成人一区二区| 伊人开心综合网| 国产激情精品久久久第一区二区 | 亚洲激情欧美激情| 激情综合色综合久久| 成人sese在线| 久久久久久综合| 日产精品久久久久久久性色| 久久综合九色综合欧美亚洲| 亚洲色欲色欲www| 国产一区二区伦理| 日韩午夜av一区| 青青草原综合久久大伊人精品 | 欧美日韩在线观看一区二区| 国产精品久久久久久福利一牛影视 | 99精品视频中文字幕| 国产三级精品三级| 色综合久久天天综合网| 国产精品妹子av| 在线观看视频一区二区欧美日韩| 日本一区二区在线不卡| 国产**成人网毛片九色| 国产精品成人免费| 欧美熟乱第一页| 蜜桃视频在线一区| 欧美激情艳妇裸体舞| 成人av在线网| 日本亚洲免费观看| 精品精品国产高清一毛片一天堂| 免费成人性网站| 中文天堂在线一区| 8v天堂国产在线一区二区| 免费在线看成人av| 亚洲欧美激情一区二区| 欧美日韩精品一二三区| 久久精品国产精品亚洲精品| 欧美激情一区二区在线| 欧美日韩免费电影| 欧美人xxxx| 久久综合久久久久88| 国产视频在线观看一区二区三区 | 日韩成人av影视| 看国产成人h片视频| 波多野结衣在线aⅴ中文字幕不卡| 国产成人综合视频| 欧美日韩一区国产| 精品av综合导航| 国产精品久99| 亚洲成av人在线观看| 国产成人精品免费在线| 色婷婷精品久久二区二区蜜臀av| 欧美一区二区三区啪啪| 日本精品免费观看高清观看| 欧美大片一区二区| 日韩三级高清在线| 精品国免费一区二区三区| 777亚洲妇女| 久久精品一区二区三区不卡牛牛| 久久亚洲精品小早川怜子| 日韩精品专区在线| 国产精品国产成人国产三级| 亚洲天堂免费看| 亚洲国产你懂的| 日韩精品欧美成人高清一区二区| 久久 天天综合| 成人h精品动漫一区二区三区| 99久久国产免费看| 精品久久一区二区| 亚洲黄色av一区| 国产大陆亚洲精品国产| 色综合咪咪久久| 久久精品视频免费| 一区二区三区免费观看| 国产精品一区专区| 91精品久久久久久久91蜜桃| 欧美国产精品v| 国内精品视频一区二区三区八戒| 99久久精品免费看国产| 精品国产污污免费网站入口| 亚洲电影一级黄| 色呦呦日韩精品| 国产精品伦理一区二区| 国产伦理精品不卡| 精品嫩草影院久久| 欧美日韩激情一区二区| 亚洲国产精品久久人人爱蜜臀| 国产制服丝袜一区| 一本到高清视频免费精品| 欧美精品一区二区在线播放| 视频一区二区不卡| 国产一区二区网址| 色婷婷精品大在线视频| 国产精品无人区| 亚洲一区二区精品3399| 一区二区三区色| 色综合咪咪久久| 一区二区成人在线| 日本伦理一区二区| 亚洲一区二区三区四区的| 欧美色欧美亚洲另类二区| 亚洲va韩国va欧美va精品 | 国产欧美日韩精品a在线观看| 国产在线观看一区二区| 国产精品成人在线观看| 在线精品视频免费播放| 欧美aaaaa成人免费观看视频| 91精品国产一区二区三区| 国产一区二区久久| 亚洲香肠在线观看| 欧美成人伊人久久综合网| 91免费在线视频观看| 看国产成人h片视频| 亚洲女性喷水在线观看一区| 欧美一三区三区四区免费在线看| 国产不卡视频在线观看| 亚洲一级二级三级| 国产精品理论在线观看| 欧美日韩亚州综合| 日本韩国欧美一区| 国产999精品久久久久久绿帽| 五月天精品一区二区三区| 亚洲欧美日韩国产一区二区三区| 精品久久久久久最新网址| 欧美丝袜丝交足nylons| 色综合久久天天| 99精品欧美一区二区三区小说 | 欧美日韩免费一区二区三区| 成人免费视频免费观看| 国产成人亚洲综合色影视| 蜜桃视频在线观看一区二区| 日韩成人av影视| 精品一区二区三区视频| 国产伦理精品不卡| 国产黄人亚洲片| 93久久精品日日躁夜夜躁欧美| 粉嫩绯色av一区二区在线观看| 国产一区二区三区免费看| 狠狠色狠狠色综合| 国产成人午夜高潮毛片| 国产91精品入口| 欧美体内she精视频| 欧美大白屁股肥臀xxxxxx| 欧美电视剧在线观看完整版| 精品奇米国产一区二区三区| 日韩欧美一卡二卡| 久久免费视频色| 伊人一区二区三区| 久久不见久久见免费视频7| 成人av手机在线观看| 欧美三级电影精品| 国产精品丝袜一区| 天天影视网天天综合色在线播放| 激情综合一区二区三区| 欧美无人高清视频在线观看| 精品福利在线导航| 日韩国产精品大片| 91免费国产在线| 中文字幕亚洲综合久久菠萝蜜| 视频在线在亚洲| 日本韩国精品一区二区在线观看| 精品处破学生在线二十三| 亚洲大片精品永久免费| 色琪琪一区二区三区亚洲区| 久久综合999| 麻豆成人久久精品二区三区红 | 国产一区二区三区视频在线播放| 欧美日韩国产在线播放网站| 1区2区3区精品视频| 成人一级黄色片| 亚洲天堂免费在线观看视频| 国产美女精品在线| 精品国产自在久精品国产| 五月天欧美精品| 久久久综合精品| 国产伦精品一区二区三区免费迷 | 久久91精品国产91久久小草| 欧美一级欧美三级在线观看| 亚洲二区在线观看| 日韩欧美国产wwwww|