随笔分类 -  EMF

eclipse.org/emf
摘要:缺省条件下,EMF不会为每个对象维护一个唯一的id,这在一些情况下不太方便,例如要在web环境下编辑一个EMF模型实例,通常需要在URL里传递对象的id以便确定目标。其实EMF的XMIResource维护了一个id与对象的映射表,并且会为每个新创建的对象自动赋值。 阅读全文
posted @ 2008-07-24 21:32 八进制 阅读(5536) 评论(2) 推荐(0) 编辑
摘要:假设在ecore模型里定义了两个类:产品(Product)和制造商(Manufacturer),Product通过名为manufacturer的多对一引用与Manufacturer建立关系。在应用程序里,有一些表格(TableViewer)需要在显示产品信息的同时,还要显示制造商相关信息,如制造商名称。缺省条件下,因为这些表格里每一行是一个Product实例,表格的文字更新由 AdapterFactoryLabelProvider通过ProductItemProvider实现,所以在制造商名称被改变的时候产品表格无法得到更新。 阅读全文
posted @ 2007-09-03 23:31 八进制 阅读(5988) 评论(4) 推荐(0) 编辑
摘要:以前在Eclipse 3.2里做的一个EMF应用程序,到3.3里发现一些TreeViewer里标签显示的格式不对,例如原来显示“Condition true”的,在3.3下可能显示“1”。调试了一下发现这些TreeViewer在为每个节点获得标签时,若相应的XXXItemProvider实现了ITableItemLableProvider时,会调用 getColumnText()而不是getText()来得到文本内容。 阅读全文
posted @ 2007-08-21 22:29 八进制 阅读(5330) 评论(0) 推荐(0) 编辑
摘要:一旦熟练使用EMF后,有新项目我总是习惯于先使用工具构造出数据模型,然后让EMF帮我生成java代码。当模型需要修改时,也是用工具修改模型本身,然后让EMF把改动更新到java代码,从而保证模型与代码的同步。最近的一个基于struts的Web项目里我试验了脱离Eclipse运行环境使用 EMF,发现比想象中的要更容易,以下是一些经验总结。 阅读全文
posted @ 2007-05-07 14:16 八进制 阅读(7959) 评论(9) 推荐(0) 编辑
摘要:在程序里得到EMF项目的.edit里图标的方法 阅读全文
posted @ 2007-04-09 21:14 八进制 阅读(3517) 评论(0) 推荐(0) 编辑
摘要:在viewer里过滤掉一些不需要的元素的一个方法 阅读全文
posted @ 2007-04-09 19:04 八进制 阅读(3400) 评论(0) 推荐(0) 编辑
摘要:覆盖EMF生成的XXXEditor.java的getPropertySheetPage()方法 阅读全文
posted @ 2007-03-30 23:37 八进制 阅读(3204) 评论(0) 推荐(0) 编辑
摘要:EReference的containment属性如果为true,表示目标EClass是被源EClass包含的,这是一种十分强的关系,例如汽车和车轮的关系。在ecore里,不允许包含关系形成圈,也就是说如果A包含B,B就不能再直接或间接的包含A;另外,如果作为容器的对象结束了自己的生命周期,被它包含的对象也将结束自己的生命周期。 阅读全文
posted @ 2006-11-20 21:36 八进制 阅读(3990) 评论(0) 推荐(0) 编辑
摘要:在ecore模型里可以详细的定义各种类型、属性和方法,但对于像“每个类别里至少有两种产品”这样的限制就无能为力了。为此,EMF提供了一套验证框架(Validator Framework)用于解决这个问题,在ecore文件里特定的方法可以被识别为验证方法并生成用于验证的代码。 阅读全文
posted @ 2006-08-09 20:32 八进制 阅读(5490) 评论(2) 推荐(0) 编辑
摘要:毕业设计的内容是Web应用程序的代码生成器,因为接触emf有一段时间了,我觉得用emf完全可以很方便的实现这个程序。这是更全面了解emf特别是 codegen部分的一个好机会。这个帖子将记录这个过程的点滴,所以会比较琐碎,也许这些文字能被用在毕业论文里(不希望论文里都是google来的东西)。我发现cnblogs的帖子被修改后在rss里会重新出现,所以订阅我的blog的读者可能要经常被“骚扰”了:P 阅读全文
posted @ 2006-03-24 14:22 八进制 阅读(4714) 评论(19) 推荐(0) 编辑
摘要:Omondo EclipseUML分为Studio版和Free版两种,我只用过Free版,对于创建EMF类图来说感觉已经够用了。不过和Eclipse的版本比起来,EclipseUML的升级比较缓慢,目前为止最新的版本还是2005年9月27日放出的,这就造成在新版本Eclipse里EclipseUML可能无法正常运行。 阅读全文
posted @ 2006-03-08 16:01 八进制 阅读(16687) 评论(35) 推荐(0) 编辑
摘要:今天用EclipseUML画类图遇到一个很郁闷的问题,为了保险起见我还是边画边保存的,画了一上午,有一次关闭了编辑器,再想打开时提示“Impossible to load the diagram xxx.ecd”。 阅读全文
posted @ 2006-02-21 11:55 八进制 阅读(4160) 评论(15) 推荐(0) 编辑
摘要:EMF除了生成模型部分的接口和实现类(不妨称作“核心模型”)以外,还生成一个名称以.Edit结尾的项目,包含一些与核心模型和编辑器关系都十分紧密的代码。这部分代码经过了精心设计,可重用的程度是相当的高。它们不仅在EMF生成的编辑器项目里大量被用到,我们自己在扩展编辑器的时候也应该充分利用。 阅读全文
posted @ 2006-02-02 22:28 八进制 阅读(6902) 评论(11) 推荐(0) 编辑
摘要:EMF生成的应用程序里,用户的发出的每一条命令都是可以撤销(Undo)的,例如修改了产品的价格,按一下撤销按钮就能恢复原来的价格,当然还可以通过重做(Redo)再回到新的价格。为了实现这个功能,应用程序里维护了一个用于存放命令的类似栈的数据结构(CommandStack),每一条执行过的命令都被存放在那里,需要撤销时取出最近一条命令进行撤销。这个数据结构是由EditingDomain对象负责维护的, EditingDomain相当于编辑模型时的环境。 阅读全文
posted @ 2005-12-31 22:16 八进制 阅读(5357) 评论(0) 推荐(0) 编辑
摘要:第三篇帖子介绍了定制一个EMF应用程序的基本方法,这一篇让我们来看看怎样定制应用程序的使用界面。没有任何一个界面是万能的,所以定制工作不可避免,而大多数定制都是通过修改代码来实现的。在实际应用中,同一个需求可能有多种修改方式可以实现,我认为修改涉及的地方(类,方法)越少越有利于发挥EMF的优势,因此我们应该对EMF生成的代码有一定的了解,这是发挥自己创造力的基础。 阅读全文
posted @ 2005-12-23 17:09 八进制 阅读(6820) 评论(6) 推荐(0) 编辑
摘要:在EMF里可以用XML Schema定义模型,然后转换为genmodel模型,但我这里在生成genmodel向导的第四步按Load后会产生一个NullPointerException如下,导致无法继续。 阅读全文
posted @ 2005-12-01 14:18 八进制 阅读(3697) 评论(2) 推荐(0) 编辑
摘要:除了普通的类(接口)以外,在类图里可以定义一些特殊的元素,比较常见的是枚举类型、自定义类型,它们对于一个完整可用的模型也是必不可少的,这篇帖子主要介绍EMF里它们的使用方法。另外,由于EMF对Map的支持比较特别,所以在这里也简要介绍一下Map类型的定义方法。 阅读全文
posted @ 2005-11-28 14:27 八进制 阅读(7903) 评论(10) 推荐(0) 编辑
摘要:借助EMF的帮助,不用亲自编写一行代码就可以生成一个完整的应用程序,你是不是对EMF有些感兴趣了?不过生成的应用程序看起来都像是从同一个模子里出来的,即一个多页编辑器,一个大纲视图和属性页,这当然无法满足所有人的需求。不用耽心,只要了解EMF的机制,按照我们的要求修改这个应用程序并不是一件很困难的事情。 阅读全文
posted @ 2005-11-19 23:59 八进制 阅读(9149) 评论(6) 推荐(0) 编辑
摘要:还是从一个例子里看看EMF的使用方法和作用吧。假设我们的应用是一个网上商店,在系统里有这些对象:商店Shop、类别Category、商品Product,其中类别可以包含子类别。现在我们用EMF从头到尾生成一个可以管理类别和商品的应用程序。 阅读全文
posted @ 2005-11-13 00:30 八进制 阅读(17211) 评论(71) 推荐(1) 编辑
摘要:接触Eclipse一段时间的朋友应该都听说过EMF这个名字,EMF是Eclipse Modeling Framework的缩写,它是Eclipse的一个重要的子项目,如果翻译成中文就是“Eclipse建模框架”。其实只从这个名字还真是难以确定它的作用是什么,我认为要完全掌握EMF应该对模型驱动开发(MDA)有一定的了解,而EMF可以看作是Eclipse上的MDA一个实现(代码生成是MDA 的重要组成部分之一),它能够生成在Eclipse上执行的代码。可惜我对MDA没有系统研究过,对EMF的应用大多是为了减少模型修改带来的影响,所以也希望EMF能带我进入MDA的世界。 阅读全文
posted @ 2005-11-12 23:29 八进制 阅读(11773) 评论(6) 推荐(0) 编辑