/******************************************************************************* * Copyright (c) 2014 aegif. * * This file is part of NemakiWare. * * NemakiWare is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NemakiWare 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 General Public License along with NemakiWare. * If not, see <http://www.gnu.org/licenses/>. * * Contributors: * linzhixing(https://github.com/linzhixing) - initial API and implementation ******************************************************************************/ package jp.aegif.nemaki.installer; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Properties; public class FileUtil { public static String replaceAllKeys(File templateFile, List<File> propertiesFiles, String pattern){ //Read and override properties key-value Properties config = new Properties(); for(File propertiesFile : propertiesFiles){ System.out.println("Read config from " + propertiesFile.getAbsolutePath()); Properties _config = readProperties(propertiesFile); for(Object _key : _config.keySet()){ String key = (String)_key; String value = _config.getProperty(key); config.setProperty(key, value); } } //Replace place holders in template file String body = readFile(templateFile); String replaced = body; if(config != null && config.keySet() != null){ for(Object _key : config.keySet()){ String key = (String)_key; replaced = replaceWithKey(config, replaced, key, pattern); } } //Write to new file String newFilePath = addSuffix(templateFile.getAbsolutePath()); writeFile(newFilePath, replaced); return newFilePath; } public static String replaceWithKey(Properties config, String body, String key, String pattern) { // Read proeprties file String value = config.getProperty(key); // Substitute variables in template file String replaced = body; if(StringPool.PATTERN_USER_INPUT_SPEC.equals(pattern)){ replaced = body.replaceAll("\\Qset=\"${" + key + "}\"\\E", "set=\"" + value + "\""); } return replaced; } public static String readProperties(File file, String key) { Properties config = readProperties(file); String value = config.getProperty(key); return value; } public static Properties readProperties(File file) { Properties config = new Properties(); InputStream inputStream = null; try { inputStream = new FileInputStream(file); config.load(inputStream); inputStream.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(inputStream != null){ try{ inputStream.close(); }catch(Exception e){ } } } return config; } public static String readFile(String filePath){ File file = new File(filePath); return readFile(file); } public static String readFile(File file) { try { // Read FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); StringBuffer fileRead = new StringBuffer(""); String str = ""; while ((str = br.readLine()) != null) { fileRead.append(str + "\r\n"); } br.close(); String body = fileRead.toString(); return body; } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static void writeFile(String filePath, String body) { File file = new File(filePath); try { FileWriter fw = new FileWriter(file); fw.write(body); fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void deleteNode(String path){ File node = new File(path); if(node.exists()){ deleteNode(node); }else{ System.out.println("path=" + path + " does not exist"); } } /** * Delete node(file/folder including its descendants) * @param node * @return */ public static boolean deleteNode(File node){ if (node.isDirectory()) { String[] children = node.list(); for (int i=0; i<children.length; i++) { boolean success = deleteNode(new File(node, children[i])); if (!success) { System.out.println("path=" + node.getAbsolutePath() + " failed to delete"); return false; } } } return node.delete(); } public static String addSuffix(String filePath) { String result = null; int point = filePath.lastIndexOf("."); if (point != -1) { String extension = filePath.substring(point + 1); String body = filePath.substring(0, point); result = body + "_modified." + extension; } return result; } }