/** * Copyright (C) 2002-2012 The FreeCol Team * * This file is part of FreeCol. * * FreeCol 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 2 of the License, or * (at your option) any later version. * * FreeCol 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 FreeCol. If not, see <http://www.gnu.org/licenses/>. */ package net.sf.freecol.tools; import java.io.BufferedReader; import java.io.File; import java.io.FilenameFilter; import java.io.FileReader; import java.io.FileWriter; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class MergeTranslations { public static void main(String[] args) throws Exception { File sourceDirectory = new File(args[0]); if (!sourceDirectory.isDirectory()) { System.exit(1); } File targetDirectory = new File(args[1]); if (!targetDirectory.isDirectory()) { System.exit(1); } final String localeKey = args.length > 2 ? args[2] : ""; String[] sourceFiles = sourceDirectory.list(new FilenameFilter() { public boolean accept(File dir, String name) { return name.matches("FreeColMessages_" + localeKey + ".*\\.properties"); } }); for (String name : sourceFiles) { System.out.println("Processing source file: " + name); File sourceFile = new File(sourceDirectory, name); Map<String, String> sourceProperties = readFile(sourceFile); File targetFile = new File(targetDirectory, name); if (targetFile.exists()) { Map<String, String> targetProperties = readFile(targetFile); List<Entry<?,?>> missingProperties = new ArrayList<Entry<?,?>>(); for (Entry<?,?> entry : sourceProperties.entrySet()) { if (!targetProperties.containsKey(entry.getKey())) { missingProperties.add(entry); } } if (!missingProperties.isEmpty()) { FileWriter out = new FileWriter(targetFile, true); out.write("### Merged from trunk on " + DateFormat.getDateTimeInstance().format(new Date()) + " ###\n"); for (Entry<?,?> entry : missingProperties) { out.write((String) entry.getKey()); out.write("="); out.write((String) entry.getValue()); out.write("\n"); } out.close(); } } else { System.out.println("Copying " + name + " from trunk."); FileReader in = new FileReader(sourceFile); FileWriter out = new FileWriter(targetFile); int c; while ((c = in.read()) != -1) { out.write(c); } in.close(); out.close(); } } } private static Map<String, String> readFile(File file) { Map<String, String> result = new HashMap<String, String>(); try { FileReader fileReader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(fileReader); String line = bufferedReader.readLine(); while (line != null) { int index = line.indexOf('='); if (index >= 0) { result.put(line.substring(0, index), line.substring(index + 1)); } line = bufferedReader.readLine(); } } catch(Exception e) { // forget it } return result; } }