package ch.sbb.maven.plugins.iib.utils; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Enumeration; import java.util.HashMap; import com.ibm.broker.config.proxy.BarFile; import com.ibm.broker.config.proxy.CompletionCodeType; import com.ibm.broker.config.proxy.LogEntry; /** * Highly borrowed from * * @see com.ibm.broker.config.util.ApplyBarOverride * * @author u209936 (Jamie Townsend) * @since 2.1, 2015 */ @SuppressWarnings("javadoc") public class ApplyBarOverride { public static Enumeration<LogEntry> applyBarOverride(String srcBarFile, String propertiesFile, String targetBarFile) throws IOException { CompletionCodeType completionCode = CompletionCodeType.success; BarFile barfile = null; Enumeration<LogEntry> logMessages = null; barfile = BarFile.loadBarFile(srcBarFile); if (propertiesFile != null) { logMessages = applyOverridesFromFile(barfile, propertiesFile); logMessages = null; } completionCode = getCompletionCode(logMessages); // enumeration = null; // } if (completionCode == CompletionCodeType.success) { barfile.saveAs(targetBarFile); } return logMessages; } private static Enumeration<LogEntry> applyOverridesFromFile(BarFile barfile, String propertiesFile) throws IOException { String appName = null; String libName = null; boolean recurse = true; Enumeration<LogEntry> enumeration = null; ConfigurableProperties configurableProperties = readPropertiesFile(propertiesFile); if (configurableProperties != null) { enumeration = barfile.applyOverrides(new HashMap<String, String>(configurableProperties), appName, libName, recurse); } return enumeration; } private static CompletionCodeType getCompletionCode(Enumeration<LogEntry> enumeration) { CompletionCodeType completionCode = CompletionCodeType.success; if (enumeration != null) { LogEntry logentry; while (enumeration.hasMoreElements()) { logentry = enumeration.nextElement(); if (logentry.getMessageNumber() == 1145) { return CompletionCodeType.failure; } } } return completionCode; } // TODO Refactor into separate class and re-use for .properties validation private static ConfigurableProperties readPropertiesFile(String propertiesFilename) throws IOException // , ConfigUtilityException { String commentString = System.getProperty("COMMENT", "#"); String delimiterString = System.getProperty("KEY_VALUE_DELIMITER", "="); ConfigurableProperties linkedhashmap = new ConfigurableProperties(); File file = new File(propertiesFilename); FileReader filereader = new FileReader(file); BufferedReader bufferedreader = new BufferedReader(filereader); for (String fileLine = bufferedreader.readLine(); fileLine != null; fileLine = bufferedreader.readLine()) { int commentPosition = fileLine.indexOf(commentString); if (commentPosition == 0) { continue; } int delimiterPosition = fileLine.indexOf(delimiterString); String propertyName = null; String propertyValue = null; if (delimiterPosition != -1) { propertyName = fileLine.substring(0, delimiterPosition).trim(); propertyValue = fileLine.substring(delimiterPosition + delimiterString.length()).trim(); } else { propertyName = fileLine; } linkedhashmap.put(propertyName, propertyValue); } filereader.close(); return linkedhashmap; } }