快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

澳门威泥斯人:EMF编程使用



看到eclipse3.2里面的GMF, 感觉对照有趣,底层照样用到了EMF. 花了两天光阴仔细钻研了以下EMF,切实着实是个好器械.

EMF根据ecore建模(可以和schema的xsd互相转换)天生强类型的EMF代码. 这个强类型更强的地方是可以取得meta信息,从而可以用于校验和界面帮助信息的天生.类似于动态bean,属性也可以根据名称动态取得.

曩昔斟酌过用xsd描述界面, 然则数据载体只能是xml, 纵然使用apache的schema编译对象天生强类型的类,后台代码也是xml. 晦气于持久化. emf在代码天生引擎对照智能,可以标记出用户代码和自动天生代码.不会有天生覆盖问题.

这里做个简单示例:

1. Ecore:

可以新建Ecore, 建立好今后用GMF可视化编辑(Eclipse3.2RC2)

2. 天生Model:

点击my.ecore文件,菜单:File->New->Other->Eclipse Modeling Framework->EMF Model

3. 打开天生的my.genmodel, 选择树顶点的:Generate Model Code

天生的代码里面会有一个编译差错. 是中文编程的问题, 中文没有大年夜小写(先天不够啊),结果性别这个成员变量和性别类名肴杂,掉足.在差错代码前面加上包全名即可.

4. 使用天生的代码构建一个家庭,输出xml并且校验之:

importjava.io.IOException;

importjava.util.Iterator;

importorg.eclipse.emf.common.util.Diagnostic;

importorg.eclipse.emf.common.util.URI;

importorg.eclipse.emf.ecore.EObject;

importorg.eclipse.emf.ecore.resource.Resource;

importorg.eclipse.emf.ecore.util.Diagnostician;

importorg.eclipse.emf.ecore.xmi.XMLResource;

importorg.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;

importorg.steeven.family.FamilyFactory;

importorg.steeven.family.人物;

importorg.steeven.family.家庭;

importorg.steeven.family.性别;

publicclassTestMy {

publicstaticvoidmain(String[] args)throwsIOException {

testFamily();

}

privatestaticvoidtestFamily()throwsIOException {

家庭 family=FamilyFactory.eINSTANCE.create家庭();

family.setTitle( " steeven家 " );

family.set老公(FamilyFactory.eINSTANCE.create人物());

family.get老公().set姓名( " steeven " );

family.set老婆(FamilyFactory.eINSTANCE.create人物());

family.get老婆().set姓名( " stella " );

family.get老婆().set性别(性别.女_LITERAL);

人物 sophie=FamilyFactory.eINSTANCE.create人物();

sophie.set姓澳门威泥斯人名( " sophie " );

sophie.set性别(性别.女_LITERAL);

family.get兔崽子().add(sophie);

dump(family);

validate(family);

}

澳门威泥斯人privatestaticvoidvalidate(EObject family) {

Diagnostic diagnostic=Diagnostician.INSTANCE.validate(family);

System.out.println(diagnostic);

for(Iterator it=diagnostic.getChildren().iterator(); it.hasNext();) {

Diagnostic diag=(Diagnostic) it.next();

System.out.println(diag.getMessage());

}

}

privatestaticResource dump(EObject objs)throwsIOE澳门威泥斯人xception {

//ResourceSet rs = new ResourceSetImpl();

//rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put(

//Resource.Factory.Registry.DEFAULT_EXTENSION,

//new XMIResourceFactoryImpl());

//Resource resource = rs.createResource(URI

//.createFileURI("c:\\temp\\test.xml"));

XMLResource resource=newXMLResourceImpl(URI

.createFileURI( " c:\\temp\\test.xml " ));

resource.setEncoding( " GBK " );

for(EObject obj : objs)

resource.getContents().add(obj);//今朝版本不加入resource验证会报singling非常

resource.save(System.out,null );

returnresource;

}

}

运行结果如下:

xml version="1.0" encoding="GBK" ?>

family: 家庭 xmlns:family ="http://or澳门威泥斯人g.steeven/family"title ="steeven家"老公 ="/"老婆 ="/"兔崽子 ="/" />

Diagnost澳门威泥斯人ic ERROR

The feature '老公' of 'org.steeven.family.impl.家庭Impl@f6a746{file:/c:/temp/test.xml#

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: