Comparing Workflow XML Between the File System and Repository
If you have a workflow in the repository and a .ffc file on the file system, and you would like to compare the XML contents to see if they are equal, you can use the following Java code:
You will need to be sure that the file flow-charts-5-0.dtd is located in the Java working directory in order to use the code below.
import flux.*;
import flux.repository.RepositoryAdministrator;
import flux.repository.RepositoryIterator;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.rmi.NotBoundException;
import java.util.ArrayList;
import java.util.List;
public class CompareWorkflowXML {
public static void main(String[] args) throws NotBoundException, EngineException, IOException, ParserConfigurationException, SAXException {
Factory factory = Factory.makeInstance();
// Look up the engine at the given host, port, and SSL setting
Engine engine = Factory.makeInstance().lookupEngine("localhost", 7250, true);
try {
// Edit this to use a valid login for your engine.
// If security is not enabled, comment out the line below, as well as the
// try / finally block and the logout line.
engine.login("admin", "admin");
// Get the workflow from the repository
RepositoryAdministrator repoAdmin = engine.getRepositoryAdministrator();
List<FlowChart> workflows = new ArrayList<FlowChart>();
RepositoryIterator it = repoAdmin.get("/myworkflow");
try {
while (it.hasNext()) {
workflows.add(it.next().getFlowChart());
}
} finally {
it.close();
}
ByteArrayOutputStream bos = new ByteArrayOutputStream();
EngineHelper.makeXmlFromFlowCharts(workflows, bos, true);
bos.close();
String workflowXml = bos.toString();
// Use Java libraries for the XML comparison
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setCoalescing(true);
dbf.setIgnoringElementContentWhitespace(true);
dbf.setIgnoringComments(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc1 = db.parse(new File("/path/to/myworkflow.ffc"));
doc1.normalizeDocument();
Document doc2 = db.parse(new ByteArrayInputStream(workflowXml.getBytes()));
doc2.normalizeDocument();
System.out.println(doc1.isEqualNode(doc2));
} finally {
engine.logout();
}
}
}