r770 - in trunk: eugene/src/main/java/org/nuiton/eugene/models/object eugene/src/main/java/org/nuiton/eugene/models/state maven-eugene-plugin/src/it/smart-generate/all maven-eugene-plugin/src/it/smart-generate/generators maven-eugene-plugin/src/it/smart-generate/only-zargo maven-eugene-plugin/src/it/smart-generate/only-zargo-xmi maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin
Author: tchemit Date: 2009-12-19 19:03:08 +0100 (Sat, 19 Dec 2009) New Revision: 770 Added: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModel.java trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModel.java trunk/maven-eugene-plugin/src/it/smart-generate/all/pom.xml trunk/maven-eugene-plugin/src/it/smart-generate/generators/pom.xml trunk/maven-eugene-plugin/src/it/smart-generate/only-zargo-xmi/pom.xml trunk/maven-eugene-plugin/src/it/smart-generate/only-zargo/pom.xml trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java Log: - add AvailableData goal to obtain usables datas (reader, writer, templates, model types,...) - add a simplified inputs property configuration (ex : <inputs>zargo</inputs>) against no array notation (ex : <inputs><input>zargo</input></inputs>) Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModel.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModel.java 2009-12-19 14:46:11 UTC (rev 769) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModel.java 2009-12-19 18:03:08 UTC (rev 770) @@ -39,8 +39,12 @@ * by : $Author$ */ public interface ObjectModel extends Model { - /** + * Plexus role-hint + */ + String NAME = "objectmodel"; + + /** * Returns all classifiers defined in this model. (Except innerClasses) * @see ObjectModelClassifier * Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModel.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModel.java 2009-12-19 14:46:11 UTC (rev 769) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModel.java 2009-12-19 18:03:08 UTC (rev 770) @@ -35,8 +35,11 @@ * By : $Author$ */ public interface StateModel extends Model { - /** + * Plexus role-hint + */ + String NAME = "statemodel"; + /** * Return the collection of charts * @return collection of charts */ Modified: trunk/maven-eugene-plugin/src/it/smart-generate/all/pom.xml =================================================================== --- trunk/maven-eugene-plugin/src/it/smart-generate/all/pom.xml 2009-12-19 14:46:11 UTC (rev 769) +++ trunk/maven-eugene-plugin/src/it/smart-generate/all/pom.xml 2009-12-19 18:03:08 UTC (rev 770) @@ -83,9 +83,7 @@ <id>Zargo to java</id> <phase>generate-test-sources</phase> <configuration> - <inputs> - <input>zargo:src/test/zargo:*.zargo</input> - </inputs> + <inputs>zargo:src/test/zargo:*.zargo</inputs> <outputDirectory>target/generated-sources-zargo2Java</outputDirectory> </configuration> <goals> @@ -96,9 +94,7 @@ <id>Xmi to java</id> <phase>generate-test-sources</phase> <configuration> - <inputs> - <input>xmi</input> - </inputs> + <inputs>xmi</inputs> <outputDirectory>target/generated-sources-xmi2Java</outputDirectory> </configuration> <goals> @@ -109,9 +105,7 @@ <id>Model to java</id> <phase>generate-test-sources</phase> <configuration> - <inputs> - <input>model:target/generated-sources-zargo2Java/test-models:topiatest.objectmodel</input> - </inputs> + <inputs>model:target/generated-sources-zargo2Java/test-models:topiatest.objectmodel</inputs> <outputDirectory>target/generated-sources-objectModel2Java</outputDirectory> </configuration> <goals> Modified: trunk/maven-eugene-plugin/src/it/smart-generate/generators/pom.xml =================================================================== --- trunk/maven-eugene-plugin/src/it/smart-generate/generators/pom.xml 2009-12-19 14:46:11 UTC (rev 769) +++ trunk/maven-eugene-plugin/src/it/smart-generate/generators/pom.xml 2009-12-19 18:03:08 UTC (rev 770) @@ -93,9 +93,7 @@ <id>Test Regression Generator</id> <phase>generate-test-sources</phase> <configuration> - <inputs> - <input>model:src/test/models:dtotest.objectmodel</input> - </inputs> + <inputs>model:src/test/models:dtotest.objectmodel</inputs> <templates>org.nuiton.eugene.test.generator.BeanGenerator</templates> </configuration> <goals> @@ -106,9 +104,7 @@ <id>Test Bean Transformer</id> <phase>generate-test-sources</phase> <configuration> - <inputs> - <input>model:src/test/models:dtotest2.objectmodel</input> - </inputs> + <inputs>model:src/test/models:dtotest2.objectmodel</inputs> <templates>org.nuiton.eugene.test.generator.BeanTransformer</templates> </configuration> <goals> @@ -119,9 +115,7 @@ <id>Test Java Generator</id> <phase>generate-test-sources</phase> <configuration> - <inputs> - <input>model</input> - </inputs> + <inputs>model</inputs> <properties> <propertie> <key>reader</key> Modified: trunk/maven-eugene-plugin/src/it/smart-generate/only-zargo/pom.xml =================================================================== --- trunk/maven-eugene-plugin/src/it/smart-generate/only-zargo/pom.xml 2009-12-19 14:46:11 UTC (rev 769) +++ trunk/maven-eugene-plugin/src/it/smart-generate/only-zargo/pom.xml 2009-12-19 18:03:08 UTC (rev 770) @@ -67,9 +67,7 @@ <id>Zargo to xmi</id> <phase>generate-sources</phase> <configuration> - <inputs> - <input>zargo</input> - </inputs> + <inputs>zargo</inputs> <outputDirectory>target/generated-sources-xmi</outputDirectory> </configuration> <goals> @@ -80,9 +78,7 @@ <id>Zargo to xmi 2</id> <phase>generate-sources</phase> <configuration> - <inputs> - <input>src/main/zargo:**/*.zargo</input> - </inputs> + <inputs>src/main/zargo:**/*.zargo</inputs> <outputDirectory>target/generated-sources-xmi2</outputDirectory> </configuration> <goals> Modified: trunk/maven-eugene-plugin/src/it/smart-generate/only-zargo-xmi/pom.xml =================================================================== --- trunk/maven-eugene-plugin/src/it/smart-generate/only-zargo-xmi/pom.xml 2009-12-19 14:46:11 UTC (rev 769) +++ trunk/maven-eugene-plugin/src/it/smart-generate/only-zargo-xmi/pom.xml 2009-12-19 18:03:08 UTC (rev 770) @@ -69,9 +69,7 @@ <id>Zargo to object model</id> <phase>generate-sources</phase> <configuration> - <inputs> - <input>zargo:src/main/zargo:*.zargo</input> - </inputs> + <inputs>zargo:src/main/zargo:*.zargo</inputs> <outputDirectory>target/generated-sources-zargo2ObjectModel</outputDirectory> </configuration> <goals> @@ -83,9 +81,7 @@ <phase>generate-sources</phase> <configuration> <modelType>statemodel</modelType> - <inputs> - <input>zargo:src/main/zargo:*.zargo</input> - </inputs> + <inputs>zargo:src/main/zargo:*.zargo</inputs> <outputDirectory>target/generated-sources-zargo2StateModel</outputDirectory> </configuration> <goals> @@ -96,9 +92,7 @@ <id>Xmi to object model</id> <phase>generate-sources</phase> <configuration> - <inputs> - <input>xmi</input> - </inputs> + <inputs>xmi</inputs> <outputDirectory>target/generated-sources-xmi2ObjectModel</outputDirectory> </configuration> <goals> @@ -110,9 +104,7 @@ <phase>generate-sources</phase> <configuration> <modelType>statemodel</modelType> - <inputs> - <input>xmi</input> - </inputs> + <inputs>xmi</inputs> <outputDirectory>target/generated-sources-xmi2StateModel</outputDirectory> </configuration> <goals> Added: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java =================================================================== --- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java (rev 0) +++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java 2009-12-19 18:03:08 UTC (rev 770) @@ -0,0 +1,204 @@ +/* + * *##% + * EUGene :: Maven plugin + * Copyright (C) 2006 - 2009 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>. + * ##%* + */ +package org.nuiton.eugene.plugin; + +import org.apache.commons.lang.StringUtils; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.nuiton.eugene.ModelReader; +import org.nuiton.eugene.Template; +import org.nuiton.eugene.models.Model; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.writer.ChainedFileWriter; + +import java.util.Arrays; +import java.util.EnumSet; +import java.util.Map; +import java.util.Set; + +/** + * Obtain the list of some known data informations. + * <p/> + * Use the {@code dataTypes} property to specify a specific data type to use (otherwise + * will display all known data types). + * <p/> + * User: chemit + * Date: 24 nov. 2009 + * Time: 00:22:37 + * + * @goal available-data + * @requiresProject true + * @requiresDirectInvocation true + * @requiresDependencyResolution test + * @since 2.0.0 + */ +public class AvailableDataMojo extends AbstractMojo { + + /** + * Data type to display (let empty to see all datas). + * Can specify more than one separated by comma. + * <p/> + * Available types are : + * <pre> + * modeltype, + * modelreader, + * modeltemplate, + * writer + * </pre> + * <p/> + * <b>Note:</b> Let empty to display all data types. + * + * @parameter expression="${dataTypes}" default-value="" + * @since 2.0.0 + */ + protected String dataTypes; + + /** + * All available models (obtain by plexus, keys are plexus roles, values are a + * instance of corresponding model). + * + * @component role="org.nuiton.eugene.models.Model" + */ + protected Map<String, Model> modelTypes; + /** + * All available writers introspects via plexus + * + * @component role="org.nuiton.eugene.ModelReader" + */ + protected Map<String, ModelReader<?>> modelReaders; + /** + * All available templates introspects via plexus + * + * @component role="org.nuiton.eugene.Template" + */ + protected Map<String, Template<?>> modelTemplates; + /** + * All available writers introspects via plexus + * + * @component role="org.nuiton.eugene.writer.ChainedFileWriter" + */ + protected Map<String, ChainedFileWriter> writers; + + @Override + public void execute() throws MojoExecutionException, MojoFailureException { + StringBuilder buffer = new StringBuilder(); + dataTypes = dataTypes == null ? "" : dataTypes.trim(); + + Set<AvailableData> safeDataTypes; + + if (StringUtils.isEmpty(dataTypes)) { + // treate all data types + safeDataTypes = EnumSet.allOf(AvailableData.class); + + if (getLog().isDebugEnabled()) { + getLog().debug("will use all data types : " + safeDataTypes); + } + + } else { + + safeDataTypes = EnumSet.noneOf(AvailableData.class); + for (String s : dataTypes.split(",")) { + s = s.trim().toLowerCase(); + try { + AvailableData data = AvailableData.valueOf(s); + if (getLog().isDebugEnabled()) { + getLog().debug("will use data type " + data); + } + safeDataTypes.add(data); + } catch (IllegalArgumentException e) { + getLog().warn("does not know data type : " + s + " use one of " + Arrays.toString(AvailableData.values())); + } + } + } + + for (AvailableData data : safeDataTypes) { + appendData(data, buffer); + } + + getLog().info("Get datas for data types : " + safeDataTypes + buffer.toString()); + } + + protected void appendData(AvailableData data, StringBuilder buffer) { + + Map<String, ?> map = data.getData(this); + + int size = map.size(); + String dataType = data.name(); + if (size == 0) { + buffer.append("\nNo available ").append(dataType).append("."); + } else if (size == 1) { + buffer.append("\nFound one ").append(dataType).append(" : "); + } else { + buffer.append("\nFound ").append(size).append(" ").append(dataType).append("s : "); + } + for (Map.Entry<String, ?> e : map.entrySet()) { + String name = e.getKey(); + Object value = e.getValue(); + buffer.append("\n [").append(name).append("] with implementation '").append(data.toString(value)).append("'"); + } + } + + enum AvailableData { + modeltype { + @Override + public Map<String, ?> getData(AvailableDataMojo mojo) { + return mojo.modelTypes; + } + }, + writer { + @Override + public Map<String, ?> getData(AvailableDataMojo mojo) { + return mojo.writers; + } + @Override + String toString(Object data) { + ChainedFileWriter w = (ChainedFileWriter) data; + StringBuilder b = new StringBuilder(super.toString(data)); + b.append("\n").append(" inputProtocol : ").append(w.getInputProtocol()); + b.append("\n").append(" outputProtocol : ").append(w.getOutputProtocol(ObjectModel.class)); + b.append("\n").append(" defaultIncludes : ").append(w.getDefaultIncludes()); + b.append("\n").append(" defaultInputDirectory : ").append(w.getDefaultInputDirectory()); + b.append("\n").append(" defaultTestInputDirectory : ").append(w.getDefaultTestInputDirectory()); + return b.toString(); + } + }, + modelreader { + @Override + public Map<String, ?> getData(AvailableDataMojo mojo) { + return mojo.modelReaders; + } + }, + modeltemplate { + @Override + public Map<String, ?> getData(AvailableDataMojo mojo) { + return mojo.modelTemplates; + } + }; + + abstract Map<String, ?> getData(AvailableDataMojo mojo); + + String toString(Object data) { + return data.getClass().getName(); + } + } + +} \ No newline at end of file Property changes on: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java =================================================================== --- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2009-12-19 14:46:11 UTC (rev 769) +++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2009-12-19 18:03:08 UTC (rev 770) @@ -87,6 +87,11 @@ * </inputs> * </pre> * + * <b>Note:</b> If your using a single input, you can just write : + * <pre> + * <inputs>zargo</inputs> + * </pre> + * * @parameter expression="${eugene.inputs}" * @required * @since 2.0.0 @@ -282,6 +287,9 @@ @Override protected boolean init() throws Exception { + + modelType = modelType.trim().toLowerCase(); + // on recupere le fqn du model à traiter via le container plexus (plus pratique dans ce cas où on veut // pouvoir associé un nom à un type de service). Model model = _models.get(modelType.trim().toLowerCase()); @@ -416,6 +424,26 @@ } } + /** + * Add a single input to the {@link #inputs} property. + * + * <b>Note:</b> This is a convinient way to allow in pom to write + * <pre> + * <inputs>zargo</inputs> + * </pre> + * in stead of array notation : + * <pre> + * <inputs> + * <input>zargo:</input> + * </inputs> + * </pre> + * + * @param inputs unique input to add + */ + public void setInputs(String inputs) { + this.inputs = new String[]{inputs}; + } + @Override public File getOutputDirectory() { return outputDirectory;
participants (1)
-
tchemit@users.nuiton.org