国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

EMF編程使用

2019-11-18 12:59:46
字體:
來源:轉載
供稿:網友

       看到eclipse3.2里面的GMF, 覺得比較有趣,底層還是用到了EMF. 花了兩天時間仔細研究了以下EMF,的確是個好東西.

EMF根據ecore建模(可以和schema的xsd相互轉換)生成強類型的EMF代碼. 這個強類型更強的地方是可以取得meta信息,從而可以用于校驗和界面輔助信息的生成.類似于動態bean,屬性也可以根據名稱動態取得.

以前考慮過用xsd描述界面, 但是數據載體只能是xml, 即使利用apache的schema編譯工具生成強類型的類,后臺代碼也是xml. 不利于持久化. emf在代碼生成引擎比較智能,可以標記出用戶代碼和自動生成代碼.不會有生成覆蓋問題.

這里做個簡單示例:
1. Ecore:
可以新建Ecore, 建立好以后用GMF可視化編輯(Eclipse3.2RC2)
EMF編程使用(圖一)


2. 生成Model:
點擊my.ecore文件,菜單:File->New->Other->Eclipse Modeling Framework->EMF Model
3. 打開生成的my.genmodel, 選擇樹頂點的:Generate Model Code
生成的代碼里面會有一個編譯錯誤. 是中文編程的問題, 中文沒有大小寫(先天不足啊),結果性別這個成員變量和性別類名混淆,出錯.在錯誤代碼前面加上包全名即可.
4. 利用生成的代碼構建一個家庭,輸出xml并且校驗之:

Word-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee" twffan="done">EMF編程使用(圖二) import  java.io.IOException;
EMF編程使用(圖二) import  java.util.Iterator;
EMF編程使用(圖二)
EMF編程使用(圖二) import  org.eclipse.emf.common.util.Diagnostic;
EMF編程使用(圖二) import  org.eclipse.emf.common.util.URI;
EMF編程使用(圖二) import  org.eclipse.emf.ecore.EObject;
EMF編程使用(圖二) import  org.eclipse.emf.ecore.resource.Resource;
EMF編程使用(圖二) import  org.eclipse.emf.ecore.util.Diagnostician;
EMF編程使用(圖二) import  org.eclipse.emf.ecore.xmi.XMLResource;
EMF編程使用(圖二) import  org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
EMF編程使用(圖二) import  org.steeven.family.FamilyFactory;
EMF編程使用(圖二) import  org.steeven.family.人物;
EMF編程使用(圖二) import  org.steeven.family.家庭;
EMF編程使用(圖二) import  org.steeven.family.性別;
EMF編程使用(圖二)
EMF編程使用(圖三)EMF編程使用(圖四) public   class  TestMy  EMF編程使用(圖五) {
EMF編程使用(圖六)
EMF編程使用(圖七)EMF編程使用(圖八)     public   static   void  main(String[] args)  throws  IOException  EMF編程使用(圖五) {
EMF編程使用(圖六)        testFamily();
EMF編程使用(圖九)    }
EMF編程使用(圖六)
EMF編程使用(圖七) EMF編程使用(圖八)     PRivate   static   void  testFamily()  throws  IOException  EMF編程使用(圖五) {
EMF編程使用(圖六)        家庭 family  =  FamilyFactory.eINSTANCE.create家庭();
EMF編程使用(圖六)        family.setTitle( " steeven家 " );
EMF編程使用(圖六)        family.set老公(FamilyFactory.eINSTANCE.create人物());
EMF編程使用(圖六)        family.get老公().set姓名( " steeven " );
EMF編程使用(圖六)        family.set老婆(FamilyFactory.eINSTANCE.create人物());
EMF編程使用(圖六)        family.get老婆().set姓名( " stella " );
EMF編程使用(圖六)        family.get老婆().set性別(性別.女_LITERAL);
EMF編程使用(圖六)        人物 sophie  =  FamilyFactory.eINSTANCE.create人物();
EMF編程使用(圖六)        sophie.set姓名( " sophie " );
EMF編程使用(圖六)        sophie.set性別(性別.女_LITERAL);
EMF編程使用(圖六)        family.get兔崽子().add(sophie);
EMF編程使用(圖六)        dump(family);
EMF編程使用(圖六)        validate(family);
EMF編程使用(圖九)    }
EMF編程使用(圖六)
EMF編程使用(圖七) EMF編程使用(圖八)     private   static   void  validate(EObject family)  EMF編程使用(圖五) {
EMF編程使用(圖六)        Diagnostic diagnostic  =  Diagnostician.INSTANCE.validate(family);
EMF編程使用(圖六)        System.out.println(diagnostic);
EMF編程使用(圖七)EMF編程使用(圖八)         for  (Iterator it  =  diagnostic.getChildren().iterator(); it.hasNext();)  EMF編程使用(圖五) {
EMF編程使用(圖六)            Diagnostic diag  =  (Diagnostic) it.next();
EMF編程使用(圖六)            System.out.println(diag.getMessage());
EMF編程使用(圖九)        }
EMF編程使用(圖九)    }
EMF編程使用(圖六)
EMF編程使用(圖七) EMF編程使用(圖八)     private   static  Resource dump(EObjectEMF編程使用(圖五) objs)  throws  IOException  EMF編程使用(圖五) {
EMF編程使用(圖六)         //  ResourceSet rs = new ResourceSetImpl();
EMF編程使用(圖六)         //  rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put(
EMF編程使用(圖六)         //  Resource.Factory.Registry.DEFAULT_EXTENSION,
EMF編程使用(圖六)         //  new XMIResourceFactoryImpl());
EMF編程使用(圖六)         //  Resource resource = rs.createResource(URI
EMF編程使用(圖六)         //  .createFileURI("c://temp//test.xml"));
EMF編程使用(圖六)         XMLResource resource  =   new  XMLResourceImpl(URI
EMF編程使用(圖六)                .createFileURI( " c://temp//test.xml " ));
EMF編程使用(圖六)        resource.setEncoding( " GBK " );
EMF編程使用(圖六)         for  (EObject obj : objs)
EMF編程使用(圖六)            resource.getContents().add(obj);  //  目前版本不加入resource驗證會報singling異常
EMF編程使用(圖六)         resource.save(System.out,  null );
EMF編程使用(圖六)         return  resource;
EMF編程使用(圖九)    }
EMF編程使用(圖十)}
EMF編程使用(圖二)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新野县| 隆子县| 宁武县| 开阳县| 米易县| 义乌市| 江油市| 商水县| 肃南| 宁南县| 福海县| 蚌埠市| 宜兰县| 青铜峡市| 随州市| 广昌县| 遂川县| 扎鲁特旗| 通榆县| 石林| 广灵县| 汶上县| 连山| 东海县| 武冈市| 平顶山市| 定西市| 甘孜县| 盐池县| 浦江县| 长白| 龙岩市| 龙游县| 陇川县| 永修县| 皋兰县| 余干县| 休宁县| 乐清市| 巴塘县| 永善县|