package folioxml.export.html; import folioxml.config.ExportLocations; import folioxml.core.InvalidMarkupException; import folioxml.export.ExportingNodeListProcessor; import folioxml.export.FileNode; import folioxml.export.LogStreamProvider; import folioxml.export.NodeListProcessor; import folioxml.xml.NodeList; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class MultiRunner implements NodeListProcessor, ExportingNodeListProcessor { private NodeListProcessor[] filters = null; private ExportingNodeListProcessor[] efilters = null; public MultiRunner(NodeListProcessor... filters) { this.filters = filters; List<ExportingNodeListProcessor> ef = new ArrayList<ExportingNodeListProcessor>(); for (NodeListProcessor p : filters) { if (p instanceof ExportingNodeListProcessor) { ef.add((ExportingNodeListProcessor) p); } } efilters = ef.toArray(new ExportingNodeListProcessor[ef.size()]); } public NodeList process(NodeList nodes) throws InvalidMarkupException, IOException { for (NodeListProcessor p : filters) nodes = p.process(nodes); return nodes; } public static NodeList process(NodeList nodes, NodeListProcessor... filters) throws InvalidMarkupException, IOException { for (NodeListProcessor p : filters) nodes = p.process(nodes); return nodes; } @Override public void setFileNode(FileNode fn) { for (ExportingNodeListProcessor p : efilters) { p.setFileNode(fn); } } @Override public void setLogProvider(LogStreamProvider provider) { for (ExportingNodeListProcessor p : efilters) { p.setLogProvider(provider); } } @Override public void setExportLocations(ExportLocations el) { for (ExportingNodeListProcessor p : efilters) { p.setExportLocations(el); } } }