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 8dccc55d9a88196f7c089e6524d2eecaf9368902 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Oct 9 13:12:09 2016 +0200 Use ini format to describe extension model (Fixes #4065) + review the model extension package --- eugene-maven-plugin/pom.xml | 5 + .../org/nuiton/eugene/plugin/GenerateMojo.java | 2 +- .../TransformCompactToFlatPropertiesMojo.java | 241 -------------------- .../eugene/plugin/TransformExtensionModelMojo.java | 228 +++++++++++++++++++ .../TransformFlatPropertiesToCompactMojo.java | 243 --------------------- .../writer/BaseChainedFileWriterToMemoryModel.java | 6 +- eugene/pom.xml | 5 + .../extension/io/ModelExtensionFileParser.java | 65 ++++++ .../io}/ModelExtensionFileParserCallback.java | 3 +- .../io/ModelExtensionFileParserIniImpl.java | 148 +++++++++++++ .../ModelExtensionFileParserPropertiesImpl.java} | 11 +- .../models/extension/io/ModelExtensionFormat.java | 37 ++++ .../io/ModelExtensionReader.java} | 39 +--- .../models/extension/io/ModelExtensionWriter.java | 31 +++ .../extension/io/ModelExtensionWriterIniImpl.java | 137 ++++++++++++ .../io/ModelExtensionWriterPropertiesImpl.java | 127 +++++++++++ .../models/extension/model/ModelExtension.java | 41 ++-- .../extension/model/ModelExtensionAttribute.java | 7 +- .../extension/model/ModelExtensionBuilder.java | 42 ++-- .../extension/model/ModelExtensionClass.java | 35 +-- .../extension/model/ModelExtensionElement.java | 9 +- .../extension/model/ModelExtensionPackage.java | 7 +- .../object/reader/AbstractObjectModelReader.java | 6 +- .../extension/CompactModelExtensionFileParser.java | 193 ---------------- .../reader/extension/ModelExtensionFileParser.java | 54 ----- .../extension/ModelExtensionFileParserFactory.java | 55 ----- pom.xml | 5 + 27 files changed, 884 insertions(+), 898 deletions(-) diff --git a/eugene-maven-plugin/pom.xml b/eugene-maven-plugin/pom.xml index 733f1b0..637c9c9 100644 --- a/eugene-maven-plugin/pom.xml +++ b/eugene-maven-plugin/pom.xml @@ -112,6 +112,11 @@ </dependency> <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + </dependency> + + <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </dependency> diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java index 4f410be..42aef3b 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java @@ -946,7 +946,7 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon if (template == null) { getLog().warn("template [" + templateName + "] is not " + - "registred via plexus, try to load it directly"); + "registred via plexus, try to read it directly"); try { template = (Template<Model>) Class.forName( templateName, true, loader).newInstance(); 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 deleted file mode 100644 index ae72e57..0000000 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TransformCompactToFlatPropertiesMojo.java +++ /dev/null @@ -1,241 +0,0 @@ -package org.nuiton.eugene.plugin; - -/*- - * #%L - * EUGene :: Maven plugin - * %% - * Copyright (C) 2006 - 2016 CodeLutin - * %% - * 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 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. - * - * <h3>Example of compact format</h3> - * <pre> - * - * [model] - * modeTagValue value - * modelStereotype - * - * [package] - * fr.ird.observe.entities - * packageTagValue value - * packageStereotype - * [class] - * fr.ird.observe.entities.CommentableEntity - * classTagValue value - * classStereotype - * attribute.attributeTagValue value - * attribute.attributeStereotype - * </pre> - * - * <h3>Example of flat properties format</h3> - * <pre> - * model.tagValue.modeTagValue=value - * model.stereotype.modelStereotype - * package.fr.ird.observe.entities.tagValue.packageTagValue=value - * package.fr.ird.observe.entities.stereotype=packageStereotype - * fr.ird.observe.entities.CommentableEntity.class.tagValue.classTagValue=value - * fr.ird.observe.entities.CommentableEntity.class.stereotype=classStereotype - * fr.ird.observe.entities.CommentableEntity.attribute.attribute.tagValue.attributeTagValue=value - * fr.ird.observe.entities.CommentableEntity.attribute.attribute.stereotype=attributeStereotype* - * </pre> - * 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); - } - } - -} diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TransformExtensionModelMojo.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TransformExtensionModelMojo.java new file mode 100644 index 0000000..10bc4f7 --- /dev/null +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TransformExtensionModelMojo.java @@ -0,0 +1,228 @@ +package org.nuiton.eugene.plugin; + +/*- + * #%L + * EUGene :: Maven plugin + * %% + * Copyright (C) 2006 - 2016 CodeLutin + * %% + * 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.io.Files; +import org.apache.commons.io.output.ByteArrayOutputStream; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; +import org.nuiton.eugene.models.extension.io.ModelExtensionFormat; +import org.nuiton.eugene.models.extension.io.ModelExtensionWriter; +import org.nuiton.eugene.models.extension.model.ModelExtension; +import org.nuiton.eugene.models.extension.model.ModelExtensionBuilder; +import org.nuiton.plugin.AbstractPlugin; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FilenameFilter; +import java.io.OutputStreamWriter; +import java.nio.charset.Charset; +import java.util.Arrays; + +/** + * To a transform some object model extension files from an input format to an output format. + * + * Available formats are + * <ul> + * <li>ini</li> + * <li>properties</li> + * </ul> + * <h3>Example of ini format</h3> + * <pre> + * [model] + * modeTagValue=value + * modelStereotype=true + * + * [package fr.ird.observe.entities] + * packageTagValue=value + * packageStereotype=true + * + * [class fr.ird.observe.entities.CommentableEntity] + * classTagValue=value + * classStereotype=true + * attribute.attributeTagValue=value + * attribute.attributeStereotype=true + * </pre> + * <h3>Example of properties format</h3> + * <pre> + * model.tagValue.modeTagValue=value + * model.stereotype.modelStereotype + * package.fr.ird.observe.entities.tagValue.packageTagValue=value + * package.fr.ird.observe.entities.stereotype=packageStereotype + * fr.ird.observe.entities.CommentableEntity.class.tagValue.classTagValue=value + * fr.ird.observe.entities.CommentableEntity.class.stereotype=classStereotype + * fr.ird.observe.entities.CommentableEntity.attribute.attribute.tagValue.attributeTagValue=value + * fr.ird.observe.entities.CommentableEntity.attribute.attribute.stereotype=attributeStereotype* + * </pre> + * Created on 09/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 + */ +@Mojo(name = "transform-extension-model") +public class TransformExtensionModelMojo extends AbstractPlugin { + + /** + * Name of model (the generated file name is {@code modelName.properties}). + */ + @Parameter(property = "modelName", required = true) + protected String modelName; + + /** + * The input format to read extension model. + */ + @Parameter(property = "inputFormat", required = true) + protected String inputFormat; + + /** + * The output format to write extension model. + */ + @Parameter(property = "outputFormat", required = true) + protected String outputFormat; + + /** + * Display transformation result, but do not generate file. + */ + @Parameter(property = "dryRun") + protected boolean dryRun; + + /** + * Verbose mode. + */ + @Parameter(defaultValue = "${maven.verbose}") + protected boolean verbose; + + /** + * 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; + + /** + * 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; + + private File[] inputFiles; + private File outputFile; + + @Override + protected void init() throws Exception { + + try { + ModelExtensionFormat.valueOf(inputFormat); + } catch (IllegalArgumentException e) { + throw new MojoExecutionException("Unknown input format: " + inputFormat + ", must be one of " + Arrays.toString(ModelExtensionFormat.values())); + } + + try { + ModelExtensionFormat.valueOf(outputFormat); + } catch (IllegalArgumentException e) { + throw new MojoExecutionException("Unknown output format: " + outputFormat + ", must be one of " + Arrays.toString(ModelExtensionFormat.values())); + } + + inputFiles = directory.listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return name.endsWith("." + inputFormat); + } + }); + + getLog().info("Found " + inputFiles.length + " model extension file(s)."); + + outputFile = new File(directory, modelName + "." + outputFormat); + + } + + @Override + protected void doAction() throws Exception { + + ModelExtensionBuilder modelExtensionBuilder = new ModelExtensionBuilder(false, modelName); + + for (File inputFile : inputFiles) { + + modelExtensionBuilder.addFile(inputFile); + } + + ModelExtension modelExtension = modelExtensionBuilder.build(); + + getLog().info(modelExtensionBuilder.getStereotypeHits() + " stereotype(s) detected."); + getLog().info(modelExtensionBuilder.getTagValueHits() + " tag value(s) detected."); + + ModelExtensionWriter modelExtensionWriter = ModelExtensionWriter.newWriter(outputFile); + + if (dryRun) { + + String content; + + try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { + try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, Charset.forName(encoding)))) { + modelExtensionWriter.write(modelExtension, writer); + } + content = out.toString(encoding); + } + + getLog().info("\n\nDryRun mode\ncontent:\n\n" + content + "\n\n"); + + } else { + + try (BufferedWriter writer = Files.newWriter(outputFile, Charset.forName(encoding))) { + modelExtensionWriter.write(modelExtension, writer); + } + + } + + } + + @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; + } + +} 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 deleted file mode 100644 index 4747ba9..0000000 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TransformFlatPropertiesToCompactMojo.java +++ /dev/null @@ -1,243 +0,0 @@ -package org.nuiton.eugene.plugin; - -/*- - * #%L - * EUGene :: Maven plugin - * %% - * Copyright (C) 2006 - 2016 CodeLutin - * %% - * 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.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.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 flat properties format to a single file in compact format. - * - * <h3>Example of compact format</h3> - * <pre> - * - * [model] - * modeTagValue value - * modelStereotype - * - * [package] - * fr.ird.observe.entities - * packageTagValue value - * packageStereotype - * [class] - * fr.ird.observe.entities.CommentableEntity - * classTagValue value - * classStereotype - * attribute.attributeTagValue value - * attribute.attributeStereotype - * </pre> - * - * <h3>Example of flat properties format</h3> - * <pre> - * model.tagValue.modeTagValue=value - * model.stereotype.modelStereotype - * package.fr.ird.observe.entities.tagValue.packageTagValue=value - * package.fr.ird.observe.entities.stereotype=packageStereotype - * fr.ird.observe.entities.CommentableEntity.class.tagValue.classTagValue=value - * fr.ird.observe.entities.CommentableEntity.class.stereotype=classStereotype - * fr.ird.observe.entities.CommentableEntity.attribute.attribute.tagValue.attributeTagValue=value - * fr.ird.observe.entities.CommentableEntity.attribute.attribute.stereotype=attributeStereotype* - * </pre> - * Created on 09/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.0 - */ -@Mojo(name = "transform-flat-properties-to-compact") -public class TransformFlatPropertiesToCompactMojo extends AbstractPlugin { - - /** - * Name of model (the generated file name is {@code modelName.objectmodel-ext}). - */ - @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(".properties"); - } - }); - - getLog().info("Found " + inputFiles.length + " model extension properties file(s)."); - - outputFile = new File(directory, modelName + ".objectmodel-ext"); - - } - - @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(); - - result.append("[model]").append(eol); - appendMap(modelBean.getTagValues(), "", "tagvalues", result); - appendSet(modelBean.getStereotypes(), "", "stereotypes", result); - - result.append(eol).append("[package]").append(eol); - - if (modelBean.withPackages()) { - - for (PackageBean packageBean : modelBean.getPackages()) { - - result.append(packageBean.getName()).append(eol); - appendMap(packageBean.getTagValues(), " ", "tagvalues", result); - appendSet(packageBean.getStereotypes(), " ", "stereotypes", result); - - } - - } - - result.append(eol).append("[class]").append(eol); - - if (modelBean.withClasses()) { - - for (ClassBean classBean : modelBean.getClasses()) { - - 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); - - } - - } - - 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, 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); - } - } - } - -} diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java index 06e8fd8..4c54ba2 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java @@ -27,7 +27,7 @@ import org.nuiton.eugene.models.Model; import org.nuiton.eugene.models.extension.tagvalue.InvalidStereotypeSyntaxException; import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; import org.nuiton.eugene.models.object.ObjectModel; -import org.nuiton.eugene.models.object.reader.extension.LoadModelExtension; +import org.nuiton.eugene.models.extension.io.ModelExtensionReader; import org.nuiton.eugene.writer.ChainedFileWriterConfiguration; import org.nuiton.eugene.writer.ChainedFileWriterToMemoryModel; @@ -192,10 +192,10 @@ public abstract class BaseChainedFileWriterToMemoryModel extends BaseChainedFile if (model instanceof ObjectModel && configuration.getModelExtensionFile() != null) { - LoadModelExtension<ObjectModel> loadModelExtension = new LoadModelExtension<>(configuration.isVerbose(), isFailIfUnsafe(), (ObjectModel) model); + ModelExtensionReader<ObjectModel> modelExtensionReader = new ModelExtensionReader<>(configuration.isVerbose(), isFailIfUnsafe(), (ObjectModel) model); try { - loadModelExtension.load(configuration.getModelExtensionFile()); + modelExtensionReader.read(configuration.getModelExtensionFile()); } catch (InvalidTagValueSyntaxException | InvalidStereotypeSyntaxException e) { //FIXME throw new IllegalStateException(e); diff --git a/eugene/pom.xml b/eugene/pom.xml index 9c67f7d..fad51e6 100644 --- a/eugene/pom.xml +++ b/eugene/pom.xml @@ -96,6 +96,11 @@ <artifactId>commons-io</artifactId> </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-configuration2</artifactId> + </dependency> + <!-- jaxen dep --> <dependency> <groupId>jaxen</groupId> diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFileParser.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFileParser.java new file mode 100644 index 0000000..975b1ce --- /dev/null +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFileParser.java @@ -0,0 +1,65 @@ +package org.nuiton.eugene.models.extension.io; + +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * 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 org.apache.commons.lang3.NotImplementedException; +import org.nuiton.eugene.models.extension.tagvalue.InvalidStereotypeSyntaxException; +import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; + +import java.io.File; +import java.io.IOException; + +/** + * Created on 09/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 + */ +public abstract class ModelExtensionFileParser { + + public static ModelExtensionFileParser newParser(boolean strictLoading, File file) { + for (ModelExtensionFormat modelExtensionFormat : ModelExtensionFormat.values()) { + if (file.getName().endsWith("." + modelExtensionFormat.name())) { + return modelExtensionFormat.newParser(strictLoading); + } + } + throw new NotImplementedException("can't find parser for file: " + file); + } + + static final String TAGVALUE = "tagvalue"; + + static final String TAG_VALUE = "tagValue"; + + static final String STEREOTYPE = "stereotype"; + + static final String ATTRIBUTE = "attribute"; + + static final String CLASS = "class"; + + static final String MODEL = "model"; + + static final String PACKAGE = "package"; + + public abstract void parse(File file, ModelExtensionFileParserCallback callback) throws IOException, InvalidStereotypeSyntaxException, InvalidTagValueSyntaxException; +} diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParserCallback.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFileParserCallback.java similarity index 96% rename from eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParserCallback.java rename to eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFileParserCallback.java index 982a019..4547c1a 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParserCallback.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFileParserCallback.java @@ -1,4 +1,4 @@ -package org.nuiton.eugene.models.object.reader.extension; +package org.nuiton.eugene.models.extension.io; /*- * #%L @@ -28,6 +28,7 @@ import org.nuiton.eugene.models.object.ObjectModel; * Created on 09/09/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 */ public interface ModelExtensionFileParserCallback<M extends ObjectModel> { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFileParserIniImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFileParserIniImpl.java new file mode 100644 index 0000000..af3cb2e --- /dev/null +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFileParserIniImpl.java @@ -0,0 +1,148 @@ +package org.nuiton.eugene.models.extension.io; + +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * 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 org.apache.commons.configuration2.INIConfiguration; +import org.apache.commons.configuration2.SubnodeConfiguration; +import org.apache.commons.configuration2.ex.ConfigurationException; +import org.apache.commons.lang3.StringUtils; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Iterator; + +/** + * Created on 09/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 + */ +class ModelExtensionFileParserIniImpl extends ModelExtensionFileParser { + + public ModelExtensionFileParserIniImpl(boolean strictLoading) { + this.strictLoading = strictLoading; + } + + protected final boolean strictLoading; + + @Override + public void parse(File file, ModelExtensionFileParserCallback callback) throws IOException { + + INIConfiguration iniConfiguration = new INIConfiguration(); + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))) { + iniConfiguration.read(reader); + } catch (ConfigurationException e) { + throw new IOException("Could not read ini configuration from file: " + file, e); + } + + SubnodeConfiguration modelSection = iniConfiguration.getSection("model"); + + Iterator<String> modelSectionKeys = modelSection.getKeys(); + while (modelSectionKeys.hasNext()) { + String key = modelSectionKeys.next(); + String value = modelSection.getString(key); + if ("true".equals(value)) { + + // stereotype de package + callback.onModelStereotypeFound(key); + } else { + + // tag value de package + callback.onModelTagValueFound(key, value); + } + } + + for (String sectionName : iniConfiguration.getSections()) { + if (sectionName == null) { + continue; + } + + SubnodeConfiguration section = iniConfiguration.getSection(sectionName); + + if (sectionName.startsWith("package ")) { + String packageName = StringUtils.removeStart(sectionName, "package "); + Iterator<String> keys = section.getKeys(); + while (keys.hasNext()) { + String key = keys.next(); + String value = section.getString(key); + if ("true".equals(value)) { + + // stereotype de package + callback.onPackageStereotypeFound(packageName, key); + } else { + + // tag value de package + callback.onPackageTagValueFound(packageName, key, value); + } + } + + } else if (sectionName.startsWith("class ")) { + + String className = StringUtils.removeStart(sectionName, "class "); + Iterator<String> keys = section.getKeys(); + while (keys.hasNext()) { + + String key = keys.next(); + String value = section.getString(key); + if ("true".equals(value)) { + + // stereotype de package + int attributeIndex = key.indexOf('.'); + if (attributeIndex == -1) { + + // stereotype de classe + callback.onClassStereotypeFound(className, key); + } else { + + // stereotype d'attribut + callback.onAttributeStereotypeFound(className, key.substring(0, attributeIndex), key.substring(attributeIndex + 2)); + } + + } else { + + // tag value de package + int attributeIndex = key.indexOf('.'); + if (attributeIndex == -1) { + + // tag value de classe + callback.onClassTagValueFound(className, key, value); + } else { + // tag value d'attribut + callback.onAttributeTagValueFound(className, key.substring(0, attributeIndex), key.substring(attributeIndex + 2), value); + } + } + + } + + } + + } + + } + +} 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/extension/io/ModelExtensionFileParserPropertiesImpl.java similarity index 95% rename from eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java rename to eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFileParserPropertiesImpl.java index 176f18d..d91a502 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFileParserPropertiesImpl.java @@ -1,4 +1,4 @@ -package org.nuiton.eugene.models.object.reader.extension; +package org.nuiton.eugene.models.extension.io; /*- * #%L @@ -49,15 +49,16 @@ import java.util.regex.Matcher; * Created on 09/09/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 */ -public class FlatModelExtensionFileParser implements ModelExtensionFileParser { +class ModelExtensionFileParserPropertiesImpl extends ModelExtensionFileParser { /** Logger. */ - private static final Log log = LogFactory.getLog(FlatModelExtensionFileParser.class); + private static final Log log = LogFactory.getLog(ModelExtensionFileParserPropertiesImpl.class); protected final boolean strictLoading; - public FlatModelExtensionFileParser(boolean strictLoading) { + public ModelExtensionFileParserPropertiesImpl(boolean strictLoading) { this.strictLoading = strictLoading; } @@ -70,7 +71,7 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { prop.load(inStream); } - // get all the tagvalues keys and sort them + // get all the tagValues keys and sort them List<String> keys = new ArrayList<>(); CollectionUtils.addAll(keys, prop.keys()); Collections.sort(keys); diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFormat.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFormat.java new file mode 100644 index 0000000..bae6c12 --- /dev/null +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionFormat.java @@ -0,0 +1,37 @@ +package org.nuiton.eugene.models.extension.io; + +/** + * Created on 09/10/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 + */ +public enum ModelExtensionFormat { + + ini { + @Override + public ModelExtensionFileParser newParser(boolean strictLoading) { + return new ModelExtensionFileParserIniImpl(strictLoading); + } + + @Override + public ModelExtensionWriter newWriter() { + return new ModelExtensionWriterIniImpl(); + } + }, + properties { + @Override + public ModelExtensionFileParser newParser(boolean strictLoading) { + return new ModelExtensionFileParserPropertiesImpl(strictLoading); + } + + @Override + public ModelExtensionWriter newWriter() { + return new ModelExtensionWriterPropertiesImpl(); + } + }; + + public abstract ModelExtensionFileParser newParser(boolean strictLoading); + + public abstract ModelExtensionWriter newWriter(); +} 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/extension/io/ModelExtensionReader.java similarity index 92% rename from eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/LoadModelExtension.java rename to eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionReader.java index aa639a4..c605968 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/LoadModelExtension.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionReader.java @@ -1,4 +1,4 @@ -package org.nuiton.eugene.models.object.reader.extension; +package org.nuiton.eugene.models.extension.io; /*- * #%L @@ -50,49 +50,28 @@ import java.io.IOException; * Created on 09/09/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 */ -public class LoadModelExtension<M extends ObjectModel> implements ModelExtensionFileParserCallback<M> { +public class ModelExtensionReader<M extends ObjectModel> implements ModelExtensionFileParserCallback<M> { /** Logger. */ - private static final Log log = LogFactory.getLog(LoadModelExtension.class); + private static final Log log = LogFactory.getLog(ModelExtensionReader.class); protected final boolean verbose; protected final boolean strictLoading; protected final M model; protected final TagValueMetadatasProvider tagValueMetadatasProvider; - public static <M extends ObjectModel> void loadForFlatModel(boolean verbose, boolean strictLoading, M model, File modelExtension) throws IOException { - FlatModelExtensionFileParser parser = new FlatModelExtensionFileParser(strictLoading); - try { - new LoadModelExtension<>(verbose, strictLoading, model).load(modelExtension); - } catch (InvalidTagValueSyntaxException | InvalidStereotypeSyntaxException e) { - // FIXME - throw new IllegalStateException(e); - } - - } - - public static <M extends ObjectModel> void loadForCompactModel(boolean verbose, boolean strictLoading, M model, File modelExtension) throws IOException { - CompactModelExtensionFileParser parser = new CompactModelExtensionFileParser(strictLoading); - try { - new LoadModelExtension<>(verbose, strictLoading, model).load(modelExtension); - } catch (InvalidTagValueSyntaxException | InvalidStereotypeSyntaxException e) { - // FIXME - throw new IllegalStateException(e); - } - - } - - public LoadModelExtension(boolean verbose, boolean strictLoading, M model) { + public ModelExtensionReader(boolean verbose, boolean strictLoading, M model) { this.verbose = verbose; this.strictLoading = strictLoading; this.model = model; this.tagValueMetadatasProvider = new AggregateTagValueMetadatasProvider(getClass().getClassLoader()); } - public void load(File modelExtension) throws IOException, InvalidTagValueSyntaxException, InvalidStereotypeSyntaxException { + public void read(File modelExtension) throws IOException, InvalidTagValueSyntaxException, InvalidStereotypeSyntaxException { - ModelExtensionFileParser parser = ModelExtensionFileParserFactory.newParser(strictLoading, modelExtension); + ModelExtensionFileParser parser = ModelExtensionFileParser.newParser(strictLoading, modelExtension); parser.parse(modelExtension, this); } @@ -587,9 +566,7 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension // check on participant attributes if (result == null && clazz instanceof ObjectModelAssociationClassImpl) { if (log.isDebugEnabled()) { - log.debug("Attribute " + name + " not found from " + - clazz.getQualifiedName() + " association class. " + - "Will check participants..."); + log.debug("Attribute " + name + " not found from " + clazz.getQualifiedName() + " association class. Will check participants..."); } ObjectModelAssociationClass assoc = (ObjectModelAssociationClass) clazz; for (ObjectModelAttribute participant : assoc.getParticipantsAttributes()) { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionWriter.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionWriter.java new file mode 100644 index 0000000..6eac596 --- /dev/null +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionWriter.java @@ -0,0 +1,31 @@ +package org.nuiton.eugene.models.extension.io; + +import org.apache.commons.lang3.NotImplementedException; +import org.nuiton.eugene.models.extension.model.ModelExtension; +import org.nuiton.eugene.models.object.ObjectModel; + +import java.io.File; +import java.io.IOException; +import java.io.Writer; + +/** + * Created on 08/10/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 + */ +public abstract class ModelExtensionWriter { + + public static ModelExtensionWriter newWriter(File file) { + for (ModelExtensionFormat modelExtensionFormat : ModelExtensionFormat.values()) { + if (file.getName().endsWith("." + modelExtensionFormat.name())) { + return modelExtensionFormat.newWriter(); + } + } + throw new NotImplementedException("can't find writer for file: " + file); + } + + public abstract void write(ObjectModel model, Writer writer) throws IOException; + + public abstract void write(ModelExtension model, Writer writer) throws IOException; +} diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionWriterIniImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionWriterIniImpl.java new file mode 100644 index 0000000..8e6ef1e --- /dev/null +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionWriterIniImpl.java @@ -0,0 +1,137 @@ +package org.nuiton.eugene.models.extension.io; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.SystemUtils; +import org.nuiton.eugene.models.extension.model.ModelExtension; +import org.nuiton.eugene.models.extension.model.ModelExtensionAttribute; +import org.nuiton.eugene.models.extension.model.ModelExtensionClass; +import org.nuiton.eugene.models.extension.model.ModelExtensionPackage; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelPackage; + +import java.io.IOException; +import java.io.Writer; +import java.util.Map; +import java.util.Set; + +/** + * Created on 08/10/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 + */ +class ModelExtensionWriterIniImpl extends ModelExtensionWriter { + + private final String eol = SystemUtils.LINE_SEPARATOR; + + @Override + public void write(ObjectModel model, Writer writer) throws IOException { + + if (model.getStereotypes().size() > 0 || model.getTagValues().size() > 0) { + writer.append("[model]").append(eol); + appendMap(model.getTagValues(), "", writer); + appendSet(model.getStereotypes(), "", writer); + } + + if (CollectionUtils.isNotEmpty(model.getPackages())) { + + for (ObjectModelPackage packageBean : model.getPackages()) { + + if (packageBean.getStereotypes().size() > 0 || packageBean.getTagValues().size() > 0) { + writer.append(eol).append("[package ").append(packageBean.getName()).append("]").append(eol); + appendMap(packageBean.getTagValues(), "", writer); + appendSet(packageBean.getStereotypes(), "", writer); + } + } + + } + + if (CollectionUtils.isNotEmpty(model.getClasses())) { + + for (ObjectModelClass classBean : model.getClasses()) { + + boolean addSection = classBean.getStereotypes().size() > 0 || classBean.getTagValues().size() > 0; + + if (!addSection) { + + + for (ObjectModelAttribute attributeBean : classBean.getAttributes()) { + + addSection = attributeBean.getStereotypes().size() > 0 || attributeBean.getTagValues().size() > 0; + + if (addSection) { + break; + } + } + + } + + if (addSection) { + + writer.append(eol).append("[class ").append(classBean.getName()).append("]").append(eol); + appendMap(classBean.getTagValues(), "", writer); + appendSet(classBean.getStereotypes(), "", writer); + + for (ObjectModelAttribute attributeBean : classBean.getAttributes()) { + appendMap(attributeBean.getTagValues(), attributeBean.getName() + ".", writer); + appendSet(attributeBean.getStereotypes(), attributeBean.getName() + ".", writer); + } + + } + + } + + } + + } + + @Override + public void write(ModelExtension model, Writer writer) throws IOException { + + writer.append("[model]").append(eol); + appendMap(model.getTagValues(), "", writer); + + if (model.withPackages()) { + + for (ModelExtensionPackage modelExtensionPackage : model.getPackages()) { + writer.append(eol).append("[package ").append(modelExtensionPackage.getName()).append("]").append(eol); + appendMap(modelExtensionPackage.getTagValues(), "", writer); + } + + } + + if (model.withClasses()) { + + for (ModelExtensionClass modelExtensionClass : model.getClasses()) { + + writer.append(eol).append("[class ").append(modelExtensionClass.getName()).append("]").append(eol); + appendMap(modelExtensionClass.getTagValues(), "", writer); + + for (ModelExtensionAttribute modelExtensionAttribute : modelExtensionClass.getAttributes()) { + appendMap(modelExtensionAttribute.getTagValues(), modelExtensionAttribute.getName() + ".", writer); + } + + } + + } + + } + + private void appendMap(Map<String, String> map, String prefix, Writer writer) throws IOException { + if (!map.isEmpty()) { + for (Map.Entry<String, String> entry : map.entrySet()) { + writer.append(prefix).append(entry.getKey()).append(" = ").append(entry.getValue()).append(eol); + } + } + } + + private void appendSet(Set<String> set, String prefix, Writer writer) throws IOException { + if (!set.isEmpty()) { + for (String s : set) { + writer.append(prefix).append(s).append(" = true").append(eol); + } + } + } +} diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionWriterPropertiesImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionWriterPropertiesImpl.java new file mode 100644 index 0000000..5b9b138 --- /dev/null +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/io/ModelExtensionWriterPropertiesImpl.java @@ -0,0 +1,127 @@ +package org.nuiton.eugene.models.extension.io; + +import com.google.common.base.Joiner; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.SystemUtils; +import org.nuiton.eugene.models.extension.model.ModelExtension; +import org.nuiton.eugene.models.extension.model.ModelExtensionAttribute; +import org.nuiton.eugene.models.extension.model.ModelExtensionClass; +import org.nuiton.eugene.models.extension.model.ModelExtensionPackage; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelPackage; + +import java.io.IOException; +import java.io.Writer; +import java.util.Date; +import java.util.Map; +import java.util.Set; + +/** + * Created on 08/10/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 + */ +class ModelExtensionWriterPropertiesImpl extends ModelExtensionWriter { + + private final String eol = SystemUtils.LINE_SEPARATOR; + + @Override + public void write(ObjectModel modelBean, Writer writer) throws IOException { + + writer.append("# Generated by ").append(this.getClass().getName()).append(" at ").append(new Date().toString()).append(eol); + + appendMap(modelBean.getTagValues(), "model.tagValue.", writer); + appendSet(modelBean.getStereotypes(), "model.stereotype", writer); + + if (CollectionUtils.isNotEmpty(modelBean.getPackages())) { + + for (ObjectModelPackage packageBean : modelBean.getPackages()) { + + appendMap(packageBean.getTagValues(), "package.tagValue.", writer); + appendSet(packageBean.getStereotypes(), "package.stereotype", writer); + + } + + } + + if (CollectionUtils.isNotEmpty(modelBean.getClasses())) { + + for (ObjectModelClass classBean : modelBean.getClasses()) { + + String prefix = classBean.getQualifiedName() + ".class."; + appendMap(classBean.getTagValues(), prefix + "tagValue.", writer); + appendSet(classBean.getStereotypes(), prefix + "stereotype", writer); + + for (ObjectModelAttribute attributeBean : classBean.getAttributes()) { + + prefix = classBean.getQualifiedName() + ".attribute." + attributeBean.getName() + "."; + appendMap(attributeBean.getTagValues(), prefix + "tagValue.", writer); + appendSet(attributeBean.getStereotypes(), prefix + "stereotype", writer); + } + + } + + } + + } + + @Override + public void write(ModelExtension model, Writer writer) throws IOException { + + + writer.append("# Generated by ").append(this.getClass().getName()).append(" at ").append(new Date().toString()).append(eol); + + appendMap(model.getTagValues(), "model.tagValue.", writer); + appendSet(model.getStereotypes(), "model.stereotype", writer); + + if (CollectionUtils.isNotEmpty(model.getPackages())) { + + for (ModelExtensionPackage packageBean : model.getPackages()) { + String prefix = "package." + packageBean.getName() + "."; + + appendMap(packageBean.getTagValues(), prefix + "tagValue.", writer); + appendSet(packageBean.getStereotypes(), prefix + "stereotype", writer); + + } + + } + + if (CollectionUtils.isNotEmpty(model.getClasses())) { + + for (ModelExtensionClass classBean : model.getClasses()) { + + String prefix = classBean.getName() + ".class."; + appendMap(classBean.getTagValues(), prefix + "tagValue.", writer); + appendSet(classBean.getStereotypes(), prefix + "stereotype", writer); + + for (ModelExtensionAttribute attributeBean : classBean.getAttributes()) { + prefix = classBean.getName() + ".attribute." + attributeBean.getName() + "."; + appendMap(attributeBean.getTagValues(), prefix + "tagValue.", writer); + appendSet(attributeBean.getStereotypes(), prefix + "stereotype", writer); + } + + } + + } + + } + + private void appendMap(Map<String, String> map, String prefix, Writer writer) throws IOException { + if (!map.isEmpty()) { + for (Map.Entry<String, String> entry : map.entrySet()) { + if (!"true".equals(entry.getValue())) { + writer.append(prefix).append(entry.getKey()).append("=").append(entry.getValue()).append(eol); + } + } + } + } + + private void appendSet(Set<String> set, String prefix, Writer writer) throws IOException { + if (!set.isEmpty()) { + writer.append(prefix).append("=").append(Joiner.on(",").join(set)).append(eol); + } + } +} diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBean.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtension.java similarity index 57% rename from eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBean.java rename to eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtension.java index 108f73e..e42c7af 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBean.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtension.java @@ -1,4 +1,4 @@ -package org.nuiton.eugene.plugin.modelextension; +package org.nuiton.eugene.models.extension.model; /*- * #%L @@ -29,61 +29,62 @@ import java.util.TreeSet; * Created on 10/09/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 */ -public class ModelBean extends ElementBean { +public class ModelExtension extends ModelExtensionElement { - protected final Set<PackageBean> packages; - protected final Set<ClassBean> classes; + protected final Set<ModelExtensionPackage> packages; + protected final Set<ModelExtensionClass> classes; - public ModelBean(String name) { + public ModelExtension(String name) { super(name); this.packages = new TreeSet<>(); this.classes = new TreeSet<>(); } - public Set<PackageBean> getPackages() { + public Set<ModelExtensionPackage> getPackages() { return packages; } - public Set<ClassBean> getClasses() { + public Set<ModelExtensionClass> getClasses() { return classes; } - public PackageBean getOrCreatePackage(final String packageName) { + public ModelExtensionPackage getOrCreatePackage(final String packageName) { - PackageBean result = null; - for (PackageBean packageBean : packages) { - if (packageName.equals(packageBean.name)) { - result = packageBean; + ModelExtensionPackage result = null; + for (ModelExtensionPackage modelExtensionPackage : packages) { + if (packageName.equals(modelExtensionPackage.name)) { + result = modelExtensionPackage; break; } } if (result == null) { - result = new PackageBean(packageName); + result = new ModelExtensionPackage(packageName); packages.add(result); } return result; } - public ClassBean getOrCreateClass(final String className) { + public ModelExtensionClass getOrCreateClass(final String className) { - ClassBean result = null; - for (ClassBean packageBean : classes) { + ModelExtensionClass result = null; + for (ModelExtensionClass packageBean : classes) { if (className.equals(packageBean.name)) { result = packageBean; break; } } if (result == null) { - result = new ClassBean(className); + result = new ModelExtensionClass(className); classes.add(result); } return result; } - public AttributeBean getOrCreateClassAttribute(String className, String attributeName) { - ClassBean classBean = getOrCreateClass(className); - return classBean.getOrCreateAttribute(attributeName); + public ModelExtensionAttribute getOrCreateClassAttribute(String className, String attributeName) { + ModelExtensionClass modelExtensionClass = getOrCreateClass(className); + return modelExtensionClass.getOrCreateAttribute(attributeName); } public boolean withClasses() { diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/AttributeBean.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionAttribute.java similarity index 83% rename from eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/AttributeBean.java rename to eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionAttribute.java index b853257..d6e04c8 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/AttributeBean.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionAttribute.java @@ -1,4 +1,4 @@ -package org.nuiton.eugene.plugin.modelextension; +package org.nuiton.eugene.models.extension.model; /*- * #%L @@ -26,10 +26,11 @@ package org.nuiton.eugene.plugin.modelextension; * Created on 10/09/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 */ -public class AttributeBean extends ElementBean { +public class ModelExtensionAttribute extends ModelExtensionElement { - public AttributeBean(String name) { + public ModelExtensionAttribute(String name) { super(name); } } diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBeanBuilder.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionBuilder.java similarity index 74% rename from eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBeanBuilder.java rename to eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionBuilder.java index fa9d5b6..a430c52 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBeanBuilder.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionBuilder.java @@ -1,4 +1,4 @@ -package org.nuiton.eugene.plugin.modelextension; +package org.nuiton.eugene.models.extension.model; /*- * #%L @@ -22,11 +22,10 @@ package org.nuiton.eugene.plugin.modelextension; * #L% */ +import org.nuiton.eugene.models.extension.io.ModelExtensionFileParser; +import org.nuiton.eugene.models.extension.io.ModelExtensionFileParserCallback; import org.nuiton.eugene.models.extension.tagvalue.InvalidStereotypeSyntaxException; import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; -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 java.io.File; import java.io.IOException; @@ -35,10 +34,11 @@ import java.io.IOException; * Created on 10/09/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 */ -public class ModelBeanBuilder implements ModelExtensionFileParserCallback { +public class ModelExtensionBuilder implements ModelExtensionFileParserCallback { - protected final ModelBean modelBean; + protected final ModelExtension modelExtension; protected int modelStereotypeHits; protected int modelTagValueHits; protected int packageStereotypeHits; @@ -49,12 +49,12 @@ public class ModelBeanBuilder implements ModelExtensionFileParserCallback { protected int classAttributeTagValueHits; protected boolean strictLoading; - public ModelBeanBuilder(boolean strictLoading, String modelName) { - this.modelBean = new ModelBean(modelName); + public ModelExtensionBuilder(boolean strictLoading, String modelName) { + this.modelExtension = new ModelExtension(modelName); } - public ModelBean build() { - return modelBean; + public ModelExtension build() { + return modelExtension; } public int getStereotypeHits() { @@ -99,69 +99,69 @@ public class ModelBeanBuilder implements ModelExtensionFileParserCallback { @Override public boolean onModelTagValueFound(String tag, String value) { - addTagValue(modelBean, tag, value); + addTagValue(modelExtension, tag, value); modelTagValueHits++; return true; } @Override public boolean onModelStereotypeFound(String stereotype) { - addTagValue(modelBean, stereotype, "true"); + addTagValue(modelExtension, stereotype, "true"); modelStereotypeHits++; return true; } @Override public boolean onPackageTagValueFound(String packageName, String tag, String value) { - addTagValue(modelBean.getOrCreatePackage(packageName), tag, value); + addTagValue(modelExtension.getOrCreatePackage(packageName), tag, value); packageTagValueHits++; return true; } @Override public boolean onPackageStereotypeFound(String packageName, String stereotype) { - addTagValue(modelBean.getOrCreatePackage(packageName), stereotype, "true"); + addTagValue(modelExtension.getOrCreatePackage(packageName), stereotype, "true"); packageStereotypeHits++; return true; } @Override public boolean onClassTagValueFound(String className, String tag, String value) { - addTagValue(modelBean.getOrCreateClass(className), tag, value); + addTagValue(modelExtension.getOrCreateClass(className), tag, value); classTagValueHits++; return true; } @Override public boolean onClassStereotypeFound(String className, String stereotype) { - addTagValue(modelBean.getOrCreateClass(className), stereotype, "true"); + addTagValue(modelExtension.getOrCreateClass(className), stereotype, "true"); classStereotypeHits++; return true; } @Override public boolean onAttributeTagValueFound(String className, String attributeName, String tag, String value) { - addTagValue(modelBean.getOrCreateClassAttribute(className, attributeName), tag, value); + addTagValue(modelExtension.getOrCreateClassAttribute(className, attributeName), tag, value); classAttributeTagValueHits++; return true; } @Override public boolean onAttributeStereotypeFound(String className, String attributeName, String stereotype) { - addTagValue(modelBean.getOrCreateClassAttribute(className, attributeName), stereotype, "true"); + addTagValue(modelExtension.getOrCreateClassAttribute(className, attributeName), stereotype, "true"); classAttributeStereotypeHits++; return true; } public void addFile(File inputFile) throws InvalidTagValueSyntaxException, InvalidStereotypeSyntaxException, IOException { - ModelExtensionFileParser parser = ModelExtensionFileParserFactory.newParser(strictLoading, inputFile); + ModelExtensionFileParser parser = ModelExtensionFileParser.newParser(strictLoading, inputFile); parser.parse(inputFile, this); } - protected void addTagValue(ElementBean elementBean, String tag, String value) { - elementBean.getTagValues().put(tag, value); + protected void addTagValue(ModelExtensionElement modelExtensionElement, String tag, String value) { + modelExtensionElement.getTagValues().put(tag, value); } } diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ClassBean.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionClass.java similarity index 57% rename from eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ClassBean.java rename to eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionClass.java index 7fec0ea..1f7264e 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ClassBean.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionClass.java @@ -1,4 +1,4 @@ -package org.nuiton.eugene.plugin.modelextension; +package org.nuiton.eugene.models.extension.model; /*- * #%L @@ -31,27 +31,28 @@ import java.util.TreeSet; * Created on 10/09/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 */ -public class ClassBean extends ElementBean { +public class ModelExtensionClass extends ModelExtensionElement { - protected final Set<AttributeBean> attributes; + protected final Set<ModelExtensionAttribute> attributes; - public ClassBean(String name) { + public ModelExtensionClass(String name) { super(name); this.attributes = new TreeSet<>(); } - public Set<AttributeBean> getAttributes() { + public Set<ModelExtensionAttribute> getAttributes() { return attributes; } public Map<String, String> getAttributesTagValues() { Map<String, String> attributesTagValues = new TreeMap<>(); - for (AttributeBean attributeBean : attributes) { + for (ModelExtensionAttribute modelExtensionAttribute : attributes) { - for (Map.Entry<String, String> entry : attributeBean.tagValues.entrySet()) { + for (Map.Entry<String, String> entry : modelExtensionAttribute.tagValues.entrySet()) { if (!"true".equals(entry.getValue())) { - attributesTagValues.put(attributeBean.name + "." + entry.getKey(), entry.getValue()); + attributesTagValues.put(modelExtensionAttribute.name + "." + entry.getKey(), entry.getValue()); } } } @@ -60,25 +61,25 @@ public class ClassBean extends ElementBean { public Set<String> getAttributesStereotypes() { Set<String> attributesStereotypes = new TreeSet<>(); - for (AttributeBean attributeBean : attributes) { + for (ModelExtensionAttribute modelExtensionAttribute : attributes) { - for (String entry : attributeBean.getStereotypes()) { - attributesStereotypes.add(attributeBean.name + "." + entry); + for (String entry : modelExtensionAttribute.getStereotypes()) { + attributesStereotypes.add(modelExtensionAttribute.name + "." + entry); } } return attributesStereotypes; } - public AttributeBean getOrCreateAttribute(String attributeName) { - AttributeBean result = null; - for (AttributeBean attributeBean : attributes) { - if (attributeName.equals(attributeBean.name)) { - result = attributeBean; + public ModelExtensionAttribute getOrCreateAttribute(String attributeName) { + ModelExtensionAttribute result = null; + for (ModelExtensionAttribute modelExtensionAttribute : attributes) { + if (attributeName.equals(modelExtensionAttribute.name)) { + result = modelExtensionAttribute; break; } } if (result == null) { - result = new AttributeBean(attributeName); + result = new ModelExtensionAttribute(attributeName); attributes.add(result); } return result; diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ElementBean.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionElement.java similarity index 86% rename from eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ElementBean.java rename to eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionElement.java index 7791ae2..cffae4f 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ElementBean.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionElement.java @@ -1,4 +1,4 @@ -package org.nuiton.eugene.plugin.modelextension; +package org.nuiton.eugene.models.extension.model; /*- * #%L @@ -31,13 +31,14 @@ import java.util.TreeMap; * Created on 10/09/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 */ -public class ElementBean implements Comparable<ElementBean> { +public class ModelExtensionElement implements Comparable<ModelExtensionElement> { protected final String name; protected final Map<String, String> tagValues; - public ElementBean(String name) { + public ModelExtensionElement(String name) { this.name = name; this.tagValues = new TreeMap<>(); } @@ -61,7 +62,7 @@ public class ElementBean implements Comparable<ElementBean> { } @Override - public int compareTo(ElementBean o) { + public int compareTo(ModelExtensionElement o) { return name.compareTo(o.name); } diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/PackageBean.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionPackage.java similarity index 83% rename from eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/PackageBean.java rename to eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionPackage.java index 1564de9..8744ee1 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/PackageBean.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/model/ModelExtensionPackage.java @@ -1,4 +1,4 @@ -package org.nuiton.eugene.plugin.modelextension; +package org.nuiton.eugene.models.extension.model; /*- * #%L @@ -26,10 +26,11 @@ package org.nuiton.eugene.plugin.modelextension; * Created on 10/09/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 */ -public class PackageBean extends ElementBean { +public class ModelExtensionPackage extends ModelExtensionElement { - public PackageBean(String name) { + public ModelExtensionPackage(String name) { super(name); } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java index 95ccb29..2efa0a5 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java @@ -32,7 +32,7 @@ import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxExceptio import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelPackage; -import org.nuiton.eugene.models.object.reader.extension.LoadModelExtension; +import org.nuiton.eugene.models.extension.io.ModelExtensionReader; import org.nuiton.eugene.models.object.xml.ObjectModelImpl; import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; import org.nuiton.util.FileUtil; @@ -70,7 +70,7 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> ObjectModel model = new ObjectModelImpl(); - LoadModelExtension<ObjectModel> loadModelExtension = new LoadModelExtension<>(isVerbose(), strictLoading, model); + ModelExtensionReader<ObjectModel> modelExtensionReader = new ModelExtensionReader<>(isVerbose(), strictLoading, model); for (File file : files) { @@ -92,7 +92,7 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> log.info("Lecture du fichier de propriétés " + propFile + " associé au model"); } try { - loadModelExtension.load(propFile); + modelExtensionReader.read(propFile); } catch (InvalidTagValueSyntaxException | InvalidStereotypeSyntaxException e) { // FIXME throw new IllegalStateException(e); 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 deleted file mode 100644 index b3b8990..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/CompactModelExtensionFileParser.java +++ /dev/null @@ -1,193 +0,0 @@ -package org.nuiton.eugene.models.object.reader.extension; - -/*- - * #%L - * EUGene :: EUGene - * %% - * Copyright (C) 2004 - 2016 CodeLutin - * %% - * 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.Preconditions; -import org.apache.commons.lang3.StringUtils; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.util.List; - -/** - * Created on 09/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class CompactModelExtensionFileParser implements ModelExtensionFileParser { - - public CompactModelExtensionFileParser(boolean strictLoading) { - this.strictLoading = strictLoading; - } - - enum Scope { - MODEL, - PACKAGE, - CLASS - } - - protected final boolean strictLoading; - - protected Scope scope; - protected String name; - - @Override - public void parse(File file, ModelExtensionFileParserCallback callback) throws IOException { - - scope = null; - name = null; - - List<String> lines = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8); - - for (String line : lines) { - consumeLine(line, callback); - } - - } - - protected void consumeLine(String line, ModelExtensionFileParserCallback callback) { - if (StringUtils.isBlank(line)) { - - // ligne vide - return; - } - if (line.startsWith("#")) { - - // commentaire - return; - } - Scope newScope = getScope(line); - if (newScope != null) { - - // changement de scope - this.scope = newScope; - this.name = null; - return; - } - - Preconditions.checkState(scope != null); - - switch (scope) { - - case MODEL: { - - // la ligne est une tag value ou un stereotype - int index = line.indexOf(' '); - if (index == -1) { - - // stereotype de package - callback.onModelStereotypeFound(line); - } else { - - // tag value de package - callback.onModelTagValueFound(line.substring(0, index), line.substring(index + 1)); - } - } - break; - case PACKAGE: { - if (line.startsWith(" ")) { - - Preconditions.checkState(name != null, "No package name defined"); - - line = line.trim(); - - // la ligne est une tag value ou un stereotype - int index = line.indexOf(' '); - if (index == -1) { - - // stereotype de package - callback.onPackageStereotypeFound(name, line); - } else { - - // tag value de package - callback.onPackageTagValueFound(name, line.substring(0, index), line.substring(index + 1)); - } - - break; - - } - - name = line; - - } - break; - case CLASS: - - if (line.startsWith(" ")) { - - Preconditions.checkState(name != null, "No class name defined"); - - line = line.trim(); - - // la ligne est une tag value ou un stereotype - int index = line.indexOf(' '); - if (index == -1) { - - int attributeIndex = line.indexOf('.'); - if (attributeIndex == -1) { - - // stereotype de classe - callback.onClassStereotypeFound(name, line); - } else { - - // stereotype d'attribut - callback.onAttributeStereotypeFound(name, line.substring(0, attributeIndex), line.substring(attributeIndex + 1)); - } - - } else { - - String attributeOrTagValue = line.substring(0, index); - - int attributeIndex = attributeOrTagValue.indexOf('.'); - if (attributeIndex == -1) { - - // 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)); - } - - } - - break; - } - - name = line; - - break; - } - } - - protected Scope getScope(String line) { - for (Scope scope : Scope.values()) { - String scopeStr = "[" + scope.name().toLowerCase() + "]"; - if (line.equals(scopeStr)) { - return scope; - } - } - return null; - } -} diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParser.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParser.java deleted file mode 100644 index 71e35c5..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParser.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.nuiton.eugene.models.object.reader.extension; - -/*- - * #%L - * EUGene :: EUGene - * %% - * Copyright (C) 2004 - 2016 CodeLutin - * %% - * 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 org.nuiton.eugene.models.extension.tagvalue.InvalidStereotypeSyntaxException; -import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; - -import java.io.File; -import java.io.IOException; - -/** - * Created on 09/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public interface ModelExtensionFileParser { - - String TAGVALUE = "tagvalue"; - - String TAG_VALUE = "tagValue"; - - String STEREOTYPE = "stereotype"; - - String ATTRIBUTE = "attribute"; - - String CLASS = "class"; - - String MODEL = "model"; - - String PACKAGE = "package"; - - void parse(File file, ModelExtensionFileParserCallback callback) throws IOException, InvalidStereotypeSyntaxException, InvalidTagValueSyntaxException; -} 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 deleted file mode 100644 index 00b2473..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParserFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.nuiton.eugene.models.object.reader.extension; - -/*- - * #%L - * EUGene :: EUGene - * %% - * Copyright (C) 2004 - 2016 CodeLutin - * %% - * 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 org.apache.commons.lang3.NotImplementedException; - -import java.io.File; - -/** - * Created on 10/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class ModelExtensionFileParserFactory { - - public static FlatModelExtensionFileParser newFlatPaser(boolean strictLoading) { - return new FlatModelExtensionFileParser(strictLoading); - } - - public static CompactModelExtensionFileParser newCompactPaser(boolean strictLoading) { - return new CompactModelExtensionFileParser(strictLoading); - } - - public static ModelExtensionFileParser newParser(boolean strictLoading, File file) { - ModelExtensionFileParser parser; - if (file.getName().endsWith(".properties")) { - 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); - } - return parser; - } -} diff --git a/pom.xml b/pom.xml index b71745d..324c165 100644 --- a/pom.xml +++ b/pom.xml @@ -194,6 +194,11 @@ <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-configuration2</artifactId> + <version>2.1</version> + </dependency> <!-- Guava --> <dependency> -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.