This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository nuiton-config. See https://gitlab.nuiton.org/nuiton/nuiton-config.git commit fc2b6a9af6769f16754c24a5796ae07709357a94 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Oct 1 20:24:10 2016 +0200 New goal to describe an existing configuration (Fixes #4055) + some fix on transformer --- .../org/nuiton/config/plugin/DescribeMojo.java | 191 +++++++++++++++++++++ .../org/nuiton/config/plugin/GenerateMojo.java | 35 +--- .../nuiton/config/plugin/model/ConfigModel.java | 13 +- ...ConfigModelReader.java => ConfigModelUtil.java} | 20 ++- .../nuiton/config/plugin/model/OptionModel.java | 108 ++++++++---- .../templates/ApplicationConfigTransformer.java | 74 ++++++-- ...delReaderTest.java => ConfigModelUtilTest.java} | 6 +- 7 files changed, 359 insertions(+), 88 deletions(-) diff --git a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/DescribeMojo.java b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/DescribeMojo.java new file mode 100644 index 0000000..23a84d7 --- /dev/null +++ b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/DescribeMojo.java @@ -0,0 +1,191 @@ +package org.nuiton.config.plugin; + +/* + * #%L + * Nuiton Config :: Maven plugin + * %% + * Copyright (C) 2016 Code Lutin, Tony Chemit + * %% + * 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 + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Joiner; +import org.apache.commons.lang3.StringUtils; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.annotations.Execute; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.MavenProject; +import org.nuiton.config.ApplicationConfigHelper; +import org.nuiton.config.ApplicationConfigProvider; +import org.nuiton.config.ConfigActionDef; +import org.nuiton.config.ConfigOptionDef; +import org.nuiton.config.plugin.model.ActionModel; +import org.nuiton.config.plugin.model.ConfigModel; +import org.nuiton.config.plugin.model.ConfigModelUtil; +import org.nuiton.config.plugin.model.OptionModel; +import org.nuiton.plugin.AbstractPlugin; +import org.nuiton.plugin.PluginHelper; + +import java.io.File; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; + +/** + * Describe application config from java files to the description configuration format. + * <p> + * Created on 28/08/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 + */ +@Mojo(name = "describe", requiresDirectInvocation = true, defaultPhase = LifecyclePhase.COMPILE, requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME) +@Execute(phase = LifecyclePhase.COMPILE) +public class DescribeMojo extends AbstractPlugin { + + /** + * The name of provider to describe. + * <p> + * By default, will use artifactId in camelCase format ( example: provider name for artifact id + * {@code nuiton-config-example} is {@code NuitonConfigExample} ). + * + * @see ApplicationConfigProvider + */ + @Parameter(property = "config.providerName") + private String providerName; + + /** + * The path of model file. + * + * <p>Default value is </p> + * <pre>config.sourceDirectory/config.modelName.yml</pre> + */ + @Parameter(property = "config.modelFile") + private File modelFile; + + /** + * The source directory where to scan model file. + */ + @Parameter(property = "config.modelDirectory", defaultValue = "${basedir}/src/main/config", required = true) + private File modelDirectory; + + /** + * The source directory where to scan options java file. + */ + @Parameter(property = "config.sourceDirectory", defaultValue = "${project.build.outputDirectory}", required = true) + private File sourceDirectory; + + /** + * Pour activer le mode verbeux. + */ + @Parameter(property = "config.verbose", defaultValue = "${maven.verbose}") + private boolean verbose; + + /** + * Maven project. + */ + @Parameter(defaultValue = "${project}", readonly = true) + private MavenProject project; + + private ConfigModel configModel; + + @Override + protected void init() throws Exception { + + if (providerName == null) { + + List<String> artifactIdPaths = new ArrayList<>(); + for (String artifactIdPath : Arrays.asList(getProject().getArtifactId().replaceAll("-", ".").split("\\."))) { + artifactIdPaths.add(StringUtils.capitalize(artifactIdPath)); + } + providerName = Joiner.on("").join(artifactIdPaths) + "Config"; + + } + + getLog().info("Use provider name: " + providerName); + + ClassLoader loader = this.initClassLoader(getProject(), sourceDirectory, true, false, false, true, true); + + ApplicationConfigProvider provider = ApplicationConfigHelper.getProvider(loader, providerName); + + if (provider == null) { + throw new MojoExecutionException("Could not find provider with name: " + providerName); + } + + String modelName = StringUtils.removeEnd(provider.getName(), "Config"); + getLog().info("Use model name: " + modelName); + + if (modelFile == null) { + modelFile = PluginHelper.getFile(modelDirectory, modelName + ".yml"); + } + + Files.createDirectories(modelFile.getParentFile().toPath()); + + String description = provider.getDescription(Locale.FRANCE); + + configModel = new ConfigModel(); + configModel.setDescription(description); + + LinkedList<OptionModel> optionModels = new LinkedList<>(); + for (ConfigOptionDef configOptionDef : provider.getOptions()) { + optionModels.add(OptionModel.of(configOptionDef)); + } + configModel.setOptions(optionModels); + + LinkedList<ActionModel> actionModels = new LinkedList<>(); + for (ConfigActionDef configActionDef : provider.getActions()) { + actionModels.add(ActionModel.of(configActionDef)); + } + configModel.setActions(actionModels); + + } + + @Override + protected void doAction() throws Exception { + + getLog().info("Generate file to: " + modelFile); + + ConfigModelUtil.write(configModel, modelFile.toPath()); + + } + + @Override + public boolean isVerbose() { + return verbose; + } + + @Override + public void setVerbose(boolean verbose) { + this.verbose = verbose; + } + + @Override + public MavenProject getProject() { + return project; + } + + @Override + public void setProject(MavenProject project) { + this.project = project; + } + +} diff --git a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/GenerateMojo.java b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/GenerateMojo.java index af5a305..7a31fe0 100644 --- a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/GenerateMojo.java +++ b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/GenerateMojo.java @@ -35,7 +35,7 @@ import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.project.MavenProject; import org.nuiton.config.ApplicationConfigProvider; import org.nuiton.config.plugin.model.ConfigModel; -import org.nuiton.config.plugin.model.ConfigModelReader; +import org.nuiton.config.plugin.model.ConfigModelUtil; import org.nuiton.config.plugin.templates.ApplicationConfigTransformer; import org.nuiton.config.plugin.templates.ApplicationConfigTransformerConfig; import org.nuiton.eugene.DefaultTemplateConfiguration; @@ -43,9 +43,9 @@ import org.nuiton.eugene.Template; import org.nuiton.eugene.models.object.xml.ObjectModelImpl; import org.nuiton.plugin.AbstractPlugin; import org.nuiton.plugin.PluginHelper; -import org.nuiton.plugin.PluginWithEncoding; import java.io.File; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -63,7 +63,7 @@ import static java.util.Arrays.asList; * @since 3.0 */ @Mojo(name = "generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES, requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME) -public class GenerateMojo extends AbstractPlugin implements PluginWithEncoding, ApplicationConfigTransformerConfig { +public class GenerateMojo extends AbstractPlugin implements ApplicationConfigTransformerConfig { /** * To set the package fully qualified name of the generated class. @@ -110,13 +110,13 @@ public class GenerateMojo extends AbstractPlugin implements PluginWithEncoding, private String actionsClassName; /** - * Pour générer le provider de configuration. + * To generate configuration provider classes. */ @Parameter(property = "config.generateProvider", defaultValue = "true") private boolean generateProvider; /** - * Pour utiliser l'API de nuiton-i18n pour traduire les descriptions dans le code généré. + * To use nuiton-i18n API to translate descriptions in generate code. */ @Parameter(property = "config.useNuitonI18n") private boolean useNuitonI18n; @@ -155,15 +155,6 @@ public class GenerateMojo extends AbstractPlugin implements PluginWithEncoding, private boolean verbose; /** - * Encoding to be used for generation of files. - * <p> - * <b>Note:</b> If nothing is filled here, we will use the system - * property {@code file.encoding}. - */ - @Parameter(property = "config.encoding", defaultValue = "${project.build.sourceEncoding}") - private String encoding; - - /** * Maven project. */ @Parameter(defaultValue = "${project}", readonly = true) @@ -189,7 +180,7 @@ public class GenerateMojo extends AbstractPlugin implements PluginWithEncoding, } - if (modelFile==null) { + if (modelFile == null) { modelFile = new File(modelDirectory, modelName + ".yml"); } @@ -242,11 +233,11 @@ public class GenerateMojo extends AbstractPlugin implements PluginWithEncoding, getLog().info("Config provider class name: " + configClassName); } - configModel = ConfigModelReader.read(modelFile.toPath()); + configModel = ConfigModelUtil.read(modelFile.toPath()); Properties templateProperties = new Properties(); - templateProperties.put(Template.PROP_ENCODING, getEncoding()); + templateProperties.put(Template.PROP_ENCODING, StandardCharsets.UTF_8.name()); templateProperties.put(Template.PROP_VERBOSE, verbose); templateProperties.put(Template.PROP_OVERWRITE, true); templateProperties.put(Template.PROP_CLASS_LOADER, loader); @@ -300,16 +291,6 @@ public class GenerateMojo extends AbstractPlugin implements PluginWithEncoding, } @Override - public String getEncoding() { - return encoding; - } - - @Override - public void setEncoding(String encoding) { - this.encoding = encoding; - } - - @Override public void setProject(MavenProject project) { this.project = project; } diff --git a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/ConfigModel.java b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/ConfigModel.java index 980b7a2..c40d0c2 100644 --- a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/ConfigModel.java +++ b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/ConfigModel.java @@ -22,6 +22,7 @@ package org.nuiton.config.plugin.model; * #L% */ +import java.util.LinkedList; import java.util.List; /** @@ -33,8 +34,8 @@ import java.util.List; public class ConfigModel { private String description; - private List<OptionModel> options; - private List<ActionModel> actions; + private LinkedList<OptionModel> options; + private LinkedList<ActionModel> actions; public String getDescription() { return description; @@ -44,19 +45,19 @@ public class ConfigModel { this.description = description; } - public List<OptionModel> getOptions() { + public LinkedList<OptionModel> getOptions() { return options; } - public void setOptions(List<OptionModel> options) { + public void setOptions(LinkedList<OptionModel> options) { this.options = options; } - public List<ActionModel> getActions() { + public LinkedList<ActionModel> getActions() { return actions; } - public void setActions(List<ActionModel> actions) { + public void setActions(LinkedList<ActionModel> actions) { this.actions = actions; } } diff --git a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/ConfigModelReader.java b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/ConfigModelUtil.java similarity index 78% rename from nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/ConfigModelReader.java rename to nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/ConfigModelUtil.java index 45692dc..a25a7ec 100644 --- a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/ConfigModelReader.java +++ b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/ConfigModelUtil.java @@ -24,11 +24,10 @@ package org.nuiton.config.plugin.model; import com.esotericsoftware.yamlbeans.YamlConfig; import com.esotericsoftware.yamlbeans.YamlReader; -import org.nuiton.config.plugin.model.ActionModel; -import org.nuiton.config.plugin.model.ConfigModel; -import org.nuiton.config.plugin.model.OptionModel; +import com.esotericsoftware.yamlbeans.YamlWriter; import java.io.Reader; +import java.io.Writer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; @@ -39,7 +38,7 @@ import java.nio.file.Path; * @author Tony Chemit - chemit@codelutin.com * @since 3.0 */ -public class ConfigModelReader { +public class ConfigModelUtil { public static ConfigModel read(Path file) { @@ -52,6 +51,19 @@ public class ConfigModelReader { } } + public static void write(ConfigModel configModel, Path file) { + + + try (Writer fileWriter = Files.newBufferedWriter(file, StandardCharsets.UTF_8)) { + YamlWriter writer = new YamlWriter(fileWriter, createConfig()); + writer.write(configModel); + fileWriter.flush(); + writer.close(); + } catch (Exception e) { + throw new RuntimeException("Could not write config model to file: " + file, e); + } + } + private static YamlConfig createConfig() { YamlConfig yamlConfig = new YamlConfig(); diff --git a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/OptionModel.java b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/OptionModel.java index d984cf5..9e9aaea 100644 --- a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/OptionModel.java +++ b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/OptionModel.java @@ -22,6 +22,9 @@ package org.nuiton.config.plugin.model; * #L% */ +import org.nuiton.config.ConfigOptionDef; +import org.nuiton.eugene.GeneratorUtil; +import org.nuiton.util.ObjectUtil; import org.nuiton.version.Version; import javax.swing.KeyStroke; @@ -44,7 +47,7 @@ public class OptionModel { private String name; private String key; private String description; - private Class<?> type; + private String type; private String defaultValue; private boolean _transient; private boolean _final; @@ -74,91 +77,118 @@ public class OptionModel { } public String getType() { - return type == null ? null : type.getName(); + return type; } public void setType(String type) { switch (type) { case "string": - this.type = String.class; + this.type = String.class.getName(); break; case "int": - this.type = int.class; + this.type = int.class.getName(); break; case "Integer": - this.type = Integer.class; + this.type = Integer.class.getName(); break; case "float": - this.type = float.class; + this.type = float.class.getName(); break; case "Float": - this.type = Float.class; + this.type = Float.class.getName(); break; case "long": - this.type = long.class; + this.type = long.class.getName(); break; case "Long": - this.type = Long.class; + this.type = Long.class.getName(); break; case "double": - this.type = double.class; + this.type = double.class.getName(); break; case "Double": - this.type = Double.class; + this.type = Double.class.getName(); break; case "boolean": - this.type = boolean.class; + this.type = boolean.class.getName(); break; case "Boolean": - this.type = Boolean.class; + this.type = Boolean.class.getName(); break; case "byte": - this.type = byte.class; + this.type = byte.class.getName(); break; case "Byte": - this.type = Byte.class; + this.type = Byte.class.getName(); break; case "char": - this.type = char.class; + this.type = char.class.getName(); break; case "Character": - this.type = Character.class; + this.type = Character.class.getName(); break; case "file": - this.type = File.class; + this.type = File.class.getName(); break; case "version": - this.type = Version.class; + this.type = Version.class.getName(); break; case "color": - this.type = Color.class; + this.type = Color.class.getName(); break; case "keystroke": - this.type = KeyStroke.class; + this.type = KeyStroke.class.getName(); break; case "url": - this.type = URL.class; + this.type = URL.class.getName(); break; case "date": - this.type = Date.class; + this.type = Date.class.getName(); break; case "time": - this.type = Time.class; + this.type = Time.class.getName(); break; case "timestamp": - this.type = Timestamp.class; + this.type = Timestamp.class.getName(); break; default: - try { - this.type = Class.forName(type); - } catch (ClassNotFoundException e) { - throw new RuntimeException("Could not find class: " + type, e); - } + this.type = type; break; } } + public void setType(Class type) { + + + if (type.equals(String.class)) { + this.type="string"; + } else if (type.isPrimitive()) { + this.type=type.getSimpleName(); + } else if (ObjectUtil.isPrimitive(type)) { + this.type=type.getSimpleName(); + } else if (type.equals(File.class)) { + this.type="file"; + } else if (type.equals(Version.class)) { + this.type="version"; + } else if (type.equals(Color.class)) { + this.type="color"; + } else if (type.equals(KeyStroke.class)) { + this.type="keystroke"; + } else if (type.equals(URL.class)) { + this.type="url"; + } else if (type.equals(Date.class)) { + this.type="date"; + } else if (type.equals(Time.class)) { + this.type="time"; + } else if (type.equals(Timestamp.class)) { + this.type="timestamp"; + } else { + this.type= type.getName(); + } + + } + public String getDefaultValue() { return defaultValue; } @@ -182,4 +212,22 @@ public class OptionModel { public void setFinal(boolean _final) { this._final = _final; } + + public static OptionModel of(ConfigOptionDef configOptionDef) { + OptionModel optionModel = new OptionModel(); + + if (configOptionDef instanceof Enum) { + Enum optionDef = (Enum) configOptionDef; + + optionModel.setName(GeneratorUtil.convertConstantNameToVariableName(optionDef.name())); + + } + optionModel.setKey(configOptionDef.getKey()); + optionModel.setType(configOptionDef.getType()); + optionModel.setDefaultValue(configOptionDef.getDefaultValue()); + optionModel.setDescription(configOptionDef.getDescription()); + optionModel.setTransient(configOptionDef.isTransient()); + optionModel.setFinal(configOptionDef.isFinal()); + return optionModel; + } } diff --git a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/templates/ApplicationConfigTransformer.java b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/templates/ApplicationConfigTransformer.java index fde1929..f86297d 100644 --- a/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/templates/ApplicationConfigTransformer.java +++ b/nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/templates/ApplicationConfigTransformer.java @@ -24,6 +24,7 @@ package org.nuiton.config.plugin.templates; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableSet; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codehaus.plexus.util.StringUtils; @@ -65,6 +66,7 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { private static final Log log = LogFactory.getLog(ApplicationConfigTransformer.class); public static final String PROP_CONFIG = "config"; + private ApplicationConfigTransformerConfig config; @Override @@ -84,10 +86,11 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { String actionsClassName = config.getActionsClassName(); List<ActionModel> actions = configModel.getActions(); + boolean withActions = CollectionUtils.isNotEmpty(actions); String abstractClassName = "Generated" + configClassName; - generateConfigAbstractClass(packageName, abstractClassName, optionsClassName, actionsClassName, options); + generateConfigAbstractClass(packageName, abstractClassName, optionsClassName, actionsClassName, options, withActions); if (canGenerate(packageName + "." + configClassName)) { @@ -104,7 +107,7 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { if (config.isGenerateProvider()) { String abstractProviderClassName = "Generated" + configProviderClassName; - generateProviderAbstractClass(packageName, abstractProviderClassName, configClassName, optionsClassName, actionsClassName, useNuitonI18n, configModel.getDescription()); + generateProviderAbstractClass(packageName, abstractProviderClassName, configClassName, optionsClassName, actionsClassName, useNuitonI18n, configModel.getDescription(), withActions); if (canGenerate(packageName + "." + configProviderClassName)) { @@ -118,8 +121,8 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { generateOptionsClass(packageName, useNuitonI18n, optionsClassName, options); } - if (canGenerate(packageName + "." + actionsClassName)) { - generateActionsClass(packageName, actionsClassName, actions); + if (withActions && canGenerate(packageName + "." + actionsClassName)) { + generateActionsClass(packageName, actionsClassName, actions, useNuitonI18n); } @@ -132,6 +135,11 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { if (useNuitonI18n) { addImport(output, I18n.class); } + + if (log.isInfoEnabled()) { + log.info("Generate " + output.getQualifiedName()); + } + for (OptionModel option : options) { String literalName = GeneratorUtil.convertVariableNameToConstantName(option.getName()); @@ -272,12 +280,19 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { } - private void generateActionsClass(String packageName, String actionsClassName, List<ActionModel> actions) { - + private void generateActionsClass(String packageName, String actionsClassName, List<ActionModel> actions, boolean useNuitonI18n) { ObjectModelEnumeration output = createEnumeration(actionsClassName, packageName); addInterface(output, ConfigActionDef.class); + if (log.isInfoEnabled()) { + log.info("Generate " + output.getQualifiedName()); + } + + if (useNuitonI18n) { + addImport(output, I18n.class); + } + for (ActionModel action : actions) { String literalName = GeneratorUtil.convertVariableNameToConstantName(action.getName()); @@ -286,22 +301,29 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { if (action.getAliases().length > 0) { aliases = ", \"" + Joiner.on("\", \"").join(action.getAliases()) + "\""; } + String description = "\"" + action.getDescription() + "\""; + if (useNuitonI18n) { + description = "I18n.n(" + description + ")"; + } String literal = "" /*{ - <%=literalName%> ( "<%=action.getAction()%>"<%=aliases%> )}*/; + <%=literalName%> ( "<%=action.getAction()%>", <%=description%><%=aliases%> )}*/; addLiteral(output, literal); } addAttribute(output, "action", String.class, null, ObjectModelJavaModifier.PRIVATE, ObjectModelJavaModifier.FINAL); + addAttribute(output, "description", String.class, null, ObjectModelJavaModifier.PRIVATE, ObjectModelJavaModifier.FINAL); addAttribute(output, "aliases", "String[]", null, ObjectModelJavaModifier.PRIVATE, ObjectModelJavaModifier.FINAL); ObjectModelOperation constructor = addConstructor(output, ObjectModelJavaModifier.PACKAGE); addParameter(constructor, String.class, "action"); + addParameter(constructor, String.class, "description"); addParameter(constructor, "String...", "aliases"); setOperationBody(constructor, "" /*{ this.action = action; + this.description = description; this.aliases = aliases; }*/ ); @@ -323,9 +345,21 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { }*/ ); + ObjectModelOperation getDescription = addOperation( + output, "getDescription", String.class, ObjectModelJavaModifier.PUBLIC); + addAnnotation(output, getDescription, Override.class); + String descriptionValue = "description"; + if (useNuitonI18n) { + descriptionValue = "I18n.t(" + descriptionValue + ")"; + } + setOperationBody(getDescription, "" + /*{ + return <%=descriptionValue%>; + }*/ + ); } - private void generateProviderAbstractClass(String packageName, String providerClassName, String className, String optionClassName, String actionClassName, boolean useNuitonI18n, String description) { + private void generateProviderAbstractClass(String packageName, String providerClassName, String className, String optionClassName, String actionClassName, boolean useNuitonI18n, String description, boolean withActions) { ObjectModelClass output = createAbstractClass(providerClassName, packageName); addInterface(output, ApplicationConfigProvider.class); @@ -343,6 +377,10 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { }*/ ); + if (useNuitonI18n) { + addImport(output, I18n.class); + } + String optionClassSimpleName = GeneratorUtil.getSimpleName(optionClassName); ObjectModelOperation getOptions = addOperation( @@ -354,27 +392,27 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { }*/ ); - if (actionClassName == null) { + if (withActions) { + + String actionClassSimpleName = GeneratorUtil.getSimpleName(actionClassName); - addImport(output, ConfigActionDef.class); ObjectModelOperation getActions = addOperation( - output, "getActions", "ConfigActionDef[]", ObjectModelJavaModifier.PUBLIC); + output, "getActions", actionClassName + "[]", ObjectModelJavaModifier.PUBLIC); addAnnotation(output, getActions, Override.class); setOperationBody(getActions, "" /*{ - return new ConfigActionDef[0]; + return <%=actionClassSimpleName%>.values(); }*/ ); } else { - String actionClassSimpleName = GeneratorUtil.getSimpleName(actionClassName); - + addImport(output, ConfigActionDef.class); ObjectModelOperation getActions = addOperation( - output, "getActions", actionClassName + "[]", ObjectModelJavaModifier.PUBLIC); + output, "getActions", "ConfigActionDef[]", ObjectModelJavaModifier.PUBLIC); addAnnotation(output, getActions, Override.class); setOperationBody(getActions, "" /*{ - return <%=actionClassSimpleName%>.values(); + return new ConfigActionDef[0]; }*/ ); } @@ -408,7 +446,7 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { } - private void generateConfigAbstractClass(String packageName, String abstractClassName, String optionClassName, String actionClassName, List<OptionModel> options) { + private void generateConfigAbstractClass(String packageName, String abstractClassName, String optionClassName, String actionClassName, List<OptionModel> options, boolean withActions) { String optionClassSimpleName = GeneratorUtil.getSimpleName(optionClassName); @@ -439,7 +477,7 @@ public class ApplicationConfigTransformer extends ObjectModelTransformerToJava { this.applicationConfig.loadDefaultOptions(<%=optionClassSimpleName%>.values()); }*/ ); - if (actionClassName != null) { + if (withActions) { addImport(output, actionClassName); String actionClassSimpleName = GeneratorUtil.getSimpleName(actionClassName); builder.append("" diff --git a/nuiton-config-maven-plugin/src/test/java/org/nuiton/config/plugin/parser/yml/ConfigModelReaderTest.java b/nuiton-config-maven-plugin/src/test/java/org/nuiton/config/plugin/parser/yml/ConfigModelUtilTest.java similarity index 96% rename from nuiton-config-maven-plugin/src/test/java/org/nuiton/config/plugin/parser/yml/ConfigModelReaderTest.java rename to nuiton-config-maven-plugin/src/test/java/org/nuiton/config/plugin/parser/yml/ConfigModelUtilTest.java index 9844c6f..b7bc295 100644 --- a/nuiton-config-maven-plugin/src/test/java/org/nuiton/config/plugin/parser/yml/ConfigModelReaderTest.java +++ b/nuiton-config-maven-plugin/src/test/java/org/nuiton/config/plugin/parser/yml/ConfigModelUtilTest.java @@ -26,7 +26,7 @@ import org.junit.Assert; import org.junit.Test; import org.nuiton.config.plugin.model.ActionModel; import org.nuiton.config.plugin.model.ConfigModel; -import org.nuiton.config.plugin.model.ConfigModelReader; +import org.nuiton.config.plugin.model.ConfigModelUtil; import org.nuiton.config.plugin.model.OptionModel; import java.io.File; @@ -39,14 +39,14 @@ import java.util.List; * * @author Tony Chemit - chemit@codelutin.com */ -public class ConfigModelReaderTest { +public class ConfigModelUtilTest { @Test public void read() throws Exception { Path path = Paths.get(new File("").getAbsolutePath(), "src", "test", "resources", "NuitonConfigExample.yml"); - ConfigModel configModel = ConfigModelReader.read(path); + ConfigModel configModel = ConfigModelUtil.read(path); Assert.assertNotNull(configModel); Assert.assertEquals("Exemple de configuration", configModel.getDescription()); -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.