好好生活,努力工作,天天向上!

BlogJava 首页 新随笔 联系 聚合 管理
  46 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

  从上篇文章RAP 与 RCP的差别》中,我们知道,RCPRAP之间的区别很小,现在我们就开始研究他们的区别到底有多小,接下来打算将一个RCP项目迁移到RAP项目,我们从这样的一个实际的例子来演示。

  我们先在Eclipse创建一个RCP插件工程,选择RCP应用的Mail模板。我们就将这个RCP版本的Mail Demo 变成 RAP版本的Mail Demo,比如我们的插件工程的名称就叫做“com.vwpolo.rcp.mail”,

  创建完RCP插件项目后,我们双击打开plugin.xml文件,切换到“Dependencies”选项卡,默认的RCP项目会依赖“org.eclipse.ui“和”org.eclipse.core.runtime“这两个项目,在这里,我们将他们替换成“org.eclipse.rap.ui”和“org.eclipse.rap.ui.views”,(具体的依赖插件根据项目的需要进行添加)


  接着我们切换到“Extensions”选项卡,配置扩展点,RCP模板工程默认提供如下扩展点:

  

  在RAP项目中,是通过IEntryPoint 的子类来负责启动程序,而RCP是通过IApplication的子类来启动程序的,所以这里的“org.eclipse.core.runtime.applications扩展点没有用武之地,可以直接删除,替换成RAP支持的org.eclipse.rap.ui.entrypoint扩展点,在这个扩展点中可以指定启动类的ID和完整路径还有参数名称,这里的参数名称是提供给Servlet容器判断应该加载那个应用。
 
  
我们指定Application这个类负责程序的启动,这个类原来是RCP的启动类,我们现在将它实现的接口由IApplication修改成IEntryPoint,并实现createUI方法,在这个方法中创建UI界面,基本上和 RCP IApplicationstart 方法类似,只是这里我们不需要处理客户端的退出,系统会自动帮我们处理好的。createUI方法很简单: 

1 @Override
2 public int createUI() {
3     Display display = PlatformUI.createDisplay();
4     return PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
5 }

 比较一下RCPstart方法的处理: 

 1 public Object start(IApplicationContext context) {
 2         Display display = PlatformUI.createDisplay();
 3    try {
 4     int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
 5     if (returnCode == PlatformUI.RETURN_RESTART) {
 6         return IApplication.EXIT_RESTART;
 7     }
 8     return IApplication.EXIT_OK;
 9     } finally {
10     display.dispose();
11     }
12 }

  是不是发现很相似?只是RAP简化了处理的方法,不需要像RCP那样循环的检查系统消息。这样我们的org.eclipse.rap.ui.entrypoint扩展点就创建完毕了

  接下来我们看一下org.eclipse.core.runtime.products这个扩展点,在RAP中,这个扩展点被org.eclipse.rap.ui.branding替代了,所有我们可以删除org.eclipse.core.runtime.products,然后新增org.eclipse.rap.ui.branding”,右键选择这个扩展点,选择新建一个branding,然后配置branding的详细信息:

 

Id: 指定branding的ID,必须是唯一的,在同一项目中不能重复,

servletName:指定servlet的名称,在我们打开的浏览器地址栏上会显示,

defaultEntrypointId:是指定默认启动的启动类ID,这里指定我们刚才新建的EntryPoint扩展点中指定的ID,

themeID:使用的主题ID,接下来我们会讲解怎么自定义我们的主题。

Title:显示在浏览器标题栏上的信息。

Favoicon: RAP程序的标题栏角的图标

Body: 背景网页,比如我们在使用GMail的时候,显示的那个黄色的”正在载入...“标签,RAP也可以这样做。

exitConfirmationClass:在你关闭RAP程序或者关闭浏览器的时候弹出的确认推出对话框的提示内容。


    在RAP项目中不能直接使用RCP中的绑定功能了,所以我们的删除org.eclipse.ui.bindings“ 这个扩展点。

    在ApplicationActionBarAdvisor这个类中应该存在编译错误,因为RAPActionFactory没有提供ABOUTAction工厂,要么我们自己新建,比如:   

 1 aboutAction = new Action() {
 2       public void run() {
 3         Shell shell = window.getShell();
 4         Bundle bundle = Platform.getBundle(MailActivator.PLUGIN_ID );
 5         Dictionary headers = bundle.getHeaders();
 6         Object version = headers.get( Constants.BUNDLE_VERSION );
 7         MessageDialog.openInformation( shell,  "RAP MailDemo",   "当前版本为" + version );
8       }
11     };
12     aboutAction.setText( "关于" );
13     aboutAction.setId( "com.vwpolo.rap.mail.about" );
14     aboutAction.setImageDescriptor( helpActionImage );

  或者直接删除算了。 

  现在我们的plugin.xml文件中的扩展点项目应该为:

  

 
   我们启动一下看看效果,右键项目从弹出菜单选择 Run As -> RAP Application(如果发现启动失败多少刷新几次就好),下面是效果:

  
   
   这样我们的RCP项目就改造好了(虽然有点简单),大家有兴趣赶快试试吧
posted on 2009-05-22 10:10 VWPOLO 阅读(2837) 评论(0)  编辑  收藏 所属分类: Eclispe 插件开发Web 开发

只有注册用户登录后才能发表评论。


网站导航: