Author: tchemit Date: 2013-05-05 10:32:43 +0200 (Sun, 05 May 2013) New Revision: 1243 Url: http://nuiton.org/projects/eugene/repository/revisions/1243 Log: refs #2681: Make possible to apply templates to different inputs (nearly ok, just need to merge now models) fixes #2682: ITs in eugene-m-p should always be runned Added: trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java trunk/eugene/src/main/java/org/nuiton/eugene/ModelHelper.java Modified: trunk/eugene-maven-plugin/pom.xml trunk/eugene-maven-plugin/src/it/evol-879/model/model-api/pom.xml trunk/eugene-maven-plugin/src/it/evol-879/model/model-impl/pom.xml trunk/eugene-maven-plugin/src/it/evol-879/model/pom.xml trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiChainedFileWriter.java trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmlModelChainedFileWriter.java trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/YamlModelChainedFileWriter.java trunk/eugene/src/main/java/org/nuiton/eugene/EugeneTagValues.java trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java trunk/eugene/src/main/java/org/nuiton/eugene/models/Model.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/XmlObjectModelReader.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/YamlObjectModelReader.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModelReader.java trunk/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java Modified: trunk/eugene/src/main/java/org/nuiton/eugene/EugeneTagValues.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/EugeneTagValues.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene/src/main/java/org/nuiton/eugene/EugeneTagValues.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -28,7 +28,6 @@ import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelClassifier; import org.nuiton.eugene.models.object.ObjectModelElement; -import org.nuiton.eugene.models.object.ObjectModelReader; import static org.nuiton.eugene.ModelPropertiesUtil.TagValueDefinition; @@ -51,7 +50,6 @@ * used while reading the properties associated with a model and if found is * directly set to the {@code version} field of the model. * - * @see ObjectModelReader#loadModelTagValue(ObjectModel, String, String) * @since 2.3 */ @TagValueDefinition(target = {ObjectModel.class}, Added: trunk/eugene/src/main/java/org/nuiton/eugene/ModelHelper.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/ModelHelper.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/ModelHelper.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -0,0 +1,146 @@ +package org.nuiton.eugene; + +/* + * #%L + * EUGene :: EUGene + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2004 - 2013 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.Model; +import org.nuiton.eugene.models.object.reader.XmlObjectModelReader; +import org.nuiton.eugene.models.object.reader.YamlObjectModelReader; +import org.nuiton.eugene.models.state.StateModelReader; + +import java.util.Collections; +import java.util.Map; + +/** + * Help methods around model. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.6.3 + */ +public class ModelHelper { + + /** + * All available models (obtain by plexus, keys are plexus roles, + * values are a instance of corresponding model). + */ + protected Map<String, Model> models; + + /** All available writers introspects via plexus. */ + protected Map<String, ModelReader<?>> modelReaders; + + public ModelHelper(Map<String, Model> models, + Map<String, ModelReader<?>> modelReaders) { + this.models = Collections.unmodifiableMap(models); + this.modelReaders = Collections.unmodifiableMap(modelReaders); + } + + public Model getModel(String modelType) { + Model model = models.get(modelType.trim()); + return model; + } + + public ModelReader getModelReader(String modelType, String type) { + ModelReader result = null; + for (ModelReader<?> modelReader : modelReaders.values()) { + if (modelType.equals(modelReader.getModelType()) && + type.equals(modelReader.getInputType())) { + result = modelReader; + break; + } + } + return result; + } + + public Map<String, ModelReader<?>> getModelReaders() { + return modelReaders; + } + + /** + * Define type of model known by eugene + * + * @author tchemit <chemit@codelutin.com> + * @since 2.6.3 + */ + public static enum ModelType { + + /** + * Object model. + * + * @see org.nuiton.eugene.models.object + */ + OBJECT("objectmodel"), + + /** + * Object model. + * + * @see org.nuiton.eugene.models.state + */ + STATE("statemodel"); + + private final String alias; + + private ModelType(String alias) { + this.alias = alias; + } + + public String getAlias() { + return alias; + } + } + + /** + * Define type onf input model known by eugene. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.6.3 + */ + public static enum ModelInputType { + + /** + * Read object model from xml files. + * + * @see XmlObjectModelReader + * @see StateModelReader + */ + XML("xml"), + + /** + * Read object model from yaml files. + * + * @see YamlObjectModelReader + */ + YAML("yaml"); + + private final String alias; + + private ModelInputType(String alias) { + this.alias = alias; + } + + public String getAlias() { + return alias; + } + + } +} Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/ModelHelper.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -71,6 +71,23 @@ */ protected ModelPropertiesUtil.ModelPropertiesProvider modelPropertiesProvider; + /** + * Gets the type of model. + * + * @return the type of model. + * @see ModelHelper.ModelType + * @since 2.6.3 + */ + public abstract String getModelType(); + + /** + * Gets the type of input file. For example {@code xml}, or {@code yaml}. + * + * @return the type of input file. + * @since 2.6.3 + */ + public abstract String getInputType(); + public boolean isVerbose() { return verbose; } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/Model.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/Model.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/Model.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -30,7 +30,7 @@ /** * Model. - * + * * @version $Revision$ * * Mise a jour: $Date$ @@ -44,7 +44,7 @@ /** * Returns the name of this model. - * + * * @return the name of this model. */ String getName(); @@ -57,16 +57,22 @@ String getVersion(); /** + * @return the type of model. + * @since 2.6.3 + */ + String getModelType(); + + /** * Returns the tagValues associated with this element. - * For each entry, the key is the name of the tagValue, the value is the value of the tagValue :-) - * + * For each entry, the key is the name of the tagValue, the value is the value of the tagValue :-) + * * @return a Map containing all tagValues associated with this element */ Map<String, String> getTagValues(); /** * Returns the tagValue corresponding to the given name, or null if the element has no associated tagValue for this name. - * + * * @param tagValue tag value key * @return the value of the found tagValue, or null if the element has no associated tagValue for this name. */ Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -30,6 +30,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.EugeneTagValues; +import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.ModelPropertiesUtil; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.models.object.reader.XmlObjectModelReader; @@ -63,7 +64,6 @@ * * @author fdesbois <fdesbois@codelutin.com> * @version $Id$ - * @plexus.component role="org.nuiton.eugene.ModelReader" role-hint="objectmodel" * @deprecated since 2.6.3, is replaced by {@link XmlObjectModelReader}. */ @Deprecated @@ -111,6 +111,16 @@ public static final String MODEL = "model"; + @Override + public String getModelType() { + return ModelHelper.ModelType.OBJECT.getAlias(); + } + + @Override + public String getInputType() { + return ModelHelper.ModelInputType.XML.getAlias(); + } + /** * @param files les noms des fichiers existant contenant du XML représentant * des ObjectModel. Il est automatiquement recherche un fichier de Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -28,6 +28,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.EugeneTagValues; +import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.ModelPropertiesUtil; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.models.object.ObjectModel; @@ -59,10 +60,10 @@ import java.util.regex.Pattern; /** - * TODO + * Abstract object model reader. * * @author tchemit <chemit@codelutin.com> - * @since TODO + * @since 2.6.3 */ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> { @@ -106,6 +107,11 @@ public static final String MODEL = "model"; + @Override + public String getModelType() { + return ModelHelper.ModelType.OBJECT.getAlias(); + } + protected abstract void readFileToModel(File file, ObjectModel model) throws IOException; protected void beforeReadFile(File... files) { Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/XmlObjectModelReader.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/XmlObjectModelReader.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/XmlObjectModelReader.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -26,9 +26,9 @@ package org.nuiton.eugene.models.object.reader; import org.apache.commons.digester3.Digester; +import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.xml.DigesterObjectModelRuleSet; -import org.nuiton.eugene.models.object.xml.ObjectModelImpl; import org.xml.sax.SAXException; import java.io.File; @@ -46,6 +46,11 @@ protected Digester digester; @Override + public String getInputType() { + return ModelHelper.ModelInputType.XML.getAlias(); + } + + @Override protected void beforeReadFile(File... files) { super.beforeReadFile(files); digester = new Digester(); @@ -55,7 +60,7 @@ @Override protected void readFileToModel(File file, ObjectModel model) throws IOException { try { - digester.push(new ObjectModelImpl()); + digester.push(model); digester.parse(file); } catch (SAXException e) { throw new IOException("Unable to parse ObjectModel input file : " + file, e); Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/YamlObjectModelReader.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/YamlObjectModelReader.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/YamlObjectModelReader.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -26,6 +26,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.models.object.ObjectModel; import java.io.File; @@ -44,6 +45,11 @@ LogFactory.getLog(YamlObjectModelReader.class); @Override + public String getInputType() { + return ModelHelper.ModelInputType.YAML.getAlias(); + } + + @Override protected void beforeReadFile(File... files) { super.beforeReadFile(files); //TODO ? Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -28,6 +28,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; @@ -78,6 +79,11 @@ */ private Map<String, Object> extensions = new HashMap<String, Object>(); + @Override + public String getModelType() { + return ModelHelper.ModelType.OBJECT.getAlias(); + } + public void setName(String name) { this.name = name; } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModelReader.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModelReader.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModelReader.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -28,6 +28,7 @@ import org.apache.commons.digester3.Digester; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.models.state.xml.DigesterStateModelRuleSet; import org.nuiton.eugene.models.state.xml.StateModelImpl; @@ -42,7 +43,7 @@ /** * To read state model files into a memory state model. - * + * <p/> * Created: 26 oct. 2009 * * @author fdesbois <fdesbois@codelutin.com> @@ -54,6 +55,16 @@ private static final Log log = LogFactory.getLog(StateModelReader.class); @Override + public String getModelType() { + return ModelHelper.ModelType.STATE.getAlias(); + } + + @Override + public String getInputType() { + return ModelHelper.ModelInputType.XML.getAlias(); + } + + @Override public StateModel read(File... files) { Digester digester = new Digester(); digester.addRuleSet(new DigesterStateModelRuleSet()); @@ -86,7 +97,7 @@ * @param stateModel */ protected void loadPropertyFile(File stateModelFile, - StateModelImpl stateModel) { + StateModelImpl stateModel) { // recherche et charge le fichier propriete associe au modele File dir = stateModelFile.getParentFile(); String ext = FileUtil.extension(stateModelFile); @@ -108,7 +119,7 @@ prop.load(inStream); } catch (IOException e) { log.warn("Cannot read property file " + propFile, e); - }finally { + } finally { try { if (inStream != null) { inStream.close(); @@ -119,7 +130,7 @@ } // on ajoute les proprietes du fichier associe au model - for (Enumeration<Object> e = prop.keys(); e.hasMoreElements();) { + for (Enumeration<Object> e = prop.keys(); e.hasMoreElements(); ) { String key = (String) e.nextElement(); String value = prop.getProperty(key); Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -25,6 +25,7 @@ package org.nuiton.eugene.models.state.xml; +import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.models.state.StateModel; import org.nuiton.eugene.models.state.StateModelStateChart; @@ -75,6 +76,11 @@ } @Override + public String getModelType() { + return ModelHelper.ModelType.STATE.getAlias(); + } + + @Override public String getName() { return name; } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -25,6 +25,7 @@ package org.nuiton.eugene.writer; +import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.Template; @@ -79,10 +80,24 @@ /** @return the universe of availables writers */ Map<String, ChainedFileWriter> getWriters(); - /** @return the universe of available model readers */ + /** + * @return model helper tool. + * @since 2.6.3 + */ + ModelHelper getModelHelper(); + + /** + * @return the universe of available model readers + * @deprecated since 2.6.3 (no more used, replaced by {@link ModelHelper#getModelReaders()}. + */ + @Deprecated Map<String, ModelReader<?>> getModelReaders(); - /** @return the universe of available model templates */ + /** + * @return the universe of available model templates + * @deprecated since 2.6.3, no more used, won't be replaced + */ + @Deprecated Map<String, Template<?>> getModelTemplates(); /** @return properties to pass to writers */ Modified: trunk/eugene-maven-plugin/pom.xml =================================================================== --- trunk/eugene-maven-plugin/pom.xml 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene-maven-plugin/pom.xml 2013-05-05 08:32:43 UTC (rev 1243) @@ -218,8 +218,8 @@ <id>run-its</id> <activation> <property> - <name>performRelease</name> - <value>true</value> + <name>skipIts</name> + <value>!true</value> </property> </activation> <build> Modified: trunk/eugene-maven-plugin/src/it/evol-879/model/model-api/pom.xml =================================================================== --- trunk/eugene-maven-plugin/src/it/evol-879/model/model-api/pom.xml 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene-maven-plugin/src/it/evol-879/model/model-api/pom.xml 2013-05-05 08:32:43 UTC (rev 1243) @@ -46,8 +46,6 @@ <properties> - <eugeneVersion>@pom.version@</eugeneVersion> - <!-- default encoding --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> Modified: trunk/eugene-maven-plugin/src/it/evol-879/model/model-impl/pom.xml =================================================================== --- trunk/eugene-maven-plugin/src/it/evol-879/model/model-impl/pom.xml 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene-maven-plugin/src/it/evol-879/model/model-impl/pom.xml 2013-05-05 08:32:43 UTC (rev 1243) @@ -78,7 +78,6 @@ <plugin> <groupId>org.nuiton.eugene</groupId> <artifactId>eugene-maven-plugin</artifactId> - <version>${eugeneVersion}</version> <configuration> <fullPackagePath>org.nuiton.topia</fullPackagePath> <defaultPackage>org.nuiton.topia</defaultPackage> Modified: trunk/eugene-maven-plugin/src/it/evol-879/model/pom.xml =================================================================== --- trunk/eugene-maven-plugin/src/it/evol-879/model/pom.xml 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene-maven-plugin/src/it/evol-879/model/pom.xml 2013-05-05 08:32:43 UTC (rev 1243) @@ -38,24 +38,34 @@ <module>model-api</module> <module>model-impl</module> </modules> - + <name>EUGene Test :: testEvol879-model</name> <packaging>pom</packaging> <properties> - <eugeneVersion>@pom.version@</eugeneVersion> - <!-- default encoding --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - + <!-- compiler configuration --> <maven.compiler.source>1.6</maven.compiler.source> <maven.compiler.target>1.6</maven.compiler.target> - + </properties> + <build> + <pluginManagement> + <plugins> + <plugin> + <groupId>org.nuiton.eugene</groupId> + <artifactId>eugene-maven-plugin</artifactId> + <version>@pom.version@</version> + </plugin> + </plugins> + </pluginManagement> + </build> + </project> Modified: trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java =================================================================== --- trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -36,12 +36,12 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.settings.Settings; import org.nuiton.eugene.DefaultTemplateConfiguration; +import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.ModelPropertiesUtil; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.Template; import org.nuiton.eugene.models.Model; import org.nuiton.eugene.plugin.writer.BaseChainedFileWriter; -import org.nuiton.eugene.plugin.writer.ModelChainedFileWriter; import org.nuiton.eugene.plugin.writer.XmiChainedFileWriter; import org.nuiton.eugene.plugin.writer.XmlModelChainedFileWriter; import org.nuiton.eugene.plugin.writer.YamlModelChainedFileWriter; @@ -327,6 +327,8 @@ @Component(role = ChainedWriterEngine.class) protected ChainedWriterEngine engine; + protected ModelHelper modelHelper; + /** fixed classloader */ protected ClassLoader fixedClassLoader; @@ -355,11 +357,14 @@ verbose = true; } + modelHelper = new ModelHelper(_models, modelReaders); + modelType = modelType.trim().toLowerCase(); // Check model type is accepted // pouvoir associé un nom à un type de service). - Model model = _models.get(modelType); + Model model = modelHelper.getModel(modelType); +// Model model = _models.get(modelType); if (model == null) { throw new MojoExecutionException( "No modelType named '" + modelType + "', use one of " + @@ -418,30 +423,30 @@ properties.put(XmiChainedFileWriter.PROP_RESOLVER, resolver); } - if (engine.containsWriter("model")) { +// if (engine.containsWriter("model")) { +// +// // add model writer support +// +// properties.put(ModelChainedFileWriter.PROP_DEFAULT_PACKAGE, +// defaultPackage); +// properties.put(ModelChainedFileWriter.PROP_GENERATED_PACKAGES, +// generatedPackages); +// properties.put(ModelChainedFileWriter.PROP_TEMPLATES, templates); +// properties.put(ModelChainedFileWriter.PROP_EXCLUDE_TEMPLATES, +// getExcludeTemplatesAsString()); +// properties.put(ModelChainedFileWriter.PROP_MODEL_PROPERTIES_PROVIDER, +// getModelPropertiesProvider()); +// +// DefaultTemplateConfiguration configuration = +// new DefaultTemplateConfiguration(); +// configuration.setEncoding(getEncoding()); +// configuration.setLoader(getClassLoader()); +// configuration.setOverwrite(isOverwrite()); +// configuration.setVerbose(isVerbose()); +// properties.put(ModelChainedFileWriter.PROP_TEMPLATE_CONFIGURATION, +// configuration); +// } - // add model writer support - - properties.put(ModelChainedFileWriter.PROP_DEFAULT_PACKAGE, - defaultPackage); - properties.put(ModelChainedFileWriter.PROP_GENERATED_PACKAGES, - generatedPackages); - properties.put(ModelChainedFileWriter.PROP_TEMPLATES, templates); - properties.put(ModelChainedFileWriter.PROP_EXCLUDE_TEMPLATES, - getExcludeTemplatesAsString()); - properties.put(ModelChainedFileWriter.PROP_MODEL_PROPERTIES_PROVIDER, - getModelPropertiesProvider()); - - DefaultTemplateConfiguration configuration = - new DefaultTemplateConfiguration(); - configuration.setEncoding(getEncoding()); - configuration.setLoader(getClassLoader()); - configuration.setOverwrite(isOverwrite()); - configuration.setVerbose(isVerbose()); - properties.put(ModelChainedFileWriter.PROP_TEMPLATE_CONFIGURATION, - configuration); - } - if (engine.containsWriter("xmlmodel")) { // add xml model writer support @@ -539,15 +544,6 @@ } String message = reportGeneratedFiles(writer, t0); getLog().info(message); - - if ("model".equals(writer.getInputProtocol())) { - - // must fix source compile roots - File outputDir = writer.getOutputDirectory( - getOutputDirectory(), isTestPhase()); - - fixCompileSourceRoots(outputDir); - } } // merge all models in a unique one ? or apply templates on each model ? @@ -557,12 +553,18 @@ for (ChainedFileWriterToMemoryModel entry : models) { Model model = entry.getModel(); Long lastModified = entry.getLastModifiedSource(); - File outputDirectory = entry.getOutputDirectory(); + File outputDir = entry.getOutputDirectory(); - applyTemplates(model, lastModified, outputDirectory, templateList, writerReport); + applyTemplates(model, + lastModified, + outputDir, + templateList, + writerReport); + + // must fix source compile roots + fixCompileSourceRoots(outputDir); } - } finally { // always clear everything to avoid side-effects in goal is // invoked more than once @@ -724,6 +726,11 @@ } @Override + public ModelHelper getModelHelper() { + return modelHelper; + } + + @Override public File getBasedir() { return getProject().getBasedir(); } @@ -941,20 +948,16 @@ protected List<Template<Model>> initTemplates() { - ChainedFileWriterConfiguration configuration = this; + ClassLoader loader = getClassLoader(); - ClassLoader loader = configuration.getClassLoader(); - - boolean verbose = configuration.isVerbose(); - Properties templateProperties = new Properties(); templateProperties.put(Template.PROP_DEFAULT_PACKAGE, defaultPackage); - templateProperties.put(Template.PROP_ENCODING, configuration.getEncoding()); + templateProperties.put(Template.PROP_ENCODING, getEncoding()); templateProperties.put(Template.PROP_VERBOSE, verbose); - templateProperties.put(Template.PROP_OVERWRITE, configuration.isOverwrite()); + templateProperties.put(Template.PROP_OVERWRITE, isOverwrite()); templateProperties.put(Template.PROP_CLASS_LOADER, loader); - templateProperties.put(Template.PROP_EXCLUDE_TEMPLATES, excludeTemplates); + templateProperties.put(Template.PROP_EXCLUDE_TEMPLATES, getExcludeTemplatesAsString()); if (StringUtils.isEmpty(generatedPackages)) { @@ -972,39 +975,39 @@ // init templates List<Template<Model>> templatesList = new ArrayList<Template<Model>>(); - if (StringUtils.isEmpty(templates)) { - throw new IllegalArgumentException("No template specified, use the templates parameter"); - } - String[] templatesNames = templates.split(","); - for (String templateName : templatesNames) { - // remove trailing spaces - templateName = templateName.trim(); - Template<Model> template = - (Template<Model>) configuration.getModelTemplates().get(templateName); + if (StringUtils.isNotEmpty(templates)) { - if (template == null) { - getLog().warn("template [" + templateName + "] is not " + - "registred via plexus, try to load it directly"); - try { - template = (Template<Model>) Class.forName( - templateName, true, loader).newInstance(); - } catch (Exception e) { - throw new IllegalStateException( - "Can't obtain template [" + templateName + - "] for reason " + e.getMessage(), e); + String[] templatesNames = templates.split(","); + for (String templateName : templatesNames) { + // remove trailing spaces + templateName = templateName.trim(); + Template<Model> template = + (Template<Model>) modelTemplates.get(templateName); + + if (template == null) { + getLog().warn("template [" + templateName + "] is not " + + "registred via plexus, try to load it directly"); + try { + template = (Template<Model>) Class.forName( + templateName, true, loader).newInstance(); + } catch (Exception e) { + throw new IllegalStateException( + "Can't obtain template [" + templateName + + "] for reason " + e.getMessage(), e); + } } - } - if (verbose) { - getLog().info("will use the template [" + templateName + "]"); - } + if (verbose) { + getLog().info("will use the template [" + templateName + "]"); + } - // will use this template - templatesList.add(template); + // will use this template + templatesList.add(template); - // set the properties of the template - template.setConfiguration( - new DefaultTemplateConfiguration(templateProperties)); + // set the properties of the template + template.setConfiguration( + new DefaultTemplateConfiguration(templateProperties)); + } } return templatesList; } Added: trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java =================================================================== --- trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java (rev 0) +++ trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -0,0 +1,191 @@ +package org.nuiton.eugene.plugin.writer; + +/* + * #%L + * EUGene :: Maven plugin + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2006 - 2013 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.ModelPropertiesUtil; +import org.nuiton.eugene.ModelReader; +import org.nuiton.eugene.models.Model; +import org.nuiton.eugene.writer.ChainedFileWriterConfiguration; +import org.nuiton.eugene.writer.ChainedFileWriterToMemoryModel; + +import java.io.File; +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.6.3 + */ +public abstract class BaseChainedFileWriterToMemoryModel extends BaseChainedFileWriter implements ChainedFileWriterToMemoryModel { + + public static final String PROP_MODEL_READER = "modelReader"; + + public static final String PROP_MODEL_PROPERTIES_PROVIDER = "modelPropertiesProvider"; + + public static final String PROP_READER = "reader"; + + protected Model model; + + protected long lastModifiedSource; + + protected File outputDirectory; + + protected BaseChainedFileWriterToMemoryModel() { + super( + PROP_READER, "reader", + PROP_MODEL_READER, "xmlModelReader", + PROP_MODEL_PROPERTIES_PROVIDER, "modelPropertiesProvider" + ); + } + + @Override + public Model getModel() { + return model; + } + + public long getLastModifiedSource() { + return lastModifiedSource; + } + + @Override + public File getOutputDirectory() { + return outputDirectory; + } + + @Override + public String getOutputProtocol(String modelType) { + // nothing after java files + //TODO check in engine that a memory chained file has null output protocol + return null; + } + + @Override + public boolean acceptModel(String modelType) { + // accept all models + return acceptObjectModelOrStateModel(modelType); + } + + protected abstract String getInputType(); + + protected ModelReader<?> getModelReader() { + return getProperty(PROP_MODEL_READER, ModelReader.class); + } + + protected String getReader() { + return getProperty(PROP_READER, String.class); + } + + protected ModelPropertiesUtil.ModelPropertiesProvider getModelPropertiesProvider() { + return getProperty(PROP_MODEL_PROPERTIES_PROVIDER, ModelPropertiesUtil.ModelPropertiesProvider.class); + } + + @Override + protected void initWriter(ChainedFileWriterConfiguration configuration) { + super.initWriter(configuration); + + // obtain a reader + ClassLoader classLoader = configuration.getClassLoader(); + ClassLoader loader = classLoader; + if (getModelReader() == null) { + + String modelType = configuration.getModelType(); + + if (getReader() != null) { + // use a specific reader + String reader = getReader(); + try { + ClassLoader fixedClassLoader = loader; + ModelReader<?> modelReader = (ModelReader<?>) + Class.forName(reader, true, + fixedClassLoader).newInstance(); + String modelTypeFromReader = modelReader.getModelType(); + if (!modelType.equals(modelTypeFromReader)) { + throw new IllegalStateException("Model reader [" + modelTypeFromReader + "] does not match with modelType: " + modelType); + } + properties.put(PROP_MODEL_READER, modelReader); + } catch (IllegalStateException eee) { + throw eee; + } catch (Exception eee) { + throw new IllegalStateException("could not obtain reader " + + reader, eee); + } + } else { + + String inputType = getInputType(); + ModelReader<?> modelReader = configuration.getModelHelper().getModelReader(modelType, inputType); + if (modelReader == null) { + throw new IllegalStateException( + "could not find a model reader for modelType: " + + modelType + ", and input type: " + inputType + ", availables readers : " + + configuration.getModelHelper().getModelReaders().values()); + } + properties.put(PROP_MODEL_READER, modelReader); + } + } + + boolean verbose = configuration.isVerbose(); + + // gets the provider of safe tag values and stereotypes + ModelPropertiesUtil.ModelPropertiesProvider propertiesProvider = + getModelPropertiesProvider(); + + // affect it to the model reader + getModelReader().setModelPropertiesProvider(propertiesProvider); + + // set the verbose level of the model reader + getModelReader().setVerbose(verbose); + } + + @Override + public void generate(ChainedFileWriterConfiguration configuration, + File outputDir, + Map<File, List<File>> filesByRoot, + Map<File, List<File>> resourcesByFile) throws IOException { + + Set<File> modelFiles = new HashSet<File>(); + for (List<File> files : filesByRoot.values()) { + modelFiles.addAll(files); + } + File[] filesToRead = modelFiles.toArray(new File[modelFiles.size()]); + + if (configuration.isVerbose()) { + getLog().info("Will read " + filesToRead.length + " model(s)."); + } + + // read memory model from all files models + model = getModelReader().read(filesToRead); + + // get the last modified source timestamp from reader + lastModifiedSource = getModelReader().getLastModifiedSource(); + + // set the ouput directory + outputDirectory = outputDir; + } +} Property changes on: trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java =================================================================== --- trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -195,13 +195,13 @@ } } else { String modelType = configuration.getModelType(); - ModelReader<?> modelReader = - configuration.getModelReaders().get(modelType); + ModelReader<?> modelReader = configuration.getModelHelper().getModelReader(modelType, "xml"); + configuration.getModelHelper().getModelReaders().get(modelType); if (modelReader == null) { throw new IllegalStateException( "could not find a model reader for modelType : " + modelType + ", availables readers : " + - configuration.getModelReaders().values()); + configuration.getModelHelper().getModelReaders().values()); } properties.put(PROP_MODEL_READER, modelReader); } Modified: trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiChainedFileWriter.java =================================================================== --- trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiChainedFileWriter.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiChainedFileWriter.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -94,7 +94,7 @@ @Override public String getOutputProtocol(String modelType) { // next writer : write from model files - return "xmlmodel"; + return "model"; } @Override Modified: trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmlModelChainedFileWriter.java =================================================================== --- trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmlModelChainedFileWriter.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmlModelChainedFileWriter.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -25,19 +25,6 @@ package org.nuiton.eugene.plugin.writer; -import org.nuiton.eugene.ModelPropertiesUtil; -import org.nuiton.eugene.ModelReader; -import org.nuiton.eugene.models.Model; -import org.nuiton.eugene.writer.ChainedFileWriterConfiguration; -import org.nuiton.eugene.writer.ChainedFileWriterToMemoryModel; - -import java.io.File; -import java.io.IOException; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - /** * To create a memory model from xml model files. * @@ -45,61 +32,24 @@ * @plexus.component role="org.nuiton.eugene.writer.ChainedFileWriter" role-hint="xmlModel2Memory" * @since 2.6.3 */ -public class XmlModelChainedFileWriter extends BaseChainedFileWriter implements ChainedFileWriterToMemoryModel { +public class XmlModelChainedFileWriter extends BaseChainedFileWriterToMemoryModel { - public static final String PROP_XML_MODEL_READER = "xmlModelReader"; - public static final String PROP_MODEL_PROPERTIES_PROVIDER = "modelPropertiesProvider"; - - public static final String PROP_READER = "reader"; - - protected Model model; - - protected long lastModifiedSource; - - protected File outputDirectory; - public XmlModelChainedFileWriter() { - super( - PROP_READER, "reader", - PROP_XML_MODEL_READER, "modelReader", - PROP_MODEL_PROPERTIES_PROVIDER, "modelPropertiesProvider" - ); + super(); } @Override - public Model getModel() { - return model; + protected String getInputType() { + return "xml"; } - public long getLastModifiedSource() { - return lastModifiedSource; - } - @Override - public File getOutputDirectory() { - return outputDirectory; - } - - @Override public String getInputProtocol() { - return "xmlmodel"; + return "model"; } @Override - public String getOutputProtocol(String modelType) { - // nothing after java files - //TODO check in engine that a memory chained file has null output protocol - return null; - } - - @Override - public boolean acceptModel(String modelType) { - // accept all models - return acceptObjectModelOrStateModel(modelType); - } - - @Override public boolean acceptInclude(String include) { return include.startsWith("model:") || include.endsWith(".objectmodel") || @@ -130,95 +80,4 @@ public String getDefaultTestOutputDirectory() { return "test-java"; } - - protected ModelReader<?> getModelReader() { - return getProperty(PROP_XML_MODEL_READER, ModelReader.class); - } - - protected String getReader() { - return getProperty(PROP_READER, String.class); - } - - protected ModelPropertiesUtil.ModelPropertiesProvider getModelPropertiesProvider() { - return getProperty(PROP_MODEL_PROPERTIES_PROVIDER, ModelPropertiesUtil.ModelPropertiesProvider.class); - } - - @Override - protected void initWriter(ChainedFileWriterConfiguration configuration) { - super.initWriter(configuration); - - // obtain a reader - ClassLoader classLoader = configuration.getClassLoader(); - ClassLoader loader = classLoader; - if (getModelReader() == null) { - - if (getReader() != null) { - // use a specific reader - String reader = getReader(); - try { - ClassLoader fixedClassLoader = loader; - ModelReader<?> modelReader = (ModelReader<?>) - Class.forName(reader, true, - fixedClassLoader).newInstance(); - //TODO : should check that the reader is compatible with - //TODO : given modelType - properties.put(PROP_XML_MODEL_READER, modelReader); - } catch (Exception eee) { - throw new IllegalStateException("could not obtain reader " - + reader, eee); - } - } else { - String modelType = configuration.getModelType(); - ModelReader<?> modelReader = - configuration.getModelReaders().get(modelType); - if (modelReader == null) { - throw new IllegalStateException( - "could not find a model reader for modelType : " + - modelType + ", availables readers : " + - configuration.getModelReaders().values()); - } - properties.put(PROP_XML_MODEL_READER, modelReader); - } - } - - boolean verbose = configuration.isVerbose(); - - // gets the provider of safe tag values and stereotypes - ModelPropertiesUtil.ModelPropertiesProvider propertiesProvider = - getModelPropertiesProvider(); - - // affect it to the model reader - getModelReader().setModelPropertiesProvider(propertiesProvider); - - // set the verbose level of the model reader - getModelReader().setVerbose(verbose); - } - - @Override - public void generate(ChainedFileWriterConfiguration configuration, - File outputDir, - Map<File, List<File>> filesByRoot, - Map<File, List<File>> resourcesByFile) throws IOException { - - Set<File> modelFiles = new HashSet<File>(); - for (List<File> files : filesByRoot.values()) { - modelFiles.addAll(files); - } - File[] filesToRead = modelFiles.toArray(new File[modelFiles.size()]); - - if (configuration.isVerbose()) { - getLog().info("Will read " + filesToRead.length + " model(s)."); - } - - // read memory model from all files models - - model = getModelReader().read(filesToRead); - - // get the last modified source timestamp from reader - lastModifiedSource = getModelReader().getLastModifiedSource(); - - outputDirectory = outputDir; - - } - } Modified: trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/YamlModelChainedFileWriter.java =================================================================== --- trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/YamlModelChainedFileWriter.java 2013-05-04 11:25:19 UTC (rev 1242) +++ trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/YamlModelChainedFileWriter.java 2013-05-05 08:32:43 UTC (rev 1243) @@ -24,19 +24,6 @@ * #L% */ -import org.nuiton.eugene.ModelPropertiesUtil; -import org.nuiton.eugene.ModelReader; -import org.nuiton.eugene.models.Model; -import org.nuiton.eugene.writer.ChainedFileWriterConfiguration; -import org.nuiton.eugene.writer.ChainedFileWriterToMemoryModel; - -import java.io.File; -import java.io.IOException; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - /** * To create a memory model from yaml model files. * @@ -44,62 +31,23 @@ * @plexus.component role="org.nuiton.eugene.writer.ChainedFileWriter" role-hint="yamlModel2Memory" * @since 2.6.3 */ -public class YamlModelChainedFileWriter extends BaseChainedFileWriter implements ChainedFileWriterToMemoryModel { +public class YamlModelChainedFileWriter extends BaseChainedFileWriterToMemoryModel { - public static final String PROP_YAML_MODEL_READER = "yamlModelReader"; - - public static final String PROP_MODEL_PROPERTIES_PROVIDER = "modelPropertiesProvider"; - - public static final String PROP_READER = "reader"; - - protected Model model; - - protected long lastModifiedSource; - - protected File outputDirectory; - public YamlModelChainedFileWriter() { - super( - PROP_READER, "reader", - PROP_YAML_MODEL_READER, "yamlModelReader", - PROP_MODEL_PROPERTIES_PROVIDER, "modelPropertiesProvider" - ); + super(); } @Override - public Model getModel() { - return model; + protected String getInputType() { + return "yaml"; } @Override - public long getLastModifiedSource() { - return lastModifiedSource; - } - - @Override - public File getOutputDirectory() { - return outputDirectory; - } - - @Override public String getInputProtocol() { return "yamlmodel"; } @Override - public String getOutputProtocol(String modelType) { - // nothing after java files - //TODO check in engine that a memory chained file has null output protocol - return null; - } - - @Override - public boolean acceptModel(String modelType) { - // accept all models - return acceptObjectModelOrStateModel(modelType); - } - - @Override public boolean acceptInclude(String include) { return include.startsWith("yaml:") || include.endsWith(".yamlobjectmodel") || @@ -130,94 +78,4 @@ public String getDefaultTestOutputDirectory() { return "test-java"; } - - protected ModelReader<?> getModelReader() { - return getProperty(PROP_YAML_MODEL_READER, ModelReader.class); - } - - protected String getReader() { - return getProperty(PROP_READER, String.class); - } - - protected ModelPropertiesUtil.ModelPropertiesProvider getModelPropertiesProvider() { - return getProperty(PROP_MODEL_PROPERTIES_PROVIDER, ModelPropertiesUtil.ModelPropertiesProvider.class); - } - - @Override - protected void initWriter(ChainedFileWriterConfiguration configuration) { - super.initWriter(configuration); - - // obtain a reader - ClassLoader classLoader = configuration.getClassLoader(); - ClassLoader loader = classLoader; - if (getModelReader() == null) { - - if (getReader() != null) { - // use a specific reader - String reader = getReader(); - try { - ClassLoader fixedClassLoader = loader; - ModelReader<?> modelReader = (ModelReader<?>) - Class.forName(reader, true, - fixedClassLoader).newInstance(); - //TODO : should check that the reader is compatible with - //TODO : given modelType - properties.put(PROP_YAML_MODEL_READER, modelReader); - } catch (Exception eee) { - throw new IllegalStateException("could not obtain reader " - + reader, eee); - } - } else { - String modelType = configuration.getModelType(); - ModelReader<?> modelReader = - configuration.getModelReaders().get(modelType); - if (modelReader == null) { - throw new IllegalStateException( - "could not find a model reader for modelType : " + - modelType + ", availables readers : " + - configuration.getModelReaders().values()); - } - properties.put(PROP_YAML_MODEL_READER, modelReader); - } - } - - boolean verbose = configuration.isVerbose(); - - // gets the provider of safe tag values and stereotypes - ModelPropertiesUtil.ModelPropertiesProvider propertiesProvider = - getModelPropertiesProvider(); - - // affect it to the model reader - getModelReader().setModelPropertiesProvider(propertiesProvider); - - // set the verbose level of the model reader - getModelReader().setVerbose(verbose); - } - - @Override - public void generate(ChainedFileWriterConfiguration configuration, - File outputDir, - Map<File, List<File>> filesByRoot, - Map<File, List<File>> resourcesByFile) throws IOException { - - Set<File> modelFiles = new HashSet<File>(); - for (List<File> files : filesByRoot.values()) { - modelFiles.addAll(files); - } - File[] filesToRead = modelFiles.toArray(new File[modelFiles.size()]); - - if (configuration.isVerbose()) { - getLog().info("Will read " + filesToRead.length + " model(s)."); - } - - // read memory model from all files models - - model = getModelReader().read(filesToRead); - - // get the last modified source timestamp from reader - lastModifiedSource = getModelReader().getLastModifiedSource(); - - outputDirectory = outputDir; - } - }