/**
* Copyright 2007-2010 非也
* All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License v3 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 Lesser General Public License along
* with this library; if not, see http://www.gnu.org/licenses/lgpl.html.
*
*/
package org.fireflow.clientwidget;
import java.io.StringWriter;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.fireflow.designer.swing.FireflowModel2MxGraphModel;
import org.fireflow.designer.swing.mxgraphext.CustomGraph;
import org.fireflow.designer.swing.mxgraphext.util.CellRendererEx;
import org.fireflow.designer.swing.proxy.Wrapper;
import org.fireflow.pdl.fpdl.process.WorkflowProcess;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import com.mxgraph.io.mxCodec;
import com.mxgraph.io.mxCodecRegistry;
import com.mxgraph.model.mxCell;
import com.mxgraph.util.mxUtils;
import com.mxgraph.view.mxGraph;
/**
*
* @author 非也 nychen2000@163.com
* Fire Workflow 官方网站:www.firesoa.com 或者 www.fireflow.org
*
*/
public class FpdlExporter {
private static Log log = LogFactory.getLog(FpdlExporter.class);
private static Document doc = null;
static {
mxCodecRegistry.addPackage(Wrapper.class.getPackage().getName());
//设置Graph
doc = mxUtils.loadDocument(FireflowModel2MxGraphModel.class.getResource(
"/org/fireflow/designer/swing/resources/fireflow2-styles.xml")
.toString());
}
public static String exportToSVGDiagram(WorkflowProcess process,String subProcessName,
final String svgId,
final int viewPortWidth,final int viewPortHeight,
String clientWidgetServletPath,String contextPath,String encoding){
mxGraph graph = new CustomGraph();
mxCodec codec = new mxCodec();
codec.decode(doc.getDocumentElement(), graph.getStylesheet());
//打开model
FireflowModel2MxGraphModel transformer = new FireflowModel2MxGraphModel();
mxCell cell = transformer.transformToCell(process, subProcessName);
graph.getModel().setRoot(cell);
//输出svg
org.w3c.dom.Document w3cDoc = CellRendererEx.createSvgDocument(graph, null, 1.0d, null, null,
svgId,viewPortWidth,viewPortHeight,
clientWidgetServletPath,contextPath);
String svgXml = getXml(w3cDoc,encoding);
return svgXml;
}
public static String exportToVMLDiagram(WorkflowProcess process,String subProcessName,
String vmlId,
String fireflowResourceServlet,String contextPath,String encoding){
mxGraph graph = new CustomGraph();
mxCodec codec = new mxCodec();
codec.decode(doc.getDocumentElement(), graph.getStylesheet());
//打开model
FireflowModel2MxGraphModel transformer = new FireflowModel2MxGraphModel();
mxCell cell = transformer.transformToCell(process, subProcessName);
graph.getModel().setRoot(cell);
//输出svg
org.w3c.dom.Document w3cDoc = CellRendererEx.createVmlDocument(graph, null, 1.0d, null, null,vmlId,fireflowResourceServlet,contextPath);
String vmlXml = getXml(w3cDoc,encoding);
return vmlXml;
}
public static String getXml(Node node,String encoding)
{
try
{
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
tf.setOutputProperty(OutputKeys.ENCODING, encoding);
tf.setOutputProperty(OutputKeys.INDENT,"yes");
tf.setOutputProperty(
"{http://xml.apache.org/xslt}indent-amount", "2");
StreamResult dest = new StreamResult(new StringWriter());
tf.transform(new DOMSource(node), dest);
return dest.getWriter().toString();
}
catch (Exception e)
{
// ignore
}
return "";
}
}