最近一大堆乱七八糟的事情,今天把 org.fireflow.model.io这个包给介绍完,那么Fire Workflow的Model项目算是完成了。
主要分两大块:序列化和解析。
FPDLNames:这个类定义了FPDL的元素和规范。包括命名空间里面的基本元素,本类决定流程文件的格式和规范,由于元素太多,这里不一一展示了。FPDL基本是对XPDL的扩展,详细内容可以参见http://www.fireflow.org/viewthread.php?tid=68&extra=page%3D1。
IFPDLSerializer: FPDL序列化器。将WorkflowProcess对象序列化到一个输出流。
Dom4JFPDLSerializer: 实现IFPDLSerializer接口。用Dom4J实现。
DEFAULT_XPDL_VERSION和DEFAULT_VENDOR分别表示默认版本和提供者,目前发现没有什么用……
对于实现的Serializer(),源代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
workflowProcessToXMLString():将流程文件输出到一个String。
其他的Write方法都是在XMLWriter()中使用的,分别处理FPDL流程文件中的不同元素。
JAXP_FPDL_Serializer: 实现IFPDLSerializer接口。用JAXP实现,功能和前者完全一致。
IFPDLParser: FPDL解析器,将一个xml格式的fpdl流程定义文件解析成WorkflowProcess对象。
Dom4JFPDLParser: 实现IFPDLParser接口,用Dom4J实现。
parse()的代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
JAXP_FPDL_Parser: 实现IFPDLParser接口,用JAXP实现。不详述。
DateUtilities: 关于识别各种日期格式的类。
dateUtilities:这里用了单件模式,调用getInstance()来获得对象实例。
formats:存储各种日期格式,格式有:
"yyyy-MM-dd'T'HH:mm:ss'Z'"
"yyyy-MM-dd'T'HH:mm:ssZ"
"yyyy-MM-dd'T'HH:mm:ssz"
// XPDL examples format
"MM/dd/yyyy HH:mm:ss a"
// alternative formats
"yyyy-MM-dd HH:mm:ss"
构造函数DateUtilities()调用了resetFormats()来重置formats。
parse()方法将字符串转化为日期格式。
MySigleton4DocumentFactory: 是对org.dom4j.util.SingletonStrategy接口的简单实现,返回一个DocumentFactory,配合单件用的。
FPDLSerializerException: 继承了Exception类,四个重载的构造函数调用的都是父类的方法。
FPDLParserException: 同FPDLSerializerException。
Util4Serializer: 为序列化流程提供基本的元素操作。用Dom4J实现。
Util4JAXPSerializer: 同Util4Serializer,用JAXP实现。
Util4Parser: 为流程文件的解析提供基本的元素操作,用Dom4J实现。
Util4JAXPParser: 同Util4Parser,用JAXP实现。
下次开始讲Fire Workflow的另一个项目文件FireflowEngine。