📄 jaxp_fpdl_serializer.java
字号:
/** * Copyright 2003-2008 陈乜云(非也,Chen Nieyun) * All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation。 * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses. * */package org.fireflow.model.io;import java.io.BufferedWriter;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Properties;import java.util.logging.Level;import java.util.logging.Logger;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.fireflow.model.DataField;import org.fireflow.model.Duration;import org.fireflow.model.EventListener;import org.fireflow.model.Task;import org.fireflow.model.WorkflowProcess;import org.fireflow.model.net.Activity;import org.fireflow.model.net.EndNode;import org.fireflow.model.net.StartNode;import org.fireflow.model.net.Synchronizer;import org.fireflow.model.net.Transition;import org.fireflow.model.reference.Application;import org.fireflow.model.reference.Form;import org.fireflow.model.reference.Participant;import org.fireflow.model.reference.SubWorkflowProcess;import org.w3c.dom.Document;import org.w3c.dom.Element;/** * * @author chennieyun */public class JAXP_FPDL_Serializer implements FPDLNames { String encoding = "UTF-8"; protected void serialize(WorkflowProcess workflowProcess, Writer out) throws IOException, FPDLSerializerException { try { Document document = workflowProcessToDom(workflowProcess); DOMSource doms = new DOMSource(document); StreamResult result = new StreamResult(new BufferedWriter(out)); TransformerFactory tf = TransformerFactory.newInstance(); tf.setAttribute("indent-number", new Integer(2)); Transformer transformer = tf.newTransformer(); Properties properties = transformer.getOutputProperties(); properties.setProperty(OutputKeys.ENCODING, encoding); properties.setProperty(OutputKeys.METHOD, "xml"); properties.setProperty(OutputKeys.INDENT, "yes"); properties.setProperty(OutputKeys.DOCTYPE_PUBLIC, PUBLIC_ID); properties.setProperty(OutputKeys.DOCTYPE_SYSTEM, SYSTEM_ID); transformer.setOutputProperties(properties); transformer.transform(doms, result); } catch (TransformerException ex) { Logger.getLogger(JAXP_FPDL_Serializer.class.getName()).log(Level.SEVERE, null, ex); } } public void serialize(WorkflowProcess workflowProcess, OutputStream out) throws IOException, FPDLSerializerException { serialize(workflowProcess,new OutputStreamWriter(out,encoding)); /* try { Document document = workflowProcessToDom(workflowProcess); DOMSource doms = new DOMSource(document); StreamResult result = new StreamResult(new BufferedWriter(new OutputStreamWriter(out))); TransformerFactory tf = TransformerFactory.newInstance(); tf.setAttribute("indent-number", new Integer(2)); Transformer transformer = tf.newTransformer(); Properties properties = transformer.getOutputProperties(); properties.setProperty(OutputKeys.ENCODING, encoding); properties.setProperty(OutputKeys.METHOD, "xml"); properties.setProperty(OutputKeys.INDENT, "yes"); properties.setProperty(OutputKeys.DOCTYPE_PUBLIC, PUBLIC_ID); properties.setProperty(OutputKeys.DOCTYPE_SYSTEM, SYSTEM_ID); transformer.setOutputProperties(properties); transformer.transform(doms, result); } catch (TransformerException ex) { Logger.getLogger(JAXP_FPDL_Serializer.class.getName()).log(Level.SEVERE, null, ex); } */ } public Document workflowProcessToDom(WorkflowProcess workflowProcess) throws FPDLSerializerException { DocumentBuilder docBuilder = null; try { docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); } catch (ParserConfigurationException ex) { Logger.getLogger(JAXP_FPDL_Serializer.class.getName()).log(Level.SEVERE, null, ex); throw new FPDLSerializerException(ex.getMessage()); } Document document = docBuilder.newDocument(); Element workflowProcessElement = document.createElementNS(FPDL_URI, WORKFLOW_PROCESS); workflowProcessElement.setPrefix(FPDL_NS_PREFIX);// workflowProcessElement.setAttributeNS(XSD_URI, NAME, XSD_URI)// workflowProcessElement.addNamespace(FPDL_NS_PREFIX, FPDL_URI);// workflowProcessElement.addNamespace(XSD_NS_PREFIX, XSD_URI);// workflowProcessElement.addNamespace(XSI_NS_PREFIX, XSI_URI); workflowProcessElement.setAttribute(ID, workflowProcess.getId()); workflowProcessElement.setAttribute(NAME, workflowProcess.getName()); workflowProcessElement.setAttribute(DISPLAY_NAME, workflowProcess.getDisplayName()); workflowProcessElement.setAttribute(RESOURCE_FILE, workflowProcess.getResourceFile()); workflowProcessElement.setAttribute(RESOURCE_MANAGER, workflowProcess.getResourceManager()); document.appendChild(workflowProcessElement); Util4JAXPSerializer.addElement(document, workflowProcessElement, DESCRIPTION, workflowProcess.getDescription()); writeDataFields(workflowProcess.getDataFields(), workflowProcessElement, document); writeStartNode(workflowProcess.getStartNode(), workflowProcessElement, document); writeActivities(workflowProcess.getActivities(), workflowProcessElement, document); writeSynchronizers(workflowProcess.getSynchronizers(), workflowProcessElement, document); writeEndNodes(workflowProcess.getEndNodes(), workflowProcessElement, document); writeTransitions(workflowProcess.getTransitions(), workflowProcessElement, document); writeEventListeners(workflowProcess.getEventListeners(), workflowProcessElement, document); writeExtendedAttributes(workflowProcess.getExtendedAttributes(), workflowProcessElement, document);// Document document = df.createDocument(workflowProcessElement);// document.addDocType(WORKFLOW_PROCESS, this.PUBLIC_ID, this.SYSTEM_ID); return document; } public String getEncoding() { return encoding; } public void setEncoding(String encoding) { this.encoding = encoding; } protected void writeEventListeners(List eventListeners, Element parentElement, Document document) { if (eventListeners == null || eventListeners.size() == 0) { return; } Element eventListenersElm = Util4JAXPSerializer.addElement(document, parentElement, EVENT_LISTENERS); for (int i = 0; i < eventListeners.size(); i++) { EventListener listener = (EventListener) eventListeners.get(i); Element eventListenerElm = Util4JAXPSerializer.addElement(document, eventListenersElm, EVENT_LISTENER); eventListenerElm.setAttribute(CLASS_NAME, listener.getClassName()); } } protected void writeDataFields(List dataFields, Element parent, Document document) throws FPDLSerializerException { if (dataFields == null || dataFields.size() == 0) { return; } Element dataFieldsElement = Util4JAXPSerializer.addElement(document, parent, DATA_FIELDS); Iterator iter = dataFields.iterator(); while (iter.hasNext()) { DataField dataField = (DataField) iter.next(); Element dataFieldElement = Util4JAXPSerializer.addElement(document, dataFieldsElement, DATA_FIELD); dataFieldElement.setAttribute(ID, dataField.getId()); dataFieldElement.setAttribute(NAME, dataField.getName()); dataFieldElement.setAttribute(DISPLAY_NAME, dataField.getDisplayName()); dataFieldElement.setAttribute(DATA_TYPE, dataField.getDataType()); dataFieldElement.setAttribute(INITIAL_VALUE, dataField.getInitialValue()); Util4JAXPSerializer.addElement(document, dataFieldElement, DESCRIPTION, dataField.getDescription()); writeExtendedAttributes(dataField.getExtendedAttributes(), dataFieldElement, document); } } protected void writeEndNodes(List endNodes, Element parent, Document document) { Element endNodesElement = Util4JAXPSerializer.addElement(document, parent, END_NODES); Iterator iter = endNodes.iterator(); while (iter.hasNext()) { writeEndNode((EndNode) iter.next(), endNodesElement, document); } } protected void writeEndNode(EndNode endNode, Element parent, Document document) { Element endNodeElement = Util4JAXPSerializer.addElement(document, parent, END_NODE); endNodeElement.setAttribute(ID, endNode.getId()); endNodeElement.setAttribute(NAME, endNode.getName()); endNodeElement.setAttribute(DISPLAY_NAME, endNode.getDisplayName()); Util4JAXPSerializer.addElement(document, endNodeElement, DESCRIPTION, endNode.getDescription()); writeExtendedAttributes(endNode.getExtendedAttributes(), endNodeElement, document); } protected void writeStartNode(StartNode startNode, Element parent, Document document) throws FPDLSerializerException { if (startNode == null) { return; } Element startElement = Util4JAXPSerializer.addElement(document, parent, START_NODE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -