這次講包org.fireflow.model.resource。首先看一下這個包的整體類圖。
資源這塊Fire Workflow主要定義了資源和資源管理兩大塊。其中對於資源的描述分為子流程、應用、 表單和參與者,這裡本人對把子流程作為資源的定義不甚理解,而前面介紹的包org.fireflow.model中又 含有WorkflowProcess,個人覺得是不是應該統一比較好?資源管理方面只是簡單的實現了一個解析資源 文件(XML格式)的類,這塊還有進一步完善的空間。下面對每一部分進行介紹。
IResource:工作流引用的資源。
必須實現的方法:主要針對於資源名稱,顯示名稱以及描述等。
AbstractResource:抽象類主要實現IResource接口。
基本元素包括資源名稱、資源顯示名稱和資源描述。並重寫了toString()方法。
SubWorkflowProcess:子流程,目前也被定義為資源的一種。保存對另一個流程引用信息。
Application:後台程序。
handler:後台程序的類名。
Form:表單。
uri:記錄表單的地址,工作流引擎本身不處理表單。
Participant:參與者。
assignmentHandlerClassName:任務分配句柄的類名。Fire workflow引擎調用該句柄獲得真正的操作 者ID。
IResourceManager:資源管理接口。主要定義如何來獲得資源。
ResourceManager4XmlFile:解析xml格式的資源文件來獲得資源。
通過對xml格式資源文件的解析,獲得forms、participants、applications資源。解析函數有重載的 parseResource()方法,變量參數分別為文件路徑和文件輸入流。利用org.dom4j包對文件進行解析。 parseResource()中調用了三個load方法,分別提取三類元素。舉個loadForms()的例子吧。
1protected List<Form> loadForms( Element element) {
2 Element formsElement = Util4Parser.child(element, "Forms");
3 if (formsElement==null)return null;
4 List<Element> formElementList = Util4Parser.children(formsElement, "Form");
5 List<Form> forms = new Vector<Form>();
6 for (int i=0; formElementList!=null && i<formElementList.size();i++){
7 Element formElm = formElementList.get(i);
8 String name = formElm.attributeValue("Name");
9 Form form = new Form (name);
10 form.setDisplayName(formElm.attributeValue ("DisplayName"));
11 form.setDescription (Util4Parser.elementAsString(formElm, "Description"));
12 form.setUri(Util4Parser.elementAsString(formElm, "Uri"));
13 forms.add(form);
14 }
15 return forms;
16}
17
Xml資源文件的格式很簡單,通過查找element和attribute就可以解析了。這裡的Util4Parser是Fire Workflow自定義的解析類。其他兩種資源的load過程基本一致。
下次介紹model項目的最後一部分,關於文件解析和序列化的。