org.nuiton.i18n.plugin.AbstractI18nMojo Maven / Gradle / Ivy
/*
* *##%
* I18n :: Maven Plugin
* Copyright (C) 2007 - 2010 CodeLutin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Lesser Public License for more details.
*
* You should have received a copy of the GNU General Lesser Public
* License along with this program. If not, see
* .
* ##%*
*/
package org.nuiton.i18n.plugin;
import org.apache.maven.project.MavenProject;
import org.nuiton.i18n.I18nUtil;
import org.nuiton.plugin.AbstractPlugin;
import org.nuiton.plugin.PluginHelper;
import java.io.File;
import java.io.IOException;
import java.util.Locale;
import java.util.Properties;
import java.util.SortedSet;
/**
* Classe permettant d'obenir les parametres pendant les différentes phases du
* plugin.
*
* @author julien
*/
public abstract class AbstractI18nMojo extends AbstractPlugin {
/** Le nombre de getters détectés pendant le cycle de vie du build. */
private static int NB_GETTER_FILES;
/**
* Dependance du projet.
*
* @parameter default-value="${project}"
* @required
* @since 1.0.2
*/
protected MavenProject project;
/**
* Nom du projet.
*
* @parameter expression="${i18n.artifactId}" default-value="${project.artifactId}"
* @readonly
*/
protected String artifactId;
/**
* Langues des bundles generes.
*
*
* @parameter expression="${i18n.bundles}" default-value="fr_FR,en_GB"
* @required
*/
protected String bundles;
/**
* Repertoire sources des fichiers i18n.
*
* @parameter expression="${i18n.src}" default-value="${basedir}/src/main/resources/i18n"
* @required
*/
protected File src;
/**
* Repertoire des fichiers generes i18n.
*
* @parameter expression="${i18n.out}" default-value="${basedir}/target/generated-sources/i18n"
* @required
*/
protected File out;
/**
* encoding a utiliser pour charger et sauver les bundles
*
* @parameter expression="${i18n.encoding}" default-value="${project.build.sourceEncoding}"
* @required
*/
protected String encoding;
/**
* Met les fichiers generes dans le repertoire des sources i18n.
*
* Note: Par défaut active, pour pouvoir paquager avec les bundles mis a
* jour.
*
* @parameter expression="${i18n.genSrc}" default-value="true"
*/
protected boolean genSrc;
/**
* verbose flag
*
* Note: si non renseigne, on utilise la propiété maven.verbose.
*
* @parameter expression="${i18n.verbose}" default-value="${maven.verbose}"
*/
protected boolean verbose;
/**
* silent flag
*
* @parameter expression="${i18n.silent}" default-value="false"
* @since 1.0.0-rc-5
*/
protected boolean silent;
/**
* ne conserve que les clef scannees (et donc traite tous les fichiers)
*
*
* Note : par default, on ne l'active car rescanne tous les fichiers. s
*
* @parameter expression="${i18n.strictMode}" default-value="false"
*/
protected boolean strictMode;
/** les locales a traiter */
protected Locale[] locales;
@Override
protected boolean checkPackaging() {
// nothing to do on a pom module
return !acceptPackaging(Packaging.pom);
}
public void init() throws Exception {
if (verbose) {
// in verbose mode, no silent
silent = false;
getLog().info("config - verbose mode is on");
}
locales = I18nUtil.parseLocales(bundles);
if (locales == null || locales.length == 0) {
throw new IllegalStateException(
"Il faut au moins une locale declaree (utiliser " +
"la propriete 'bundles')");
}
}
public String getArtifactId() {
return artifactId;
}
/**
* @return true si des getters ont etes enregistres pendant le
* cycle de vie, false sinon.
*/
protected boolean needGeneration() {
boolean needGeneration = NB_GETTER_FILES > 0;
return needGeneration;
}
/**
* Prend en compte qu'un getter a été détecté.
*
* Cela veut dire qu'un goal de parser a détecté des clefs. Il faudra donc
* activer les goal get et gen.
*/
protected void addGetter() {
NB_GETTER_FILES++;
}
/**
* @param root le repertoire ou sont stockes les fichiers i18n
* @param artifactId le nom de l'artifact
* @param locale le nom du bundle
* @param create true pour creer le fichier si non present
* @return le fichier i18n
* @throws IOException si probleme lors de la creation du fichier
*/
public File getI18nFile(File root, String artifactId,
Locale locale, boolean create) throws IOException {
File file = new File(
root.getAbsolutePath() + File.separatorChar + artifactId +
"-" + locale.toString() + ".properties");
if (create && !file.exists()) {
createNewFile(file);
}
return file;
}
/**
* @param root le repertoire ou sont stockes les fichiers getter
* @param getter le nom du getter
* @param create true pour creer le fichier si non present
* @return le fichier i18n
* @throws IOException si probleme lors de la creation du fichier
*/
public File getGetterFile(File root, String getter, boolean create)
throws IOException {
File file = new File(
root.getAbsolutePath() + File.separatorChar + getter);
if (create && !file.exists()) {
createNewFile(file);
}
return file;
}
protected void checkBundle(Locale locale, Properties propertiesOut,
boolean showEmpty) {
// on verifie qu'il n'y a pas de traduction vide
SortedSet emptyEntries = PluginHelper.getEmptyKeys(propertiesOut);
if (!emptyEntries.isEmpty()) {
StringBuilder buffer = new StringBuilder();
int size = emptyEntries.size();
buffer.append("bundle ");
buffer.append(locale);
buffer.append(" contains ");
buffer.append(size);
buffer.append("/");
buffer.append(propertiesOut.size());
buffer.append(" empty entries!");
if (showEmpty) {
int index = 0;
for (String key : emptyEntries) {
buffer.append("\n - ");
buffer.append(index++);
buffer.append("/");
buffer.append(size);
buffer.append(" : ");
buffer.append(key);
}
} else {
buffer.append(" (use -Di18n.showEmpty to see these" +
" entries)");
}
getLog().warn(buffer.toString());
} else {
if (!silent && verbose) {
getLog().info("bundle " + locale + " is valid (no empty" +
" entries).");
}
}
}
public File getBackupFile(File file) {
return new File(file.getAbsolutePath() + "~");
}
protected void backupFile(File f) throws IOException {
File dst = getBackupFile(f);
copyFile(f, dst);
}
public String getEncoding() {
return encoding;
}
public void setEncoding(String encoding) {
this.encoding = encoding;
}
public MavenProject getProject() {
return project;
}
public void setProject(MavenProject project) {
this.project = project;
}
public boolean isVerbose() {
return verbose;
}
public void setVerbose(boolean verbose) {
this.verbose = verbose;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy