package org.jpos.jposext.isomsgaction.helper; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Collections; import java.util.List; /** * @author dgrandemange * */ public class IsoMsgActionHelper { /** * @param mappingsDirPath * The ISO mapping configs directory path * @param mappingId * An ISO mapping id, or null to process all ISO mapping configs * @return A byte array input stream containing a global iso actions * configuration including the mappingId configuration file (or all * mapping configs if mappingId is null) * @throws IOException */ public static InputStream getMainISOActionConfigInputStream(String mappingsDirPath, String mappingId, List<File> lstMappingCfgFiles) throws IOException { final String finalMappingId = mappingId; File mappingsDir = new File(mappingsDirPath); File[] mappingCfgFiles = mappingsDir.listFiles(new FileFilter() { /* (non-Javadoc) * @see java.io.FileFilter#accept(java.io.File) */ public boolean accept(File file) { boolean res = false; if (file.isFile()) { if (null == finalMappingId) { if (file.getName().endsWith(".xml")) { return true; } } else { if (file.getName().equals( String.format("%s.xml", finalMappingId))) { return true; } } } return res; } }); Collections.addAll(lstMappingCfgFiles, mappingCfgFiles); StringBuffer strBuf = new StringBuffer(); BufferedReader reader = new BufferedReader( new InputStreamReader( IsoMsgActionHelper.class .getResourceAsStream( "/org/jpos/jposext/isomsgaction/template/isoaction-main-template.xml"))); StringBuffer inclusionsBuf = new StringBuffer(); for (File mappingCfgFile : mappingCfgFiles) { inclusionsBuf.append(String.format( "<xi:include href=\"%s/%s\" />\n", mappingsDirPath, mappingCfgFile.getName())); } for (String line = reader.readLine(); line != null; line = reader .readLine()) { String replacedLine = line.replaceFirst( "(^.*)\\#INCLUSIONS_TOKEN\\#(.*$)", "$1" + inclusionsBuf.toString() + "$2"); strBuf.append(replacedLine); } String agregatedXml = strBuf.toString(); ByteArrayInputStream bais = new ByteArrayInputStream( agregatedXml.getBytes()); return bais; } }