一、 代码主要结构
所谓流程设计器者,无怪乎读取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模型组件
Xml流程定义文件解析为本地Model模型组件,本地建模和jBPM4的PVM建模一致,代码位于org.jbpmside.model下,重要的类:
• ProcessModel代表流程定义;
• NodeModel代表节点定义;
• ConnectionModel代表连接线定义;
剩下的就是具体节点类型的模型类,例如StartNode/EndNode/TaskNode等。
目前模型类还非常简单,因为前段时间主要关注Component视图组件部分,接下来很快会与jPDL规范完全同步,同时ProcessModel/NodeModel/ConnectionModel会进行重构,目标是与jBPM4模型完全一致。
最新的模型位于org.jbpmside.model.common下,对jpdl4的支持位于org.jbpmside.model.jpdl4下,未来需要将Component与Model的关联迁移至common包下。
四、 GEF框架
GEF框架嫁接Model与Component。
1、 IGraphicalEditor与IEditPart
IGraphicalEditor与IEditPart是GEF框架里最重要的两个接口:
• IGraphicalEditor代表整个图形编辑器,IGraphicalEditor里最重要的方法:
function get graphicViewer():GraphicViewer;
返回当前的图形视图。在当前的设计里,设计器支持多个TabPane,每个流程定义会拥有一个单独的图形视图(即一个TabPane),这里的图形视图即指当前处于激活(编辑)状态的画图板;很显然IGraphicalEditor是一个全局类。
• IEditPart代表单个的图形编辑元素,很显然,这些元素是和Component组件一致的,IEditPart里最为重要的方法:
function get model():Object;
function set model(_model:Object):void;
Component组件继承于IEditPart,这样就瞬间将Component组件与Model关联起来。IEditPart重要的实现类包括GraphicViewer与GraphicEditPart。
GraphicViewer被SurfaceComponent继承;
GraphicEditPart被NodeComponent和ConnectionComponent继承。
2、 Tool
Flex应用程序是基于事件驱动的,用户对界面的操作即反映到各种鼠标和键盘事件上。在原先的设计里,由Component组件自己来处理各种原生事件,当需要其他组件协作时,通过TheModel发出应用定制事件。在GEF的设计里,Component组件的原生事件处理被委派到Tool类进行处理。Component组件只管理自身的图形渲染和变化。
例如SurfaceComponent处理鼠标点击事件代码:
public function mouseClickHandler(event:MouseEvent):void
{
… …
this.tool.mouseClick(event, compX, compY);
}
注意this.tool方法,这个方法同样是由GraphicViewer和GraphicEditPart分别 引入的。注意有些时候组件的Tool是需要切换的,例如鼠标点击面板,通常会导致被选中的节点或连接线选中状态消失,但是当工具条选中一个节点时,这个鼠标事件会导致向面板增加相应的节点。这时需要ToolManager来进行Tool却换的管理,针对SurfaceComponent/NodeComponent/ConnectionComponent分别有SurfaceToolsManager/NodeToolsManager/ConnectionToolsManager来管理不同的Tool切换策略。需要注意的是ToolManager和Tool都是无状态的,全局唯一,所有视图组件共用。
3、 Command
视图组件的变化会导致Model组件的变化。Tool处理视图原生事件、调用CommandService执行各个Command具体操作视图组件和Model对象实现视图组件和Model组件的变化。
CommandService与SurfaceComponent进行一对一绑定。CommandService持有CommandStack,实现单个Tab编辑界面内Command的redo和undo。
具体操作视图组件和Model对象必须通过Command。
五、 TheModel全局类的用途
TheModel全局唯一,职责如下:
• 负责应用所有定制事件的订阅/分发;
• 负责持有工具条和系统菜单属性;
• 负责持有剪贴板,实现各个画板之间的节点拷贝/剪切。
六、 ProcessDesigner与ProcessEditor
ProcessDesigner负责整个应用的布局,目前由三部分组成,系统菜单、工具条和TabNavigator(TabBar管理器),TabBar管理器负责添加和删除Tab,由Tab加载画板,这样实现对多流程定义同时编辑的支持(即多Tab)。
ProcessEditor是应用的入口,它持有ProcessDesigner,实现了IGraphicalEditor接口。目前其对graphicViewer()方法的实现是返回当前激活状态Tab的画板。
同时,ProcessEditor负责统一监听工具条/键盘事件,并将这些事件处理委派给当前处于激活状态的Tab画板处理。
七、 Xml框架
位于org.jbpmside.xml下,使用E4X,使用binding对各种类型的节点进行解析,不集中在一个文件完成解析和转换,一个节点类型对应一个binding。使用代码如下:
public function parse(xml:String):ProcessDefinition{
var parser:Parser=new Parser();
return parser.createParse().setString(xml).
execute().getProcessDefinition() as ProcessDefinition;
}
测试代码位于test目录下,是目前唯一可以进行单元测试的部分。
八、 还需要完成的工作
1、 xml框架还需要大量的解析工作完成(以支持jpdl4)
2、 第一个版本为本地应用,需要增加对本地文件操作的支持
3、 模型迁移至org.jbpmside.model.common
4、 工具条使用flexlib重写,新的16位图标,节点属性弹出框
5、 Command目前只实现了对undo的支持,需要实现对redo的支持
- 大小: 41.3 KB
分享到:
相关推荐
JBPM-Side 流程设计器架构说明 一、JBPM-Side流程设计器架构说明 JBPM-Side流程设计器架构主要由三个部分组成:xml 框架、Model 模型组件和 Component 视图组件。xml 框架负责解析 xml 文件为 Model 模型组件,...
这个压缩包包含了关于jBPM-side流程设计器的所有相关资料,涵盖了文档、代码和手册等多个方面,对于学习和掌握这款工具非常有帮助。 首先,我们要理解流程设计器的基本概念。流程设计器是用于创建和编辑业务流程的...
jbpm-eclipse插件则为Eclipse集成开发环境提供了对jbpm流程设计的支持,让开发者能够方便地在IDE内创建和管理业务流程。 该插件是jbpm 4.4发行版的一部分,通常位于jbpm安装目录下的jbpm-4.4/install/src/gpd路径中...
4. **jbpm-side**:这个标签可能是对jbpm相关组件或实现的特指,可能指的是与jbpm引擎直接交互的部分,如流程定义、流程实例的启动和管理等。 5. **工作流**:工作流是描述和控制业务过程的模型,包括任务的分配、...
【jbpm-4.4.zip part03】这个压缩文件是关于jbpm 4.4版本的组成部分,jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了业务流程建模、部署、执行和监控的功能。jbpm 4.4是该系统的一...
jbpm-4.4\jbpm-4.4\doc\javadocsjbpm-4.4\jbpm-4.4\doc\javadocsjbpm-4.4\jbpm-4.4\doc\javadocs
jeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202....
**jBPM-JPDL流程引擎详解** jBPM(Java Business Process Management)是一个开源的工作流和业务流程管理系统,主要用于实现企业的业务流程自动化。它基于Java技术,支持BPMN 2.0标准,提供了丰富的功能,包括流程...
jbpm-jpd是一款专为Java开发者设计的工作流设计器插件,它主要用于创建、编辑和管理jbpm(Java Business Process Management)工作流程。jbpm是一个开源的业务流程管理系统,它允许开发者构建灵活、可扩展和规则驱动...
jbpm由几个关键部分组成,包括工作流引擎、工作流设计工具(jbpm-designer)、持久化机制(如JPA或Hibernate)、以及各种服务和API。这些组件通常被打包成不同的jar文件,以供不同功能的需求。 1. **核心jar包**:...
作为开源项目,jbpm遵循Apache License,提供了一个灵活且功能丰富的框架,用于设计、执行和管理业务流程。该系统旨在帮助开发者和企业管理人员更好地理解和控制业务流程,通过自动化流程来提高效率。 在配置jbpm-...
jbpm-gpd-feature.rar 是一个与jbpm工作流引擎相关的资源包,主要针对Eclipse集成开发环境提供的jbpm图形化流程设计(Graphical Process Designer,简称GPD)插件。jbpm是一个开源的工作流管理系统,它允许开发者...
除了核心引擎,jbpm还提供了丰富的API和工具集,包括一个基于Web的流程设计器,使得非技术背景的业务人员也能参与到流程的设计中来。此外,jbpm还支持与其他Java企业级框架如Spring的集成,方便在现有企业应用中嵌入...
jBPM-jPDL流程设计与控制 jBPM-jPDL是基于Java的业务流程管理(BPM)系统,它提供了一个灵活的流程设计和控制机制,允许开发者定义、执行和监控业务流程。下面,我们将通过学习笔记,了解jBPM-jPDL的流程设计与控制...
jbpm-jpdl-designer-site-3.1.7.zip jbpm-jpdl-designer-site-3.1.7.zip jbpm-jpdl-designer-site-3.1.7.zip
jbpm-jpdl-suite-3.2.3.zip工作流 设计器
jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载
3. **可视化流程设计器**:jbpm提供了一个图形化的流程设计工具,用户可以通过拖拽和连接节点来构建流程图,大大简化了流程建模的过程。 4. **业务规则引擎**:jbpm集成了Drools规则引擎,允许在流程中嵌入复杂的...
jbpm-4.4是JBoss企业级工作流和业务自动化平台的一个版本,该平台主要用于构建和管理业务流程。在本压缩包“jbpm-4.4 part03.zip”中,我们可能找到了该版本的第三部分文件。由于未提供具体的文件列表,我将根据jbpm...