branch develop updated (21d80ef -> fc2b6a9)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository nuiton-config. See https://gitlab.nuiton.org/nuiton/nuiton-config.git from 21d80ef Fix bad module links new 44b0cfc Add ConfigActionDef#getDescription method (Fixes #4054) new fc2b6a9 New goal to describe an existing configuration (Fixes #4055) + some fix on transformer The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: 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 commit 44b0cfc9b4edd04acf2645c667f8674e479132b6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Oct 1 20:22:07 2016 +0200 Add ConfigActionDef#getDescription method (Fixes #4054) Summary of changes: .../org/nuiton/config/plugin/DescribeMojo.java | 191 +++++++++++++++++++++ .../org/nuiton/config/plugin/GenerateMojo.java | 35 +--- .../nuiton/config/plugin/model/ActionModel.java | 18 +- .../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 +- .../java/org/nuiton/config/ConfigActionDef.java | 4 + 9 files changed, 378 insertions(+), 91 deletions(-) create mode 100644 nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/DescribeMojo.java rename nuiton-config-maven-plugin/src/main/java/org/nuiton/config/plugin/model/{ConfigModelReader.java => ConfigModelUtil.java} (78%) rename nuiton-config-maven-plugin/src/test/java/org/nuiton/config/plugin/parser/yml/{ConfigModelReaderTest.java => ConfigModelUtilTest.java} (96%) -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
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>.
participants (1)
-
nuiton.org scm