Index: maven-i18n-plugin/src/java/org/codelutin/i18n/plugin/extension/ParserXml.java diff -u maven-i18n-plugin/src/java/org/codelutin/i18n/plugin/extension/ParserXml.java:1.9 maven-i18n-plugin/src/java/org/codelutin/i18n/plugin/extension/ParserXml.java:1.10 --- maven-i18n-plugin/src/java/org/codelutin/i18n/plugin/extension/ParserXml.java:1.9 Sat Jan 5 13:10:56 2008 +++ maven-i18n-plugin/src/java/org/codelutin/i18n/plugin/extension/ParserXml.java Sat Jan 19 14:31:16 2008 @@ -24,6 +24,9 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.BufferedInputStream; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; @@ -59,7 +62,7 @@ protected XPath xpath; /** - * Fonction d'extraaction de la chaine + * Fonction d'extraction de la chaine * @param i18nString le clef i18n * @return la chaine */ @@ -68,6 +71,9 @@ /** @return le fichier des rules */ protected abstract String getFileRules(); + /** @return le fichier des rules de base à toujours charger */ + protected abstract String getCoreFileRules(); + @Override public void init() { super.init(); @@ -137,41 +143,87 @@ * @return le xpath à partir d'un fichier */ private String getRules(String fileRules) { - String result; + StringBuilder result = new StringBuilder(); - // Lecture - ClassLoader classLoader = getClass().getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream(fileRules); - String readInputStream; try { - readInputStream = readInputStream(inputStream); + String readInputStream; + + // load core rules + readInputStream = loadRulesFile(getCoreFileRules()); + if (verbose) { + log.debug("core rules : "+readInputStream); + } + result.append(readInputStream); + + if (!fileRules.equals(getCoreFileRules())) { + // add custom rules + readInputStream = loadRulesFile(fileRules); + if (verbose) { + log.debug("custom rules : " + readInputStream); + } + result.append(" | ").append(readInputStream); + } } catch (IOException e) { throw new ParserException(e); } - // Suppression - result = readInputStream.trim(); - result = result.replaceAll("#.*\n", ""); // suppression des commentaires - result = result.replaceAll("\\s+", " | "); // contruction du xpath avec des ou - result = result.replaceAll("(^ \\| )|( \\| $)", ""); // suppression des ou de début ee fin + return result.toString(); + } - return result; + private String loadRulesFile(String fileRules) throws IOException { + File f = new File(fileRules); + + InputStream inputStream; + if (f.exists()) { + // load from a file + try { + inputStream = new FileInputStream(f); + } catch (FileNotFoundException e) { + throw new ParserException(e); + } + } else { + // load from classpath + ClassLoader classLoader = getClass().getClassLoader(); + inputStream = classLoader.getResourceAsStream(fileRules); + } + if (inputStream == null) { + throw new ParserException("could not found file of rules : " + fileRules); + } + + inputStream = new BufferedInputStream(inputStream); + + try { + // Lecture + String readInputStream; + readInputStream = readInputStream(inputStream); + return readInputStream; + } catch (IOException e) { + throw new ParserException(e); + } finally { + inputStream.close(); + } } /** - * Permet la lecture d'un InputStream + * Permet la lecture d'un InputStream et Suppressions. + * * @param in le flux entrant * @return le contenu du flux * @throws IOException si problème de lecture dans flux entrant */ private String readInputStream(InputStream in) throws IOException { - String result = ""; + StringBuilder sb = new StringBuilder(); byte[] buffer = new byte[BUFFER_SIZE]; while (in.read(buffer, 0, BUFFER_SIZE) != -1) { String tmp = new String(buffer); - result += tmp; + sb.append(tmp); } in.close(); + // Suppression + String result = sb.toString().trim(); + result = result.replaceAll("#.*\n", ""); // suppression des commentaires + result = result.replaceAll("\\s+", " | "); // contruction du xpath avec des ou + result = result.replaceAll("(^ \\| )|( \\| $)", ""); // suppression des ou de début ee fin return result; } }