在che中增加EMF支持 - Day6:加入你自己的编辑器

继上一篇之后的下一步,是添加自定义的编辑器让你能像在经典Eclipse里习惯的那样利用Ecore建模。现有的EMF编辑器是SWT编写的,因此我们不能简单的直接复用它(就像我们为代码生成所做的一样)。那么,让我们来看看在Che中实现新的Ecore编辑器的不同做法。正如第一篇博文中所描述,我们的首要目的是做一个像EMF tooling一样基于表单的编辑器,而不是文本或者图形。但是,需要考虑的以下几点因素是几乎相同的。

Che提供了一种灵活的扩展机制,可以为文件类型注册对应的编辑器,同样一个框架也是。因此,我们主要需要考虑编辑器的内部部分,也就是显示文件实际内容的部分。

为此,我们基本上有三种选择:

  1. 扩展现有的代码编辑器(基于Orion
  2. 使用GWT编写一个新的编辑器(Che用GWT实现)
  3. 嵌入现有的HTML/JavaScript组件

如果你想要修改任何基于文本的人工代码,第一个可能是最简单和最好的选择。在这种情况下,您可以使用自定义高亮、代码补全等来扩展Orion编辑器。对于我们的Ecore编辑器,我们的目标是基于表单的解决方案,因此对于我们来说,Orion编辑器并不是一个真正的选择。

如果您需要从头开始实现编辑器,那么使用Google Widget Toolkit的第二个选择可能是最简单的。当您使用与周围应用程序(比如Che)相同的技术时,集成的过程就很直接,您可以直接使用所有Che的API。但是,你需要GWT的开发经验,然而GWT的生态系统已经不是那么活跃了。

第三种选择实际上是最灵活的选择。由于Che是一个HTML/JavaScript应用程序,所以你可以嵌入任何您喜欢的Web框架来创建编辑器。你可以去访问HTML/JavaScript框架的生态系统。它还使你的编辑器独立于Che,这样你只需要编写一次并使用独立的解决方案,甚至将其嵌入到其他Web IDE中(如AtomTheia)中。此外,这个选择会让你的开发周期更有效。 您可以首先使用非常短的构建周期和简单的调试来开发独立组件,然后将其嵌入到框架中。

您可能已经猜到了,我们使用第三个选择去做Ecore Editor原型。在我们介绍实际的编辑器之前,让我们更详细地了解将HTML嵌入现有GWT应用程序(Che)的方法。

要在Che中嵌入我们自己的现有HTML/JavaScript组件,我们需要完成三个任务:

  • 包括我们自己的HTML
  • 包括我们自己的Javascript
  • 包括我们自己的CSS

从简单的弹出窗口到更复杂的编辑器,Che都是使用GWT开发人员推荐的Model-View-Presenter模式来实现与UI相关的所有内容。想要在Che中嵌入HTML,你可以扩展和配置提供的BaseView类。你可以注册一个特殊的GWT-UI Binderxml文件,在其中指定自己的HTML

要嵌入您的Javascript,您需要实现一个presenter。对于编辑器,Che提供了AbstractEditorPresenter类,它已经包含了诸如脏状态处理之类的有用的功能。在你的实现过程中,可以在编辑器初始化时调用GWT ScriptInjector来注入Javascript文件。加载完成后,必须调用先前实现的视图以显示自定义的HTML。

通常,您需要与Javascript库进行通信,例如提供来自Che的数据。 为此,您可以使用GTWOverlaysOverlays是表示JavaScript对象的Java类,可以在实现的视图中使用它们。

你可以在注册你的插件的位置来插入你的CSS,方法是把它添加到Che的HTML文档中。但是,你需要确保你的CSS不会覆盖Che定义的CSS。

在che中增加EMF支持 - Day6:加入你自己的编辑器

现在你就只需要写一个presenter去为现有或者你定义的文件类型调用HTML/JavaScript组件。

下面的截图就演示了一个简单的自定义编辑器。它通过BasicView方法显示一个静态的HTML。

在che中增加EMF支持 - Day6:加入你自己的编辑器

请继续关注之后的博客,我们将展示如何使用Model-View-Presenter模式将我们自己的,更复杂的独立的显示Ecore文件内容的UI组件嵌入到Che中。

相关推荐