一、 代码主要结构
所谓流程设计器者,无怪乎读取 xml 文件,图形展现,操作图形元素,改变
xml 文件,回写,如此而已。
既然如此,设计器的流程结构就非常清晰:首先是 xml 框架解析 xml 文件为
Model 模型组件,然后 Model 模型组件被展现为 Component 视图组件;用户对
Component 视图组件进行操作,这些操作被同步的修改到 Model 模型组件;最后
用户保存时,Model 模型组件经过 xml 框架解析回 xml 文件,该文件被上传到服
务器或本地覆盖原有的 xml 文件。
那么代码结构就很清晰了:xml 框架、Model 模型组件和 Component 视图组
件。但是等等,Model 与 Component 如何交互呢?这里就需要 GEF 框架嫁接起两
者的联系。同时,一个流程设计器往往要同时编辑多个流程定义,相比具体的流
程定义而言,设计器拥有一些全局的对象,这些全局对象包括系统菜单栏、工具
条、整个设计器布局框架(ProcessDesigner)、设计器入口(ProcessEditor),还
有就是负责保存全局属性和发布/订阅定制事件的 TheModel 对象。
二、 Component 视图组件
很直接,Component 视图组件指的是与用户打交道的、与流程定义相关的视
图元素。注意这里的一个定语:与流程定义相关的,即不包括系统菜单、工具条
这些东东。这些视图元素很简单,包括画图板、各种节点元素和连接线元素。
代码位于 org.jbpmside.view.component 和
org.jbpmside.view.component.node 下。主要类 SurfaceComponent、
NodeComponent 和 ConnectionComponent。看类名就很清晰这些类分别代表着什
么组件:
SurfaceComponent 代表画图板;
NodeComponent 代表节点;
ConnectionComponent 代表连接线;
org.jbpmside.view.component.node 下的类就是 NodeComponent 类的子类,
代表具体的单个节点类型了,包括开始节点、结束节点、Fork 节点、Join 节点
等等。
Component 视图组件使用了 degrafa 来渲染表现形式。
目前缺少一个属性弹出框组件,职责展现和修改节点/连接线属性。
三、 Model 模型组件