This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit 339bb654a2b326587976f3123e29a061ce3d341a Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Sep 10 13:08:43 2016 +0200 New mojo to convert new object model extension files to old format --- .../TransformCompactToFlatPropertiesMojo.java | 189 +++++++++++++++++++++ 1 file changed, 189 insertions(+) diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TransformCompactToFlatPropertiesMojo.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TransformCompactToFlatPropertiesMojo.java new file mode 100644 index 0000000..cc34b86 --- /dev/null +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TransformCompactToFlatPropertiesMojo.java @@ -0,0 +1,189 @@ +package org.nuiton.eugene.plugin; + +import com.google.common.base.Joiner; +import com.google.common.io.Files; +import org.apache.commons.lang3.SystemUtils; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; +import org.nuiton.eugene.plugin.modelextension.AttributeBean; +import org.nuiton.eugene.plugin.modelextension.ClassBean; +import org.nuiton.eugene.plugin.modelextension.ModelBean; +import org.nuiton.eugene.plugin.modelextension.ModelBeanBuilder; +import org.nuiton.eugene.plugin.modelextension.PackageBean; +import org.nuiton.plugin.AbstractPlugin; + +import java.io.File; +import java.io.FilenameFilter; +import java.nio.charset.Charset; +import java.util.Map; +import java.util.Set; + +/** + * To a transform some object model extension files in compact format to a single flat properties format. + * + * Created on 09/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 + */ +@Mojo(name = "transform-compact-to-flat-properties") +public class TransformCompactToFlatPropertiesMojo extends AbstractPlugin { + + /** + * Name of model (the generated file name is {@code modelName.properties}). + */ + @Parameter(property = "eugene.modelName", required = true) + protected String modelName; + + /** + * Where to find and generate files. + */ + @Parameter(property = "eugene.directory", defaultValue = "${project.basedir}/src/main/xmi", required = true) + protected File directory; + + /** + * Maven project. + */ + @Parameter(defaultValue = "${project}", readonly = true) + protected MavenProject project; + + /** + * Display transformation result, but do not generate file. + */ + @Parameter(property = "eugene.dryRun") + protected boolean dryRun; + + /** + * Verbose mode. + */ + @Parameter(property = "eugene.verbose", defaultValue = "${maven.verbose}") + protected boolean verbose; + + /** + * Encoding to be used for generation of files. + * + * <b>Note:</b> If nothing is filled here, we will use the system property {@code file.encoding}. + */ + @Parameter(property = "eugene.encoding", defaultValue = "${project.build.sourceEncoding}") + protected String encoding; + + protected File[] inputFiles; + protected File outputFile; + protected String eol; + + @Override + protected void init() throws Exception { + + eol = SystemUtils.LINE_SEPARATOR; + + inputFiles = directory.listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return name.endsWith(".objectmodel-ext"); + } + }); + + getLog().info("Found " + inputFiles.length + " model extension file(s)."); + + outputFile = new File(directory, modelName + ".properties"); + + } + + @Override + protected void doAction() throws Exception { + + ModelBeanBuilder modelBeanBuilder = new ModelBeanBuilder(false, modelName); + + for (File inputFile : inputFiles) { + + modelBeanBuilder.addFile(inputFile); + } + + ModelBean modelBean = modelBeanBuilder.build(); + + getLog().info(modelBeanBuilder.getStereotypeHits() + " stereotype(s) detected."); + getLog().info(modelBeanBuilder.getTagValueHits() + " tag value(s) detected."); + + StringBuilder result = new StringBuilder(); + + appendMap(modelBean.getTagValues(), "model", result); + appendSet(modelBean.getStereotypes(), "model", result); + + if (modelBean.withPackages()) { + + for (PackageBean packageBean : modelBean.getPackages()) { + + appendMap(packageBean.getTagValues(), "package." + packageBean.getName(), result); + appendSet(packageBean.getStereotypes(), "package." + packageBean.getName(), result); + + } + + } + + if (modelBean.withClasses()) { + + for (ClassBean classBean : modelBean.getClasses()) { + + appendMap(classBean.getTagValues(), classBean.getName() + ".class", result); + appendSet(classBean.getStereotypes(), classBean.getName() + ".class", result); + + String prefix = classBean.getName() + ".attribute."; + for (AttributeBean attributeBean : classBean.getAttributes()) { + + appendMap(attributeBean.getTagValues(), prefix + attributeBean.getName(), result); + appendSet(attributeBean.getStereotypes(), prefix + attributeBean.getName(), result); + } + + } + + } + + if (dryRun) { + + getLog().info("\n\nDryRun mode\ncontent:\n\n" + result.toString() + "\n\n"); + + } else { + + getLog().info("Generate to: " + outputFile); + Files.write(result.toString(), outputFile, Charset.forName(encoding)); + + } + + } + + @Override + public MavenProject getProject() { + return project; + } + + @Override + public void setProject(MavenProject project) { + this.project = project; + } + + @Override + public boolean isVerbose() { + return verbose; + } + + @Override + public void setVerbose(boolean verbose) { + this.verbose = verbose; + } + + protected void appendMap(Map<String, String> map, String prefix, StringBuilder result) { + if (!map.isEmpty()) { + for (Map.Entry<String, String> entry : map.entrySet()) { + result.append(prefix).append(".tagValue.").append(entry.getKey()).append("=").append(entry.getValue()).append(eol); + } + } + } + + protected void appendSet(Set<String> set, String prefix, StringBuilder result) { + if (!set.isEmpty()) { + result.append(prefix).append(".stereotype=").append(Joiner.on(',').join(set)).append(eol); + } + } + +} -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.