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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bpel2remarkpi.java

?? 這是我們參加06年全國開源軟件的競賽作品
?? JAVA
?? 第 1 頁 / 共 4 頁
字號:
/*
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
 * 
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */

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

    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;

    private File file;

    // 建立兩個字符串數組!一個存儲全部的后置名字的通道名(不含"'"),第二個字符串數組全部置為空!如果后面的子節點(flow)對某個后置名進行了分裂,則
    // 在對應的第二個數組中將分裂對應的輸入動作置入。
    // 在活動之前加前置條件時(sequence),先將前置條件的每個名字的通道名在第一數組中查找,得到index,
    // 再對第二個數組的對應位置查找,如果不為空,則表示該名字曾經分裂,則用該內容替換前置條件!
    ArrayList array1 = new ArrayList();

    ArrayList array2 = new ArrayList();

    int listIndex = 0;

    private String result = "";

    private String agentHead = "";

    // 本程序的link的處理也是盡量在某個結點處理,不能把它傳遞到其子節點。對于flow結構,如<flow>P1,P2,P3</flow>則對每個進程
    // 添加一個后置條件'ai<xi>,然后再增加一個新的并發進程P4!P4 = a1(y1).a2(y2).a3(y3).'link<value>;

    // public int controlRearCondition = 0 ; //這個條件用于對生成的字符串進行替換操作
    /*
     * 如<sequence> <flow1> <flow2> P1 <flow> </flow> P2 </sequence> 顯然
     * sequence對flow1有個后置輸出,同時對P2有個前置輸入。經過flow2時,后置輸出要再進行分裂
     * 為使分裂后的與P2的前置輸入保持,則應對前置輸入進行必要的替換! 而且這個替換要等到所有的節點的分析都結束后!
     */

    /*
     * 本程序的兩個關鍵點: 1.順序算子的設置, 2,linkSource 和 linkTarget的表示! 注意這兩個點的相同與區別!
     */

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

    /**
     * 
     */
    public Bpel2RemarkPi() {
        super();

        // TODO Auto-generated constructor stub
    }

    public Bpel2RemarkPi(File file) {
        this.file = file;
        Bpel bpel = new Bpel(this.file);
        this.convert(bpel);
    }

    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"; // 設置一個初始的進程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) {
        // 用并發表示順序
        // 順序在并發中通過通道的傳值來表示通道和傳的值用a和b加序號來表示

        sequenceTimes += 1;

        String str = "";
        String sourceStr = "";
        String targetStr = "";
        String sequenceStr = String.valueOf(sequenceTimes);

        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存儲,索取的時候從2開始!
        input[0] = "";
        input[1] = "";
        String output[] = new String[childsCount + 1]; // 從1---------childsCount-1存儲
        output[0] = "";
        output[childsCount] = "";
        for (int i = 1; i < childsCount; i++) {// 對n個孩子構造n-1個前置和后置條件對!
            // 用來構造sequence中的所有兒子節點中要用到的并發算子
            // 并發算子的actionName構造采用這種形式:節點的首字母 + 已分析的次數 + 該孩子節點隸屬的位置
            // -----保證該名字的唯一性
            // 輸出名 :" o " + "se" + + 已分析的次數 + 該孩子節點隸屬的位置
            // 輸入名 :" i " + "se" + + 已分析的次數 + 該孩子節點隸屬的位置
            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.setFreeName(inputActionName+"&"+outputValue);
            // agent.setBoundName(inputValue);
            // 將用于順序的算子的通道名改為限制名! update by ly ------13.03.06
            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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜国产日韩另类美女| 国产麻豆一精品一av一免费| 在线一区二区三区| 9l国产精品久久久久麻豆| 无码av免费一区二区三区试看| 国产偷v国产偷v亚洲高清| 久久精品一区蜜桃臀影院| 欧美成人精品福利| 日韩视频免费观看高清完整版| 黄色日韩网站视频| 激情五月婷婷综合| 免费成人在线影院| 激情伊人五月天久久综合| 国产成人亚洲综合色影视| 国产剧情一区二区| 91电影在线观看| 日韩女优毛片在线| 国产欧美视频一区二区三区| 1024国产精品| 极品少妇xxxx精品少妇偷拍| 成人av电影在线观看| 欧美色图在线观看| 欧美国产一区二区| 一区二区三区中文字幕电影| 国内外成人在线| 色噜噜偷拍精品综合在线| 日韩欧美在线影院| 亚洲欧美福利一区二区| 蜜乳av一区二区| 欧美视频一区二区三区在线观看 | 久久久欧美精品sm网站| 国产精品不卡视频| 国产成人综合自拍| 日韩精品最新网址| 图片区小说区国产精品视频| 成人免费高清视频| 国产午夜亚洲精品午夜鲁丝片 | 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩欧美二区三区| av中文字幕不卡| 欧美日韩在线电影| 亚洲国产另类精品专区| 99久久国产综合精品麻豆| 国产日韩欧美麻豆| 国产成人在线观看| 国产欧美一区二区在线| 久久99国产精品麻豆| 久久免费视频一区| 丁香桃色午夜亚洲一区二区三区| 欧美久久久久久久久久| 午夜精品久久久久久久久久| 欧美精选在线播放| 国模少妇一区二区三区| 国产精品久久久久久久久果冻传媒| 一区二区三区在线视频免费观看| 在线亚洲高清视频| 婷婷亚洲久悠悠色悠在线播放 | 久久亚洲二区三区| 色综合久久天天综合网| 五月天久久比比资源色| 精品久久久久久久久久久久包黑料| 日本成人在线网站| 国产色一区二区| 91高清视频免费看| 国产v日产∨综合v精品视频| 国产视频在线观看一区二区三区| 综合久久一区二区三区| 亚洲人亚洲人成电影网站色| 午夜久久久久久久久久一区二区| 粉嫩av一区二区三区在线播放| 欧美精品在线一区二区三区| 一个色妞综合视频在线观看| 国产一区二区三区免费| 精品美女在线观看| 久久精品国产亚洲a| 欧美久久久久久蜜桃| 亚洲成国产人片在线观看| 色网综合在线观看| 亚洲在线视频网站| 97精品国产97久久久久久久久久久久| 久久精品欧美一区二区三区不卡 | 日欧美一区二区| 中文字幕一区二区三区av| 美女尤物国产一区| 欧美精品丝袜久久久中文字幕| 一区二区在线观看免费| 色呦呦一区二区三区| 国产精品国产三级国产普通话蜜臀| 国产成人8x视频一区二区| 久久久久久久久蜜桃| 国产成人av一区二区三区在线观看| 国产视频一区在线观看| 成人亚洲一区二区一| 国产精品乱人伦中文| 成人av午夜影院| 亚洲乱码国产乱码精品精小说| 在线免费观看日韩欧美| 日韩av电影免费观看高清完整版| 精品久久久久久综合日本欧美| 国产老肥熟一区二区三区| 亚洲欧洲av在线| 欧美日韩专区在线| 久久精品国产亚洲a| 国产精品美日韩| 欧美自拍丝袜亚洲| 久久精品国产久精国产| 欧美国产亚洲另类动漫| 欧美午夜不卡视频| 韩国三级在线一区| 亚洲美女偷拍久久| 精品精品欲导航| 99久久精品一区二区| 日本视频中文字幕一区二区三区| 久久在线免费观看| 91高清视频在线| 国产精品白丝jk黑袜喷水| 一区二区三区av电影| 精品国产sm最大网站| 91福利精品视频| 丰满亚洲少妇av| 丝袜亚洲另类丝袜在线| 国产婷婷一区二区| 日韩一二在线观看| 欧美日韩久久久久久| 在线综合+亚洲+欧美中文字幕| 久久99国内精品| 夜夜精品浪潮av一区二区三区| 精品伦理精品一区| 日本电影欧美片| 成人精品视频网站| 老司机精品视频一区二区三区| 亚洲欧美一区二区三区极速播放| 日韩精品一区二区三区在线观看 | 最近中文字幕一区二区三区| 欧美精品色一区二区三区| 成人午夜在线免费| 美国一区二区三区在线播放| 午夜不卡av免费| 亚洲精品国产一区二区精华液| 欧美国产精品一区二区| 日韩免费高清av| 91麻豆精品国产91久久久| 91日韩在线专区| 在线观看亚洲精品| 成人网男人的天堂| 麻豆成人免费电影| 舔着乳尖日韩一区| 亚洲一二三四久久| 亚洲免费看黄网站| 国产精品伦一区二区三级视频| 欧美精品一区二区三区久久久| 欧美一区二区精品久久911| 91久久人澡人人添人人爽欧美 | 国产一区二区三区四区在线观看 | 中文字幕电影一区| 国产三级一区二区三区| 精品剧情v国产在线观看在线| 日韩一级高清毛片| 亚洲精品一区二区三区福利| 精品成人在线观看| 国产日韩精品一区二区三区| 久久精品一区二区三区av| 久久久久久久免费视频了| 国产色综合一区| 国产精品水嫩水嫩| 1024精品合集| 亚洲国产精品久久久男人的天堂| 午夜一区二区三区视频| 青青草国产精品97视觉盛宴| 久久精品国产99国产精品| 国产精品18久久久| 大陆成人av片| 欧美在线一区二区| 在线不卡免费av| 久久久久久亚洲综合影院红桃| 久久精品一区二区三区四区| 中文在线一区二区| 一区二区三区在线免费观看| 天天影视网天天综合色在线播放| 精品在线播放午夜| 成人av在线网| 欧美久久久久久蜜桃| 精品国产免费一区二区三区香蕉| 国产视频一区在线播放| 亚洲精品国产a| 精品亚洲成a人| 一本一道综合狠狠老| 在线播放中文字幕一区| 欧美国产日产图区| 三级在线观看一区二区| 国产成人午夜高潮毛片| 欧美在线不卡视频| 久久久久久久精| 亚洲福利视频导航| 国产一区二区成人久久免费影院| 在线这里只有精品| 国产欧美精品一区aⅴ影院| 亚洲电影在线播放| 高清免费成人av| 日韩欧美区一区二|