branch develop updated (0f3fb0a -> 48d012a)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository eugene. See http://git.nuiton.org/eugene.git from 0f3fb0a Improve package tag value and stereotype detection. Closes #3749 Merge branch 'feature/3749' into develop new f9e4d7f Add stereotype on model new c4a1b3f Init stereotypeDefinitionProvieder at mojo init new a0b82ed Change some tag value to stereotype. new 48d012a Transform some tag values to stereotypes Add stereotype feature to model. The 4 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 48d012a2dd915651925d2d5fb697b8f6cf32f0a3 Merge: 0f3fb0a a0b82ed Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Aug 15 17:13:20 2015 +0200 Transform some tag values to stereotypes Add stereotype feature to model. Close #3751 Merge branch 'feature/3751' into develop commit a0b82eda1d3759f8861d5194e914abdf7a5f0c89 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Aug 15 17:07:46 2015 +0200 Change some tag value to stereotype. See #3751 commit c4a1b3fdf2d0555c012f303c8d811029dd6a9b4c Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Aug 15 17:04:29 2015 +0200 Init stereotypeDefinitionProvieder at mojo init commit f9e4d7f9a14c922862a6064e148ad359b7506a92 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Aug 15 17:03:49 2015 +0200 Add stereotype on model Summary of changes: .../eugene/java/AbstractJavaBeanTransformer.java | 22 +- .../nuiton/eugene/java/JavaBeanTransformer.java | 4 +- .../eugene/java/JavaTemplatesStereoTypes.java | 317 ++++++++++++++++++ .../nuiton/eugene/java/JavaTemplatesTagValues.java | 355 ++------------------- .../eugene/java/SimpleJavaBeanTransformer.java | 13 +- .../SimpleJavaBeanWithNoInterfaceTransformer.java | 11 +- .../eugene/java/JavaTemplatesStereoTypesTest.java | 9 +- .../eugene/java/JavaTemplatesTagValuesTest.java | 7 - .../org/nuiton/eugene/plugin/GenerateMojo.java | 11 +- .../eugene/java/ObjectModelTransformerToJava.java | 9 + .../main/java/org/nuiton/eugene/models/Model.java | 3 +- .../object/reader/AbstractObjectModelReader.java | 92 +++++- .../eugene/models/object/xml/ObjectModelImpl.java | 21 +- .../eugene/models/state/xml/StateModelImpl.java | 19 ++ ...reotypeDefinitionProviderManagerExtension.java} | 22 +- .../stereotype/StereotypeDefinitionProviders.java | 8 +- 16 files changed, 543 insertions(+), 380 deletions(-) copy eugene/src/main/java/org/nuiton/eugene/models/{tagvalue/TagValueDefinitionProviderManagerExtension.java => stereotype/StereotypeDefinitionProviderManagerExtension.java} (54%) -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository eugene. See http://git.nuiton.org/eugene.git commit f9e4d7f9a14c922862a6064e148ad359b7506a92 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Aug 15 17:03:49 2015 +0200 Add stereotype on model --- .../eugene/java/ObjectModelTransformerToJava.java | 9 +++ .../main/java/org/nuiton/eugene/models/Model.java | 3 +- .../object/reader/AbstractObjectModelReader.java | 92 ++++++++++++++++++++-- .../eugene/models/object/xml/ObjectModelImpl.java | 21 ++++- .../eugene/models/state/xml/StateModelImpl.java | 19 +++++ 5 files changed, 135 insertions(+), 9 deletions(-) diff --git a/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java b/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java index 08a4ab4..40b5f17 100644 --- a/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java +++ b/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java @@ -45,6 +45,8 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import org.nuiton.eugene.models.object.ObjectModelParameter; import org.nuiton.eugene.models.object.ObjectModelTransformer; import org.nuiton.eugene.models.object.ObjectModelType; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProviderManagerExtension; import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProviderManagerExtension; import org.nuiton.i18n.I18n; @@ -1033,4 +1035,11 @@ public abstract class ObjectModelTransformerToJava extends ObjectModelTransforme return extension.getTagValueDefinitionProvider(providerType); } + protected <T extends StereotypeDefinitionProvider> T getStereotypeDefinitionProvider(Class<T> providerType) { + + StereotypeDefinitionProviderManagerExtension extension = model.getExtension( + StereotypeDefinitionProviderManagerExtension.OBJECTMODEL_EXTENSION, StereotypeDefinitionProviderManagerExtension.class); + return extension.getStereotypeDefinitionProvider(providerType); + } + } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/Model.java b/eugene/src/main/java/org/nuiton/eugene/models/Model.java index a713fc7..ea30ba0 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/Model.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/Model.java @@ -23,12 +23,13 @@ package org.nuiton.eugene.models; +import org.nuiton.eugene.models.stereotype.StereotypeAble; import org.nuiton.eugene.models.tagvalue.TagValueAble; /** * Model. */ -public interface Model extends TagValueAble { +public interface Model extends TagValueAble, StereotypeAble { /** * Plexus role 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 b3bee55..3f6eea5 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 @@ -220,15 +220,35 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> if (key.startsWith(MODEL)) { + // model stereotype + if (key.contains(STEREOTYPE)) { + + Set<String> stereotypes = Stereotypes.getStereotypes(value); + for (String stereotype : stereotypes) { + boolean loaded = loadModelStereotype(model, stereotype); + safe &= loaded; + if (loaded) { + numberImportedStereotypes++; + } + } + continue; + + } + // model tag value + if (key.contains(TAGVALUE)) { + + boolean loaded = loadModelTagValue(model, key, value); + if (loaded) { + numberImportedTagValues++; + } + safe &= loaded; + continue; - boolean loaded = loadModelTagValue(model, key, value); - if (loaded) { - numberImportedTagValues++; } - safe &= loaded; - continue; + throw new InvalidModelPropertiesException(key + " is not a valid model entry."); + } if (key.startsWith(PACKAGE)) { @@ -408,7 +428,7 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> } - if (subPackage.getParentPackage() == null &&parentPackage != null) { + if (subPackage.getParentPackage() == null && parentPackage != null) { if (verbose) { @@ -697,6 +717,64 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> return true; } + protected boolean loadModelStereotype(ObjectModel model, String stereotype) throws InvalidModelPropertiesException { + + + boolean safe = false; + + try { + stereotypeDefinitionProvider.validate(stereotype, ObjectModel.class); + safe = true; + } catch (StereotypeNotFoundException e) { + + String message = "Invalid model stereotype [" + stereotype + "] : the stereotype '" + stereotype + "' is unknown."; + if (isStrictLoading()) { + if (log.isErrorEnabled()) { + log.error(message); + } + } else { + if (log.isWarnEnabled()) { + log.warn(message); + } + } + } catch (MismatchStereotypeTargetException e) { + String message = "Invalid model stereotype [" + stereotype + "] : this stereotype '" + stereotype + "' can not be apply on model."; + if (isStrictLoading()) { + if (log.isErrorEnabled()) { + log.error(message); + } + } else { + if (log.isWarnEnabled()) { + log.warn(message); + } + } + } + + if (safe) { + + // test if stereotype is deprecated + boolean deprecated = stereotypeDefinitionProvider.isDeprecated(stereotype); + if (deprecated) { + if (log.isWarnEnabled()) { + log.warn("Deprecated model stereotype usage: " + stereotype); + } + } + } else { + if (isStrictLoading()) { + // in strict loading do not accept unsafe stereotypes + return false; + } + } + + if (isVerbose()) { + log.info("stereotype imported " + stereotype + " --> model."); + } + + model.addStereotype(stereotype); + + return true; + } + protected boolean loadStereotype(ObjectModel model, String key, String fqn, @@ -736,7 +814,7 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> if (safe) { - // test if tagValue is deprecated + // test if stereotype is deprecated boolean deprecated = stereotypeDefinitionProvider.isDeprecated(stereotype); if (deprecated) { if (log.isWarnEnabled()) { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java index 8b65772..9a58dfa 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java @@ -37,9 +37,11 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; /** * Implementation class for the root node abstraction of object model trees. @@ -74,7 +76,9 @@ public class ObjectModelImpl implements ObjectModel { protected List<String> comments = new ArrayList<>(); - private Map<String, String> tagValues = new HashMap<>(); + protected Map<String, String> tagValues = new HashMap<>(); + + protected Set<String> stereotypes = new HashSet<>(); /** * Used to add others specific object to the model @@ -377,6 +381,21 @@ public class ObjectModelImpl implements ObjectModel { return comments; } + @Override + public Set<String> getStereotypes() { + return stereotypes; + } + + @Override + public boolean hasStereotype(String stereotypeName) { + return stereotypes.contains(stereotypeName); + } + + @Override + public void addStereotype(String stereotype) { + stereotypes.add(stereotype); + } + protected void mergePackages( ObjectModelPackageImpl initialPackage, ObjectModelPackageImpl additionalPackage) { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java index 9a2e8db..f45a87d 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java @@ -29,8 +29,10 @@ import org.nuiton.eugene.models.state.StateModelStateChart; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** * Implementation of the {@link StateModel}. @@ -60,6 +62,8 @@ public class StateModelImpl implements StateModel { */ protected Map<String, String> modelTagValues; + protected Set<String> stereotypes = new HashSet<>(); + /** * Used to add others specific object to the model * The key defined must be unique to get the significative extension associated to @@ -84,6 +88,21 @@ public class StateModelImpl implements StateModel { return name; } + @Override + public Set<String> getStereotypes() { + return stereotypes; + } + + @Override + public boolean hasStereotype(String stereotypeName) { + return stereotypes.contains(stereotypeName); + } + + @Override + public void addStereotype(String stereotype) { + stereotypes.add(stereotype); + } + /** * Set model name. * -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository eugene. See http://git.nuiton.org/eugene.git commit c4a1b3fdf2d0555c012f303c8d811029dd6a9b4c Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Aug 15 17:04:29 2015 +0200 Init stereotypeDefinitionProvieder at mojo init --- .../org/nuiton/eugene/plugin/GenerateMojo.java | 11 +++- ...ereotypeDefinitionProviderManagerExtension.java | 63 ++++++++++++++++++++++ .../stereotype/StereotypeDefinitionProviders.java | 8 +-- 3 files changed, 76 insertions(+), 6 deletions(-) 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 3e0e6d2..e5981de 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 @@ -39,7 +39,9 @@ import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.Template; import org.nuiton.eugene.models.Model; import org.nuiton.eugene.models.object.reader.InvalidModelPropertiesException; +import org.nuiton.eugene.models.stereotype.AggregateStereotypeDefinitionProvider; import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProviderManagerExtension; import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProviders; import org.nuiton.eugene.models.tagvalue.AggregateTagValueDefinitionProvider; import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; @@ -569,6 +571,7 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon getLog().info("Process phase [generator]"); AggregateTagValueDefinitionProvider tagValueDefinitionProvider = getTagValueDefinitionProvider(); + AggregateStereotypeDefinitionProvider stereotypeDefinitionProvider = getStereotypeDefinitionProvider(); for (ChainedFileWriterToMemoryModel entry : models) { Model model = entry.getModel(); @@ -577,6 +580,10 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon TagValueDefinitionProviderManagerExtension extension = model.getExtension(TagValueDefinitionProviderManagerExtension.OBJECTMODEL_EXTENSION, TagValueDefinitionProviderManagerExtension.class); extension.setAggregateTagValueDefinitionProvider(tagValueDefinitionProvider); + // init stereotype extension + StereotypeDefinitionProviderManagerExtension stereotypeExtension = model.getExtension(StereotypeDefinitionProviderManagerExtension.OBJECTMODEL_EXTENSION, StereotypeDefinitionProviderManagerExtension.class); + stereotypeExtension.setAggregateStereotypeDefinitionProvider(stereotypeDefinitionProvider); + Long lastModified = entry.getLastModifiedSource(); File outputDir = entry.getOutputDirectory(); @@ -958,9 +965,9 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon } - protected StereotypeDefinitionProvider getStereotypeDefinitionProvider() throws MojoExecutionException { + protected AggregateStereotypeDefinitionProvider getStereotypeDefinitionProvider() throws MojoExecutionException { - StereotypeDefinitionProvider provider; + AggregateStereotypeDefinitionProvider provider; if (stereotypeDefinitionProviders == null || stereotypeDefinitionProviders.isEmpty() || diff --git a/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProviderManagerExtension.java b/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProviderManagerExtension.java new file mode 100644 index 0000000..e4f899b --- /dev/null +++ b/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProviderManagerExtension.java @@ -0,0 +1,63 @@ +package org.nuiton.eugene.models.stereotype; + +/* + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2014 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; + +/** + * Created on 6/18/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 2.11 + */ +public class StereotypeDefinitionProviderManagerExtension { + + /** + * Extension static used to identify this extension in ObjectModel. + */ + public static final String OBJECTMODEL_EXTENSION = "stereotypeDefinitionProviders"; + + protected AggregateStereotypeDefinitionProvider aggregateStereotypeDefinitionProvider; + + public void setAggregateStereotypeDefinitionProvider(AggregateStereotypeDefinitionProvider aggregateStereotypeDefinitionProvider) { + this.aggregateStereotypeDefinitionProvider = aggregateStereotypeDefinitionProvider; + } + + public <T extends StereotypeDefinitionProvider> T getStereotypeDefinitionProvider(Class<T> providerType) { + + Preconditions.checkState(aggregateStereotypeDefinitionProvider != null, "No aggregateStereotypeDefinitionProvider assigned"); + + StereotypeDefinitionProvider result = null; + for (StereotypeDefinitionProvider stereotypeDefinitionProvider : aggregateStereotypeDefinitionProvider) { + if (providerType.equals(stereotypeDefinitionProvider.getClass())) { + result = stereotypeDefinitionProvider; + break; + } + } + + Preconditions.checkState(result != null, "No stereotypeDefinitionProvider of this type: " + providerType.getName()); + return (T) result; + + } + +} diff --git a/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProviders.java b/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProviders.java index 5df1e7c..3d13f8a 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProviders.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProviders.java @@ -43,7 +43,7 @@ public class StereotypeDefinitionProviders { * @param verbose verbose flag * @return the aggregate provider of stereotype definitions detected in the class-path */ - public static StereotypeDefinitionProvider newProvider(ClassLoader loader, boolean verbose) { + public static AggregateStereotypeDefinitionProvider newProvider(ClassLoader loader, boolean verbose) { if (loader == null) { @@ -51,7 +51,7 @@ public class StereotypeDefinitionProviders { loader = Thread.currentThread().getContextClassLoader(); } - StereotypeDefinitionProvider store = new AggregateStereotypeDefinitionProvider(loader); + AggregateStereotypeDefinitionProvider store = new AggregateStereotypeDefinitionProvider(loader); store.setVerbose(verbose || log.isDebugEnabled()); try { store.init(); @@ -68,9 +68,9 @@ public class StereotypeDefinitionProviders { * @param verbose verbose flag * @return the aggregate provider of stereotype definitions detected in the class-path */ - public static StereotypeDefinitionProvider newProvider(Iterable<StereotypeDefinitionProvider> providers, boolean verbose) { + public static AggregateStereotypeDefinitionProvider newProvider(Iterable<StereotypeDefinitionProvider> providers, boolean verbose) { - StereotypeDefinitionProvider store = new AggregateStereotypeDefinitionProvider(providers); + AggregateStereotypeDefinitionProvider store = new AggregateStereotypeDefinitionProvider(providers); store.setVerbose(verbose || log.isDebugEnabled()); try { store.init(); -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository eugene. See http://git.nuiton.org/eugene.git commit a0b82eda1d3759f8861d5194e914abdf7a5f0c89 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Aug 15 17:07:46 2015 +0200 Change some tag value to stereotype. See #3751 --- .../eugene/java/AbstractJavaBeanTransformer.java | 22 +- .../nuiton/eugene/java/JavaBeanTransformer.java | 4 +- .../eugene/java/JavaTemplatesStereoTypes.java | 317 ++++++++++++++++++ .../nuiton/eugene/java/JavaTemplatesTagValues.java | 355 ++------------------- .../eugene/java/SimpleJavaBeanTransformer.java | 13 +- .../SimpleJavaBeanWithNoInterfaceTransformer.java | 11 +- .../eugene/java/JavaTemplatesStereoTypesTest.java | 9 +- .../eugene/java/JavaTemplatesTagValuesTest.java | 7 - 8 files changed, 384 insertions(+), 354 deletions(-) diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java index bf282fc..0aa90ac 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java @@ -38,7 +38,7 @@ import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.ObjectModelJavaModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelPackage; -import org.nuiton.eugene.models.tagvalue.MissingTagValueException; +import org.nuiton.eugene.models.stereotype.MissingStereoTypeException; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; @@ -62,6 +62,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer private static final Log log = LogFactory.getLog(AbstractJavaBeanTransformer.class); private JavaTemplatesTagValues javaTemplatesTagValues; + private JavaTemplatesStereoTypes javaTemplatesStereoTypes; public JavaTemplatesTagValues getJavaTemplatesTagValues() { if (javaTemplatesTagValues == null) { @@ -70,6 +71,13 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer return javaTemplatesTagValues; } + public JavaTemplatesStereoTypes getJavaTemplatesStereoTypes() { + if (javaTemplatesStereoTypes == null) { + javaTemplatesStereoTypes = getStereotypeDefinitionProvider(JavaTemplatesStereoTypes.class); + } + return javaTemplatesStereoTypes; + } + protected boolean notFoundInClassPath(ObjectModelClass input, String className) { String fqn = input.getPackageName() + "." + className; boolean inClassPath = isInClassPath(fqn); @@ -843,12 +851,12 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer if (!notInClassPath) { - boolean canOverride = getJavaTemplatesTagValues().isOverrideAbstractClasses(aclass, aPackage, model); + boolean canOverride = getJavaTemplatesStereoTypes().isOverrideAbstractClasses(aclass, aPackage, model); String fqn = aclass.getPackageName() + "." + abstractClassName; if (!canOverride) { String message = "Can not override abstract class " + fqn + ", already found in classpath"; - message += "\n\nTo remove this check, add a tag value *overrideAbstractClasses* on model, package or class."; - MissingTagValueException exception = new MissingTagValueException("overrideAbstractClasses", "true", message, aPackage, aclass); + message += "\n\nTo remove this check, add the stereotype *overrideAbstractClasses* on model, package or class."; + MissingStereoTypeException exception = new MissingStereoTypeException("overrideAbstractClasses", message, aPackage, aclass); if (log.isErrorEnabled()) { log.error(exception.toString()); } @@ -869,13 +877,13 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer if (!noMethods) { - boolean canOverride = getJavaTemplatesTagValues().isAcceptBeanWithMethods(aclass, aPackage, model); + boolean canOverride = getJavaTemplatesStereoTypes().isAcceptBeanWithMethods(aclass, aPackage, model); String fqn = aclass.getPackageName() + "." + className; if (!canOverride) { String message = "Concrete class " + fqn + " contains some methods, the current generator does not accept it."; message += "\n\nSuch methods are not made to be designed, you should directly write them in the concrete class."; - message += "\n\nTo remove this check, add a tag value *acceptBeanWithMethods* on model, package or class:"; - MissingTagValueException exception = new MissingTagValueException("acceptBeanWithMethods", "true", message, aPackage, aclass); + message += "\n\nTo remove this check, add the stereotype *acceptBeanWithMethods* on model, package or class."; + MissingStereoTypeException exception = new MissingStereoTypeException("acceptBeanWithMethods", message, aPackage, aclass); if (log.isErrorEnabled()) { log.error(exception.toString()); } diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java index e65e7de..79437d1 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java @@ -176,10 +176,10 @@ public class JavaBeanTransformer extends AbstractJavaBeanTransformer { generateI18nBlockAndConstants(aPackage, input, output); - boolean usePCS = getJavaTemplatesTagValues().isGeneratePropertyChangeSupport(input, aPackage, model); + boolean usePCS = !getJavaTemplatesStereoTypes().isSkipGeneratePropertyChangeSupport(input, aPackage, model); boolean generateBooleanGetMethods = getEugeneTagValues().isGenerateBooleanGetMethods(input, aPackage, model); - boolean generateNotEmptyCollections = getJavaTemplatesTagValues().isGenerateNotEmptyCollections(input, aPackage, model); + boolean generateNotEmptyCollections = !getJavaTemplatesStereoTypes().isSkipGenerateNotEmptyCollections(input, aPackage, model); // Get available properties List<ObjectModelAttribute> properties = getProperties(input); diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesStereoTypes.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesStereoTypes.java index 838d3cd..1023421 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesStereoTypes.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesStereoTypes.java @@ -22,6 +22,7 @@ package org.nuiton.eugene.java; * #L% */ +import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelClassifier; import org.nuiton.eugene.models.object.ObjectModelPackage; import org.nuiton.eugene.models.stereotype.StereotypeDefinition; @@ -50,6 +51,148 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { public static final String STEREOTYPE_BEAN = "bean"; /** + * Tag value to authorize user to generate some bean with methods, some generators won't generate them : Lots code). + * + * By default, user should never add methods in bean classes, simply write them in your java code!. + * + * You can globaly use it on the complete model, on packages, or to a specific classifier. + * + * @see #isAcceptBeanWithMethods(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + @StereotypeDefinition( + target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, + documentation = "To authorize to generate bean with method (in some generator such method won't be generated).") + public static final String STEREOTYPE_ACCEPT_BEAN_WITH_METHODS = "acceptBeanWithMethods"; + + /** + * Tag value to authorize user to override abstract classes. + * + * By default, user should never override abstract classes but works on implementation ones. + * + * You can globaly use it on the complete model, on packages, or to a specific classifier. + * + * @see #isOverrideAbstractClasses(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + @StereotypeDefinition( + target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, + documentation = "To authorize to override abstract classes.") + public static final String STEREOTYPE_OVERRIDE_ABSTRACT_CLASSES = "overrideAbstractClasses"; + + /** + * Tag value to generate property change support on generated beans. + * + * You can globaly use it on the complete model, on packages, or to a specific classifier. + * + * @see #isSkipGeneratePropertyChangeSupport(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.12 + */ + @StereotypeDefinition( + target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, + documentation = "To generate property change support code.") + public static final String STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT = "generatePropertyChangeSupport"; + + /** + * Tag value to generate lazy instanciation of any collection to avoid NPEs. + * + * You can globaly use it on the complete model or a package, or to a specific classifier. + * + * @see #isSkipGenerateNotEmptyCollections(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.12 + */ + @StereotypeDefinition( + target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, + documentation = "To lazy instanciate collections to avoid NPE codes.") + public static final String STEREOTYPE_SKIP_GENERATE_NOT_EMPTY_COLLECTIONS = "generateNotEmptyCollections"; + + /** + * To generate an interface of each simple bean. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #isSimpleBeanSkipGenerateInterface(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + @StereotypeDefinition( + target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, + documentation = "To generate an interface for each bean " + + "for a class or any class of a model.\n" + + "(only effective with simple bean generator)") + public static final String STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_INTERFACE = "simpleBeanGenerateInterface"; + + /** + * To generate a factory of generated simple beans. + * + * You must use it on the complete model. + * + * @see #isSimpleBeanSkipGenerateFactory(ObjectModel) + * @since 2.6.2 + */ + @StereotypeDefinition( + target = {ObjectModel.class}, + documentation = "To generate a factory of simple bean.\n" + + "(only effective with simple bean generator)") + public static final String STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_FACTORY = "simpleBeanGenerateFactory"; + + /** + * To generate a factory of generated simple beans. + * + * You must use it on the complete model. + * + * @see #isSimpleBeanSkipGenerateDefaults(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.7.2 + */ + @StereotypeDefinition( + target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, + documentation = "To generate defaults class with simple operations on the type.\n" + + "(only effective with simple bean generator)") + public static final String STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_DEFAULTS = "simpleBeanGenerateDefaults"; + + /** + * To generate a factory of generated simple beans. + * + * You must use it on the complete model. + * + * @see #isSimpleBeanWithNoInterfaceSkipGenerateDefaults(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + @StereotypeDefinition( + target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, + documentation = "To skip generation of defaults class with simple operations on the type.\n" + + "(only effective with simple bean generator)") + public static final String STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_DEFAULTS = "simpleBeanWithNoInterfaceGenerateDefaults"; + + + /** + * To generate or not guava predicates on each property of the bean. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #isSimpleBeanWithNoInterfaceSkipGeneratePredicates(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + @StereotypeDefinition( + target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, + documentation = "To generate or not guava predicates on propertyes on beans.\n" + + "(only effective with simple bean with no interface generator)") + public static final String STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_PREDICATES = "simpleBeanWithNoInterfaceGeneratePredicates"; + + /** + * To generate or not guava functions on each property of the bean. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #isSimpleBeanWithNoInterfaceSkipGenerateFunctions(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + @StereotypeDefinition( + target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, + documentation = "To generate or not guava predicates on propertyes on beans.\n" + + "(only effective with simple bean with no interface generator)") + public static final String STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_FUNCTIONS = "simpleBeanWithNoInterfaceGenerateFunctions"; + + /** * Check if the given classifier has the {@link #STEREOTYPE_BEAN} stereotype. * * @param classifier classifier to test @@ -71,4 +214,178 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { return Stereotypes.findDirectStereotype(STEREOTYPE_BEAN, aPackage); } + /** + * Obtain the value of the {@link #STEREOTYPE_ACCEPT_BEAN_WITH_METHODS} tag value on the given model, package or classifier. + * + * It will first look on the model, then and package and then in the given classifier. + * + * If no value found, then will use the default value of the tag value. + * + * @param classifier classifier to seek + * @param aPackage package to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #STEREOTYPE_ACCEPT_BEAN_WITH_METHODS + * @since 3.0 + */ + public boolean isAcceptBeanWithMethods(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_ACCEPT_BEAN_WITH_METHODS, classifier, aPackage, model); + return value; + } + + /** + * Obtain the value of the {@link #STEREOTYPE_OVERRIDE_ABSTRACT_CLASSES} tag value on the given model, package or classifier. + * + * It will first look on the model, then and package and then in the given classifier. + * + * If no value found, then will use the default value of the tag value. + * + * @param classifier classifier to seek + * @param aPackage package to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #STEREOTYPE_OVERRIDE_ABSTRACT_CLASSES + * @since 3.0 + */ + public boolean isOverrideAbstractClasses(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_OVERRIDE_ABSTRACT_CLASSES, classifier, aPackage, model); + return value; + } + + /** + * Obtain the value of the {@link #STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT} tag value on the given model, package or classifier. + * + * It will first look on the model, then and package and then in the given classifier. + * + * If no value found, then will use the default value of the tag value. + * + * @param classifier classifier to seek + * @param aPackage package to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT + * @since 2.12 + */ + public boolean isSkipGeneratePropertyChangeSupport(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT, classifier, aPackage, model); + return value; + } + + /** + * Obtain the value of the {@link #STEREOTYPE_SKIP_GENERATE_NOT_EMPTY_COLLECTIONS} tag value on the given model, package or classifier. + * + * It will first look on the model, then and package and then in the given classifier. + * + * If no value found, then will use the default value of the tag value. + * + * @param classifier classifier to seek + * @param aPackage package to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #STEREOTYPE_SKIP_GENERATE_NOT_EMPTY_COLLECTIONS + * @since 2.12 + */ + public boolean isSkipGenerateNotEmptyCollections(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SKIP_GENERATE_NOT_EMPTY_COLLECTIONS, classifier, aPackage, model); + return value; + } + + /** + * Obtain the value of the {@link #STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_INTERFACE} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_INTERFACE + * @since 2.3 + */ + public boolean isSimpleBeanSkipGenerateInterface(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_INTERFACE, classifier, aPackage, model); + return value; + } + + /** + * Obtain the value of the {@link #STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_FACTORY} tag value on the given model or classifier. + * + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_FACTORY + * @since 2.7.2 + */ + public boolean isSimpleBeanSkipGenerateFactory(ObjectModel model) { + boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_FACTORY, model); + return value; + } + + /** + * Obtain the value of the {@link #STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_DEFAULTS} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_DEFAULTS + * @since 2.7.2 + */ + public boolean isSimpleBeanSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_DEFAULTS, classifier, aPackage, model); + return value; + } + + /** + * Obtain the value of the {@link #STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_DEFAULTS} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_DEFAULTS + * @since 3.0 + */ + public boolean isSimpleBeanWithNoInterfaceSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_DEFAULTS, classifier, aPackage, model); + return value; + } + + /** + * Obtain the value of the {@link #STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_PREDICATES} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * <strong>If not filled, then use default {@code s} value.</strong> + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_PREDICATES + * @since 3.0 + */ + public boolean isSimpleBeanWithNoInterfaceSkipGeneratePredicates(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_PREDICATES, classifier, aPackage, model); + return value; + } + + /** + * Obtain the value of the {@link #STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_FUNCTIONS} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * <strong>If not filled, then use default {@code s} value.</strong> + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_FUNCTIONS + * @since 3.0 + */ + public boolean isSimpleBeanWithNoInterfaceSkipGenerateFunctions(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_FUNCTIONS, classifier, aPackage, model); + return value; + } + + } diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java index 04f62f7..e11ebd9 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java @@ -38,70 +38,38 @@ import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; */ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { - /** - * Tag value to authorize user to generate some bean with methods, some generators won't generate them : Lots code). - * - * By default, user should never add methods in bean classes, simply write them in your java code!. - * - * You can globaly use it on the complete model, on packages, or to a specific classifier. - * - * @see #isAcceptBeanWithMethods(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - @TagValueDefinition( - target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, - defaultValue = "false", - documentation = "To authorize to generate bean with method (in some generator such method won't be generated).") - public static final String TAG_ACCEPT_BEAN_WITH_METHODS = "acceptBeanWithMethods"; - - /** - * Tag value to authorize user to override abstract classes. - * - * By default, user should never override abstract classes but works on implementation ones. - * - * You can globaly use it on the complete model, on packages, or to a specific classifier. - * - * @see #isOverrideAbstractClasses(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - @TagValueDefinition( - target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, - defaultValue = "false", - documentation = "To authorize to override abstract classes.") - public static final String TAG_OVERRIDE_ABSTRACT_CLASSES = "overrideAbstractClasses"; - - /** - * Tag value to generate property change support on generated beans. - * - * You can globaly use it on the complete model, on packages, or to a specific classifier. - * - * @see #isGeneratePropertyChangeSupport(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.12 - */ - @TagValueDefinition( - target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, - defaultValue = "true", - documentation = "To generate property change support code.") - public static final String TAG_GENERATE_PROPERTY_CHANGE_SUPPORT = "generatePropertyChangeSupport"; - - /** - * Tag value to generate lazy instanciation of any collection to avoid NPEs. - * - * You can globaly use it on the complete model or a package, or to a specific classifier. - * - * @see #isGenerateNotEmptyCollections(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.12 - */ - @TagValueDefinition( - target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, - defaultValue = "true", - documentation = "To lazy instanciate collections to avoid NPE codes.") - public static final String TAG_GENERATE_NOT_EMPTY_COLLECTIONS = "generateNotEmptyCollections"; +// /** +// * Tag value to generate property change support on generated beans. +// * +// * You can globaly use it on the complete model, on packages, or to a specific classifier. +// * +// * @see #isSkipGeneratePropertyChangeSupport(ObjectModelClassifier, ObjectModelPackage, ObjectModel) +// * @since 2.12 +// */ +// @TagValueDefinition( +// target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, +// defaultValue = "true", +// documentation = "To generate property change support code.") +// public static final String TAG_GENERATE_PROPERTY_CHANGE_SUPPORT = "generatePropertyChangeSupport"; +// +// /** +// * Tag value to generate lazy instanciation of any collection to avoid NPEs. +// * +// * You can globaly use it on the complete model or a package, or to a specific classifier. +// * +// * @see #isSkipGenerateNotEmptyCollections(ObjectModelClassifier, ObjectModelPackage, ObjectModel) +// * @since 2.12 +// */ +// @TagValueDefinition( +// target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, +// defaultValue = "true", +// documentation = "To lazy instanciate collections to avoid NPE codes.") +// public static final String TAG_GENERATE_NOT_EMPTY_COLLECTIONS = "generateNotEmptyCollections"; /** * Tag value to use a super class for generated bean. * - * If the bean needs Property change support (says you use the {@link #TAG_GENERATE_PROPERTY_CHANGE_SUPPORT}), + * If the bean needs Property change support (says you use the {@link JavaTemplatesStereoTypes#STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT}), * then your class must provide everything for it. * * More over, if you use some collections in your bean you must also define @@ -165,7 +133,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { /** * Tag value to use a super class for generated bean. * - * If the bean needs Property change support (says you use the tag-value {@link #TAG_GENERATE_PROPERTY_CHANGE_SUPPORT}, + * If the bean needs Property change support (says you use the tag-value {@link JavaTemplatesStereoTypes#STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT}, * then your class must provide evrything for it. * * More over, if you use some collections in your bean you must also define @@ -258,22 +226,6 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { public static final String TAG_SIMPLE_BEAN_CLASS_NAME_SUFFIX = "simpleBeanClassNameSuffix"; /** - * To generate an interface of each simple bean. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #isSimpleBeanGenerateInterface(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.6.2 - */ - @TagValueDefinition( - target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, - defaultValue = "true", - documentation = "To generate an interface for each bean " + - "for a class or any class of a model.\n" + - "(only effective with simple bean generator)") - public static final String TAG_SIMPLE_BEAN_GENERATE_INTERFACE = "simpleBeanGenerateInterface"; - - /** * Tag value to use a super interface for generated interfaces on simple bean. * * You can globaly use it on the complete model or to a specific classifier. @@ -319,35 +271,6 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { public static final String TAG_SIMPLE_BEAN_INTERFACE_NAME_SUFFIX = "simpleBeanInterfaceNameSuffix"; /** - * To generate a factory of generated simple beans. - * - * You must use it on the complete model. - * - * @see #isSimpleBeanGenerateFactory(ObjectModel) - * @since 2.6.2 - */ - @TagValueDefinition( - target = {ObjectModel.class}, defaultValue = "false", - documentation = "To generate a factory of simple bean.\n" + - "(only effective with simple bean generator)") - public static final String TAG_SIMPLE_BEAN_GENERATE_FACTORY = "simpleBeanGenerateFactory"; - - /** - * To generate a factory of generated simple beans. - * - * You must use it on the complete model. - * - * @see #isSimpleBeanGenerateDefaults(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.7.2 - */ - @TagValueDefinition( - target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, - defaultValue = "true", - documentation = "To generate defaults class with simple operations on the type.\n" + - "(only effective with simple bean generator)") - public static final String TAG_SIMPLE_BEAN_GENERATE_DEFAULTS = "simpleBeanGenerateDefaults"; - - /** * Tag value to use a super super-class for generated defaults class of a * simple bean. * @@ -396,7 +319,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { /** * Tag value to use a super class for generated bean. * - * If the bean needs Property change support (says you use the tag-value {@link #TAG_GENERATE_PROPERTY_CHANGE_SUPPORT}, + * If the bean needs Property change support (says you use the tag-value {@link JavaTemplatesStereoTypes#STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT}, * then your class must provide evrything for it. * * More over, if you use some collections in your bean you must also define @@ -458,21 +381,6 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { public static final String TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_SUPER_CLASS = "simpleBeanWithNoInterfaceSuperClass"; /** - * To generate a factory of generated simple beans. - * - * You must use it on the complete model. - * - * @see #isSimpleBeanWithNoInterfaceGenerateDefaults(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - @TagValueDefinition( - target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, - defaultValue = "true", - documentation = "To generate defaults class with simple operations on the type.\n" + - "(only effective with simple bean generator)") - public static final String TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_GENERATE_DEFAULTS = "simpleBeanWithNoInterfaceGenerateDefaults"; - - /** * Tag value to use a super super-class for generated defaults class of a simple bean. * * You can globaly use it on the complete model or to a specific classifier. @@ -548,112 +456,6 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { public static final String TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_DEFAULTS_CLASS_NAME_SUFFIX = "simpleBeanWithNoInterfaceDefaultsClassNameSuffix"; /** - * To generate or not guava predicates on each property of the bean. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #isSimpleBeanWithNoInterfaceGeneratePredicates(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - @TagValueDefinition( - target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, - defaultValue = "true", - documentation = "To generate or not guava predicates on propertyes on beans.\n" + - "(only effective with simple bean with no interface generator)") - public static final String TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_GENERATE_PREDICATES = "simpleBeanWithNoInterfaceGeneratePredicates"; - - /** - * To generate or not guava functions on each property of the bean. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #isSimpleBeanWithNoInterfaceGenerateFunctions(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - @TagValueDefinition( - target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, - defaultValue = "true", - documentation = "To generate or not guava predicates on propertyes on beans.\n" + - "(only effective with simple bean with no interface generator)") - public static final String TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_GENERATE_FUNCTIONS = "simpleBeanWithNoInterfaceGenerateFunctions"; - - /** - * Obtain the value of the {@link #TAG_ACCEPT_BEAN_WITH_METHODS} tag value on the given model, package or classifier. - * - * It will first look on the model, then and package and then in the given classifier. - * - * If no value found, then will use the default value of the tag value. - * - * @param classifier classifier to seek - * @param aPackage package to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see #TAG_ACCEPT_BEAN_WITH_METHODS - * @since 3.0 - */ - public boolean isAcceptBeanWithMethods(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = findBooleanTagValue(TAG_ACCEPT_BEAN_WITH_METHODS, classifier, aPackage, model); - return value; - } - - /** - * Obtain the value of the {@link #TAG_OVERRIDE_ABSTRACT_CLASSES} tag value on the given model, package or classifier. - * - * It will first look on the model, then and package and then in the given classifier. - * - * If no value found, then will use the default value of the tag value. - * - * @param classifier classifier to seek - * @param aPackage package to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see #TAG_OVERRIDE_ABSTRACT_CLASSES - * @since 3.0 - */ - public boolean isOverrideAbstractClasses(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = findBooleanTagValue(TAG_OVERRIDE_ABSTRACT_CLASSES, classifier, aPackage, model); - return value; - } - - /** - * Obtain the value of the {@link #TAG_GENERATE_PROPERTY_CHANGE_SUPPORT} tag value on the given model, package or classifier. - * - * It will first look on the model, then and package and then in the given classifier. - * - * If no value found, then will use the default value of the tag value. - * - * @param classifier classifier to seek - * @param aPackage package to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see #TAG_GENERATE_PROPERTY_CHANGE_SUPPORT - * @since 2.12 - */ - public boolean isGeneratePropertyChangeSupport(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = findBooleanTagValue(TAG_GENERATE_PROPERTY_CHANGE_SUPPORT, classifier, aPackage, model); - return value; - } - - /** - * Obtain the value of the {@link #TAG_GENERATE_NOT_EMPTY_COLLECTIONS} tag value on the given model, package or classifier. - * - * It will first look on the model, then and package and then in the given classifier. - * - * If no value found, then will use the default value of the tag value. - * - * @param classifier classifier to seek - * @param aPackage package to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see #TAG_GENERATE_NOT_EMPTY_COLLECTIONS - * @since 2.12 - */ - public boolean isGenerateNotEmptyCollections(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = findBooleanTagValue(TAG_GENERATE_NOT_EMPTY_COLLECTIONS, classifier, aPackage, model); - return value; - } - - /** * Obtain the value of the {@link #TAG_BEAN_SUPER_CLASS} tag value on the given model or classifier. * * It will first look on the model, and then in the given classifier. @@ -686,35 +488,6 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { } /** - * Obtain the value of the {@link #TAG_SIMPLE_BEAN_GENERATE_INTERFACE} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see #TAG_SIMPLE_BEAN_GENERATE_INTERFACE - * @since 2.3 - */ - public boolean isSimpleBeanGenerateInterface(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = findBooleanTagValue(TAG_SIMPLE_BEAN_GENERATE_INTERFACE, classifier, aPackage, model); - return value; - } - - /** - * Obtain the value of the {@link #TAG_SIMPLE_BEAN_GENERATE_FACTORY} tag value on the given model or classifier. - * - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see #TAG_SIMPLE_BEAN_GENERATE_FACTORY - * @since 2.7.2 - */ - public boolean isSimpleBeanGenerateFactory(ObjectModel model) { - boolean value = findBooleanTagValue(TAG_SIMPLE_BEAN_GENERATE_FACTORY, model); - return value; - } - - /** * Obtain the value of the {@link #TAG_SIMPLE_BEAN_INTERFACE_SUPER_CLASS} tag value on the given model or classifier. * * It will first look on the model, and then in the given classifier. @@ -795,22 +568,6 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { } /** - * Obtain the value of the {@link #TAG_SIMPLE_BEAN_GENERATE_DEFAULTS} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see #TAG_SIMPLE_BEAN_GENERATE_DEFAULTS - * @since 2.7.2 - */ - public boolean isSimpleBeanGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = findBooleanTagValue(TAG_SIMPLE_BEAN_GENERATE_DEFAULTS, classifier, aPackage, model); - return value; - } - - /** * Obtain the value of the {@link #TAG_SIMPLE_BEAN_DEFAULTS_SUPER_CLASS} tag value on the given model or classifier. * * It will first look on the model, and then in the given classifier. @@ -880,22 +637,6 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { } /** - * Obtain the value of the {@link #TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_GENERATE_DEFAULTS} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see #TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_GENERATE_DEFAULTS - * @since 3.0 - */ - public boolean isSimpleBeanWithNoInterfaceGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = findBooleanTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_GENERATE_DEFAULTS, classifier, aPackage, model); - return value; - } - - /** * Obtain the value of the {@link #TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_DEFAULTS_SUPER_CLASS} tag value on the given model or classifier. * * It will first look on the model, and then in the given classifier. @@ -980,40 +721,4 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { return value; } - /** - * Obtain the value of the {@link #TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_GENERATE_PREDICATES} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * <strong>If not filled, then use default {@code s} value.</strong> - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see #TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_GENERATE_PREDICATES - * @since 3.0 - */ - public boolean isSimpleBeanWithNoInterfaceGeneratePredicates(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = findBooleanTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_GENERATE_PREDICATES, classifier, aPackage, model); - return value; - } - - /** - * Obtain the value of the {@link #TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_GENERATE_FUNCTIONS} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * <strong>If not filled, then use default {@code s} value.</strong> - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see #TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_GENERATE_FUNCTIONS - * @since 3.0 - */ - public boolean isSimpleBeanWithNoInterfaceGenerateFunctions(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = findBooleanTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_GENERATE_FUNCTIONS, classifier, aPackage, model); - return value; - } - } diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformer.java index 7a4f1a6..61562e5 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformer.java @@ -142,7 +142,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { generateBeanDefaults(input, abstractDefaultClassName, defaultClassName); } - boolean generateAbstractDefaults = getJavaTemplatesTagValues().isSimpleBeanGenerateDefaults(input, aPackage, model) + boolean generateAbstractDefaults = !getJavaTemplatesStereoTypes().isSimpleBeanSkipGenerateDefaults(input, aPackage, model) && canGenerateAbstractClass(aPackage, input, abstractDefaultClassName); if (generateAbstractDefaults) { @@ -152,8 +152,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { protected boolean canGenerateFactory(ObjectModel model, String className) { - boolean generateFactory = - getJavaTemplatesTagValues().isSimpleBeanGenerateFactory(model); + boolean generateFactory = !getJavaTemplatesStereoTypes().isSimpleBeanSkipGenerateFactory(model); String defaultPackage = getDefaultPackageName(); @@ -168,7 +167,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { String className) { boolean generateInterface = - getJavaTemplatesTagValues().isSimpleBeanGenerateInterface(input, aPackage, model); + !getJavaTemplatesStereoTypes().isSimpleBeanSkipGenerateInterface(input, aPackage, model); boolean canGenerate = generateInterface && notFoundInClassPath(input, className); return canGenerate; @@ -180,7 +179,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { boolean withInput = input != null; boolean canGenerate = notFoundInClassPath(input, className) - && getJavaTemplatesTagValues().isSimpleBeanGenerateDefaults(input, aPackage, model); + && !getJavaTemplatesStereoTypes().isSimpleBeanSkipGenerateDefaults(input, aPackage, model); if (canGenerate) { @@ -391,10 +390,10 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { // Get available properties List<ObjectModelAttribute> properties = getProperties(input); - boolean usePCS = getJavaTemplatesTagValues().isGeneratePropertyChangeSupport(input, aPackage, model); + boolean usePCS = !getJavaTemplatesStereoTypes().isSkipGeneratePropertyChangeSupport(input, aPackage, model); boolean generateBooleanGetMethods = getEugeneTagValues().isGenerateBooleanGetMethods(input, aPackage, model); - boolean generateNotEmptyCollections = getJavaTemplatesTagValues().isGenerateNotEmptyCollections(input, aPackage, model); + boolean generateNotEmptyCollections = !getJavaTemplatesStereoTypes().isSkipGenerateNotEmptyCollections(input, aPackage, model); // Add properties field + javabean methods for (ObjectModelAttribute attr : properties) { diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformer.java index c0af983..2d6667d 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformer.java @@ -87,6 +87,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr ImmutableSet.Builder<ObjectModelClass> beanDefaultClassesBuilder = new ImmutableSet.Builder<>(); JavaTemplatesTagValues javaTemplatesTagValues = getJavaTemplatesTagValues(); + JavaTemplatesStereoTypes javaTemplatesStereoTypes = getJavaTemplatesStereoTypes(); for (ObjectModelClass aClass : model.getClasses()) { @@ -101,7 +102,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr String generateName = generateName(classNamePrefix, aClass.getName(), classNameSuffix); beanNameTranslationBuilder.put(aClass, generateName); - boolean canGenerateDefaults = javaTemplatesTagValues.isSimpleBeanWithNoInterfaceGenerateDefaults(aClass, aPackage, model); + boolean canGenerateDefaults = !javaTemplatesStereoTypes.isSimpleBeanWithNoInterfaceSkipGenerateDefaults(aClass, aPackage, model); if (canGenerateDefaults) { @@ -247,9 +248,9 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr // Get available properties List<ObjectModelAttribute> properties = getProperties(input); - boolean usePCS = getJavaTemplatesTagValues().isGeneratePropertyChangeSupport(input, aPackage, model); + boolean usePCS = !getJavaTemplatesStereoTypes().isSkipGeneratePropertyChangeSupport(input, aPackage, model); boolean generateBooleanGetMethods = getEugeneTagValues().isGenerateBooleanGetMethods(input, aPackage, model); - boolean generateNotEmptyCollections = getJavaTemplatesTagValues().isGenerateNotEmptyCollections(input, aPackage, model); + boolean generateNotEmptyCollections = !getJavaTemplatesStereoTypes().isSkipGenerateNotEmptyCollections(input, aPackage, model); // Add properties field + javabean methods for (ObjectModelAttribute attr : properties) { @@ -318,12 +319,12 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr generateAbstractBeanDefaultsCopyMethods(output, typeName); - boolean generatePredicates = getJavaTemplatesTagValues().isSimpleBeanWithNoInterfaceGeneratePredicates(aClass, aPackage, model); + boolean generatePredicates = !getJavaTemplatesStereoTypes().isSimpleBeanWithNoInterfaceSkipGeneratePredicates(aClass, aPackage, model); if (generatePredicates) { generateAbstractBeanDefaultsPredicates(aClass, output, typeName); } - boolean generateFunctions = getJavaTemplatesTagValues().isSimpleBeanWithNoInterfaceGenerateFunctions(aClass, aPackage, model); + boolean generateFunctions = !getJavaTemplatesStereoTypes().isSimpleBeanWithNoInterfaceSkipGenerateFunctions(aClass, aPackage, model); if (generateFunctions) { generateAbstractBeanDefaultsFunctions(aClass, output, typeName); } diff --git a/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesStereoTypesTest.java b/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesStereoTypesTest.java index 39e65f0..8e3b2ed 100644 --- a/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesStereoTypesTest.java +++ b/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesStereoTypesTest.java @@ -26,6 +26,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; 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.ObjectModelClassifier; import org.nuiton.eugene.models.object.ObjectModelEnumeration; @@ -50,12 +51,18 @@ public class JavaTemplatesStereoTypesTest { public void validate() throws Exception { validate(JavaTemplatesStereoTypes.STEREOTYPE_BEAN, true, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class, ObjectModelInterface.class); + validate(JavaTemplatesStereoTypes.STEREOTYPE_SKIP_GENERATE_NOT_EMPTY_COLLECTIONS, true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); + validate(JavaTemplatesStereoTypes.STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT, true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); + validate(JavaTemplatesStereoTypes.STEREOTYPE_SKIP_GENERATE_NOT_EMPTY_COLLECTIONS, false, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(JavaTemplatesStereoTypes.STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT, false, ObjectModelOperation.class, ObjectModelAttribute.class); validate(JavaTemplatesStereoTypes.STEREOTYPE_BEAN, false, ObjectModel.class, ObjectModelOperation.class); long l = System.nanoTime(); validate(JavaTemplatesStereoTypes.STEREOTYPE_BEAN + l, false, ObjectModelPackage.class, ObjectModel.class, ObjectModelOperation.class); - + validate(JavaTemplatesStereoTypes.STEREOTYPE_SKIP_GENERATE_NOT_EMPTY_COLLECTIONS + l, false, ObjectModelPackage.class, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(JavaTemplatesStereoTypes.STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT + l, false, ObjectModelPackage.class, ObjectModelOperation.class, ObjectModelAttribute.class); + } protected void validate(String name, boolean expected, Class<?>... types) { diff --git a/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesTagValuesTest.java b/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesTagValuesTest.java index e650642..d8595f6 100644 --- a/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesTagValuesTest.java +++ b/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesTagValuesTest.java @@ -48,17 +48,10 @@ public class JavaTemplatesTagValuesTest { @Test public void validate() throws Exception { - validate(JavaTemplatesTagValues.TAG_GENERATE_NOT_EMPTY_COLLECTIONS, true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); - validate(JavaTemplatesTagValues.TAG_GENERATE_PROPERTY_CHANGE_SUPPORT, true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); validate(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); - - validate(JavaTemplatesTagValues.TAG_GENERATE_NOT_EMPTY_COLLECTIONS, false, ObjectModelOperation.class, ObjectModelAttribute.class); - validate(JavaTemplatesTagValues.TAG_GENERATE_PROPERTY_CHANGE_SUPPORT, false, ObjectModelOperation.class, ObjectModelAttribute.class); validate(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, false, ObjectModelOperation.class, ObjectModelAttribute.class); long l = System.nanoTime(); - validate(JavaTemplatesTagValues.TAG_GENERATE_NOT_EMPTY_COLLECTIONS+ l, false, ObjectModelPackage.class, ObjectModelOperation.class, ObjectModelAttribute.class); - validate(JavaTemplatesTagValues.TAG_GENERATE_PROPERTY_CHANGE_SUPPORT + l, false, ObjectModelPackage.class, ObjectModelOperation.class, ObjectModelAttribute.class); validate(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS + l, false, ObjectModelPackage.class, ObjectModelOperation.class, ObjectModelAttribute.class); } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository eugene. See http://git.nuiton.org/eugene.git commit 48d012a2dd915651925d2d5fb697b8f6cf32f0a3 Merge: 0f3fb0a a0b82ed Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Aug 15 17:13:20 2015 +0200 Transform some tag values to stereotypes Add stereotype feature to model. Close #3751 Merge branch 'feature/3751' into develop .../eugene/java/AbstractJavaBeanTransformer.java | 22 +- .../nuiton/eugene/java/JavaBeanTransformer.java | 4 +- .../eugene/java/JavaTemplatesStereoTypes.java | 317 ++++++++++++++++++ .../nuiton/eugene/java/JavaTemplatesTagValues.java | 355 ++------------------- .../eugene/java/SimpleJavaBeanTransformer.java | 13 +- .../SimpleJavaBeanWithNoInterfaceTransformer.java | 11 +- .../eugene/java/JavaTemplatesStereoTypesTest.java | 9 +- .../eugene/java/JavaTemplatesTagValuesTest.java | 7 - .../org/nuiton/eugene/plugin/GenerateMojo.java | 11 +- .../eugene/java/ObjectModelTransformerToJava.java | 9 + .../main/java/org/nuiton/eugene/models/Model.java | 3 +- .../object/reader/AbstractObjectModelReader.java | 92 +++++- .../eugene/models/object/xml/ObjectModelImpl.java | 21 +- .../eugene/models/state/xml/StateModelImpl.java | 19 ++ ...ereotypeDefinitionProviderManagerExtension.java | 63 ++++ .../stereotype/StereotypeDefinitionProviders.java | 8 +- 16 files changed, 595 insertions(+), 369 deletions(-) -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm