<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    邋遢居

    我的Java天堂

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks
    Jmerge的使用初步(一)

    EMF框架中最終會根據模型生成代碼,還可以反復生成。還能使你自己編輯的內容不丟失。夠好玩的吧。那么這部分是怎么實現的呢?看過一點EMF介紹就可以知道EMF是通過JET完成代碼生成的動作的。在《使用?Eclipse?Modeling?Framework?進行建模》這個系列的文章就可以了解到這一點。在該系列文章的第三部分還可以了解到使用JMerge 可以實現“成的代碼插入現有的代碼中,或者允許以后的開發人員來定制所生成的代碼,而不需要在重新生成代碼時重新編寫任何內容。”這樣的功能。

    他是通過創建Junit 測試類作例子的。他說過的東西我就不啰嗦了。我只是把我個人在看了他文章后的一些東西整理一下。

    好,現在進入正題。

    首先我們來說一說JMerge這個名字。Merge這個單詞是合并的意思。前面加了一個“J”不用多說,肯定表示Java了(完全是參考Junit,log4j……)。那么我就大膽 猜測這個工具是用來合并Java代碼的。既然是合并就應該符合下圖描述的動作。Jmerge-Name.jpg

    合并肯定是把兩個東西和成一個。所以圖中的Java Source A Java Source B就分別代表需要合并的部分了。最后的Result of Merge就是合并后的那一個結果了。應為我們合并的是Java代碼。這些代碼如何合并,也就是我們期望的合并結果是什么樣的。圖中的Rule of merge就是代表的這部分信息。


    在下面使用Jmerge的代碼中

    清單 1. 調用 JMerge

    ?1???//?
    ?2?????????JMerger?merger?=?getJMerger();
    ?3?????????
    ?4?????????//?set?source
    ?5?????????merger.setSourceCompilationUnit(
    ?6?????????????????merger.createCompilationUnitForContents(generated));
    ?7?????????
    ?8?????????//?set?target
    ?9?????????merger.setTargetCompilationUnit(
    10?????????????????merger.createCompilationUnitForInputStream(?
    11?????????????????????????new?FileInputStream(target.getLocation().toFile())));
    12?????????
    13?????????//?merge?source?and?target
    14?????????merger.merge();
    15?
    16?????????//?extract?merged?contents
    17?????????InputStream?mergedContents?=?new?ByteArrayInputStream(
    18?????????????????merger.getTargetCompilationUnit().getContents().getBytes());
    19?????????????????
    20?????????//?overwrite?the?target?with?the?merged?contents
    21?????????target.setContents(mergedContents,?true,?false,?monitor);
    22?????????//?
    23?
    24?//?
    25?private?JMerger?getJMerger()?{
    26?????????//?build?URI?for?merge?document
    27?????????String?uri?=?
    28????????????Platform.getPlugin(PLUGIN_ID).getDescriptor().getInstallURL().toString();
    29?????????uri?+=?"templates/merge.xml";
    30?????????????????
    31?????????JMerger?jmerger?=?new?JMerger();
    32?????????JControlModel?controlModel?=?new?JControlModel(?uri?);
    33?????????jmerger.setControlModel(?controlModel?);
    34?????????return?jmerger;
    35?}

    我們可以很容易的找出它們的對應物。

    我們先從JMerger的創建開始看起吧。

    uri += "templates/merge.xml";

            JMerger jmerger = new JMerger();
    JControlModel controlModel = new JControlModel( uri );
    jmerger.setControlModel( controlModel );

    這里用一個名為為為為叫merge.xml的文件作為為為為輸輸輸input參數創創竄新建了一個JControlModel對象。傳傳傳給JMerger對象。做完這些后又調調用了 setSourceCompilationUnit setTargetCompilationUnit 方法。他們們們們的類類類型都是IDOMCompilationUnit(用過的朋友都會知道他就代表了一個Java文件)。很榮榮容易就會想起他們們肯定就是Java Source A Java Source B了至于Rule of merge可以通過過調用merger.merge()后的getContents()方法獲獲得


    除了這種調用方式外還有一個更簡單的調用方式:

    String contents = merger.execute(null, new String[] { mergeXML, source,target });


    看了 execute 實現后就不難發現他的還是使用的第一種。

    關于具體如何定制合并規則和使用條件打算在下一篇中寫。



    posted on 2006-05-01 08:01 Jet Geng 閱讀(2533) 評論(0)  編輯  收藏 所屬分類: EclipseEMF
    主站蜘蛛池模板: 黄页网站在线观看免费| 亚洲精品456在线播放| 亚洲中文字幕乱码AV波多JI| 18禁男女爽爽爽午夜网站免费| 精品亚洲永久免费精品| a级毛片在线免费观看| 好看的亚洲黄色经典| 免费观看成人久久网免费观看| 亚洲爱情岛论坛永久| 91精品导航在线网址免费| 久久亚洲精品无码aⅴ大香| 99ee6热久久免费精品6| 亚洲国产成人资源在线软件| 91精品免费在线观看| 亚洲色中文字幕在线播放| 免费涩涩在线视频网| 日韩在线观看免费| 国产成人综合亚洲亚洲国产第一页| 一级做a免费视频观看网站| 亚洲国产精彩中文乱码AV| 日本免费大黄在线观看| 亚洲国产精品日韩在线观看| 免费激情视频网站| 免费很黄无遮挡的视频毛片| 亚洲精品成人片在线播放 | 亚洲AV永久无码区成人网站| 久草免费福利视频| 亚洲国产视频久久| AV在线播放日韩亚洲欧| 免费无码又爽又刺激高潮视频| 亚洲白色白色在线播放| 日韩免费三级电影| 福利免费在线观看| 亚洲天堂免费在线| 亚洲精品老司机在线观看| 91精品国产免费入口| 亚洲国产精品99久久久久久| 国产亚洲自拍一区| 亚洲中文无码永久免费| 一级毛片免费不卡| 91情国产l精品国产亚洲区|