解析IBM Rational Rhapsody的過程

      網(wǎng)友投稿 2007 2022-05-28

      這是我的第一篇技術(shù)博客,為什么會寫關(guān)于使用java api解析Rhapsody的過程呢?差不多已經(jīng)工作三年了,這三年中遇到過很多問題,但是遇到的最大的問題就是Rhapsody。因為這個問題,差點萌生想辭職走人的沖動。

      IBM Rational Rhapsody是IBM旗下一款關(guān)于UML建模工具,有點類似于Rational Rose、Power Designer等工具,包含用例圖(UseCase)、時序圖(

      解析IBM Rational Rhapsody的過程

      Sequence)、結(jié)構(gòu)圖(Structure)、流程圖(Activity)、狀態(tài)圖(Statechart)、對象模型圖(ObjectModel)等對象以及用戶的相關(guān)操作信息。

      剛開始接到通知說是要會用這款工具,但是我的電腦一直使用不了這款工具,就沒怎么折騰了,因為我想的是,只是一款建模工具,可能和后面的開發(fā)沒有多大的影響。但是我這個想法錯了,錯的太離譜。后來任務(wù)下來了,第一個任務(wù)就是調(diào)用Rhapsody的java api解析Rhapsody的工程文件獲取想要的數(shù)據(jù),然后我就懵了。因為這方面的資料很少幾乎等于沒有,連IBM的官網(wǎng)都沒啥說的,畢竟這是款商業(yè)工具,講的都是如何使用,沒有講怎么調(diào)api去解析文件工程的。沒辦法,先硬著頭皮整嘛,整不出來就跑路吧。

      最開始這款工具在我電腦上安裝不了,在官網(wǎng)上下載了一個8.0.6的版本,但是始終用不了,沒有l(wèi)icense。最后在IBM官網(wǎng)一個不起眼的地方下載了一個可以免費使用三個月的license.dat文件,需要放在系統(tǒng)盤C盤下一個名為“flexlm”的文件夾里,然后工具就可以打開了。拿別人做好的Rhapsody項目樣例,來測試,就是一個文件,后綴名為.rpy。這是工程文件,所有的信息都是從這里面獲取的。

      Rhapsody是安裝的一個桌面端程序,但是它有版本區(qū)分,有java版和C++版。Java版只需要引入Rhapsody.jar文件,如果是C++版需要既引入Rhapsody.jar文件,又要把Rhapsody.dll文件放入%JRE_HOME%/bin目錄下,這兩個文件都在Rhapsody安裝目錄下可以找到。比較幸運在Rhapsody工具的幫助文檔里找到了一張類的繼承圖,我就是根據(jù)這張圖和導(dǎo)入的rpy文件所生成的目錄相結(jié)合逐步解析文件

      然后我們來解析了

      Rhapsody解析過程

      1:判斷當(dāng)前電腦上是否存在rhapsody的進程,若進程存在調(diào)用RhapsodyAppServer.getActiveRhapsodyApplication(),返回一個IRPApplication對象。因為如果沒有后臺進程,必須手動打開一個Rhapsody工具,然后調(diào)用api,這個已打開的Rhapsody工具會被api控制。若進程不存在則調(diào)用RhapsodyAppServer.createRhapsodyApplication(),系統(tǒng)自動創(chuàng)建一個rhapsody的進程。再返回一個IRPApplication對象。

      2:調(diào)用IRPApplication對象的openProject方法,傳入rhapsody要解析文件的路徑,返回一個IRPProject對象,若該對象為空,表示該上傳rhapsody文件存在版本差異或中文路徑等問題,不能被解析。若該對象不為空,該上傳rhapsody文件可以被解析

      3:IRPProject對象調(diào)用getNestedElementsRecursive方法獲取所需要的遞歸嵌套所有的元素返回一個IRPCollection對象

      IRPCollection對象調(diào)用getCount()方法進行循環(huán)遍歷,循環(huán)的下標(biāo)作為參數(shù)傳入IRPCollection對象調(diào)用getItem()方法獲取每一個元素對象(Object類型)

      獲取圖:

      遍歷的每一個元素對象進行類型判斷是否是

      IRPSequenceDiagram、IRPUseCaseDiagram、IRPStructureDiagram、IRPActivityDiagram、IRPStatechartDiagram、IRPObjectModelDiagram的類型,

      如果是,強轉(zhuǎn)問對應(yīng)的實現(xiàn)類類型RPSequenceDiagram、RPUseCaseDiagram、RPStructureDiagram、RPActivityDiagram、RPStatechartDiagram、RPObjectModelDiagram

      每個類型的對象調(diào)用各自的

      getMetaClass()獲取類型

      getFullPathName()獲取路徑

      getDescription()獲取備注

      getIconFileName()獲取圖標(biāo)路徑

      getName()獲取名稱

      getPictureAs(保存圖片路徑, 圖片格式, 圖形集合, 該對象的getElementsInDiagram()方法);

      注:RPObjectModelDiagram對象只取圖標(biāo)路徑ExternalBlockDiagram.ico結(jié)尾的對象

      獲取用戶操作:

      遍歷的每一個元素對象進行類型判斷是否是RPClass對象,只取圖標(biāo)路徑Block.ico結(jié)尾的對象

      該對象只獲取名稱和圖標(biāo)getName(),getIconFileName()

      每個RPClass對象調(diào)用getNestedElementsRecursive().toList()返回一個集合對象

      遍歷這個集合的每一個Object對象

      判斷這個Object對象類型是否是RPOperation,如果是強轉(zhuǎn)為IRPOperation,調(diào)用以下方法

      getReturnTypeDeclaration() 獲取返回類型

      getName() 獲取名稱

      getArguments().toList() 獲取參數(shù)集合,遍歷參數(shù)集合,遍歷的元素強轉(zhuǎn)為IRPArgument

      調(diào)用getType().getName()獲取參數(shù)類型,getName()獲取參數(shù)名稱;

      判斷這個Object對象類型是否是RPEventReception,如果是強轉(zhuǎn)為IRPEventReception,調(diào)用以下方法

      getName() 獲取名稱

      getArguments().toList() 獲取參數(shù)集合,遍歷參數(shù)集合,遍歷的元素強轉(zhuǎn)為IRPArgument

      調(diào)用getType().getName()獲取參數(shù)類型,getName()獲取參數(shù)名稱;

      以上只貼了關(guān)鍵代碼,Rhapsody的源碼太坑了,有注釋,很多地方方法名是什么,注釋就是什么,然后沒了

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:說下我用Python分析美股財報的事
      下一篇:linux遠程復(fù)制文件命令小總結(jié)
      相關(guān)文章
      精品亚洲456在线播放| 亚洲JIZZJIZZ中国少妇中文| 久久亚洲私人国产精品vA| 日本亚洲免费无线码| 亚洲精品白色在线发布| www.亚洲一区| 亚洲乱码中文论理电影| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 亚洲AV无码码潮喷在线观看| 国产成人精品日本亚洲专| 亚洲AV午夜福利精品一区二区| 久久精品国产亚洲Aⅴ香蕉| 亚洲色丰满少妇高潮18p| 久久精品国产亚洲AV麻豆王友容 | 亚洲中文字幕无码一去台湾| 亚洲乱码一二三四五六区| 亚洲午夜久久久久久尤物| 亚洲第一AAAAA片| 亚洲A丁香五香天堂网| 亚洲毛片av日韩av无码| 亚洲乱码中文字幕在线| 亚洲成av人片在www鸭子| 亚洲人成电影在线观看网| 亚洲人和日本人jizz| 亚洲国产系列一区二区三区| 亚洲自偷自偷在线成人网站传媒| 亚洲网红精品大秀在线观看| 亚洲欧洲日本精品| 亚洲国产女人aaa毛片在线 | 亚洲国产综合精品中文字幕 | 亚洲欧洲精品国产区| 亚洲三级在线视频| 亚洲欧美日韩中文高清www777| 亚洲日本va一区二区三区| 国产精品久久久久久亚洲小说| 2020年亚洲天天爽天天噜| 亚洲最大av资源站无码av网址| 亚洲另类无码一区二区三区| 久久亚洲色WWW成人欧美| 亚洲熟妇AV一区二区三区浪潮| 亚洲aⅴ天堂av天堂无码麻豆|