- 浏览: 151473 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
MCQCM:
你的代码有个小问题,不信,你试试abceaefkbn。正确如下 ...
求字符串的最长不重复子串 -
cherry728:
如果服务由多个操作组成,那要怎么办呢。这些操作是需要顺序执行的 ...
一起学BPEL实例教程一(原创) -
zoukailiang0:
请问上面代码中的type变量是怎么获取的啊?我是用默认的pro ...
gef中的属性视图小结 -
我爱死了java:
楼主你好,看你的总结很感谢,不知道你可以把jaf-1_1-fr ...
axis1.4 使用笔记(1) -
nannan408:
ByteArrayOutputStream b ...
java clone方法的使用
这两天花了不少时间在如何把从数据库中读到的内容显示在一个Editor中,因此总结下吧。
需求:数据库中保存了服务对应的wsdl文档,现在需要根据服务ID从数据库中读取该文档内容,然后显示在一个编辑器中,要求对xml文档能着色。
应该说想明白后很简单,只需要两三步就可以了。
1.编写一个类实现IStorage接口,我程序中取名为WsdlStorage,具体如下
import java.io.ByteArrayInputStream; import java.io.InputStream; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.PlatformObject; /** * 包装wsdl文档,使之能在编辑器中打开* * */ public class WsdlStorage extends PlatformObject implements IStorage { private InputStream inputStream;//wsdl文档对应的输入流 private String wsdlName;//wsdl对应的名字 public WsdlStorage(InputStream inputStream, String wsdlName) { super(); this.inputStream = inputStream; this.wsdlName = wsdlName; } /** * 返回要显示 的具体内容 */ @Override public InputStream getContents() throws CoreException { // TODO Auto-generated method stub return inputStream; } @Override public IPath getFullPath() { // TODO Auto-generated method stub return null; } /** * 返回在编辑器中显示的名字 */ @Override public String getName() { // TODO Auto-generated method stub return wsdlName; } /** * 设置成只读 */ @Override public boolean isReadOnly() { // TODO Auto-generated method stub return true; } }
2. 编写一个类实现IStorageEditorInput接口,我程序中是WsdlEditorInput,具体内容如下:
import java.io.InputStream; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.PlatformObject; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.IPersistableElement; import org.eclipse.ui.IStorageEditorInput; public class WsdlEditorInput extends PlatformObject implements IStorageEditorInput { private IStorage storage; public WsdlEditorInput(IStorage storage) { super(); this.storage=storage; } /** * 重点是这个方法 */ @Override public IStorage getStorage() throws CoreException { // TODO Auto-generated method stub return storage; } @Override public boolean exists() { // TODO Auto-generated method stub return false; } @Override public ImageDescriptor getImageDescriptor() { // TODO Auto-generated method stub return null; } @Override public String getName() { // TODO Auto-generated method stub return storage.getName(); } @Override public IPersistableElement getPersistable() { // TODO Auto-generated method stub return null; } @Override public String getToolTipText() { // TODO Auto-generated method stub return "toolTip:"+storage.getName(); } }
如果你只是用一般的文本编辑器打开,可以直接跳到第4步。
要用xml编辑器打开具体内容,还要实现着色功能,这里要做的事会稍微多些
3.我这里准备从eclipse plugin中自带的XMLEditor进行一些修改,使之符合我的要求。
把例子中的代码都拷到自己工程下,只要修改一个类即可为我所用。
XMLDocumentProvider修改如下 :
//继承自StorageDocumentProvider public class XMLDocumentProvider extends StorageDocumentProvider { //这个方法一定要改,其实只需加入输入参数Object element,其它不用动 protected void setupDocument(Object element,IDocument document) { if (document != null) { IDocumentPartitioner partitioner = new FastPartitioner( new XMLPartitionScanner(), new String[] { XMLPartitionScanner.XML_TAG, XMLPartitionScanner.XML_COMMENT }); partitioner.connect(document); document.setDocumentPartitioner(partitioner); } } protected IAnnotationModel createAnnotationModel(Object element) throws CoreException { return null; } }
4.写个上下文菜单,获得wsdl内容,然后在编辑器中打开 吧
/** * 用户选择一个服务时,打开该服务对应的wsdl文档 */ public class ShowWsdlCommandHandler extends AbstractHandler { int sid = -1; String serviceName = ""; @Override public Object execute(ExecutionEvent event) throws ExecutionException { IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event); IWorkbenchPage page = window.getActivePage(); // 获得当前选择的服务id和名字 ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event) .getActivePage().getSelection(); if (selection != null && selection instanceof IStructuredSelection) { IStructuredSelection selections = (IStructuredSelection) selection; Object obj = selections.getFirstElement(); if (obj instanceof ServiceModel) { sid = ((ServiceModel) obj).getSid(); serviceName = ((ServiceModel) obj).getServiceName(); } } // 获得需要打开的wsdl内容 InputStream in = null; in = ServiceDAO.getWsdlContent(sid);//从数据库中读取wsdl文档 //在Editor中打开 IStorage storage = new WsdlStorage(in, serviceName); IStorageEditorInput input = new WsdlEditorInput(storage); if (page != null) try { //用xml编辑器打开 page.openEditor(input,XMLEditor.ID); //如果只想用普通编辑器打开,则直接调用下面代码 更简单 //page.openEditor(input,EditorsUI.DEFAULT_TEXT_EDITOR_ID); } catch (PartInitException e) { e.printStackTrace(); } return null; } }
大家关心的应该没几行,从第24行开始看就行了,只要你的程序能获得一个InputStream,替换掉我的代码应该就可以用了。
前面说过,如果你只想用一般的编辑器打开一些内容,那么省略到第三步,第四步中直接 调用
page.openEditor(input,EditorsUI.DEFAULT_TEXT_EDITOR_ID);
即可,应该很简单的。
如果大家觉得第三步看不懂,不妨先想想如何实现打开一个外部的xml文件。。。这个会了,打开非文件的内容也就会了。
附1:如果运行中会出现问题,不妨试试在plugin.xml中的dependencies中加上下面三个:
org.eclipse.ui.workbench.texteditor;
org.eclipse.jface.text;
org.eclipse.ui.editors;
发表评论
-
AWT,Swing,SWT组件间的对应关系
2010-09-21 11:11 1517Function/Role/Aspect ... -
访问eclipse cvs
2010-09-20 14:43 835:pserver:anonymous@dev.eclipse. ... -
TreeViewer中改变字体和颜色
2010-08-01 01:10 1486改变某一项的字体时可以简单参照下面的代码: @Overrid ... -
在RCP中获取IWorkbenchPage对象,实现视图间的事件监听。
2010-04-15 01:13 1330在RCP编程时,我们经常要取得IWorkbenchPage, ... -
总结一下eclipse中Job机制
2010-03-10 09:32 2207总结一下eclipse ... -
eclipse中的线程
2010-03-02 16:48 1057寒假我就上网很少了,真的非常不好意思.eclipse中的线程是 ... -
外部执行Command而Editor不提示已修改的解决办法
2010-01-11 19:22 866理论:有些时候的需求往往不是通过plette来创建模型和连线以 ... -
学习mywork源码速记
2009-12-12 22:09 9351.在action中获得shell ColorDialog ... -
gef中的属性视图小结
2009-12-06 15:38 26091.如果要实现在属性视图中编辑被选择的对象,则至少必须满足以下 ... -
java中产生随机颜色
2009-11-19 14:20 5085产生随机颜色: private Color createRa ... -
SWT/JFace的一些网站链接
2009-11-16 21:04 8391.swt入门 --常用组件的使用 有些组件的用法写得很全。值 ... -
SWT/Jface中的对话框
2009-10-26 16:04 1943应该说,在gui开发中最 ... -
gef(rcp)开发中容易出现的问题
2009-09-11 10:36 1315把碰到的问题放这。。持续添加中! 问题1:建了一个 r ... -
Draw2d中的连线路由器及gef中连线抗锯齿
2009-07-13 10:02 2657前两天也是在javaEye中看到一位大哥关于gef中连线抗锯齿 ... -
EMF features
2009-07-06 15:12 678下面这两个表得了解 -
GEF的一些总结
2009-07-02 17:14 15221.一般来说可以继承三种EditPart,分别是 org. ... -
EMF模型
2009-06-18 15:19 788EMF第二版中的一个模型,第十三章用到 why? -
EMF类间的关系
2009-06-15 18:59 705唉 -
GEF入手系列1
2009-04-28 20:08 989现在开始系统的学习GEF,所以想把学习过程中的一些东西记下来, ... -
GEF开发常用链接
2009-04-28 08:54 1037Eclipse GEF官网 http://www.eclip ...
相关推荐
在Eclipse中,可以通过“Export” -> “Eclipse Product”完成此步骤,生成可执行的RCP应用程序。 在“TextEditor”这个子文件中,很可能包含了实现上述功能的源代码和资源文件。通过分析这些代码,初学者可以学习...
- 允许应用程序在操作系统任务栏中显示图标。 - 用于通知用户应用程序的状态或提供快速访问的功能。 #### 五、视图 **5.1 添加示例视图** - **示例视图**: - 通过简单的例子展示如何创建视图。 - 可以展示...
根据给定文件中的标题、描述、标签以及部分内容,下面将详细阐述有关Eclipse RCP(Rich Client Platform)的基础知识及关键技术点。 ### Eclipse RCP基础知识概述 #### 1. Workbench工作台 - **概念**: 工作台是...
- 重写SWT控件在普通的Java程序中是可以实现的,但在RCP环境中可能会遇到字节码验证错误。 #### 八、SWT的Dialog 1. **Dialog的设计** - SWT的Dialog不支持可视化开发,但可以在Dialog内部放置一个Composite控件...
EMF 在 Eclipse 3.4 中的应用,使得开发者可以定义数据模型,这些模型可以是 XML 文件,也可以是数据库结构,甚至可以是业务对象。EMF 提供了丰富的 API 来操作这些模型,包括读取、写入、验证和转换。此外,EMF 还...
本书《Eclipse从入门到精通》不仅涵盖了Eclipse的基本使用,还深入介绍了SWT/JFace、插件开发、RCP平台开发等高级主题,并且包含了Web开发方面的内容。通过学习本书,读者不仅可以掌握Eclipse的基本操作,还能深入...
在项目中,`org.odf.xmleditor` 可能是一个负责编辑和查看 ODF 文档的模块,它可能包含对 ODF 格式解析和展示的实现。`org.odf.rcp` 很可能是这个工具的主应用程序模块,整合了 Eclipse RCP 框架,并且可能包含了...