This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository i18n. See https://gitlab.nuiton.org/nuiton/i18n.git commit f25440af70c7b7d401e5e3949da95600cd140b4f Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Sep 1 17:15:26 2016 +0200 Improve generateI18nEnumHelper by adding a way to generate also a description i18n key Fixes #4010 --- .../i18n/plugin/GenerateI18nEnumHelperMojo.java | 109 +++++++++++++++++---- 1 file changed, 92 insertions(+), 17 deletions(-) diff --git a/i18n-maven-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateI18nEnumHelperMojo.java b/i18n-maven-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateI18nEnumHelperMojo.java index 442a91f..cd4d793 100644 --- a/i18n-maven-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateI18nEnumHelperMojo.java +++ b/i18n-maven-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateI18nEnumHelperMojo.java @@ -34,6 +34,8 @@ import java.io.BufferedWriter; import java.io.File; import java.util.Date; import java.util.List; +import java.util.Set; +import java.util.TreeSet; /** * Generate a i18n enum class helper. @@ -74,9 +76,42 @@ public class GenerateI18nEnumHelperMojo extends AbstractI18nMojo { /** * List of enums to scan to generate i18n keys. + * + * Example with enum {@code enum E { A,B }}, will generate i18n keys: + * <ul> + * <li>prefixA</li> + * <li>prefixB</li> + * </ul> + */ + @Parameter(property = "i18n.enumsWithLabel", required = true) + protected List<String> enumsWithLabel; + + /** + * List of enums to scan to generate i18n keys plus description keys. + * + * Example with enum {@code enum E { A,B }}, will generate i18n keys: + * <ul> + * <li>prefixA</li> + * <li>prefixA.description</li> + * <li>prefixB</li> + * <li>prefixB.description</li> + * </ul> + */ + @Parameter(property = "i18n.enumsWithLabelAndDescription", required = true) + protected List<String> enumsWithLabelAndDescription; + + /** + * List of enums to scan to generate i18n description keys. + * + * Example with enum {@code enum E { A,B }}, will generate i18n keys: + * <ul> + * <li>prefixA.description</li> + * <li>prefixB.description</li> + * </ul> */ - @Parameter(property = "i18n.enums", required = true) - protected List<String> enums; + @Parameter(property = "i18n.enumsWithLabelAndDescription", required = true) + protected List<String> enumsWithDescription; + @Override protected void doAction() throws Exception { @@ -108,31 +143,70 @@ public class GenerateI18nEnumHelperMojo extends AbstractI18nMojo { writer.write("\n"); writer.write("public class " + className + " {\n"); writer.write("\n"); - writer.write(" public static <E extends Enum<E>> String getLabel(E e) {\n"); - writer.write(" return t(getLabelKey(e));\n"); - writer.write(" }\n"); - writer.write("\n"); - writer.write(" public static <E extends Enum<E>> String getLabel(Locale locale, E e) {\n"); - writer.write(" return l(locale, getLabelKey(e));\n"); - writer.write(" }\n"); - writer.write("\n"); - writer.write(" protected static <E extends Enum<E>> String getLabelKey(E e) {\n"); - writer.write(" return \"" + prefix + "\" + e.getClass().getName() + \".\" + e.name();\n"); - writer.write(" }\n"); - writer.write("\n"); + if (!(enumsWithLabel.isEmpty() && enumsWithLabelAndDescription.isEmpty())) { + writer.write(" public static <E extends Enum<E>> String getLabel(E e) {\n"); + writer.write(" return t(getLabelKey(e));\n"); + writer.write(" }\n"); + writer.write("\n"); + + writer.write(" public static <E extends Enum<E>> String getLabel(Locale locale, E e) {\n"); + writer.write(" return l(locale, getLabelKey(e));\n"); + writer.write(" }\n"); + writer.write("\n"); + writer.write(" protected static <E extends Enum<E>> String getLabelKey(E e) {\n"); + writer.write(" return \"" + prefix + "\" + e.getClass().getName() + \".\" + e.name();\n"); + writer.write(" }\n"); + writer.write("\n"); + } + if (!(enumsWithDescription.isEmpty() && enumsWithLabelAndDescription.isEmpty())) { + writer.write(" public static <E extends Enum<E>> String getDescription(E e) {\n"); + writer.write(" return t(getDescriptionKey(e));\n"); + writer.write(" }\n"); + writer.write("\n"); + + writer.write(" public static <E extends Enum<E>> String getDescription(Locale locale, E e) {\n"); + writer.write(" return l(locale, getDescriptionKey(e));\n"); + writer.write(" }\n"); + writer.write("\n"); + writer.write(" protected static <E extends Enum<E>> String getDescriptionKey(E e) {\n"); + writer.write(" return \"" + prefix + "\" + e.getClass().getName() + \".\" + e.name() + \".description\";\n"); + writer.write(" }\n"); + writer.write("\n"); + } writer.write(" static {\n\n"); - for (String anEnumType : enums) { + Set<String> allEnums = new TreeSet<>(); + allEnums.addAll(enumsWithLabel); + allEnums.addAll(enumsWithDescription); + allEnums.addAll(enumsWithLabelAndDescription); + + Set<String> allLabelEnums = new TreeSet<>(); + allLabelEnums.addAll(enumsWithLabel); + allLabelEnums.addAll(enumsWithLabelAndDescription); + + Set<String> allDescriptionEnums = new TreeSet<>(); + allDescriptionEnums.addAll(enumsWithDescription); + allDescriptionEnums.addAll(enumsWithLabelAndDescription); + + for (String anEnumType : allEnums) { Class aClass = Class.forName(anEnumType); + getLog().info("Scan enum: " + aClass.getName()); if (!aClass.isEnum()) { throw new IllegalStateException("Type " + aClass.getName() + " is not an enum."); } - getLog().info("Scan enum: " + aClass.getName()); + boolean generateLabel = allLabelEnums.contains(anEnumType); + boolean generateDescription = allDescriptionEnums.contains(anEnumType); + for (Object o : aClass.getEnumConstants()) { Enum e = (Enum) o; - writer.write(" n(\"" + prefix + aClass.getName() + "." + e.name() + "\");\n"); + if (generateLabel) { + writer.write(" n(\"" + prefix + aClass.getName() + "." + e.name() + "\");\n"); + } + if (generateDescription) { + writer.write(" n(\"" + prefix + aClass.getName() + "." + e.name() + ".description\");\n"); + } } writer.write("\n"); @@ -147,4 +221,5 @@ public class GenerateI18nEnumHelperMojo extends AbstractI18nMojo { } } + } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.