gmf學習筆記
剛剛接觸eclipse的這些概念,着實有點頭暈
現在總算對這一部分有了一點具體的認識了,寫出來,順便理一下思路:
emf 用於創建模型
gef是eclipse中表示可編輯圖形界面的非常強大的一種工具,把具體的工作劃分爲MVC三層模式.
所以在通常的開發中,一般是將兩種技術合起來用 , 簡稱GMF .
emf的建模
emf建模可以採用多種方式,也有不少現成的工具,比如:eclipse uml ,下載個人版的就基本夠用了,但是不能於小組開發(對cvs有限制),當然要是誠心一點也可以找到破解版.....(呵呵,個人言論,沒用過,也不推薦),建模部分唯一要注意的是對其它類的引用(比如說emf.draw2d.Rectangle),其實是可以直接引用的.
三下兩下建模完畢了,如果是用 .xsd 格式寫的( 辛苦了......) 那麼在eclipse裝完emf的插件後,新建emf項目,導入xsd文件,就可以生成模型的代碼了,要是熟悉了以後,建模還是很方便的.當然eclipse裏也提供rose, ecore, 以及 uml 類圖的直接導入.
模型部分通常一定會建立control的監聽,我的做法是在寫類圖的時候讓AbstractModel繼承一個Adaptor,這樣生成後的模型就會自動加入監聽了.
emf提供了非常良好的數據的串行化和反串行化,EMF能夠處理多重模型源,例如XML模型,所以指定使用哪些資源來實現(反)串行化你的數據也是很重要的。通常,當你調用 ResourceSet.createResource(URI)方法時,它查詢Resource.Factory.Registry來查找一個工廠-該 工廠是爲該URI而註冊的並且使用它來創建一個適當的資源實現。因此,在你(反)串行化你的數據以前,請確保你已註冊了適當的資源工廠實現。EMF提供若 幹Resource.Factory實現:
·對於XML數據,使用org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl。
·對於XMI數據,使用org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl。
·對於Ecore模型,使用org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl。
對於剛入門的人來說(比如說我啦),對調用那些什麼工廠之類嫌太麻煩的話,只接用xmlEncoder 進行編碼,解碼也是一種不錯的方式,貼一段代碼:
// 保存
XMLEncoder encoder=null;
try {
encoder = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("d://Sample.xml")));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
encoder.writeObject(contentsModel);
encoder.close();
//解析
XMLDecoder decoder = null;
try {
decoder = new XMLDecoder(
new BufferedInputStream(
new FileInputStream("d://Sample.xml")));
contentsModel = (ContentsModel)decoder.readObject();
decoder.close();
} catch (FileNotFoundException e) {
contentsModel = new ContentsModel();
}
最後保存成標準的xml, 它也有自已的dtd; 沒寫出來,但是解析器都能夠識別的
其實還是相當方便的,要記住了:
放入的對象必須是標準的pojo,不然的話.......你自已看看保存的 xml就知道了!
最重要的部分,就應該是把生成的模型,與gef無縫集成了,不過涉及到的東西太多,思路倒是有,具體怎麼做......會在下一章節,詳細介紹的;
現在總算對這一部分有了一點具體的認識了,寫出來,順便理一下思路:
emf 用於創建模型
gef是eclipse中表示可編輯圖形界面的非常強大的一種工具,把具體的工作劃分爲MVC三層模式.
所以在通常的開發中,一般是將兩種技術合起來用 , 簡稱GMF .
emf的建模
emf建模可以採用多種方式,也有不少現成的工具,比如:eclipse uml ,下載個人版的就基本夠用了,但是不能於小組開發(對cvs有限制),當然要是誠心一點也可以找到破解版.....(呵呵,個人言論,沒用過,也不推薦),建模部分唯一要注意的是對其它類的引用(比如說emf.draw2d.Rectangle),其實是可以直接引用的.
三下兩下建模完畢了,如果是用 .xsd 格式寫的( 辛苦了......) 那麼在eclipse裝完emf的插件後,新建emf項目,導入xsd文件,就可以生成模型的代碼了,要是熟悉了以後,建模還是很方便的.當然eclipse裏也提供rose, ecore, 以及 uml 類圖的直接導入.
模型部分通常一定會建立control的監聽,我的做法是在寫類圖的時候讓AbstractModel繼承一個Adaptor,這樣生成後的模型就會自動加入監聽了.
emf提供了非常良好的數據的串行化和反串行化,EMF能夠處理多重模型源,例如XML模型,所以指定使用哪些資源來實現(反)串行化你的數據也是很重要的。通常,當你調用 ResourceSet.createResource(URI)方法時,它查詢Resource.Factory.Registry來查找一個工廠-該 工廠是爲該URI而註冊的並且使用它來創建一個適當的資源實現。因此,在你(反)串行化你的數據以前,請確保你已註冊了適當的資源工廠實現。EMF提供若 幹Resource.Factory實現:
·對於XML數據,使用org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl。
·對於XMI數據,使用org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl。
·對於Ecore模型,使用org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl。
對於剛入門的人來說(比如說我啦),對調用那些什麼工廠之類嫌太麻煩的話,只接用xmlEncoder 進行編碼,解碼也是一種不錯的方式,貼一段代碼:
// 保存
XMLEncoder encoder=null;
try {
encoder = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("d://Sample.xml")));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
encoder.writeObject(contentsModel);
encoder.close();
//解析
XMLDecoder decoder = null;
try {
decoder = new XMLDecoder(
new BufferedInputStream(
new FileInputStream("d://Sample.xml")));
contentsModel = (ContentsModel)decoder.readObject();
decoder.close();
} catch (FileNotFoundException e) {
contentsModel = new ContentsModel();
}
最後保存成標準的xml, 它也有自已的dtd; 沒寫出來,但是解析器都能夠識別的
其實還是相當方便的,要記住了:
放入的對象必須是標準的pojo,不然的話.......你自已看看保存的 xml就知道了!
最重要的部分,就應該是把生成的模型,與gef無縫集成了,不過涉及到的東西太多,思路倒是有,具體怎麼做......會在下一章節,詳細介紹的;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.