`
Saito
  • 浏览: 42872 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用gef构建一个图形化的流程设计器.

阅读更多
  我们总是在做着各种反潮流的事情..

  当jbpm4在N年以后终于推出了自己的"羚羊"的时侯,我们却要从已有的web流程设计器退化为用eclipse plugin的形式绘制流程.在这个诡谲的客户第一的年代里面.我们操起了osgi.操起了eclipse plugin. 操起了各种swt jface.... 操起了更加诡异的gef.放下我心爱的web流程设计器.(T T .还没优化好呢.)

  避开难受的osgi类加载机制吧.他太过于繁琐.我们只需要知道plugin作为bundle插入了容器便好了. 避开各种操蛋的swt jface吧.(我十分期待eclipse v4的xwt.)在类xml语言描述界面的大潮下.swt确实写起来让人蛋疼. swt设计器生成代码又有诸多限制以及问题. . 好吧. 事实上我最想避开的是gef.这个东西实在是太过于复杂.
附图:

  恐怖的osgi类加载机制:



  eclipse plugin开发其实不是什么高深的学问.没什么复杂的技术.我归结了一下.用三个字表达:"基于xml编程的eclipse plugin开发." 嗯.三个字.. eclipse插件开发中最重要的三个个文件就是Activitor plugin.xml 跟 MANIFEST.MF.(此刻我是多么期望能有anotation大大前来救驾.)Activitor同android什么activitor的其实是类似的. 提供了一个加载bundle的入口.当然osgi规范也制定了一系列的bundle的install.uninstall.avtive什么的状态转换过程的规范.嗯.各种规范.  plugin.xml维护了插件的扩展点.所谓扩展点分为两种.一种为eclipse自身的扩展点.我们可以扩展很多东西.wizard.editor.menu什么的.另一种我们可以自己制定扩展点.(这里面包括真的是自己的扩展点.和别人开发的插件的扩展点.).当然eclipse给你提供了方便的插件扩展界面.通过界面可以轻松的扩展.但是.但是啊.. MANIFEST.MF实际上是osgi的遗孀.我们的插件需要他.来作为osgi的bundle.bundle之间有什么相互依赖.然后你的插件需要导出导入什么package给别人或者给自己用都可以在里面定义.osgi R4的规范里面用很大的篇幅描述了如何才是一个规范哦MANIFEST.MF文件.然后各大osgi框架用大量的代码来校验并使用这个文件.osgi规定了一套classload机制来loadclass.然后分出了各种层来确保安全.服务的完整性等等.. 在这里推荐想深入了解的阅读osgi规范.其实开发插件只需要了解MANIFEST.MF文件寻找bundle的机制.以及export import package的规则就可以了.了解之后能避免很多不必要的时间浪费.

附图:

  bundle状态转换图:

 

  swt其实是好东西.好吧.我承认是对比swing.(看到swing的几刀有感而发.还想说两句. twaver也是好东西.) .但是对比mxml.xaml这样的东西.代码可阅读性上还是太差.并且对比类xml语言(发现过一个swt/xml的东西.不过貌似不成熟..).代码生成与反生成的难度也会更高.(虽然没我什么事.不过流程设计器实际上跟这些界面设计器是类同的.).手写代码的郁闷程度上会高很多.jface封装过了swt.提供了一些常用的组件.抽象的层次有所提高.还是有很大用处的.实际上在开发eclipse plugin的过程中.最常用的方法就是查看eclipse其他plugin的源码.尤其是jdt的源码.可以翻到很多有用的组件.然后就可以为我所用.当然条件是要学会找.. 这个能力还是要有经验累积的.我就不会抄..T T.

  web模式的mvc中view请求经历了servlet/rack/...等的一次封装.将http请求封装为了"request".以至于大家可以处理.当然.在非web模式的mvc框架中.gef也存在这样的东西. 同样将界面操作自身封装为"request"以供policy接收并处理.这种类型的匹配也是师出同门.所以有必要将他们进行小小的对比.
  附:在rest大行其道的今天.有人提出了一个新的架构RMR. 嗯.就是resource-method-representation. 理由很简单.web上面应该是以资源为主.method处理请求以处理资源.然后representation处展示. 好吧.可以认为他换个了马甲.除了resource的粒度发生了变化以外.m-r实际上就是controller跟view啊. 不过在sinatra.web.py等web dsl下.确实他们是method. rest的情况下提出RMR实际上也是对未来的web作出期许.期望web将来更加有序.(个人理解.) 接着继续对比 传统web框架与gef的异同.

request:
  springmvc; servlet容器封装view操作为request驱动整个应用运转.
  gef: 由Tools封装一些界面操作信息封装为request.框架内置一些常用request.

controller:
  springmvc: @controller处理各种request
  gef: request实际上请求给了policy.(虽然大家都知道editpart是controller.但实际上真正处理的是policy.)

view:
  springmvc: 各种模板引擎 html. flex什么的都可以.
  gef: draw2d.

model:
  springmvc: pojo.
  gef: 可以使用emf作为model. 也可以利用pojo实现IPropertySource来作为数据源.

  当然这只是gef的开始.我们还有各种command等着我们.gef内置了commandstack来帮你进行redo undo什么的.

  request => command => model 的过程.每一个图形界面的操作都会被封装为request.

  好吧.文章都快写完了还没介绍web流程设计器怎么做.嗯.忽悠的目的达到了..

  其实有一个不算很好的参考目标. jbpm的流程设计器.当然.不算太好是因为他使用了gef.然后自身封装又过于繁复.gef本身的学习曲线就已经非常高.在加上设计器本身的一层封装(在model上封装了wrapper. 有各种handler io什么的.).同时流程设计器又划分为四个小bundle.在MANIFEST.MF里面有各种bundle依赖.package导入导出什么的.导致新手接触项目就会有畏惧感. 不过做流程设计器的话扔不失为一个凑活的参考目标.(据我偷窥jbpm流程设计组的jira.貌似只有一个人在维护现有的代码了. 看到两个人的提交记录.)

  这里推荐下八进制的gef小项目=>gefpractice<=.  这个小项目可以说是gef的helloworld.对于理解gef有莫大的帮助.

晒图:

  图形化:

 

  源码化:

 

  我们的eclipse plugin流程设计器现在正在开发过程中.还有不少的bug.有可能的话(其实在规划之内.).会在一个时间在淘蝌蚪上面开源.当然会连同我们的流程引擎PMC(并不是单纯的工作流.还可以结合页面流和业务流的强悍引擎.).以及基于Flex的流程设计器一起.

  最后推荐一篇eclipse gef自身的wiki.对于了解gef的原理都有很大的帮助.

  最后的最后.我想说.eclipse v4赶快开发啊. 哥弄swt实在是抗不住了...
 
  • 大小: 103.7 KB
  • 大小: 118.9 KB
  • 大小: 55.8 KB
  • 大小: 38.7 KB
分享到:
评论
28 楼 ae6623 2014-08-26  
楼主,4年过去了,求开源~~~~
27 楼 leaderbird 2013-08-21  
在taobao上叫啥名字呀?给个URL吧!
26 楼 leaderbird 2013-08-21  
给分享一下这个吧!
25 楼 xw7824 2012-09-08  
能否分享一下源码,正好在找这样的东西, xw7825@163.com
24 楼 niweiwei 2011-10-14  
上面晒的那个图有没有有没有源代码?希望楼主共享一下,源码
23 楼 redheart_2006 2011-07-12  
  我们的eclipse plugin流程设计器现在正在开发过程中.还有不少的bug.有可能的话(其实在规划之内.).会在一个时间在淘蝌蚪上面开源。。。
--------哥们,时间过去快一年了,现在可否开源了吗?能否分享一分代码给我,谢谢
22 楼 zxlsky1314 2010-09-27  
坐在对面的还在搭积木的路过
21 楼 Saito 2010-09-09  
huzhenyu 写道
如果有朋友真想玩基于eclipse的流程设计器,可以去下载JBPM的流程设计器(带源码)。


嗯. 我在主贴里面也提到了. .

Saito 写道
  其实有一个不算很好的参考目标. jbpm的流程设计器.当然.不算太好是因为他使用了gef.然后自身封装又过于繁复.gef本身的学习曲线就已经非常高.在加上设计器本身的一层封装(在model上封装了wrapper. 有各种handler io什么的.).同时流程设计器又划分为四个小bundle.在MANIFEST.MF里面有各种bundle依赖.package导入导出什么的.导致新手接触项目就会有畏惧感. 不过做流程设计器的话扔不失为一个凑活的参考目标.(据我偷窥jbpm流程设计组的jira.貌似只有一个人在维护现有的代码了. 看到两个人的提交记录.)
20 楼 huzhenyu 2010-09-09  
如果有朋友真想玩基于eclipse的流程设计器,可以去下载JBPM的流程设计器(带源码)。
19 楼 duker 2010-09-09  
jbpm+osgi=?
18 楼 melin 2010-09-09  
国内大部分程序员是做企业应用开发,而企业应用开发是少不了工作流的。。。
17 楼 lookdd1 2010-09-09  
hatedance 写道
kimmking 写道
你也没睡,我给你秒精了吧~~

我在加班,跟1000公里以外的某个现场的同事协同处理一些问题~~~

说点正经的,现在流程太火了,
做个引擎,包装下,就是平台可以卖钱,
做个UI,美化下,就是设计器可以卖钱,
啥都没有,整整概念,就是流程专家,可以做咨询,卖钱。。。。


最后,弱弱的说,支持saito开源。


说点正经的,流程现在真的很火吗?请给点证据好吗?



看看family168那么短时间内就灰常火爆就可以了解了吧。看看JE的圈子频道最活跃的几个频道,JBPM的是经常上首页的。
16 楼 comsci 2010-09-09  
太感谢楼主了,大家一起,把中国的流程软件事业推向一个新的高峰。。。
15 楼 hatedance 2010-09-09  
kimmking 写道
你也没睡,我给你秒精了吧~~

我在加班,跟1000公里以外的某个现场的同事协同处理一些问题~~~

说点正经的,现在流程太火了,
做个引擎,包装下,就是平台可以卖钱,
做个UI,美化下,就是设计器可以卖钱,
啥都没有,整整概念,就是流程专家,可以做咨询,卖钱。。。。


最后,弱弱的说,支持saito开源。


说点正经的,流程现在真的很火吗?请给点证据好吗?
14 楼 beeke 2010-09-09  
和楼主一样的体会:swt写起来太蛋疼了,我已经发誓eclipse4的xwt正式推出之前,再也不写plugin了
13 楼 supercwg 2010-09-09  
好像到处都有人说要开源什么图形设计器、什么引擎、什么平台,但到现在为止,还没见到过一个比较完整的真正开源的东东呢
12 楼 Saito 2010-09-09  
kimmking 写道
你也没睡,我给你秒精了吧~~

我在加班,跟1000公里以外的某个现场的同事协同处理一些问题~~~

说点正经的,现在流程太火了,
做个引擎,包装下,就是平台可以卖钱,
做个UI,美化下,就是设计器可以卖钱,
啥都没有,整整概念,就是流程专家,可以做咨询,卖钱。。。。


最后,弱弱的说,支持saito开源。


还好我不卖钱.不做咨询. 我鸭梨瞬间减小了很多..

开源是公司层面的决策.嗯. 我是狐假虎威来着..
11 楼 Saito 2010-09-09  
comsci 写道
哈哈,那么好的工具,有开源的计划和方案吗? 有官网? 哪里有下载?


这玩意是不兼容jbpm4的. 成套修炼效果佳..

lkj107 写道
流程还有这么多人关注啊....


看来OA性质的项目是经久不衰啊


如果仅仅是工作流的话. 可以说是OA性质. 但是其实我们更多在关注业务流..而不是审批性质的工作流.

lookdd1 写道
有没有再集成一套web表单设计器啊。


恭喜你.我们的console就是这样搭出来的. 利用了我们的另一套系统..

melin 写道
为自己的工作流设计了一个flex版本的设计器,等完成了。提供源码,供需要的人学习


话说设计器这种东西其实不难做.kb的是做各种序列化跟反序列化. 以及属性的各种设置. 这个要耗费大量的精力.属于吃力不讨好. bug很多质量很难保证.. 话说有没有类似xstream这样的东西在actionScript界存在. 这样.我就省了很多力.

属性配置这种东西表单做细粒度重用.也是很麻烦的事. 欢迎各种探讨下..
10 楼 niumd 2010-09-09  
杭州出人才啊……
9 楼 sprite 2010-09-09  
melin 写道
为自己的工作流设计了一个flex版本的设计器,等完成了。提供源码,供需要的人学习


源代码在何处能下,学习一下,谢谢!

貌似可以一边开发,一面开源,迫不及待 想学习学习!

相关推荐

    GEF入门系列.rar

    GEF入门系列,八进制 的GEF入门系列教程, 由社区经作者授权后整理而成GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很...

    GEF.rarGEF.rar

    GEF.rar GEF.rar GEF.rar

    GEF入门详解DOC文档

    GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很多,例如:UML类图编辑器、图形化XML编辑器、界面设计工具以及图形化...

    GEF-ALL-3.9.100.zip

    GEF-ALL-3.9.100.zip

    GEF-ALL-3.2.2

    GEF: Graphical Editing Framework &lt;br&gt;GEF是一套MVC Framework,它能帮你比较容易的建立图形化的编辑器,V(View)的部分常常是基于SWT的Draw2D,因此Draw2D也看作是GEF的一部分。依赖:org.eclipse.gef***, org...

    GEF-Update-3.7.1.zip

    目前的最新的GEF,用于eclipse是实现可视化。

    GEF-II电场仪使用手册.pdf

    GEF-II电场仪使用手册

    org.eclipse.gef

    Eclipse的GEF插件,GEF-ALL-3.5.0.zip

    Eclipse插件开发:GEF入门系列宝典_gef_

    由于工作的需要,最近开始研究GEF(Graphical Editor Framework)这个框架,它可以用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设计器、UML类图编辑器等等。

    第四章 GEF框架.doc

    第四章 GEF框架.doc 第四章 GEF框架.doc 第四章 GEF框架.doc

    用RCP构建GEF程序

    用RCP构建GEF程序 PPT教程 ```

    基于GEF的MiniGUI可视化开发工具设计

    本文设计了一个MiniGUI可视化开发工具,利用Eclipse GEF实现。用户使用本工具可以对图形用户界面进行可视化的设计及修改,同时可以扩充自己的控件、定义控件的属性,丰富界面的表现形式。

    org.eclipse.gef.examples.shapes_anchor.zip

    org.eclipse.gef.examples.shapes_anchor.zip

    GEF_ALL+tk.eclipse.plugin.htmleditor_2.2.0.jar

    解压GEF-ALL-3.4.1.zip,得到一个eclipse文件夹,打开可看到: 下面有三个文件夹:features,plugins,readme 分别拷贝上面三个文件夹下面的内容把它们对应放到Eclipse安装目录D:\eclipse下面对应的同 名文件夹下...

    GEF 开发简单示例

    这是我参考了一些其他资料,自己写的一个GEF示例程序。 在这个demo中你可以看到以下的功能: 1. 往画布上添加多种节点 2. 节点之间的连线 3. 节点内容的编辑功能 4. 删除连线 5. 删除节点 6. 对节点的拖动以改变...

    jbpm4.4设计器文档

    jbpm4.4设计器文档 主要介绍GEF实现WEB版的流程设计器

    基于GEF框架的SVG制作工具设计与实现

    SVG(Scalable Vector Graphics)是一种...本文的目的就是利用Eclipse平台的GEF(Graphic Editor Framework)框架,针对SVG的能聚合多种媒体数据,并能体现其动态性和交互性的特点,设计并实现了一款SVG的可视化制作工具。

    Eclipse-EMF-GEF资料.rar

    Eclipse-EMF-GEF资料.rar

    eclipse3.4的可视化开发GEF

    eclipse3.4的可视化开发GEF eclipse3.4的可视化开发GEF eclipse3.4的可视化开发GEF

    GEF-Update-5.3.3.zip

    GEF-Update-5.3.3,eclipse4.18离线安装包,eclipse有自带gef,这个是增强包,可以不安装

Global site tag (gtag.js) - Google Analytics