- 浏览: 2468194 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
★emf 运行时编程
★通过package和factory我们可以非常方便的取得class的metamodel信息,并且创建class instance。
★EClass,EPackage,EFactory提供了一些通用的方法,由此派生而来的class,package,factory则提供了更多便利的方法以供我们使用。
★访问指定的class除了通过package的getXxxx()方法之外,还可以取得那些没有generated的class,其用法是XxxxPackage.getEClassifier("Yyyyy")。
★通过package,我们可以遍历访问所有的class(以及attribute,reference,operation),datatype,enumeration
★访问package中所有的类使用EPackage.getEClassifiers()方法,遍历EClass所有属性用EClass.getEAttributes()方法,遍历reference用EClass.getEReferences()方法
★通过package创建制定类实例的几种做法:第一种就是使用XxxxPackage.createYyyy();第二种则是先通过XxxxPackage.eINSTANCE.getYyyyy()这种方式得到相关的实例类,以及XxxxFactory.eINSTANCE得到factory实例,最后使用xxxxFactory.create(yyyyClass)创建实例。
★通过一个给定的class name和相关的package uri创建类实例,一般为了得到类实例,我们需要得到class以及factory,而这些都可以通过package取得(通过getEClassifier()和getEFactoryInstance()方法)
★EPackage是对ecore xml文件的一个序列化对象,因此可以直接使用resouce,从一个ecore文件得到package对象,实际上这是一种比较底层的做法,通常我们不这样做,而是通过使用Package的Registry来映射到给定uri的package对象,Registry从java.util.Map继承而来,通过uri跟一个Package或者Package.Discriptor关联,这里的Discriptor主要在plugin模式下使用,除非真的需要Package,否则在初始化的时候将Discriptor注册到Registry中。在需要使用Package的时候,则通过Discriptor来取得(通过调用其getEPackage()方法),通过EPackage ePackage = EPackage.Registry.INSTANCE.getEPackage(packageNsURI)方法,我得到了package,接着得到class name和factory以及最终所需要的class instance就易如反掌了。
★emf presistence framework
★emf的持久化机制主要围绕4个接口:Resource,ResourceSet,Resource.Factory, URIConvertor。通过这4个接口便可以实现emf model的加载和保存
★URI 统一资源标识是一个标识和定义各种类型(文件、网络、数据库、文件对象以及数据流)资源开放标准。一个URI由三部分组成:scheme,scheme-specific以及fragment(可选)。org.eclipse.emf.common.util.URI是对URI的一种封装,scheme标识访问resource协议,文件为file,jar为jar,eclipse为platform
★file:/c:/dir1/dir2/myfile.xml和file:///c:/dir1/dir2/myfile.xml表示的资源是同一个,但是却是不同的URI对象
★scheme-specific由authority,device以及其他的segment组成,authority由//打头,device和segment都是以/打头,uri中从#开始往后都是fragment
★emf使用带有fragment的URI就可以引用到指定的EObject
★URIConvertor 用来将一个uri跟一个实际的uri建立映射关系,比如将一个namespace uri(http:///com/example/epo2.ecore)映射为一个物理uri(platform:/resource/project/somemodel.ecore),它还有一个功能就是normalize,也就是convert的意思,没明白这个机制
★URIConvertor提供createInputStream() and createOutputStream()两个方法,用来在制定的uri上打开两个input和output stream。
★Resouce表示一个EObject集合的持久容器,可以通过URI来进行定位,Resource.getContents()的add方法向一个Resource添加一个EObject,也可以通过给容器类型的关联添加一个引用来给Resource添加一个EObject,Resource比较重要的是save()和load()方法,这两个方法定义了持久化的格式,还有getEObject()和getURIFragment()方法则用来使用URI查找对象
★save和load方法的实现机制:首先使用URIConvertor将指定的uri进行转换,然后打开相应的stream,接着调用doSave和doLoad方法,这些方法交给子类去实现,在save和load两个方法调用中会传一个map参数,这个参数用来控制save和load的行为
★Resource.Factory 用来创建resoruce对象的,所有的factory都使用一个map的registry来加以管理,跟package的registry一样的做法,不同之处它是根据uri scheme以及extension来进行分类注册的。在plugin中默认情况下所有的emf model都使用XMIResourceFactoryImpl,如果要自定义factory,可以通过添加扩展点org.eclipse.emf.ecore.extension_parser,并指定自己的factory实现,一般情况下resource factory只是用来给resourceset来使用
★ResourceSet 用来管理已经load和create的resource集合,主要使用createResource(),getResource(),getEObject()这几个方法。createResource()用于在set中创建一个空的resource对象,getResource()也会先创建一个Resource,然后用指定的resource URI去加载指定的resource,getEObject()则在已有的resource(或者根据uri调用getResource()方法先加载resource)中根据需要加载EObject,
★除了可以直接通过new以及resource.factory的createResource()方法来创建resource对象之外,也可以通过调用ResourceSet的getResource() and createResource()方法来创建(其内部会调用resource.factory的相应方法),这样做的一个重要原因是它能够跟踪某个uri是否已经被打开,这样可以避免内存里面出现两份一样的resource,resource set还可以按需加载当前resource对另外一个resource的引用
★使用ResourceSet的时候需要resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(Resource.Factory.Registry.DEFAULT_EXTENSION,new XMIResourceFactoryImpl());这样设置一把,否则会因为找不到rsourceFactory而无法使用resource
★
★emf resource implementation
★在生成一对一的属性的时候,会在当前节点上以attribute的形式添加
★在生成一对多的属性的时候,会在当前节点中以子节点的方式添加属性
★在生成包含关系的引用的时候,会在当前节点中以子节点的方式添加引用节点
★在生成非包含关系的引用的时候,会在当前节点中以attribute的形式引用子节点的fragment,但是如果设置在被包含引用的iD属性的话,则采用id的方式加以引用。
★在创建交叉引用的时候需要把resource的save放在所有resource生成之后。交叉引用可以使用相对路径也可以使用绝对路径,但是相对路径更好一些,因为可移植性更好,要做到使用相对路径引用,则需要在创建resource的时候使用绝对uri路径
★如果引用存在继承关系,那么对于引用的具体子类,会在生成的xml中添加xmi:type属性来表明具体引用的是哪个子类
★
★xml输出的定制
★OPTION_DECLARE_XML为false标识没有xml头声明
★OPTION_LINE_WIDTH好像没有效果
★OPTION_USE_ENCODED_ATTRIBUTE_STYLE 为true则总是使用uri方式来进行引用
★OPTION_SKIP_ESCAPE为true(默认为true)表示针对转义字符(<,>,&)进行转换
★OPTION_XML_MAP 用来将制定的节点内容进行转换
★OPTION_ENCODING为xml设置字符集
★xml输入定制
★OPTION_DISABLE_NOTIFY 为true取消触发通知
★OPTION_XML_MAP 在save的时候使用了OPTION_XML_MAP,那么在load的时候也要使用
★
★adapter编程
★给一个model object添加一个adapter有三种方式:第一种通过model object的eAdapters属性将一个adapter跟model关联起来;第二种通过adapter factory的adapt方法将一个adapter与一个model object关联起来;第三种通过扩展已有的adapter factory创建制定类型的adapter来与model object关联。
★Notification用来封装通知信息,这里除了getNotifier()方法返回通知的发送者之外,还包括通知的类型,发生改变的feature(即 feature id),改动前后的值,如果需要屏蔽掉非状态改变的通知,则可以使用isTouch()方法来实现。
★通过adapter除了可以给一个model object添加一个监听器之外,还可以用来给model object增加一些功能。其做法是先定义一个需要实现功能的接口,然后实现该接口并扩展AdapterImpl实现一个Adapter,并创建一个adapter factory来负责创建该adapter,最后通过adapter factory的adapt()方法将model object与前面定义的接口关联起来,这样model object就被扩展成具有该接口的一些功能了。
★通过package和factory我们可以非常方便的取得class的metamodel信息,并且创建class instance。
★EClass,EPackage,EFactory提供了一些通用的方法,由此派生而来的class,package,factory则提供了更多便利的方法以供我们使用。
★访问指定的class除了通过package的getXxxx()方法之外,还可以取得那些没有generated的class,其用法是XxxxPackage.getEClassifier("Yyyyy")。
★通过package,我们可以遍历访问所有的class(以及attribute,reference,operation),datatype,enumeration
★访问package中所有的类使用EPackage.getEClassifiers()方法,遍历EClass所有属性用EClass.getEAttributes()方法,遍历reference用EClass.getEReferences()方法
★通过package创建制定类实例的几种做法:第一种就是使用XxxxPackage.createYyyy();第二种则是先通过XxxxPackage.eINSTANCE.getYyyyy()这种方式得到相关的实例类,以及XxxxFactory.eINSTANCE得到factory实例,最后使用xxxxFactory.create(yyyyClass)创建实例。
★通过一个给定的class name和相关的package uri创建类实例,一般为了得到类实例,我们需要得到class以及factory,而这些都可以通过package取得(通过getEClassifier()和getEFactoryInstance()方法)
★EPackage是对ecore xml文件的一个序列化对象,因此可以直接使用resouce,从一个ecore文件得到package对象,实际上这是一种比较底层的做法,通常我们不这样做,而是通过使用Package的Registry来映射到给定uri的package对象,Registry从java.util.Map继承而来,通过uri跟一个Package或者Package.Discriptor关联,这里的Discriptor主要在plugin模式下使用,除非真的需要Package,否则在初始化的时候将Discriptor注册到Registry中。在需要使用Package的时候,则通过Discriptor来取得(通过调用其getEPackage()方法),通过EPackage ePackage = EPackage.Registry.INSTANCE.getEPackage(packageNsURI)方法,我得到了package,接着得到class name和factory以及最终所需要的class instance就易如反掌了。
★emf presistence framework
★emf的持久化机制主要围绕4个接口:Resource,ResourceSet,Resource.Factory, URIConvertor。通过这4个接口便可以实现emf model的加载和保存
★URI 统一资源标识是一个标识和定义各种类型(文件、网络、数据库、文件对象以及数据流)资源开放标准。一个URI由三部分组成:scheme,scheme-specific以及fragment(可选)。org.eclipse.emf.common.util.URI是对URI的一种封装,scheme标识访问resource协议,文件为file,jar为jar,eclipse为platform
★file:/c:/dir1/dir2/myfile.xml和file:///c:/dir1/dir2/myfile.xml表示的资源是同一个,但是却是不同的URI对象
★scheme-specific由authority,device以及其他的segment组成,authority由//打头,device和segment都是以/打头,uri中从#开始往后都是fragment
★emf使用带有fragment的URI就可以引用到指定的EObject
★URIConvertor 用来将一个uri跟一个实际的uri建立映射关系,比如将一个namespace uri(http:///com/example/epo2.ecore)映射为一个物理uri(platform:/resource/project/somemodel.ecore),它还有一个功能就是normalize,也就是convert的意思,没明白这个机制
★URIConvertor提供createInputStream() and createOutputStream()两个方法,用来在制定的uri上打开两个input和output stream。
★Resouce表示一个EObject集合的持久容器,可以通过URI来进行定位,Resource.getContents()的add方法向一个Resource添加一个EObject,也可以通过给容器类型的关联添加一个引用来给Resource添加一个EObject,Resource比较重要的是save()和load()方法,这两个方法定义了持久化的格式,还有getEObject()和getURIFragment()方法则用来使用URI查找对象
★save和load方法的实现机制:首先使用URIConvertor将指定的uri进行转换,然后打开相应的stream,接着调用doSave和doLoad方法,这些方法交给子类去实现,在save和load两个方法调用中会传一个map参数,这个参数用来控制save和load的行为
★Resource.Factory 用来创建resoruce对象的,所有的factory都使用一个map的registry来加以管理,跟package的registry一样的做法,不同之处它是根据uri scheme以及extension来进行分类注册的。在plugin中默认情况下所有的emf model都使用XMIResourceFactoryImpl,如果要自定义factory,可以通过添加扩展点org.eclipse.emf.ecore.extension_parser,并指定自己的factory实现,一般情况下resource factory只是用来给resourceset来使用
★ResourceSet 用来管理已经load和create的resource集合,主要使用createResource(),getResource(),getEObject()这几个方法。createResource()用于在set中创建一个空的resource对象,getResource()也会先创建一个Resource,然后用指定的resource URI去加载指定的resource,getEObject()则在已有的resource(或者根据uri调用getResource()方法先加载resource)中根据需要加载EObject,
★除了可以直接通过new以及resource.factory的createResource()方法来创建resource对象之外,也可以通过调用ResourceSet的getResource() and createResource()方法来创建(其内部会调用resource.factory的相应方法),这样做的一个重要原因是它能够跟踪某个uri是否已经被打开,这样可以避免内存里面出现两份一样的resource,resource set还可以按需加载当前resource对另外一个resource的引用
★使用ResourceSet的时候需要resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(Resource.Factory.Registry.DEFAULT_EXTENSION,new XMIResourceFactoryImpl());这样设置一把,否则会因为找不到rsourceFactory而无法使用resource
★
★emf resource implementation
★在生成一对一的属性的时候,会在当前节点上以attribute的形式添加
★在生成一对多的属性的时候,会在当前节点中以子节点的方式添加属性
★在生成包含关系的引用的时候,会在当前节点中以子节点的方式添加引用节点
★在生成非包含关系的引用的时候,会在当前节点中以attribute的形式引用子节点的fragment,但是如果设置在被包含引用的iD属性的话,则采用id的方式加以引用。
★在创建交叉引用的时候需要把resource的save放在所有resource生成之后。交叉引用可以使用相对路径也可以使用绝对路径,但是相对路径更好一些,因为可移植性更好,要做到使用相对路径引用,则需要在创建resource的时候使用绝对uri路径
★如果引用存在继承关系,那么对于引用的具体子类,会在生成的xml中添加xmi:type属性来表明具体引用的是哪个子类
★
★xml输出的定制
★OPTION_DECLARE_XML为false标识没有xml头声明
★OPTION_LINE_WIDTH好像没有效果
★OPTION_USE_ENCODED_ATTRIBUTE_STYLE 为true则总是使用uri方式来进行引用
★OPTION_SKIP_ESCAPE为true(默认为true)表示针对转义字符(<,>,&)进行转换
★OPTION_XML_MAP 用来将制定的节点内容进行转换
★OPTION_ENCODING为xml设置字符集
★xml输入定制
★OPTION_DISABLE_NOTIFY 为true取消触发通知
★OPTION_XML_MAP 在save的时候使用了OPTION_XML_MAP,那么在load的时候也要使用
★
★adapter编程
★给一个model object添加一个adapter有三种方式:第一种通过model object的eAdapters属性将一个adapter跟model关联起来;第二种通过adapter factory的adapt方法将一个adapter与一个model object关联起来;第三种通过扩展已有的adapter factory创建制定类型的adapter来与model object关联。
★Notification用来封装通知信息,这里除了getNotifier()方法返回通知的发送者之外,还包括通知的类型,发生改变的feature(即 feature id),改动前后的值,如果需要屏蔽掉非状态改变的通知,则可以使用isTouch()方法来实现。
★通过adapter除了可以给一个model object添加一个监听器之外,还可以用来给model object增加一些功能。其做法是先定义一个需要实现功能的接口,然后实现该接口并扩展AdapterImpl实现一个Adapter,并创建一个adapter factory来负责创建该adapter,最后通过adapter factory的adapt()方法将model object与前面定义的接口关联起来,这样model object就被扩展成具有该接口的一些功能了。
发表评论
-
Java程序员25个必备的Eclipse插件
2012-01-12 22:36 21923原文:http://www.fromdev.com/2012/ ... -
关于插件更新安装的错误
2007-12-21 20:12 2206在更新插件的时候出现这样的错误: Unable to comp ... -
最近做eclipse branding, features的一些经验
2007-12-16 01:24 4525知道eclipse的splash怎么做 ... -
GEF学习笔记
2007-12-07 20:20 4148GEF以前学习过, 而且还 ... -
SWT布局深入学习
2007-11-30 23:00 7937以下内容是学习"The Definitive Gui ... -
Eclipse Action 深入学习笔记(3)
2007-11-25 17:59 4076filter元素是用来指定当 ... -
Eclipse Action 深入学习笔记(2)
2007-11-25 17:14 5199Object Action 这种Action是跟弹出的上下文菜 ... -
Eclipse Action 深入学习笔记(1)
2007-11-25 17:07 7659以前做插件用到的ActionSet都只是依葫芦画瓢,没有真正理 ... -
JFace Text Editor完全掌握之终极指南(4)
2007-11-24 17:08 5666错误标识(Error Marking) Error Marki ... -
JFace Text Editor完全掌握之终极指南(3)
2007-11-24 16:56 5493内容大纲 之所以要给编 ... -
JFace Text Editor完全掌握之终极指南(2)
2007-11-24 16:53 6720最后一步就是实现各种功能 语法高亮 首先我们要实现的是语法高亮 ... -
JFace Text Editor完全掌握之终极指南(1)
2007-11-24 16:17 9978JFace Text Editor是JFace里面一个功能强大 ... -
最近的Eclipse plugin开发总结
2007-11-24 11:30 4935List控件没有提供addDblClickListener方法 ... -
eclipse3.3关于JavaFileEditorInput兼容性问题的解决
2007-11-24 11:22 4667在eclipse3.3中,JavaFileEditor ... -
Eclipse WTP Projects Facets实战指南(2)
2007-11-21 21:13 5247修饰工作 给facet在选择列表中添加图标 格式如下: xml ... -
Eclipse WTP Projects Facets实战指南(1)
2007-11-21 20:21 9582这个文章基本是"Building Project F ... -
也说关于WizardPage的动态生成
2007-11-05 14:26 5150在Eclipse中一个Wizard=Wiza ... -
关于多页编辑器中不同Editor之间的Redo&Undo冲突的解决
2007-09-03 15:17 4055在我们的插件工具的开 ... -
TextEditor原理分析笔记
2007-08-23 15:48 3374Editor的语法着色原理:Eclipse使用damage , ... -
最近的Eclipse开发总结
2007-08-23 15:46 2102java.lang.IllegalAccessError: t ...
相关推荐
1、资源内容地址:https://blog.csdn.net/abc6838/article/details/143720369 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理
CPPC++_更好的Windows字体渲染
10018
cppc++
二环北路东段欣心家园小区商业B段(中石油加油站东邻).m4a
cppc++
C2005
Python课程设计之高校教务系统
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
10023
使用QUndoStack撤销栈实现QTreeWidget删除item及撤销、重做
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
Python课程设计之飞机大战3.zip
SpringBoot分布式事务
CPPC++_tensorort for yolo系列YOLOv10YOLOv9YOLOv8YOLOv7YOLOv6Y
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
收录了「IT无知君」CSDN博客中涉及的Java项目源码,还有许多的开发工具类,都是我自己在用在不断维护的,需要请进!
CPPC++_更新你的CFW作弊码固件,更直接地从你的任天堂交换机
test-dadfateq