branch develop updated (7304ade -> 7583bad)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git from 7304ade Add new property modelExtensionFile on generate mojo + use it to load extension model (Fixes #4017) new bbeefd4 Extract ModelBean and his builder + clean mojo new bce8088 Review parser api introducing strictLoading to avoid exception for people with no fear... new 339bb65 New mojo to convert new object model extension files to old format new 7583bad Add a mojo to transform new object model extension files to old model extension file (Fixes #4018) Merge branch 'feature/4018' into develop The 4 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 7583bade77bebcb16a3fa45669f5354fd7168210 Merge: 7304ade 339bb65 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Sep 10 13:09:14 2016 +0200 Add a mojo to transform new object model extension files to old model extension file (Fixes #4018) Merge branch 'feature/4018' into develop 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 commit bce80881b094b16292c81de288f4cfa84b376ac7 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Sep 10 13:08:13 2016 +0200 Review parser api introducing strictLoading to avoid exception for people with no fear... commit bbeefd4c70be5a65c5b20694187bb6f98bbb0bee Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Sep 10 13:07:25 2016 +0200 Extract ModelBean and his builder + clean mojo Summary of changes: .../TransformCompactToFlatPropertiesMojo.java | 189 +++++++++++ .../TransformFlatPropertiesToCompactMojo.java | 355 ++++----------------- .../plugin/modelextension/AttributeBean.java | 13 + .../eugene/plugin/modelextension/ClassBean.java | 62 ++++ .../eugene/plugin/modelextension/ElementBean.java | 50 +++ .../eugene/plugin/modelextension/ModelBean.java | 74 +++++ .../plugin/modelextension/ModelBeanBuilder.java | 148 +++++++++ .../eugene/plugin/modelextension/PackageBean.java | 14 + .../extension/CompactModelExtensionFileParser.java | 9 +- .../extension/FlatModelExtensionFileParser.java | 8 +- .../reader/extension/LoadModelExtension.java | 6 +- .../extension/ModelExtensionFileParserFactory.java | 17 +- 12 files changed, 628 insertions(+), 317 deletions(-) create mode 100644 eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TransformCompactToFlatPropertiesMojo.java create mode 100644 eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/AttributeBean.java create mode 100644 eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ClassBean.java create mode 100644 eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ElementBean.java create mode 100644 eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBean.java create mode 100644 eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBeanBuilder.java create mode 100644 eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/PackageBean.java -- 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 eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit bbeefd4c70be5a65c5b20694187bb6f98bbb0bee Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Sep 10 13:07:25 2016 +0200 Extract ModelBean and his builder + clean mojo --- .../TransformFlatPropertiesToCompactMojo.java | 355 ++++----------------- .../plugin/modelextension/AttributeBean.java | 13 + .../eugene/plugin/modelextension/ClassBean.java | 62 ++++ .../eugene/plugin/modelextension/ElementBean.java | 50 +++ .../eugene/plugin/modelextension/ModelBean.java | 74 +++++ .../plugin/modelextension/ModelBeanBuilder.java | 148 +++++++++ .../eugene/plugin/modelextension/PackageBean.java | 14 + 7 files changed, 415 insertions(+), 301 deletions(-) diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TransformFlatPropertiesToCompactMojo.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TransformFlatPropertiesToCompactMojo.java index e5ea74f..51c907c 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TransformFlatPropertiesToCompactMojo.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TransformFlatPropertiesToCompactMojo.java @@ -1,98 +1,70 @@ package org.nuiton.eugene.plugin; import com.google.common.io.Files; -import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.SystemUtils; 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.eugene.models.object.reader.extension.ModelExtensionFileParser; -import org.nuiton.eugene.models.object.reader.extension.ModelExtensionFileParserCallback; -import org.nuiton.eugene.models.object.reader.extension.ModelExtensionFileParserFactory; -import org.nuiton.eugene.models.stereotype.InvalidStereotypeSyntaxException; -import org.nuiton.eugene.models.stereotype.StereotypeAble; -import org.nuiton.eugene.models.tagvalue.InvalidTagValueSyntaxException; -import org.nuiton.eugene.models.tagvalue.TagValueAble; +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.io.IOException; -import java.io.Writer; -import java.nio.charset.StandardCharsets; +import java.nio.charset.Charset; import java.util.Map; import java.util.Set; -import java.util.TreeMap; -import java.util.TreeSet; /** + * To a transform some object model extension files in flat properties format to a single file in compact format. + * * Created on 09/09/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 */ -@Mojo(name = "transform-flat-properties-to-compact", requiresDependencyResolution = ResolutionScope.COMPILE) +@Mojo(name = "transform-flat-properties-to-compact") public class TransformFlatPropertiesToCompactMojo extends AbstractPlugin { /** - * Pour activer le mode verbeux. - * - * @since 2.0.0 - */ - @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}. - * - * @since 2.0.0 + * Name of model (the generated file name is {@code modelName.objectmodel-ext}). */ - @Parameter(property = "eugene.encoding", defaultValue = "${project.build.sourceEncoding}") - protected String encoding; + @Parameter(property = "eugene.modelName", required = true) + protected String modelName; /** - * Ne génère rien, analyse juste la configuration. - * - * @since 2.0.0 + * Where to find and generate files. */ - @Parameter(property = "eugene.dryRun", defaultValue = "false") - protected boolean dryRun; + @Parameter(property = "eugene.directory", defaultValue = "${project.basedir}/src/main/xmi", required = true) + protected File directory; /** * Maven project. - * - * @since 2.0.0 */ @Parameter(defaultValue = "${project}", readonly = true) protected MavenProject project; /** - * The type of model to be used. - * - * By default, use an {@code objectmodel}. - * - * @required + * Display transformation result, but do not generate file. */ - @Parameter(property = "eugene.modelType", defaultValue = "xmlobjectmodel", required = true) - protected String modelType; + @Parameter(property = "eugene.dryRun") + protected boolean dryRun; /** - * Where to find model properties files. + * Verbose mode. */ - @Parameter(property = "eugene.inputDirectory", defaultValue = "${project.basedir}/src/main/xmi", required = true) - protected File inputDirectory; + @Parameter(property = "eugene.verbose", defaultValue = "${maven.verbose}") + protected boolean verbose; /** - * Where to generate yaml file. + * 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.outputDirectory", defaultValue = "${project.basedir}/src/main/xmi", required = true) - protected File outputDirectory; - - @Parameter(property = "eugene.modelName", required = true) - protected String modelName; + @Parameter(property = "eugene.encoding", defaultValue = "${project.build.sourceEncoding}") + protected String encoding; protected File[] inputFiles; protected File outputFile; @@ -101,7 +73,9 @@ public class TransformFlatPropertiesToCompactMojo extends AbstractPlugin { @Override protected void init() throws Exception { - inputFiles = inputDirectory.listFiles(new FilenameFilter() { + eol = SystemUtils.LINE_SEPARATOR; + + inputFiles = directory.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(".properties"); @@ -110,38 +84,40 @@ public class TransformFlatPropertiesToCompactMojo extends AbstractPlugin { getLog().info("Found " + inputFiles.length + " model extension properties file(s)."); - outputFile = new File(outputDirectory, modelName + ".objectmodel-ext"); + outputFile = new File(directory, modelName + ".objectmodel-ext"); } @Override protected void doAction() throws Exception { - ModelBeanBuilder modelBeanBuilder = new ModelBeanBuilder(modelName); + ModelBeanBuilder modelBeanBuilder = new ModelBeanBuilder(false, modelName); for (File inputFile : inputFiles) { modelBeanBuilder.addFile(inputFile); } - eol = SystemUtils.LINE_SEPARATOR; ModelBean modelBean = modelBeanBuilder.build(); + getLog().info(modelBeanBuilder.getStereotypeHits() + " stereotype(s) detected."); + getLog().info(modelBeanBuilder.getTagValueHits() + " tag value(s) detected."); + StringBuilder result = new StringBuilder(); result.append("[model]").append(eol); - appendMap(modelBean.tagValues, "", "tagvalues", result); - appendSet(modelBean.stereotypes, "", "stereotypes", result); + appendMap(modelBean.getTagValues(), "", "tagvalues", result); + appendSet(modelBean.getStereotypes(), "", "stereotypes", result); result.append(eol).append("[package]").append(eol); if (modelBean.withPackages()) { - for (PackageBean packageBean : modelBean.packages) { + for (PackageBean packageBean : modelBean.getPackages()) { - result.append(packageBean.name).append(eol); - appendMap(packageBean.tagValues, " ", "tagvalues", result); - appendSet(packageBean.stereotypes, " ", "stereotypes", result); + result.append(packageBean.getName()).append(eol); + appendMap(packageBean.getTagValues(), " ", "tagvalues", result); + appendSet(packageBean.getStereotypes(), " ", "stereotypes", result); } @@ -151,11 +127,11 @@ public class TransformFlatPropertiesToCompactMojo extends AbstractPlugin { if (modelBean.withClasses()) { - for (ClassBean classBean : modelBean.classes) { + for (ClassBean classBean : modelBean.getClasses()) { - result.append(classBean.name).append(eol); - appendMap(classBean.tagValues, " ", "tagvalues", result); - appendSet(classBean.stereotypes, " ", "stereotypes", result); + result.append(classBean.getName()).append(eol); + appendMap(classBean.getTagValues(), " ", "tagvalues", result); + appendSet(classBean.getStereotypes(), " ", "stereotypes", result); appendMap(classBean.getAttributesTagValues(), " ", "attributes.tagvalues", result); appendSet(classBean.getAttributesStereotypes(), " ", "attributes.stereotypes", result); @@ -166,39 +142,16 @@ public class TransformFlatPropertiesToCompactMojo extends AbstractPlugin { if (dryRun) { getLog().info("\n\nDryRun mode\ncontent:\n\n" + result.toString() + "\n\n"); + } else { getLog().info("Generate to: " + outputFile); - Writer writer = Files.newWriter(outputFile, StandardCharsets.UTF_8); - try { - - IOUtils.write(result.toString(), writer); - writer.close(); - - } finally { - IOUtils.closeQuietly(writer); - } + Files.write(result.toString(), outputFile, Charset.forName(encoding)); } } - protected void appendMap(Map<String, String> map, String prefix, String name, StringBuilder result) { - if (!map.isEmpty()) { - for (Map.Entry<String, String> entry : map.entrySet()) { - result.append(prefix).append(entry.getKey()).append(" ").append(entry.getValue()).append(eol); - } - } - } - - protected void appendSet(Set<String> set, String prefix, String name, StringBuilder result) { - if (!set.isEmpty()) { - for (String stereotype : set) { - result.append(prefix).append(stereotype).append(eol); - } - } - } - @Override public MavenProject getProject() { return project; @@ -219,220 +172,20 @@ public class TransformFlatPropertiesToCompactMojo extends AbstractPlugin { this.verbose = verbose; } - public static class ModelBean extends ElementBean { - - Set<PackageBean> packages = new TreeSet<>(); - Set<ClassBean> classes = new TreeSet<>(); - - public ModelBean(String name) { - super(name); - } - - @Override - public boolean isEmpty() { - return super.isEmpty() && classes.isEmpty() && packages.isEmpty(); - } - - public PackageBean getOrCreatePackage(final String packageName) { - - PackageBean result = null; - for (PackageBean packageBean : packages) { - if (packageName.equals(packageBean.name)) { - result = packageBean; - break; - } - } - if (result == null) { - result = new PackageBean(packageName); - packages.add(result); - } - return result; - } - - public ClassBean getOrCreateClass(final String className) { - - ClassBean result = null; - for (ClassBean packageBean : classes) { - if (className.equals(packageBean.name)) { - result = packageBean; - break; - } - } - if (result == null) { - result = new ClassBean(className); - classes.add(result); + protected void appendMap(Map<String, String> map, String prefix, String name, StringBuilder result) { + if (!map.isEmpty()) { + for (Map.Entry<String, String> entry : map.entrySet()) { + result.append(prefix).append(entry.getKey()).append(" ").append(entry.getValue()).append(eol); } - return result; - } - - public AttributeBean getOrCreateClassAttribute(String className, String attributeName) { - ClassBean classBean = getOrCreateClass(className); - return classBean.getOrCreateAttribute(attributeName); - } - - public boolean withClasses() { - return !classes.isEmpty(); - } - - public boolean withPackages() { - return !packages.isEmpty(); - } - } - - public static class PackageBean extends ElementBean { - - public PackageBean(String name) { - super(name); } - } - public static class ClassBean extends ElementBean { - - Set<AttributeBean> attributes = new TreeSet<>(); - - public ClassBean(String name) { - super(name); - } - - @Override - public boolean isEmpty() { - return super.isEmpty() && attributes.isEmpty(); - } - - public Map<String, String> getAttributesTagValues() { - Map<String, String> attributesTagValues = new TreeMap<>(); - for (AttributeBean attributeBean : attributes) { - - for (Map.Entry<String, String> entry : attributeBean.tagValues.entrySet()) { - attributesTagValues.put(attributeBean.name + "." + entry.getKey(), entry.getValue()); - } - } - return attributesTagValues; - } - - public Set<String> getAttributesStereotypes() { - Set<String> attributesStereotypes = new TreeSet<>(); - for (AttributeBean attributeBean : attributes) { - - for (String entry : attributeBean.stereotypes) { - attributesStereotypes.add(attributeBean.name + "." + entry); - } - } - return attributesStereotypes; - } - - public AttributeBean getOrCreateAttribute(String attributeName) { - AttributeBean result = null; - for (AttributeBean attributeBean : attributes) { - if (attributeName.equals(attributeBean.name)) { - result = attributeBean; - break; - } - } - if (result == null) { - result = new AttributeBean(attributeName); - attributes.add(result); + protected void appendSet(Set<String> set, String prefix, String name, StringBuilder result) { + if (!set.isEmpty()) { + for (String stereotype : set) { + result.append(prefix).append(stereotype).append(eol); } - return result; - } - } - - public static class AttributeBean extends ElementBean { - - public AttributeBean(String name) { - super(name); } } - public static class ElementBean implements Comparable<ElementBean> { - final String name; - final Map<String, String> tagValues = new TreeMap<>(); - final Set<String> stereotypes = new TreeSet<>(); - - public ElementBean(String name) { - this.name = name; - } - - @Override - public int compareTo(ElementBean o) { - return name.compareTo(o.name); - } - - public <T extends TagValueAble & StereotypeAble> void load(T tag) { - this.tagValues.putAll(tag.getTagValues()); - this.stereotypes.addAll(tag.getStereotypes()); - } - - public boolean isEmpty() { - return tagValues.isEmpty() && stereotypes.isEmpty(); - } - } - - private static class ModelBeanBuilder implements ModelExtensionFileParserCallback { - - private final ModelExtensionFileParser parser; - private final ModelBean modelBean; - - public ModelBeanBuilder(String modelName) { - this.parser = ModelExtensionFileParserFactory.newFlatPaser(); - this.modelBean = new ModelBean(modelName); - } - - public ModelBean build() { - return modelBean; - } - - @Override - public boolean onModelTagValueFound(String tag, String value) { - modelBean.tagValues.put(tag, value); - return true; - } - - @Override - public boolean onModelStereotypeFound(String stereotype) { - modelBean.stereotypes.add(stereotype); - return true; - } - - @Override - public boolean onPackageTagValueFound(String packageName, String tag, String value) { - modelBean.getOrCreatePackage(packageName).tagValues.put(tag, value); - return true; - } - - @Override - public boolean onPackageStereotypeFound(String packageName, String stereotype) { - modelBean.getOrCreatePackage(packageName).stereotypes.add(stereotype); - return true; - } - - @Override - public boolean onClassTagValueFound(String className, String tag, String value) { - modelBean.getOrCreateClass(className).tagValues.put(tag, value); - return true; - } - - @Override - public boolean onClassStereotypeFound(String className, String stereotype) { - modelBean.getOrCreateClass(className).stereotypes.add(stereotype); - return true; - } - - @Override - public boolean onAttributeTagValueFound(String className, String attributeName, String tag, String value) { - modelBean.getOrCreateClassAttribute(className, attributeName).tagValues.put(tag, value); - return true; - } - - @Override - public boolean onAttributeStereotypeFound(String className, String attributeName, String stereotype) { - modelBean.getOrCreateClassAttribute(className, attributeName).stereotypes.add(stereotype); - return true; - } - - public void addFile(File inputFile) throws InvalidTagValueSyntaxException, InvalidStereotypeSyntaxException, IOException { - parser.parse(inputFile, this); - } - } } diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/AttributeBean.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/AttributeBean.java new file mode 100644 index 0000000..815a068 --- /dev/null +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/AttributeBean.java @@ -0,0 +1,13 @@ +package org.nuiton.eugene.plugin.modelextension; + +/** + * Created on 10/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class AttributeBean extends ElementBean { + + public AttributeBean(String name) { + super(name); + } +} diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ClassBean.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ClassBean.java new file mode 100644 index 0000000..96de618 --- /dev/null +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ClassBean.java @@ -0,0 +1,62 @@ +package org.nuiton.eugene.plugin.modelextension; + +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; + +/** + * Created on 10/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ClassBean extends ElementBean { + + protected final Set<AttributeBean> attributes; + + public ClassBean(String name) { + super(name); + this.attributes = new TreeSet<>(); + } + + public Set<AttributeBean> getAttributes() { + return attributes; + } + + public Map<String, String> getAttributesTagValues() { + Map<String, String> attributesTagValues = new TreeMap<>(); + for (AttributeBean attributeBean : attributes) { + + for (Map.Entry<String, String> entry : attributeBean.tagValues.entrySet()) { + attributesTagValues.put(attributeBean.name + "." + entry.getKey(), entry.getValue()); + } + } + return attributesTagValues; + } + + public Set<String> getAttributesStereotypes() { + Set<String> attributesStereotypes = new TreeSet<>(); + for (AttributeBean attributeBean : attributes) { + + for (String entry : attributeBean.stereotypes) { + attributesStereotypes.add(attributeBean.name + "." + entry); + } + } + return attributesStereotypes; + } + + public AttributeBean getOrCreateAttribute(String attributeName) { + AttributeBean result = null; + for (AttributeBean attributeBean : attributes) { + if (attributeName.equals(attributeBean.name)) { + result = attributeBean; + break; + } + } + if (result == null) { + result = new AttributeBean(attributeName); + attributes.add(result); + } + return result; + } +} diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ElementBean.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ElementBean.java new file mode 100644 index 0000000..d9aa3c8 --- /dev/null +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ElementBean.java @@ -0,0 +1,50 @@ +package org.nuiton.eugene.plugin.modelextension; + +import org.nuiton.eugene.models.stereotype.StereotypeAble; +import org.nuiton.eugene.models.tagvalue.TagValueAble; + +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; + +/** + * Created on 10/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ElementBean implements Comparable<ElementBean> { + + protected final String name; + protected final Map<String, String> tagValues; + protected final Set<String> stereotypes; + + public ElementBean(String name) { + this.name = name; + this.tagValues = new TreeMap<>(); + this.stereotypes = new TreeSet<>(); + } + + public String getName() { + return name; + } + + public Map<String, String> getTagValues() { + return tagValues; + } + + public Set<String> getStereotypes() { + return stereotypes; + } + + @Override + public int compareTo(ElementBean o) { + return name.compareTo(o.name); + } + + public <T extends TagValueAble & StereotypeAble> void load(T tag) { + this.tagValues.putAll(tag.getTagValues()); + this.stereotypes.addAll(tag.getStereotypes()); + } + +} diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBean.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBean.java new file mode 100644 index 0000000..7c69772 --- /dev/null +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBean.java @@ -0,0 +1,74 @@ +package org.nuiton.eugene.plugin.modelextension; + +import java.util.Set; +import java.util.TreeSet; + +/** + * Created on 10/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ModelBean extends ElementBean { + + protected final Set<PackageBean> packages; + protected final Set<ClassBean> classes; + + public ModelBean(String name) { + super(name); + this.packages = new TreeSet<>(); + this.classes = new TreeSet<>(); + } + + public Set<PackageBean> getPackages() { + return packages; + } + + public Set<ClassBean> getClasses() { + return classes; + } + + public PackageBean getOrCreatePackage(final String packageName) { + + PackageBean result = null; + for (PackageBean packageBean : packages) { + if (packageName.equals(packageBean.name)) { + result = packageBean; + break; + } + } + if (result == null) { + result = new PackageBean(packageName); + packages.add(result); + } + return result; + } + + public ClassBean getOrCreateClass(final String className) { + + ClassBean result = null; + for (ClassBean packageBean : classes) { + if (className.equals(packageBean.name)) { + result = packageBean; + break; + } + } + if (result == null) { + result = new ClassBean(className); + classes.add(result); + } + return result; + } + + public AttributeBean getOrCreateClassAttribute(String className, String attributeName) { + ClassBean classBean = getOrCreateClass(className); + return classBean.getOrCreateAttribute(attributeName); + } + + public boolean withClasses() { + return !classes.isEmpty(); + } + + public boolean withPackages() { + return !packages.isEmpty(); + } +} diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBeanBuilder.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBeanBuilder.java new file mode 100644 index 0000000..cd2286b --- /dev/null +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBeanBuilder.java @@ -0,0 +1,148 @@ +package org.nuiton.eugene.plugin.modelextension; + +import org.nuiton.eugene.models.object.reader.extension.ModelExtensionFileParser; +import org.nuiton.eugene.models.object.reader.extension.ModelExtensionFileParserCallback; +import org.nuiton.eugene.models.object.reader.extension.ModelExtensionFileParserFactory; +import org.nuiton.eugene.models.stereotype.InvalidStereotypeSyntaxException; +import org.nuiton.eugene.models.tagvalue.InvalidTagValueSyntaxException; + +import java.io.File; +import java.io.IOException; + +/** + * Created on 10/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ModelBeanBuilder implements ModelExtensionFileParserCallback { + + protected final ModelBean modelBean; + protected int modelStereotypeHits; + protected int modelTagValueHits; + protected int packageStereotypeHits; + protected int packageTagValueHits; + protected int classStereotypeHits; + protected int classTagValueHits; + protected int classAttributeStereotypeHits; + protected int classAttributeTagValueHits; + protected boolean strictLoading; + + public ModelBeanBuilder(boolean strictLoading, String modelName) { + this.modelBean = new ModelBean(modelName); + } + + public ModelBean build() { + return modelBean; + } + + public int getStereotypeHits() { + return modelStereotypeHits + packageStereotypeHits + classStereotypeHits + classAttributeStereotypeHits; + } + + public int getTagValueHits() { + return modelTagValueHits + packageTagValueHits + classTagValueHits + classAttributeTagValueHits; + } + + public int getModelStereotypeHits() { + return modelStereotypeHits; + } + + public int getModelTagValueHits() { + return modelTagValueHits; + } + + public int getPackageStereotypeHits() { + return packageStereotypeHits; + } + + public int getPackageTagValueHits() { + return packageTagValueHits; + } + + public int getClassStereotypeHits() { + return classStereotypeHits; + } + + public int getClassTagValueHits() { + return classTagValueHits; + } + + public int getClassAttributeStereotypeHits() { + return classAttributeStereotypeHits; + } + + public int getClassAttributeTagValueHits() { + return classAttributeTagValueHits; + } + + @Override + public boolean onModelTagValueFound(String tag, String value) { + addTagValue(modelBean, tag, value); + modelTagValueHits++; + return true; + } + + @Override + public boolean onModelStereotypeFound(String stereotype) { + addStereotype(modelBean, stereotype); + modelStereotypeHits++; + return true; + } + + @Override + public boolean onPackageTagValueFound(String packageName, String tag, String value) { + addTagValue(modelBean.getOrCreatePackage(packageName), tag, value); + packageTagValueHits++; + return true; + } + + @Override + public boolean onPackageStereotypeFound(String packageName, String stereotype) { + addStereotype(modelBean.getOrCreatePackage(packageName), stereotype); + packageStereotypeHits++; + return true; + } + + @Override + public boolean onClassTagValueFound(String className, String tag, String value) { + addTagValue(modelBean.getOrCreateClass(className), tag, value); + classTagValueHits++; + return true; + } + + @Override + public boolean onClassStereotypeFound(String className, String stereotype) { + addStereotype(modelBean.getOrCreateClass(className), stereotype); + classStereotypeHits++; + return true; + } + + @Override + public boolean onAttributeTagValueFound(String className, String attributeName, String tag, String value) { + addTagValue(modelBean.getOrCreateClassAttribute(className, attributeName), tag, value); + classAttributeTagValueHits++; + return true; + } + + @Override + public boolean onAttributeStereotypeFound(String className, String attributeName, String stereotype) { + addStereotype(modelBean.getOrCreateClassAttribute(className, attributeName), stereotype); + classAttributeStereotypeHits++; + return true; + } + + public void addFile(File inputFile) throws InvalidTagValueSyntaxException, InvalidStereotypeSyntaxException, IOException { + + ModelExtensionFileParser parser = ModelExtensionFileParserFactory.newParser(strictLoading, inputFile); + parser.parse(inputFile, this); + + } + + protected void addTagValue(ElementBean elementBean, String tag, String value) { + elementBean.getTagValues().put(tag, value); + } + + protected void addStereotype(ElementBean elementBean, String stereotype) { + elementBean.getStereotypes().add(stereotype); + } +} diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/PackageBean.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/PackageBean.java new file mode 100644 index 0000000..64c5af8 --- /dev/null +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/PackageBean.java @@ -0,0 +1,14 @@ +package org.nuiton.eugene.plugin.modelextension; + +/** + * Created on 10/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class PackageBean extends ElementBean { + + public PackageBean(String name) { + super(name); + } + +} -- 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 eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit bce80881b094b16292c81de288f4cfa84b376ac7 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Sep 10 13:08:13 2016 +0200 Review parser api introducing strictLoading to avoid exception for people with no fear... --- .../extension/CompactModelExtensionFileParser.java | 9 ++++++--- .../reader/extension/FlatModelExtensionFileParser.java | 8 +++++++- .../object/reader/extension/LoadModelExtension.java | 6 +++--- .../extension/ModelExtensionFileParserFactory.java | 17 ++++++++--------- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/CompactModelExtensionFileParser.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/CompactModelExtensionFileParser.java index 3f18ac4..bdaa6ba 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/CompactModelExtensionFileParser.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/CompactModelExtensionFileParser.java @@ -21,12 +21,18 @@ public class CompactModelExtensionFileParser implements ModelExtensionFileParser /** Logger. */ private static final Log log = LogFactory.getLog(CompactModelExtensionFileParser.class); + public CompactModelExtensionFileParser(boolean strictLoading) { + this.strictLoading = strictLoading; + } + enum Scope { MODEL, PACKAGE, CLASS } + protected final boolean strictLoading; + protected Scope scope; protected String name; @@ -76,7 +82,6 @@ public class CompactModelExtensionFileParser implements ModelExtensionFileParser // stereotype de package callback.onModelStereotypeFound(line); - } else { // tag value de package @@ -143,8 +148,6 @@ public class CompactModelExtensionFileParser implements ModelExtensionFileParser // tag value de classe callback.onClassTagValueFound(name, attributeOrTagValue, line.substring(index + 1)); - - } else { // tag value d'attribut callback.onAttributeTagValueFound(name, attributeOrTagValue.substring(0, attributeIndex), attributeOrTagValue.substring(attributeIndex + 1), line.substring(index + 1)); diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java index 0f19652..d440782 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java @@ -42,6 +42,12 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { /** Logger. */ private static final Log log = LogFactory.getLog(FlatModelExtensionFileParser.class); + protected final boolean strictLoading; + + public FlatModelExtensionFileParser(boolean strictLoading) { + this.strictLoading = strictLoading; + } + @Override public void parse(File file, ModelExtensionFileParserCallback callback) throws IOException, InvalidStereotypeSyntaxException, InvalidTagValueSyntaxException { @@ -63,7 +69,7 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { } - if (!safe) { + if (strictLoading &&!safe) { String errorMessage = "There is some tag value(s) or stereotype(s) failed to be imported from " + file; throw new InvalidModelPropertiesException(errorMessage); diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/LoadModelExtension.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/LoadModelExtension.java index 8b9d72b..2b95304 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/LoadModelExtension.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/LoadModelExtension.java @@ -44,7 +44,7 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension protected final StereotypeDefinitionProvider stereotypeDefinitionProvider; public static <M extends ObjectModel> void loadForFlatModel(boolean verbose, boolean strictLoading, M model, File modelExtension) throws IOException { - FlatModelExtensionFileParser parser = new FlatModelExtensionFileParser(); + FlatModelExtensionFileParser parser = new FlatModelExtensionFileParser(strictLoading); try { new LoadModelExtension<>(verbose, strictLoading, model).load(modelExtension); } catch (InvalidTagValueSyntaxException | InvalidStereotypeSyntaxException e) { @@ -55,7 +55,7 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension } public static <M extends ObjectModel> void loadForCompactModel(boolean verbose, boolean strictLoading, M model, File modelExtension) throws IOException { - CompactModelExtensionFileParser parser = new CompactModelExtensionFileParser(); + CompactModelExtensionFileParser parser = new CompactModelExtensionFileParser(strictLoading); try { new LoadModelExtension<>(verbose, strictLoading, model).load(modelExtension); } catch (InvalidTagValueSyntaxException | InvalidStereotypeSyntaxException e) { @@ -75,7 +75,7 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension public void load(File modelExtension) throws IOException, InvalidTagValueSyntaxException, InvalidStereotypeSyntaxException { - ModelExtensionFileParser parser = ModelExtensionFileParserFactory.newParser(modelExtension); + ModelExtensionFileParser parser = ModelExtensionFileParserFactory.newParser(strictLoading, modelExtension); parser.parse(modelExtension, this); } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParserFactory.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParserFactory.java index 88e1091..89caf3e 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParserFactory.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParserFactory.java @@ -11,21 +11,20 @@ import java.io.File; */ public class ModelExtensionFileParserFactory { - public static FlatModelExtensionFileParser newFlatPaser() { - return new FlatModelExtensionFileParser(); + public static FlatModelExtensionFileParser newFlatPaser(boolean strictLoading) { + return new FlatModelExtensionFileParser(strictLoading); } - public static CompactModelExtensionFileParser newCompactPaser() { - return new CompactModelExtensionFileParser(); + public static CompactModelExtensionFileParser newCompactPaser(boolean strictLoading) { + return new CompactModelExtensionFileParser(strictLoading); } - - public static ModelExtensionFileParser newParser(File file) { + public static ModelExtensionFileParser newParser(boolean strictLoading, File file) { ModelExtensionFileParser parser; if (file.getName().endsWith(".properties")) { - parser = new FlatModelExtensionFileParser(); - } else if (file.getName().endsWith(".model-ex")) { - parser = new CompactModelExtensionFileParser(); + parser = new FlatModelExtensionFileParser(strictLoading); + } else if (file.getName().endsWith(".objectmodel-ext")) { + parser = new CompactModelExtensionFileParser(strictLoading); } else { throw new NotImplementedException("can't find parser for file: " + file); } -- 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 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>.
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 7583bade77bebcb16a3fa45669f5354fd7168210 Merge: 7304ade 339bb65 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Sep 10 13:09:14 2016 +0200 Add a mojo to transform new object model extension files to old model extension file (Fixes #4018) Merge branch 'feature/4018' into develop .../TransformCompactToFlatPropertiesMojo.java | 189 +++++++++++ .../TransformFlatPropertiesToCompactMojo.java | 355 ++++----------------- .../plugin/modelextension/AttributeBean.java | 13 + .../eugene/plugin/modelextension/ClassBean.java | 62 ++++ .../eugene/plugin/modelextension/ElementBean.java | 50 +++ .../eugene/plugin/modelextension/ModelBean.java | 74 +++++ .../plugin/modelextension/ModelBeanBuilder.java | 148 +++++++++ .../eugene/plugin/modelextension/PackageBean.java | 14 + .../extension/CompactModelExtensionFileParser.java | 9 +- .../extension/FlatModelExtensionFileParser.java | 8 +- .../reader/extension/LoadModelExtension.java | 6 +- .../extension/ModelExtensionFileParserFactory.java | 17 +- 12 files changed, 628 insertions(+), 317 deletions(-) -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm