- 浏览: 2469066 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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查询
FROM:http://www.rcp.org.cn/bbs_topic.do?forumID=8&postID=6
Item providers是EMF.Edit工程里最重要的一部分,事实上该工程里除了plugin.java外就只有Item providers和Item provider factory。Item provider决定了不同类型的对象如何被显示以及他们如何响应用户的操作。我们将首先弄明白生成的代码如何做到的然后我们将探讨如何改变生成代码以满足我们的需要。
缺省情况下,core model里的每一个class都将会生成一个Item provider。Item provider的继承关系将遵循model里的继承关系。例如class B继承class A,那么B的Item provider也将继承A的Item provider。你也可以在genmodel文件中修改生成方式,比如将A的Provider Type选项改为None,那么将不会有A的Item provider被生成,B的Item provider也将继承A的父类的Item provider。
就像所有的Model类都继承自EObjectImpl一样,所有的Item provider都继承自一个框架类ItemProviderAdapter,它里面有大部分Item provider方法的缺省实现。
我们将以‘主机’类的Item provider为例来看看它和它的父类是如何完成Item provider的四种角色:
1. 实现Content和label provider的功能。
2. 作为EMF对象的property source将EMF对象的属性值显示在property sheet上。
3. 作为EMF对象的command factory,维护对EMF对象的增删改command。
4. 将EMF对象的notifications传递给viewers,以便于viewer将EMF对象的变化及时刷新显示出来。
我们从主机Item provider类的声明开始:
- public class 主机ItemProvider
- extends ItemProviderAdapter
- implements
- IEditingDomainItemProvider,
- IStructuredItemContentProvider,
- ITreeItemContentProvider,
- IItemLabelProvider,
- IItemPropertySource
继承的父类是ItemProviderAdapter,其他的五个接口都是用来帮助实现Item provider的那些角色,下面我们将按照角色来分别介绍Item provider中生成的方法。
Content and Label Provider
Eclipse中,不同的Viewer要求的content和label provider不同,所以Item provider实现了ITreeItemContentProvider, IStructuredItemContentProvider, IItemLabelProvider, 和 ITableItemLabelProvider以支持不同的viewer。
我们从ITreeItemContentProvider开始,这个接口要回答一个重要的问题是:我们希望什么将作为这个对象的children?下面这个方法给出了答案:
- public Collection getChildrenFeatures(Object object) {
- if (childrenFeatures == null) {
- super.getChildrenFeatures(object);
- childrenFeatures.add(MobilesPackage.eINSTANCE.get主机_功能());
- childrenFeatures.add(MobilesPackage.eINSTANCE.get主机_配件());
- }
- return childrenFeatures;
- }
一个主机将会包含配件和功能,生成代码将配件和功能的Ereference加入到它的childrenReferences list中。缺省情况下Model中该类的EReference都不会被作为其Child,只有当你修改genmodel中EReference的Children属性才可以。
与标准的content provider不同的是Item provider并没有实现getParent(), getChildren(), hasChildren(), 和 getElements()方法。事实上这些方法被Item provider的父类ItemProviderAdapter实现了,因为它们的实现方法是通用的,它将直接调用EObject的方法:
· getParent() 将返回该对象的container,假如该对象直接被resouce包含,那么返回resource。
· getChildren() 将遍历childrenReferences list,将其内容作为一个collection返回。
· hasChildren() 返回childrenReferences list是否为空。
· getElements() 调用getChildren()并返回其结果。
最后的这个方法,getElements()继承自IStructuredItemContentProvider。作为该接口的唯一方法,getElements()根据input对象返回它所包含的对象,返回值将作为table中的rows,list中的items,tree的最顶级的nodes而input对象就代表着table,list和tree。
你可以通过重写getParent()和getChildren()方法来提供一些不同的功能,例如让同一个对象在不同的视图中显示不同的children。
接下来我们来看IItemLabelProvider接口,它包括两个方法:getImage()和getText(),一个返回特定类型对象的图标另一个返回文本标识。下面是主机Item provider中的生成代码:
- public Object getImage(Object object) {
- return getResourceLocator().getImage("full/obj16/主机");
- }
- public String getText(Object object) {
- String label = ((主机)object).getName();
- return label == null || label.length() == 0 ?
- getString("_UI_主机_type") :
- getString("_UI_主机_type") + " " + label;
- }
调用getResourceLocator()将返回一个实现了ResouceLocator的类,这个类负责提供文本和图片资源。它由ItemProviderAdapter类定义并提供了个缺省实现,返回EMF.Edit plug-in class,在主机Item provider被重写为:
- public ResourceLocator getResourceLocator() {
- return MobilesEditPlugin.INSTANCE;
- }
它返回生成的plug-in class,由它访问我们的model定制的文本和图片资源。这个类将从Icons/subdirectory下搜索被请求的图片资源,例如这里的full/obj16/主机,缺省情况下会有一个生成的图片被返回。
getString()方法将通过指定的key去配置文件中寻找相应的值并返回。EMF采用了java的ResourceBundle机制来提供从配置文件中取文本值,通常这样做的目的是为了国际化。每一个plug-in都有一个配置文件,plugin.properties,那里面是一些key-value对,在我们的edit plug-in配置文件中包含着这样的一行:
_UI_\u4e3b\u673a_type = \u4e3b\u673a
其实它本来的值应该是 _UI_主机_type = 主机,ResourceBundle要求所有的字符都以ascii码来表示,所以中文“主机”被翻译成“\u4e3b\u673a”。下面简单的介绍一下实现国际化的方法:
缺省生成的配置文件中,好多属性名称都是英文的,这是我们的model里设定的,但假如我们想要在中国区域的系统上显示中文,或者日语系统上显示日文,我们只需要再写两个配置文件。比如支持简体中文的就将plugin.properties拷贝一份,命名为plugin_zh_CN.properties,然后将里面的英文属性名改为中文ascii码就可以:
将
_UI_\u4e3b\u673a_name_feature = Name
改为:
_UI_\u4e3b\u673a_name_feature = \u540d\u5b57
将系统的location设为中国,然后启动运行时ECLIPSE,可以看到原来属性页中的英文属性名name变成了中文。
在这里我们可以通过修改配置文件plugin.properties里面的value来定制我们需要的文本,也可以替换生成的图标文件定制节点图标。直接修改getText()和getImage()方法也可以,但是不要忘了将方法注释里面的@generated去掉,这样下次生成代码的时候就不会覆盖掉你的修改。
发表评论
-
Java程序员25个必备的Eclipse插件
2012-01-12 22:36 21924原文:http://www.fromdev.com/2012/ ... -
关于插件更新安装的错误
2007-12-21 20:12 2208在更新插件的时候出现这样的错误: Unable to comp ... -
最近做eclipse branding, features的一些经验
2007-12-16 01:24 4526知道eclipse的splash怎么做 ... -
GEF学习笔记
2007-12-07 20:20 4150GEF以前学习过, 而且还 ... -
SWT布局深入学习
2007-11-30 23:00 7938以下内容是学习"The Definitive Gui ... -
Eclipse Action 深入学习笔记(3)
2007-11-25 17:59 4078filter元素是用来指定当 ... -
Eclipse Action 深入学习笔记(2)
2007-11-25 17:14 5200Object Action 这种Action是跟弹出的上下文菜 ... -
Eclipse Action 深入学习笔记(1)
2007-11-25 17:07 7662以前做插件用到的ActionSet都只是依葫芦画瓢,没有真正理 ... -
JFace Text Editor完全掌握之终极指南(4)
2007-11-24 17:08 5669错误标识(Error Marking) Error Marki ... -
JFace Text Editor完全掌握之终极指南(3)
2007-11-24 16:56 5498内容大纲 之所以要给编 ... -
JFace Text Editor完全掌握之终极指南(2)
2007-11-24 16:53 6722最后一步就是实现各种功能 语法高亮 首先我们要实现的是语法高亮 ... -
JFace Text Editor完全掌握之终极指南(1)
2007-11-24 16:17 9984JFace 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 5152在Eclipse中一个Wizard=Wiza ... -
关于多页编辑器中不同Editor之间的Redo&Undo冲突的解决
2007-09-03 15:17 4055在我们的插件工具的开 ... -
TextEditor原理分析笔记
2007-08-23 15:48 3375Editor的语法着色原理:Eclipse使用damage , ... -
最近的Eclipse开发总结
2007-08-23 15:46 2103java.lang.IllegalAccessError: t ...
相关推荐
Content Providers作为Android四大组件之一(Activity、Service、Broadcast Receiver、Content Provider),主要负责存储和检索结构化数据,比如联系人信息、日历事件等。它们通过标准的URI(Uniform Resource ...
Content Providers 是所有应用程序之间数据存储和检索的一个桥梁,作用是使得各个应用程序之间实现数据共享。 它是应用程序间共享数据的唯一方法。 在Android中没有一块公共的所有应用程序都能访问的数据存储地方。 ...
1. **定义Content Provider**:Content Provider由一个继承自`android.content.ContentProvider`的类构成。这个类需要实现一些关键方法,比如`onCreate()`、`query()`、`insert()`、`update()`和`delete()`。`...
Content Provider 是 Android 四大组件之一,主要用于实现跨应用之间的数据共享。在 Android 开发中,应用程序通常需要与系统或其他应用程序进行数据交互,例如读取联系人信息、获取媒体文件等。Content Provider 为...
在Android系统中,Content Provider扮演着至关重要的角色,它是四大组件之一,负责数据的共享与交换。本说明文档将深入探讨Content Provider的概念、工作原理、使用方法以及它在实际开发中的应用。 一、Content ...
在Android开发中,Content Providers是四大组件之一,它是应用程序间数据共享的主要机制。Content Providers能够使得一个应用的数据对其他应用可见,甚至可以被系统服务和外部应用进行读写操作。本压缩包“应用源码...
在Android系统中,`platform_packages_providers_contactsprovider`是一个至关重要的组件,它是联系人数据提供者(Contacts Provider)的一部分。联系人数据提供者是Android框架中的一个核心服务,它负责管理和存储...
在Android开发中,Content Providers是Android四大组件之一,它是数据共享和交换的重要机制。本资料主要探讨了Content Providers的基础知识和使用方法,适用于对Android源码感兴趣的开发者进行深入学习。 Content ...
本资料包“Android应用源码之29.Content_Providers(1).zip”显然是为了帮助开发者理解和实践Content Provider的用法。以下是关于Content Providers的详细知识: 1. **Content Providers基础** - **定义**:Content...
Content Providers 是所有应用程序之间数据存储和检索的一个桥梁,作用是使得各个应用程序之间实现数据共享。它是应用程序间共享数据的唯一方法。在Android中没有一块公共的所有应用程序都能访问的数据存储地方
9. **案例分析**:在提供的源码中,"Android应用源码之30.Content_Providers(2)"可能包含了一个或多个示例,演示了如何创建和使用Content Provider。通过分析这些示例,你可以深入了解Content Provider的工作原理,...
在Android系统中,Content Provider是四大组件之一,它扮演着数据共享和交换的重要角色。Content Provider使得应用程序可以将自己的数据暴露给其他应用,同时也能够访问其他应用公开的数据。在这个"android provider...
Android中的ContentProviders是Android平台用来提供不同类型数据(比如音频、视频、图片、个人联系人等)的一个统一接口。ContentProviders使用URI(统一资源标识符)来识别数据集,并允许一个应用程序存储和检索...
Mysql是世界上最流行的开源关系型数据库之一。Kooboo CMS支持Mysql,意味着开发者可以利用其强大而稳定的数据处理能力。配置Mysql时,你需要提供数据库连接字符串,包括服务器地址、数据库名、用户名和密码。在...
Content Providers Demo 下载,对应博文: 【Android 开发】:Content Provider (内容提供者) 详解 :http://blog.csdn.net/ahuier/article/details/11882059 读者可以结合博文阅读,然后下载源代码进行学习。
Credential Provider : 自定义windows登录 修改Register.reg中CredentialProvider dll的文件路径,双击注册. 实现了标准的Credential Provider的登录机制. 安装此Provider,会自动屏蔽windows原有的登录入口, 如果...
【CredentialProvider】是微软Windows操作系统中的一个重要组件,它在用户登录过程中起着关键作用。CredentialProvider允许开发者自定义登录界面,以提供个性化的身份验证体验。在这个压缩包中,微软提供了五个不同...