This is an automated email from the git hooks/post-receive script. New commit to branch feature/editor in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit 92e9a292ee9de56cfa6ce71bbfffe4f91199dbc7 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Oct 2 18:15:47 2016 +0200 Use new API, clean reader code, remove extension on providers (no more used) --- eugene-java-templates/pom.xml | 14 + .../eugene/java/AbstractJavaBeanTransformer.java | 40 +- .../nuiton/eugene/java/EugeneJavaStereoTypes.java | 70 +- .../nuiton/eugene/java/EugeneJavaTagValues.java | 582 ++------------ .../nuiton/eugene/java/JavaBeanTransformer.java | 18 +- .../eugene/java/JavaBeanTransformerTagValues.java | 181 +++++ .../eugene/java/JavaEnumerationTransformer.java | 2 +- .../eugene/java/JavaInterfaceTransformer.java | 2 +- .../eugene/java/JavaTemplatesStereoTypes.java | 33 +- .../nuiton/eugene/java/JavaTemplatesTagValues.java | 45 +- .../eugene/java/SimpleJavaBeanTransformer.java | 52 +- .../java/SimpleJavaBeanTransformerTagValues.java | 461 +++++++++++ .../SimpleJavaBeanWithNoInterfaceTransformer.java | 39 +- ...avaBeanWithNoInterfaceTransformerTagValues.java | 421 ++++++++++ .../i18n/eugene-java-templates_en_GB.properties | 45 ++ .../i18n/eugene-java-templates_fr_FR.properties | 45 ++ .../eugene/java/EugeneJavaTagValuesTest.java | 6 +- eugene/pom.xml | 14 + .../org/nuiton/eugene/EugeneCoreStereotypes.java | 40 +- .../org/nuiton/eugene/EugeneCoreTagValues.java | 38 +- .../main/java/org/nuiton/eugene/GeneratorUtil.java | 13 +- .../main/java/org/nuiton/eugene/ModelReader.java | 27 - .../eugene/java/ObjectModelTransformerToJava.java | 32 +- .../extension/stereotype/StereotypeMetadata.java | 24 +- ...tereotypeMetadatasProviderManagerExtension.java | 42 - .../extension/stereotype/StereotypeUtil.java | 22 + .../AggregateStereotypeMetadatasProvider.java | 10 +- .../DefaultStereotypeMetadatasProvider.java | 22 + .../provider/StereotypeMetadatasProvider.java | 24 + .../extension/tagvalue/TagValueMetadata.java | 24 +- .../TagValueMetadatasProviderManagerExtension.java | 42 - .../models/extension/tagvalue/TagValueUtil.java | 22 + .../AggregateTagValueMetadatasProvider.java | 32 +- .../provider/DefaultTagValueMetadatasProvider.java | 24 +- .../provider/TagValueMetadatasProvider.java | 24 + .../object/reader/AbstractObjectModelReader.java | 885 +-------------------- .../extension/FlatModelExtensionFileParser.java | 17 +- .../reader/extension/ModelExtensionFileParser.java | 15 + .../main/resources/i18n/eugene_en_GB.properties | 11 + .../main/resources/i18n/eugene_fr_FR.properties | 11 + .../nuiton/eugene/EugeneCoreStereotypesTest.java | 22 + .../org/nuiton/eugene/EugeneCoreTagValuesTest.java | 22 + pom.xml | 11 +- 43 files changed, 1780 insertions(+), 1746 deletions(-) diff --git a/eugene-java-templates/pom.xml b/eugene-java-templates/pom.xml index 555e662..d86f56a 100644 --- a/eugene-java-templates/pom.xml +++ b/eugene-java-templates/pom.xml @@ -126,6 +126,20 @@ </execution> </executions> </plugin> + + <plugin> + <groupId>org.nuiton.i18n</groupId> + <artifactId>i18n-maven-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>parserJava</goal> + <goal>gen</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> </build> 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 87eb128..39a5868 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 @@ -30,6 +30,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.GeneratorUtil; +import org.nuiton.eugene.models.extension.stereotype.MissingStereoTypeException; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelClassifier; @@ -37,7 +38,6 @@ 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.stereotype.MissingStereoTypeException; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; @@ -48,7 +48,7 @@ import java.util.List; import java.util.Set; /** - * Common class form javabean like transformer. + * Common class form javabean like templates. * * @author Tony Chemit - chemit@codelutin.com * @see SimpleJavaBeanTransformer @@ -60,21 +60,12 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer /** Logger. */ private static final Log log = LogFactory.getLog(AbstractJavaBeanTransformer.class); - private EugeneJavaTagValues javaTemplatesTagValues; - private EugeneJavaStereoTypes javaTemplatesStereoTypes; + protected final EugeneJavaTagValues javaTemplatesTagValues; + protected final EugeneJavaStereoTypes javaTemplatesStereoTypes; - public EugeneJavaTagValues getJavaTemplatesTagValues() { - if (javaTemplatesTagValues == null) { - javaTemplatesTagValues = getTagValueMetadatasProvider(EugeneJavaTagValues.class); - } - return javaTemplatesTagValues; - } - - public EugeneJavaStereoTypes getJavaTemplatesStereoTypes() { - if (javaTemplatesStereoTypes == null) { - javaTemplatesStereoTypes = getStereotypeMetadatasProvider(EugeneJavaStereoTypes.class); - } - return javaTemplatesStereoTypes; + public AbstractJavaBeanTransformer() { + javaTemplatesTagValues = new EugeneJavaTagValues(); + javaTemplatesStereoTypes = new EugeneJavaStereoTypes(); } protected boolean notFoundInClassPath(ObjectModelClass input, String className) { @@ -122,7 +113,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer protected String getAttributeTypeWithGeneric(ObjectModelAttribute attr) { String attrType = getAttributeType(attr); - String generic = getEugeneTagValues().getAttributeGenericTagValue(attr); + String generic = eugeneTagValues.getAttributeGenericTagValue(attr); if (generic != null) { attrType += "<" + getAttributeType(generic) + ">"; } @@ -286,7 +277,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer (List<ObjectModelAttribute>) input.getAttributes(); List<ObjectModelAttribute> attrs = - new ArrayList<ObjectModelAttribute>(); + new ArrayList<>(); for (ObjectModelAttribute attr : attributes) { if (attr.isNavigable()) { @@ -641,7 +632,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer ObjectModelClassifier output, String extraInterfaceName) { boolean foundSerializable = false; - Set<String> added = new HashSet<String>(); + Set<String> added = new HashSet<>(); for (ObjectModelInterface parentInterface : input.getInterfaces()) { String fqn = parentInterface.getQualifiedName(); added.add(fqn); @@ -787,7 +778,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer ObjectModelClass input, ObjectModelClassifier output) { - String i18nPrefix = getEugeneTagValues().getI18nPrefixTagValue(input, + String i18nPrefix = eugeneTagValues.getI18nPrefixTagValue(input, aPackage, model); if (!StringUtils.isEmpty(i18nPrefix)) { @@ -841,8 +832,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer if (booleanProperty) { methodPrefix = JavaGeneratorUtil.OPERATION_GETTER_BOOLEAN_PREFIX; } - String getterName = getJavaBeanMethodName(methodPrefix, attrName); - return getterName; + return getJavaBeanMethodName(methodPrefix, attrName); } protected String generateName(String prefix, String name, String suffix) { @@ -863,7 +853,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer if (!notInClassPath) { - boolean canOverride = getJavaTemplatesStereoTypes().isOverrideAbstractClasses(aclass, aPackage, model); + boolean canOverride = javaTemplatesStereoTypes.isOverrideAbstractClasses(aclass, aPackage, model); String fqn = aclass.getPackageName() + "." + abstractClassName; if (!canOverride) { String message = "Can not override abstract class " + fqn + ", already found in classpath"; @@ -889,7 +879,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer if (!noMethods) { - boolean canOverride = getJavaTemplatesStereoTypes().isAcceptBeanWithMethods(aclass, aPackage, model); + boolean canOverride = javaTemplatesStereoTypes.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."; @@ -912,7 +902,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer } protected boolean isUseJava8() { - return getJavaTemplatesTagValues().isUseJava8(model); + return javaTemplatesTagValues.isUseJava8(model); } } diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaStereoTypes.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaStereoTypes.java index 125b674..244bdc2 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaStereoTypes.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaStereoTypes.java @@ -33,6 +33,7 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import java.util.Set; import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; /** * Defines all stereotypes managed by Java templates. @@ -43,6 +44,11 @@ import static org.nuiton.i18n.I18n.n; */ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { + @Override + public String getDescription() { + return t("eugene.java.stereotypes"); + } + public enum Store implements StereotypeMetadata { /** @@ -52,7 +58,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #hasBeanStereotype(ObjectModelPackage) * @since 2.5.6 */ - bean(n("eugene.java.stereotype.bean"), ObjectModelClassifier.class, ObjectModelPackage.class), + bean(n("eugene.java.stereotype.bean"), false, ObjectModelClassifier.class, ObjectModelPackage.class), /** * Tag value to authorize user to generate some bean with methods, some generators won't generate them : Lots code). @@ -64,8 +70,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isAcceptBeanWithMethods(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - acceptBeanWithMethods(n("eugene.java.stereotype.acceptBeanWithMethods"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - + @Deprecated + acceptBeanWithMethods(n("eugene.java.stereotype.acceptBeanWithMethods"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * Tag value to authorize user to override abstract classes. @@ -77,7 +83,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isOverrideAbstractClasses(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - overrideAbstractClasses(n("eugene.java.stereotype.overrideAbstractClasses"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + overrideAbstractClasses(n("eugene.java.stereotype.overrideAbstractClasses"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * Tag value to generate property change support on generated beans. @@ -87,7 +94,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSkipGeneratePropertyChangeSupport(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 2.12 */ - generatePropertyChangeSupport(n("eugene.java.stereotype.generatePropertyChangeSupport"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + generatePropertyChangeSupport(n("eugene.java.stereotype.generatePropertyChangeSupport"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * Tag value to generate lazy instanciation of any collection to avoid NPEs. @@ -97,7 +105,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSkipGenerateNotEmptyCollections(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 2.12 */ - generateNotEmptyCollections(n("eugene.java.stereotype.generateNotEmptyCollections"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + generateNotEmptyCollections(n("eugene.java.stereotype.generateNotEmptyCollections"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To generate an interface of each simple bean. @@ -107,7 +116,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanSkipGenerateInterface(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 2.6.2 */ - simpleBeanGenerateInterface(n("eugene.java.stereotype.simpleBeanGenerateInterface"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + simpleBeanGenerateInterface(n("eugene.java.stereotype.simpleBeanGenerateInterface"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To generate a factory of generated simple beans. @@ -117,7 +127,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanSkipGenerateFactory(ObjectModel) * @since 2.6.2 */ - simpleBeanGenerateFactory(n("eugene.java.stereotype.simpleBeanGenerateFactory"), ObjectModel.class), + @Deprecated + simpleBeanGenerateFactory(n("eugene.java.stereotype.simpleBeanGenerateFactory"), true, ObjectModel.class), /** * To generate a factory of generated simple beans. @@ -127,7 +138,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanSkipGenerateDefaults(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 2.7.2 */ - simpleBeanGenerateDefaults(n("eugene.java.stereotype.simpleBeanGenerateDefaults"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + simpleBeanGenerateDefaults(n("eugene.java.stereotype.simpleBeanGenerateDefaults"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To generate a factory of generated simple beans. @@ -137,8 +149,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanWithNoInterfaceSkipGenerateDefaults(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceGenerateDefaults(n("eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateDefaults"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - + @Deprecated + simpleBeanWithNoInterfaceGenerateDefaults(n("eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateDefaults"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To generate or not guava predicates on each property of the bean. @@ -148,7 +160,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanWithNoInterfaceSkipGeneratePredicates(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceGeneratePredicates(n("eugene.java.stereotype.simpleBeanWithNoInterfaceGeneratePredicates"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + simpleBeanWithNoInterfaceGeneratePredicates(n("eugene.java.stereotype.simpleBeanWithNoInterfaceGeneratePredicates"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To generate or not guava functions on each property of the bean. @@ -158,7 +171,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanWithNoInterfaceSkipGenerateFunctions(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceGenerateFunctions(n("eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateFunctions"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + simpleBeanWithNoInterfaceGenerateFunctions(n("eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateFunctions"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To generate or not constructors methods on Default classes. @@ -168,15 +182,17 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(ObjectModelClassifier, ObjectModelPackage, ObjectModel)} * @since 3.0 */ - simpleBeanWithNoInterfaceSkipGenerateConstructors(n("eugene.java.stereotype.simpleBeanWithNoInterfaceSkipGenerateConstructors"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class); - + @Deprecated + simpleBeanWithNoInterfaceSkipGenerateConstructors(n("eugene.java.stereotype.simpleBeanWithNoInterfaceSkipGenerateConstructors"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class); private final Set<Class<?>> targets; - private final String i18nDocumentationKey; + private final String i18nDescriptionKey; + private final boolean deprecated; - Store(String i18nDocumentationKey, Class<?>... targets) { + Store(String i18nDescriptionKey, boolean deprecated, Class<?>... targets) { + this.deprecated = deprecated; this.targets = ImmutableSet.copyOf(targets); - this.i18nDocumentationKey = i18nDocumentationKey; + this.i18nDescriptionKey = i18nDescriptionKey; } @Override @@ -190,13 +206,13 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { } @Override - public String getI18nDocumentationKey() { - return i18nDocumentationKey; + public String getDescription() { + return t(i18nDescriptionKey); } @Override public boolean isDeprecated() { - return false; + return deprecated; } } @@ -240,6 +256,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#acceptBeanWithMethods * @since 3.0 */ + @Deprecated public boolean isAcceptBeanWithMethods(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.acceptBeanWithMethods, classifier, aPackage, model); } @@ -258,6 +275,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#overrideAbstractClasses * @since 3.0 */ + @Deprecated public boolean isOverrideAbstractClasses(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.overrideAbstractClasses, classifier, aPackage, model); } @@ -276,6 +294,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#generatePropertyChangeSupport * @since 2.12 */ + @Deprecated public boolean isSkipGeneratePropertyChangeSupport(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.generatePropertyChangeSupport, classifier, aPackage, model); } @@ -294,6 +313,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#generateNotEmptyCollections * @since 2.12 */ + @Deprecated public boolean isSkipGenerateNotEmptyCollections(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.generateNotEmptyCollections, classifier, aPackage, model); } @@ -309,6 +329,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanGenerateInterface * @since 2.3 */ + @Deprecated public boolean isSimpleBeanSkipGenerateInterface(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanGenerateInterface, classifier, aPackage, model); } @@ -321,6 +342,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanGenerateFactory * @since 2.7.2 */ + @Deprecated public boolean isSimpleBeanSkipGenerateFactory(ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanGenerateFactory, model); } @@ -336,6 +358,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanGenerateDefaults * @since 2.7.2 */ + @Deprecated public boolean isSimpleBeanSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanGenerateDefaults, classifier, aPackage, model); } @@ -351,6 +374,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanWithNoInterfaceGenerateDefaults * @since 3.0 */ + @Deprecated public boolean isSimpleBeanWithNoInterfaceSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanWithNoInterfaceGenerateDefaults, classifier, aPackage, model); } @@ -368,6 +392,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanWithNoInterfaceGeneratePredicates * @since 3.0 */ + @Deprecated public boolean isSimpleBeanWithNoInterfaceSkipGeneratePredicates(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanWithNoInterfaceGeneratePredicates, classifier, aPackage, model); } @@ -385,6 +410,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanWithNoInterfaceGenerateFunctions * @since 3.0 */ + @Deprecated public boolean isSimpleBeanWithNoInterfaceSkipGenerateFunctions(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanWithNoInterfaceGenerateFunctions, classifier, aPackage, model); } @@ -402,9 +428,9 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanWithNoInterfaceSkipGenerateConstructors * @since 3.0 */ + @Deprecated public boolean isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanWithNoInterfaceSkipGenerateConstructors, classifier, aPackage, model); } - } diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaTagValues.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaTagValues.java index 7ca6609..f9d013d 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaTagValues.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaTagValues.java @@ -23,7 +23,6 @@ package org.nuiton.eugene.java; */ import com.google.common.collect.ImmutableSet; -import org.apache.commons.lang3.StringUtils; import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; import org.nuiton.eugene.models.extension.tagvalue.matcher.EqualsTagValueNameMatcher; @@ -35,6 +34,7 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import java.util.Set; import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; /** * Defines all tag values managed by Java templates. @@ -45,342 +45,57 @@ import static org.nuiton.i18n.I18n.n; */ public class EugeneJavaTagValues extends DefaultTagValueMetadatasProvider { -// /** -// * 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.") -// generatePropertyChangeSupport(n("eugene.java.tagvalue."), String.class, null,ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), -// -// /** -// * 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.") -// generateNotEmptyCollections(n("eugene.java.tagvalue."), String.class, null,ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Override + public String getDescription() { + return t("eugene.java.tagvalues"); + } public enum Store implements TagValueMetadata { /** - * Tag value to use a super class for generated bean. - * - * 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 - * two method named {@code getChild(Collection list, int index)} and - * {@code getChild(List list, int index)} - * - * See new code to know minimum stuff to add in your class for this purpose. - * <pre> - * public abstract class AbstractBean implements Serializable { - * - * private static final long serialVersionUID = 1L; - * - * protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); - * - * public void addPropertyChangeListener(PropertyChangeListener listener) { - * pcs.addPropertyChangeListener(listener); - * } - * - * public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - * pcs.addPropertyChangeListener(propertyName, listener); - * } - * - * public void removePropertyChangeListener(PropertyChangeListener listener) { - * pcs.removePropertyChangeListener(listener); - * } - * - * public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { - * pcs.removePropertyChangeListener(propertyName, listener); - * } - * - * protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { - * pcs.firePropertyChange(propertyName, oldValue, newValue); - * } - * - * protected void firePropertyChange(String propertyName, Object newValue) { - * firePropertyChange(propertyName, null, newValue); - * } - * - * protected <T> T getChild(Collection<T> list, int index) { - * return CollectionUtil.getOrNull(list, index); - * } - * - * protected <T> T getChild(List<T> list, int index) { - * return CollectionUtil.getOrNull(list, index); - * } - * } - * </pre> - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getBeanSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.5.6 - */ - beanSuperClass(n("eugene.java.tagvalue.beanSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - /** - * Tag value to use a super class for generated bean. - * - * 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 - * two method named {@code getChild(Collection list, int index)} and - * {@code getChild(List list, int index)} - * - * See new code to know minimum stuff to add in your class for this purpose. - * <pre> - * public abstract class AbstractBean implements Serializable { - * - * private static final long serialVersionUID = 1L; - * - * protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); - * - * public void addPropertyChangeListener(PropertyChangeListener listener) { - * pcs.addPropertyChangeListener(listener); - * } - * - * public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - * pcs.addPropertyChangeListener(propertyName, listener); - * } - * - * public void removePropertyChangeListener(PropertyChangeListener listener) { - * pcs.removePropertyChangeListener(listener); - * } - * - * public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { - * pcs.removePropertyChangeListener(propertyName, listener); - * } - * - * protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { - * pcs.firePropertyChange(propertyName, oldValue, newValue); - * } - * - * protected void firePropertyChange(String propertyName, Object newValue) { - * firePropertyChange(propertyName, null, newValue); - * } - * - * protected <T> T getChild(Collection<T> list, int index) { - * return CollectionUtil.getOrNull(list, index); - * } - * - * protected <T> T getChild(List<T> list, int index) { - * return CollectionUtil.getOrNull(list, index); - * } - * } - * </pre> - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.5.6 - */ - simpleBeanSuperClass(n("eugene.java.tagvalue.simpleBeanSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a prefix on the name of each generated bean class. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.6.2 - */ - simpleBeanClassNamePrefix(n("eugene.java.tagvalue.simpleBeanClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a prefix on the name of each generated bean class. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.6.2 - */ - simpleBeanClassNameSuffix(n("eugene.java.tagvalue.simpleBeanClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * 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. - * - * @see #getSimpleBeanInterfaceSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.6.2 - */ - simpleBeanInterfaceSuperClass(n("eugene.java.tagvalue.simpleBeanInterfaceSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a prefix on the name of each generated interface of a simple bean. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanInterfaceNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.6.2 - */ - simpleBeanInterfaceNamePrefix(n("eugene.java.tagvalue.simpleBeanInterfaceNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a prefix on the name of each generated interface of a simple bean. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanInterfaceNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.6.2 - */ - simpleBeanInterfaceNameSuffix(n("eugene.java.tagvalue.simpleBeanInterfaceNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * 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. - * - * @see #getSimpleBeanDefaultsSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.7.2 - */ - simpleBeanDefaultsSuperClass(n("eugene.java.tagvalue.simpleBeanDefaultsSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a prefix on the name of each generated bean class. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.7.2 - */ - simpleBeanDefaultsClassNamePrefix(n("eugene.java.tagvalue.simpleBeanDefaultsClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a suffix on the name of each generated bean class. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanDefaultsClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.6.2 - */ - simpleBeanDefaultsClassNameSuffix(n("eugene.java.tagvalue.simpleBeanDefaultsClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * Tag value to use a super class for generated bean. - * - * 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 - * two method named {@code getChild(Collection list, int index)} and - * {@code getChild(List list, int index)} - * - * See new code to know minimum stuff to add in your class for this purpose. - * <pre> - * public abstract class AbstractBean implements Serializable { - * - * private static final long serialVersionUID = 1L; + * Tag value to authorize user to generate some bean with methods, some generators won't generate them : Lots code). * - * protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + * By default, user should never add methods in bean classes, simply write them in your java code!. * - * public void addPropertyChangeListener(PropertyChangeListener listener) { - * pcs.addPropertyChangeListener(listener); - * } + * You can globaly use it on the complete model, on packages, or to a specific classifier. * - * public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - * pcs.addPropertyChangeListener(propertyName, listener); - * } - * - * public void removePropertyChangeListener(PropertyChangeListener listener) { - * pcs.removePropertyChangeListener(listener); - * } - * - * public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { - * pcs.removePropertyChangeListener(propertyName, listener); - * } - * - * protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { - * pcs.firePropertyChange(propertyName, oldValue, newValue); - * } - * - * protected void firePropertyChange(String propertyName, Object newValue) { - * firePropertyChange(propertyName, null, newValue); - * } - * - * protected <T> T getChild(Collection<T> list, int index) { - * return CollectionUtil.getOrNull(list, index); - * } - * - * protected <T> T getChild(List<T> list, int index) { - * return CollectionUtil.getOrNull(list, index); - * } - * } - * </pre> - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanWithNoInterfaceSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @see #isAcceptBeanWithMethods(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceSuperClass(n("eugene.java.tagvalue.simpleBeanWithNoInterfaceSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + acceptBeanWithMethods(n("eugene.java.tagvalue.acceptBeanWithMethods"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - /** - * 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. - * - * @see #getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - simpleBeanWithNoInterfaceDefaultsSuperClass(n("eugene.java.tagvalue.simpleBeanWithNoInterfaceDefaultsSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** - * To add a prefix on the name of each generated bean class. + * Tag value to authorize user to override abstract classes. * - * You can globaly use it on the complete model or to a specific classifier. + * By default, user should never override abstract classes but works on implementation ones. * - * @see #getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - simpleBeanWithNoInterfaceClassNamePrefix(n("eugene.java.tagvalue.simpleBeanWithNoInterfaceClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a prefix on the name of each generated bean class. + * You can globaly use it on the complete model, on packages, or to a specific classifier. * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @see #isOverrideAbstractClasses(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceClassNameSuffix(n("eugene.java.tagvalue.simpleBeanWithNoInterfaceClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + overrideAbstractClasses(n("eugene.java.tagvalue.overrideAbstractClasses"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** - * To add a prefix on the name of each generated bean class. + * Tag value to generate property change support on generated beans. * - * You can globaly use it on the complete model or to a specific classifier. + * You can globaly use it on the complete model, on packages, or to a specific classifier. * - * @see #getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @see #isSkipGeneratePropertyChangeSupport(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceDefaultsClassNamePrefix(n("eugene.java.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + generatePropertyChangeSupport(n("eugene.java.tagvalue.generatePropertyChangeSupport"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** - * To add a suffix on the name of each generated bean class. + * Tag value to generate lazy instanciation of any collection to avoid NPEs. * - * You can globaly use it on the complete model or to a specific classifier. + * You can globaly use it on the complete model or a package, or to a specific classifier. * - * @see #getSimpleBeanWithNoInterfaceDefaultsClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @see #isSkipGenerateNotEmptyCollections(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceDefaultsClassNameSuffix(n("eugene.java.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + generateNotEmptyCollections(n("eugene.java.tagvalue.generateNotEmptyCollections"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To use java 8 new syntax and api in generation. @@ -394,13 +109,13 @@ public class EugeneJavaTagValues extends DefaultTagValueMetadatasProvider { private final Set<Class<?>> targets; private final Class<?> type; - private final String i18nDocumentationKey; + private final String i18nDescriptionKey; private final String defaultValue; - Store(String i18nDocumentationKey, Class<?> type, String defaultValue, Class<?>... targets) { + Store(String i18nDescriptionKey, Class<?> type, String defaultValue, Class<?>... targets) { this.targets = ImmutableSet.copyOf(targets); this.type = type; - this.i18nDocumentationKey = i18nDocumentationKey; + this.i18nDescriptionKey = i18nDescriptionKey; this.defaultValue = defaultValue; } @@ -425,8 +140,8 @@ public class EugeneJavaTagValues extends DefaultTagValueMetadatasProvider { } @Override - public String getI18nDocumentationKey() { - return i18nDocumentationKey; + public String getDescription() { + return t(i18nDescriptionKey); } @Override @@ -445,257 +160,76 @@ public class EugeneJavaTagValues extends DefaultTagValueMetadatasProvider { super((TagValueMetadata[]) Store.values()); } - /** - * Obtain the value of the {@link Store#beanSuperClass} tag value on the given model or classifier. + * Obtain the value of the {@link Store#acceptBeanWithMethods} tag value on the given model, package or classifier. * - * It will first look on the model, and then in the given classifier. + * It will first look on the model, then and package 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 Store#beanSuperClass - * @since 2.3 - */ - public String getBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.beanSuperClass, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanSuperClass} 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 Store#simpleBeanSuperClass - * @since 2.6.2 - */ - public String getSimpleBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanSuperClass, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanInterfaceSuperClass} tag value on the given model or classifier. - * - * It will first look on the model, 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 Store#simpleBeanInterfaceSuperClass - * @since 2.6.2 - */ - public String getSimpleBeanInterfaceSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanInterfaceSuperClass, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanClassNamePrefix} 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 Store#simpleBeanClassNamePrefix - * @since 2.6.2 - */ - public String getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanClassNamePrefix, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanClassNameSuffix} 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 Store#simpleBeanClassNameSuffix - * @since 2.6.2 - */ - public String getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanClassNameSuffix, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanInterfaceNamePrefix} 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 Store#simpleBeanInterfaceNamePrefix - * @since 2.6.2 - */ - public String getSimpleBeanInterfaceNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanInterfaceNamePrefix, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanInterfaceNameSuffix} 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 Store#simpleBeanInterfaceNameSuffix - * @since 2.6.2 - */ - public String getSimpleBeanInterfaceNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanInterfaceNameSuffix, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanDefaultsSuperClass} 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 Store#simpleBeanDefaultsSuperClass - * @since 2.7.2 - */ - public String getSimpleBeanDefaultsSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanDefaultsSuperClass, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanDefaultsClassNamePrefix} 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 Store#simpleBeanDefaultsClassNamePrefix - * @since 2.7.2 - */ - public String getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanDefaultsClassNamePrefix, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanDefaultsClassNameSuffix} 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 Store#simpleBeanDefaultsClassNameSuffix - * @since 2.6.2 - */ - public String getSimpleBeanDefaultsClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = TagValueUtil.findTagValue(Store.simpleBeanDefaultsClassNameSuffix, classifier, aPackage, model); - if (StringUtils.isBlank(value)) { - value = "s"; - } - return value; - } - - /** - * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceSuperClass} 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 Store#simpleBeanWithNoInterfaceSuperClass + * @see Store#acceptBeanWithMethods * @since 3.0 */ - public String getSimpleBeanWithNoInterfaceSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceSuperClass, classifier, aPackage, model); + public boolean isAcceptBeanWithMethods(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.acceptBeanWithMethods, classifier, aPackage, model); } /** - * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceDefaultsSuperClass} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. + * Obtain the value of the {@link Store#overrideAbstractClasses} tag value on the given model, package or 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 Store#simpleBeanWithNoInterfaceDefaultsSuperClass - * @since 3.0 - */ - public String getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceDefaultsSuperClass, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceClassNamePrefix} tag value on the given model or classifier. + * It will first look on the model, then and package and then in the given classifier. * - * It will first look on the model, 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 Store#simpleBeanWithNoInterfaceClassNamePrefix + * @see Store#overrideAbstractClasses * @since 3.0 */ - public String getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceClassNamePrefix, classifier, aPackage, model); + public boolean isOverrideAbstractClasses(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.overrideAbstractClasses, classifier, aPackage, model); } /** - * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceClassNameSuffix} tag value on the given model or classifier. + * Obtain the value of the {@link Store#generatePropertyChangeSupport} tag value on the given model, package or classifier. * - * It will first look on the model, and then in the given classifier. + * It will first look on the model, then and package 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 Store#simpleBeanWithNoInterfaceClassNameSuffix - * @since 3.0 - */ - public String getSimpleBeanWithNoInterfaceClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceClassNameSuffix, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceDefaultsClassNamePrefix} tag value on the given model or classifier. - * - * It will first look on the model, 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 Store#simpleBeanWithNoInterfaceDefaultsClassNamePrefix - * @since 3.0 + * @see Store#generatePropertyChangeSupport + * @since 2.12 */ - public String getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceDefaultsClassNamePrefix, classifier, aPackage, model); + public boolean isSkipGeneratePropertyChangeSupport(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.generatePropertyChangeSupport, classifier, aPackage, model); } /** - * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceDefaultsClassNameSuffix} tag value on the given model or classifier. + * Obtain the value of the {@link Store#generateNotEmptyCollections} tag value on the given model, package or classifier. * - * It will first look on the model, and then in the given classifier. + * It will first look on the model, then and package and then in the given classifier. * - * <strong>If not filled, then use default {@code s} value.</strong> + * 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 Store#simpleBeanWithNoInterfaceDefaultsClassNameSuffix - * @since 3.0 + * @see Store#generateNotEmptyCollections + * @since 2.12 */ - public String getSimpleBeanWithNoInterfaceDefaultsClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceDefaultsClassNameSuffix, classifier, aPackage, model); - if (StringUtils.isBlank(value)) { - value = "s"; - } - return value; + public boolean isSkipGenerateNotEmptyCollections(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.generateNotEmptyCollections, classifier, aPackage, model); } /** 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 79437d1..8dde685 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 @@ -50,6 +50,12 @@ public class JavaBeanTransformer extends AbstractJavaBeanTransformer { private static final Log log = LogFactory.getLog(JavaBeanTransformer.class); + protected final JavaBeanTransformerTagValues javaBeanTransformerTagValues; + + public JavaBeanTransformer() { + javaBeanTransformerTagValues = new JavaBeanTransformerTagValues(); + } + @Override public void transformFromClass(ObjectModelClass input) { @@ -78,7 +84,7 @@ public class JavaBeanTransformer extends AbstractJavaBeanTransformer { protected boolean canGenerateImpl(ObjectModelClass input, ObjectModelClass abstractOutput) { String fqn = input.getQualifiedName() + "Impl"; - if (isInClassPath(fqn)) { + if (getResourcesHelper().isJavaFileInClassPath(fqn)) { // already in class-path return false; @@ -144,9 +150,7 @@ public class JavaBeanTransformer extends AbstractJavaBeanTransformer { if (!superClassIsBean) { // try to find a super class by tag-value - superClass = - getJavaTemplatesTagValues().getBeanSuperClassTagValue( - input, aPackage, model); + superClass = javaBeanTransformerTagValues.getBeanSuperClassTagValue(input, aPackage, model); if (superClass != null) { // will act as if super class is a bean @@ -176,10 +180,10 @@ public class JavaBeanTransformer extends AbstractJavaBeanTransformer { generateI18nBlockAndConstants(aPackage, input, output); - boolean usePCS = !getJavaTemplatesStereoTypes().isSkipGeneratePropertyChangeSupport(input, aPackage, model); + boolean usePCS = !javaTemplatesStereoTypes.isSkipGeneratePropertyChangeSupport(input, aPackage, model); - boolean generateBooleanGetMethods = getEugeneTagValues().isGenerateBooleanGetMethods(input, aPackage, model); - boolean generateNotEmptyCollections = !getJavaTemplatesStereoTypes().isSkipGenerateNotEmptyCollections(input, aPackage, model); + boolean generateBooleanGetMethods = eugeneTagValues.isGenerateBooleanGetMethods(input, aPackage, model); + boolean generateNotEmptyCollections = !javaTemplatesStereoTypes.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/JavaBeanTransformerTagValues.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformerTagValues.java new file mode 100644 index 0000000..febd6ad --- /dev/null +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformerTagValues.java @@ -0,0 +1,181 @@ +package org.nuiton.eugene.java; + +/* + * #%L + * EUGene :: Java templates + * %% + * Copyright (C) 2012 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.collect.ImmutableSet; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; +import org.nuiton.eugene.models.extension.tagvalue.matcher.EqualsTagValueNameMatcher; +import org.nuiton.eugene.models.extension.tagvalue.provider.DefaultTagValueMetadatasProvider; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelPackage; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + +/** + * Defines all tag values managed by Java templates. + * + * @author Tony Chemit - chemit@codelutin.com + * @plexus.component role="org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider" role-hint="eugene-java-templates" + * @since 2.5.6 + */ +public class JavaBeanTransformerTagValues extends DefaultTagValueMetadatasProvider { + + @Override + public String getDescription() { + return t("eugene.javaBeanTransformer.tagvalues"); + } + + public enum Store implements TagValueMetadata { + + /** + * Tag value to use a super class for generated bean. + * + * 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 + * two method named {@code getChild(Collection list, int index)} and + * {@code getChild(List list, int index)} + * + * See new code to know minimum stuff to add in your class for this purpose. + * <pre> + * public abstract class AbstractBean implements Serializable { + * + * private static final long serialVersionUID = 1L; + * + * protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + * + * public void addPropertyChangeListener(PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(listener); + * } + * + * public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(propertyName, listener); + * } + * + * public void removePropertyChangeListener(PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(listener); + * } + * + * public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(propertyName, listener); + * } + * + * protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { + * pcs.firePropertyChange(propertyName, oldValue, newValue); + * } + * + * protected void firePropertyChange(String propertyName, Object newValue) { + * firePropertyChange(propertyName, null, newValue); + * } + * + * protected <T> T getChild(Collection<T> list, int index) { + * return CollectionUtil.getOrNull(list, index); + * } + * + * protected <T> T getChild(List<T> list, int index) { + * return CollectionUtil.getOrNull(list, index); + * } + * } + * </pre> + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getBeanSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.5.6 + */ + beanSuperClass(n("eugene.javaBeanTransformer.tagvalue.beanSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class); + private final Set<Class<?>> targets; + private final Class<?> type; + private final String i18nDescriptionKey; + private final String defaultValue; + + Store(String i18nDescriptionKey, Class<?> type, String defaultValue, Class<?>... targets) { + this.targets = ImmutableSet.copyOf(targets); + this.type = type; + this.i18nDescriptionKey = i18nDescriptionKey; + this.defaultValue = defaultValue; + } + + @Override + public String getName() { + return name(); + } + + @Override + public Set<Class<?>> getTargets() { + return targets; + } + + @Override + public Class<?> getType() { + return type; + } + + @Override + public Class<EqualsTagValueNameMatcher> getMatcherClass() { + return EqualsTagValueNameMatcher.class; + } + + @Override + public String getDescription() { + return t(i18nDescriptionKey); + } + + @Override + public String getDefaultValue() { + return defaultValue; + } + + @Override + public boolean isDeprecated() { + return false; + } + + } + + public JavaBeanTransformerTagValues() { + super((TagValueMetadata[]) Store.values()); + } + + /** + * Obtain the value of the {@link Store#beanSuperClass} 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 Store#beanSuperClass + * @since 2.3 + */ + public String getBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.beanSuperClass, classifier, aPackage, model); + } + +} diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaEnumerationTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaEnumerationTransformer.java index 07880d1..bcd5b54 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaEnumerationTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaEnumerationTransformer.java @@ -76,7 +76,7 @@ public class JavaEnumerationTransformer extends ObjectModelTransformerToJava { if (b) { // check if not found in class-path - b = !isInClassPath(input); + b = !getResourcesHelper().isJavaFileInClassPath(input.getQualifiedName()); } return b; } diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java index d2dc31e..e564bb3 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java @@ -123,7 +123,7 @@ public class JavaInterfaceTransformer extends ObjectModelTransformerToJava { protected boolean canGenerate(ObjectModelInterface input) { // check if not found in class-path - boolean b = !isInClassPath(input); + boolean b = !getResourcesHelper().isJavaFileInClassPath(input.getQualifiedName()); if (b) { 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 7344287..1e38930 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 @@ -243,8 +243,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @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; + return Stereotypes.findDirectStereotype(STEREOTYPE_ACCEPT_BEAN_WITH_METHODS, classifier, aPackage, model); } /** @@ -262,8 +261,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @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; + return Stereotypes.findDirectStereotype(STEREOTYPE_OVERRIDE_ABSTRACT_CLASSES, classifier, aPackage, model); } /** @@ -281,8 +279,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @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; + return Stereotypes.findDirectStereotype(STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT, classifier, aPackage, model); } /** @@ -300,8 +297,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @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; + return Stereotypes.findDirectStereotype(STEREOTYPE_SKIP_GENERATE_NOT_EMPTY_COLLECTIONS, classifier, aPackage, model); } /** @@ -316,8 +312,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @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; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_INTERFACE, classifier, aPackage, model); } /** @@ -329,8 +324,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @since 2.7.2 */ public boolean isSimpleBeanSkipGenerateFactory(ObjectModel model) { - boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_FACTORY, model); - return value; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_FACTORY, model); } /** @@ -345,8 +339,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @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; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_DEFAULTS, classifier, aPackage, model); } /** @@ -361,8 +354,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @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; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_DEFAULTS, classifier, aPackage, model); } /** @@ -379,8 +371,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @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; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_PREDICATES, classifier, aPackage, model); } /** @@ -397,8 +388,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @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; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_FUNCTIONS, classifier, aPackage, model); } /** @@ -415,8 +405,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @since 3.0 */ public boolean isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_DEFAULT_CONSTRUCTORS, classifier, aPackage, model); - return value; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_DEFAULT_CONSTRUCTORS, classifier, aPackage, model); } 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 1131b8c..c18a197 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 @@ -467,8 +467,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.3 */ public String getBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_BEAN_SUPER_CLASS, classifier, aPackage, model); - return value; + return findTagValue(TAG_BEAN_SUPER_CLASS, classifier, aPackage, model); } /** @@ -483,8 +482,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.6.2 */ public String getSimpleBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_SUPER_CLASS, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_SUPER_CLASS, classifier, aPackage, model); } /** @@ -499,8 +497,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.6.2 */ public String getSimpleBeanInterfaceSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_INTERFACE_SUPER_CLASS, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_INTERFACE_SUPER_CLASS, classifier, aPackage, model); } /** @@ -515,8 +512,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.6.2 */ public String getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_CLASS_NAME_PREFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_CLASS_NAME_PREFIX, classifier, aPackage, model); } /** @@ -531,8 +527,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.6.2 */ public String getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_CLASS_NAME_SUFFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_CLASS_NAME_SUFFIX, classifier, aPackage, model); } /** @@ -547,8 +542,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.6.2 */ public String getSimpleBeanInterfaceNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_INTERFACE_NAME_PREFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_INTERFACE_NAME_PREFIX, classifier, aPackage, model); } /** @@ -563,8 +557,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.6.2 */ public String getSimpleBeanInterfaceNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_INTERFACE_NAME_SUFFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_INTERFACE_NAME_SUFFIX, classifier, aPackage, model); } /** @@ -579,8 +572,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.7.2 */ public String getSimpleBeanDefaultsSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_DEFAULTS_SUPER_CLASS, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_DEFAULTS_SUPER_CLASS, classifier, aPackage, model); } /** @@ -595,8 +587,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.7.2 */ public String getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_PREFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_PREFIX, classifier, aPackage, model); } /** @@ -632,8 +623,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 3.0 */ public String getSimpleBeanWithNoInterfaceSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_SUPER_CLASS, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_SUPER_CLASS, classifier, aPackage, model); } /** @@ -648,8 +638,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 3.0 */ public String getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_DEFAULTS_SUPER_CLASS, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_DEFAULTS_SUPER_CLASS, classifier, aPackage, model); } /** @@ -664,8 +653,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 3.0 */ public String getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_CLASS_NAME_PREFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_CLASS_NAME_PREFIX, classifier, aPackage, model); } /** @@ -680,8 +668,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 3.0 */ public String getSimpleBeanWithNoInterfaceClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_CLASS_NAME_SUFFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_CLASS_NAME_SUFFIX, classifier, aPackage, model); } /** @@ -696,8 +683,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 3.0 */ public String getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_DEFAULTS_CLASS_NAME_PREFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_DEFAULTS_CLASS_NAME_PREFIX, classifier, aPackage, model); } /** @@ -743,8 +729,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.15 */ public boolean isUseJava8(ObjectModel model) { - boolean value = findBooleanTagValue(TAG_JAVA8, model); - return value; + return findBooleanTagValue(TAG_JAVA8, model); } } 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 61562e5..88c9405 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 @@ -58,8 +58,13 @@ import java.util.List; public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { /** Logger. */ - private static final Log log = - LogFactory.getLog(SimpleJavaBeanTransformer.class); + private static final Log log = LogFactory.getLog(SimpleJavaBeanTransformer.class); + + protected final SimpleJavaBeanTransformerTagValues simpleJavaBeanTransformerTagValues; + + public SimpleJavaBeanTransformer() { + simpleJavaBeanTransformerTagValues = new SimpleJavaBeanTransformerTagValues(); + } @Override public void transformFromModel(ObjectModel model) { @@ -142,7 +147,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { generateBeanDefaults(input, abstractDefaultClassName, defaultClassName); } - boolean generateAbstractDefaults = !getJavaTemplatesStereoTypes().isSimpleBeanSkipGenerateDefaults(input, aPackage, model) + boolean generateAbstractDefaults = !javaTemplatesStereoTypes.isSimpleBeanSkipGenerateDefaults(input, aPackage, model) && canGenerateAbstractClass(aPackage, input, abstractDefaultClassName); if (generateAbstractDefaults) { @@ -152,25 +157,22 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { protected boolean canGenerateFactory(ObjectModel model, String className) { - boolean generateFactory = !getJavaTemplatesStereoTypes().isSimpleBeanSkipGenerateFactory(model); + boolean generateFactory = !javaTemplatesStereoTypes.isSimpleBeanSkipGenerateFactory(model); String defaultPackage = getDefaultPackageName(); String fqn = defaultPackage + "." + className; - boolean canGenerate = generateFactory && !isInClassPath(fqn); - return canGenerate; + return generateFactory && !getResourcesHelper().isJavaFileInClassPath(fqn); } protected boolean canGenerateInterface(ObjectModelPackage aPackage, ObjectModelClass input, String className) { - boolean generateInterface = - !getJavaTemplatesStereoTypes().isSimpleBeanSkipGenerateInterface(input, aPackage, model); + boolean generateInterface = !javaTemplatesStereoTypes.isSimpleBeanSkipGenerateInterface(input, aPackage, model); - boolean canGenerate = generateInterface && notFoundInClassPath(input, className); - return canGenerate; + return generateInterface && notFoundInClassPath(input, className); } @@ -179,7 +181,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { boolean withInput = input != null; boolean canGenerate = notFoundInClassPath(input, className) - && !getJavaTemplatesStereoTypes().isSimpleBeanSkipGenerateDefaults(input, aPackage, model); + && !javaTemplatesStereoTypes.isSimpleBeanSkipGenerateDefaults(input, aPackage, model); if (canGenerate) { @@ -277,7 +279,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { // try to find a super class by tag-value superClass = - getJavaTemplatesTagValues().getSimpleBeanInterfaceSuperClassTagValue( + simpleJavaBeanTransformerTagValues.getSimpleBeanInterfaceSuperClassTagValue( input, aPackage, model); } @@ -350,9 +352,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { if (!superClassIsBean) { // try to find a super class by tag-value - superClass = - getJavaTemplatesTagValues().getSimpleBeanSuperClassTagValue( - input, aPackage, model); + superClass = simpleJavaBeanTransformerTagValues.getSimpleBeanSuperClassTagValue(input, aPackage, model); if (superClass != null) { // will act as if super class is a bean @@ -390,10 +390,10 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { // Get available properties List<ObjectModelAttribute> properties = getProperties(input); - boolean usePCS = !getJavaTemplatesStereoTypes().isSkipGeneratePropertyChangeSupport(input, aPackage, model); + boolean usePCS = !javaTemplatesStereoTypes.isSkipGeneratePropertyChangeSupport(input, aPackage, model); - boolean generateBooleanGetMethods = getEugeneTagValues().isGenerateBooleanGetMethods(input, aPackage, model); - boolean generateNotEmptyCollections = !getJavaTemplatesStereoTypes().isSkipGenerateNotEmptyCollections(input, aPackage, model); + boolean generateBooleanGetMethods = eugeneTagValues.isGenerateBooleanGetMethods(input, aPackage, model); + boolean generateNotEmptyCollections = !javaTemplatesStereoTypes.isSkipGenerateNotEmptyCollections(input, aPackage, model); // Add properties field + javabean methods for (ObjectModelAttribute attr : properties) { @@ -422,7 +422,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { // try to find a super class by tag-value String superClassName = - getJavaTemplatesTagValues().getSimpleBeanDefaultsSuperClassTagValue( + simpleJavaBeanTransformerTagValues.getSimpleBeanDefaultsSuperClassTagValue( aClass, aPackage, model); ObjectModelClass output = createAbstractClass(abstractoutclassName, packageName); @@ -513,7 +513,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { protected Collection<ObjectModelOperation> getPublicOperations(ObjectModelClass clazz) { - Collection<ObjectModelOperation> result = new ArrayList<ObjectModelOperation>(); + Collection<ObjectModelOperation> result = new ArrayList<>(); for (ObjectModelOperation operation : clazz.getOperations()) { ObjectModelJavaModifier visibility = @@ -527,8 +527,8 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { } protected String getBeanInterfaceName(ObjectModelPackage aPackage, ObjectModelClass input) { - String interfaceNamePrefix = getJavaTemplatesTagValues().getSimpleBeanInterfaceNamePrefixTagValue(input, aPackage, model); - String interfaceNameSuffix = getJavaTemplatesTagValues().getSimpleBeanInterfaceNameSuffixTagValue(input, aPackage, model); + String interfaceNamePrefix = simpleJavaBeanTransformerTagValues.getSimpleBeanInterfaceNamePrefixTagValue(input, aPackage, model); + String interfaceNameSuffix = simpleJavaBeanTransformerTagValues.getSimpleBeanInterfaceNameSuffixTagValue(input, aPackage, model); return generateName( interfaceNamePrefix, @@ -538,8 +538,8 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { } protected String getBeanClassName(ObjectModelPackage aPackage, ObjectModelClass input) { - String classNamePrefix = getJavaTemplatesTagValues().getSimpleBeanClassNamePrefixTagValue(input, aPackage, model); - String classNameSuffix = getJavaTemplatesTagValues().getSimpleBeanClassNameSuffixTagValue(input, aPackage, model); + String classNamePrefix = simpleJavaBeanTransformerTagValues.getSimpleBeanClassNamePrefixTagValue(input, aPackage, model); + String classNameSuffix = simpleJavaBeanTransformerTagValues.getSimpleBeanClassNameSuffixTagValue(input, aPackage, model); return generateName( classNamePrefix, @@ -549,8 +549,8 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { } protected String getBeanDefaultsClassName(ObjectModelPackage aPackage, ObjectModelClass input) { - String classNamePrefix = getJavaTemplatesTagValues().getSimpleBeanDefaultsClassNamePrefixTagValue(input, aPackage, model); - String classNameSuffix = getJavaTemplatesTagValues().getSimpleBeanDefaultsClassNameSuffixTagValue(input, aPackage, model); + String classNamePrefix = simpleJavaBeanTransformerTagValues.getSimpleBeanDefaultsClassNamePrefixTagValue(input, aPackage, model); + String classNameSuffix = simpleJavaBeanTransformerTagValues.getSimpleBeanDefaultsClassNameSuffixTagValue(input, aPackage, model); return generateName( classNamePrefix, input.getName(), diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformerTagValues.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformerTagValues.java new file mode 100644 index 0000000..378aef4 --- /dev/null +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformerTagValues.java @@ -0,0 +1,461 @@ +package org.nuiton.eugene.java; + +/* + * #%L + * EUGene :: Java templates + * %% + * Copyright (C) 2012 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.collect.ImmutableSet; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; +import org.nuiton.eugene.models.extension.tagvalue.matcher.EqualsTagValueNameMatcher; +import org.nuiton.eugene.models.extension.tagvalue.provider.DefaultTagValueMetadatasProvider; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelPackage; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + +/** + * Defines all tag values managed by Java templates. + * + * @author Tony Chemit - chemit@codelutin.com + * @plexus.component role="org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider" role-hint="simpleJavaBean" + * @since 2.5.6 + */ +public class SimpleJavaBeanTransformerTagValues extends DefaultTagValueMetadatasProvider { + @Override + public String getDescription() { + return t("eugene.simpleBeanTransformer.tagvalues"); + } + + public enum Store implements TagValueMetadata { + + /** + * 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 + */ + simpleBeanGenerateInterface(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateInterface"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To generate a factory of generated simple beans. + * + * You must use it on the complete model. + * + * @see #isSimpleBeanSkipGenerateFactory(ObjectModel) + * @since 2.6.2 + */ + simpleBeanGenerateFactory(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateFactory"), boolean.class, null, ObjectModel.class), + + /** + * 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 + */ + simpleBeanGenerateDefaults(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateDefaults"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag value to use a super class for generated bean. + * + * 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 + * two method named {@code getChild(Collection list, int index)} and + * {@code getChild(List list, int index)} + * + * See new code to know minimum stuff to add in your class for this purpose. + * <pre> + * public abstract class AbstractBean implements Serializable { + * + * private static final long serialVersionUID = 1L; + * + * protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + * + * public void addPropertyChangeListener(PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(listener); + * } + * + * public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(propertyName, listener); + * } + * + * public void removePropertyChangeListener(PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(listener); + * } + * + * public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(propertyName, listener); + * } + * + * protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { + * pcs.firePropertyChange(propertyName, oldValue, newValue); + * } + * + * protected void firePropertyChange(String propertyName, Object newValue) { + * firePropertyChange(propertyName, null, newValue); + * } + * + * protected <T> T getChild(Collection<T> list, int index) { + * return CollectionUtil.getOrNull(list, index); + * } + * + * protected <T> T getChild(List<T> list, int index) { + * return CollectionUtil.getOrNull(list, index); + * } + * } + * </pre> + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.5.6 + */ + simpleBeanSuperClass(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + simpleBeanClassNamePrefix(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + simpleBeanClassNameSuffix(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * 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. + * + * @see #getSimpleBeanInterfaceSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + simpleBeanInterfaceSuperClass(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated interface of a simple bean. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanInterfaceNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + simpleBeanInterfaceNamePrefix(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated interface of a simple bean. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanInterfaceNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + simpleBeanInterfaceNameSuffix(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * 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. + * + * @see #getSimpleBeanDefaultsSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.7.2 + */ + simpleBeanDefaultsSuperClass(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.7.2 + */ + simpleBeanDefaultsClassNamePrefix(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a suffix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanDefaultsClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + simpleBeanDefaultsClassNameSuffix(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class),; + + private final Set<Class<?>> targets; + private final Class<?> type; + private final String i18nDescriptionKey; + private final String defaultValue; + + Store(String i18nDescriptionKey, Class<?> type, String defaultValue, Class<?>... targets) { + this.targets = ImmutableSet.copyOf(targets); + this.type = type; + this.i18nDescriptionKey = i18nDescriptionKey; + this.defaultValue = defaultValue; + } + + @Override + public String getName() { + return name(); + } + + @Override + public Set<Class<?>> getTargets() { + return targets; + } + + @Override + public Class<?> getType() { + return type; + } + + @Override + public Class<EqualsTagValueNameMatcher> getMatcherClass() { + return EqualsTagValueNameMatcher.class; + } + + @Override + public String getDescription() { + return t(i18nDescriptionKey); + } + + @Override + public String getDefaultValue() { + return defaultValue; + } + + @Override + public boolean isDeprecated() { + return false; + } + + } + + public SimpleJavaBeanTransformerTagValues() { + super((TagValueMetadata[]) Store.values()); + } + + /** + * Obtain the value of the {@link Store#simpleBeanSuperClass} 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 Store#simpleBeanSuperClass + * @since 2.6.2 + */ + public String getSimpleBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanSuperClass, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanInterfaceSuperClass} 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 Store#simpleBeanInterfaceSuperClass + * @since 2.6.2 + */ + public String getSimpleBeanInterfaceSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanInterfaceSuperClass, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanClassNamePrefix} 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 Store#simpleBeanClassNamePrefix + * @since 2.6.2 + */ + public String getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanClassNamePrefix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanClassNameSuffix} 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 Store#simpleBeanClassNameSuffix + * @since 2.6.2 + */ + public String getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanClassNameSuffix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanInterfaceNamePrefix} 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 Store#simpleBeanInterfaceNamePrefix + * @since 2.6.2 + */ + public String getSimpleBeanInterfaceNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanInterfaceNamePrefix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanInterfaceNameSuffix} 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 Store#simpleBeanInterfaceNameSuffix + * @since 2.6.2 + */ + public String getSimpleBeanInterfaceNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanInterfaceNameSuffix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanDefaultsSuperClass} 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 Store#simpleBeanDefaultsSuperClass + * @since 2.7.2 + */ + public String getSimpleBeanDefaultsSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanDefaultsSuperClass, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanDefaultsClassNamePrefix} 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 Store#simpleBeanDefaultsClassNamePrefix + * @since 2.7.2 + */ + public String getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanDefaultsClassNamePrefix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanDefaultsClassNameSuffix} 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 Store#simpleBeanDefaultsClassNameSuffix + * @since 2.6.2 + */ + public String getSimpleBeanDefaultsClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + String value = TagValueUtil.findTagValue(Store.simpleBeanDefaultsClassNameSuffix, classifier, aPackage, model); + if (StringUtils.isBlank(value)) { + value = "s"; + } + return value; + } + + /** + * Obtain the value of the {@link Store#simpleBeanGenerateInterface} 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 Store#simpleBeanGenerateInterface + * @since 2.3 + */ + public boolean isSimpleBeanSkipGenerateInterface(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanGenerateInterface, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanGenerateFactory} 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 Store#simpleBeanGenerateFactory + * @since 2.7.2 + */ + public boolean isSimpleBeanSkipGenerateFactory(ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanGenerateFactory, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanGenerateDefaults} 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 Store#simpleBeanGenerateDefaults + * @since 2.7.2 + */ + public boolean isSimpleBeanSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanGenerateDefaults, classifier, aPackage, model); + } + +} 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 705218c..79ae81a 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 @@ -49,7 +49,7 @@ import java.util.Collections; import java.util.List; /** - * Generates a java bean and a utility class around it. This transformer acts like {@link SimpleJavaBeanTransformer} + * Generates a java bean and a utility class around it. This templates acts like {@link SimpleJavaBeanTransformer} * but with no interface generation (plus there is not factory generation at all). * * For example: @@ -78,6 +78,12 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr ImmutableSet<ObjectModelClass> beanDefaultClasses; protected boolean useJava8; + protected final SimpleJavaBeanWithNoInterfaceTransformerTagValues simpleJavaBeanWithNoInterfaceTransformerTagValues; + + public SimpleJavaBeanWithNoInterfaceTransformer() { + simpleJavaBeanWithNoInterfaceTransformerTagValues = new SimpleJavaBeanWithNoInterfaceTransformerTagValues(); + } + @Override public void transformFromModel(ObjectModel model) { super.transformFromModel(model); @@ -88,9 +94,6 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr ImmutableSet.Builder<ObjectModelClass> beanClassesBuilder = new ImmutableSet.Builder<>(); ImmutableSet.Builder<ObjectModelClass> beanDefaultClassesBuilder = new ImmutableSet.Builder<>(); - EugeneJavaTagValues javaTemplatesTagValues = getJavaTemplatesTagValues(); - EugeneJavaStereoTypes javaTemplatesStereoTypes = getJavaTemplatesStereoTypes(); - for (ObjectModelClass aClass : model.getClasses()) { ObjectModelPackage aPackage = model.getPackage(aClass.getPackageName()); @@ -98,8 +101,8 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr beanClassesBuilder.add(aClass); - String classNamePrefix = javaTemplatesTagValues.getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(aClass, aPackage, model); - String classNameSuffix = javaTemplatesTagValues.getSimpleBeanWithNoInterfaceClassNameSuffixTagValue(aClass, aPackage, model); + String classNamePrefix = simpleJavaBeanWithNoInterfaceTransformerTagValues.getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(aClass, aPackage, model); + String classNameSuffix = simpleJavaBeanWithNoInterfaceTransformerTagValues.getSimpleBeanWithNoInterfaceClassNameSuffixTagValue(aClass, aPackage, model); String generateName = generateName(classNamePrefix, aClass.getName(), classNameSuffix); beanNameTranslationBuilder.put(aClass, generateName); @@ -110,8 +113,8 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr beanDefaultClassesBuilder.add(aClass); - String classDefaultsNamePrefix = javaTemplatesTagValues.getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(aClass, aPackage, model); - String classDefaultsNameSuffix = javaTemplatesTagValues.getSimpleBeanWithNoInterfaceDefaultsClassNameSuffixTagValue(aClass, aPackage, model); + String classDefaultsNamePrefix = simpleJavaBeanWithNoInterfaceTransformerTagValues.getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(aClass, aPackage, model); + String classDefaultsNameSuffix = simpleJavaBeanWithNoInterfaceTransformerTagValues.getSimpleBeanWithNoInterfaceDefaultsClassNameSuffixTagValue(aClass, aPackage, model); String generateDefaultsName = generateName(classDefaultsNamePrefix, aClass.getName(), classDefaultsNameSuffix); beanDefaultsNameTranslationBuilder.put(aClass, generateDefaultsName); @@ -139,7 +142,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr String defaultPackageName = getDefaultPackageName(); String modelBeanInitializeClassName = model.getName() + "ModelInitializer"; - boolean generateModelInitializer = !isInClassPath(defaultPackageName + "." + modelBeanInitializeClassName); + boolean generateModelInitializer = !getResourcesHelper().isJavaFileInClassPath(defaultPackageName + "." + modelBeanInitializeClassName); if (generateModelInitializer) { ObjectModelInterface anInterface = createInterface(modelBeanInitializeClassName, defaultPackageName); @@ -157,7 +160,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr } String modelInitializerRunnerClassName = model.getName() + "ModelInitializerRunner"; - boolean generateInitializerRunnerClassName = !isInClassPath(defaultPackageName + "." + modelInitializerRunnerClassName); + boolean generateInitializerRunnerClassName = !getResourcesHelper().isJavaFileInClassPath(defaultPackageName + "." + modelInitializerRunnerClassName); if (generateInitializerRunnerClassName) { ObjectModelClass aClass = createClass(modelInitializerRunnerClassName, defaultPackageName); @@ -281,7 +284,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr if (!superClassIsBean) { // try to find a super class by tag-value - superClass = getJavaTemplatesTagValues().getSimpleBeanWithNoInterfaceSuperClassTagValue(input, aPackage, model); + superClass = simpleJavaBeanWithNoInterfaceTransformerTagValues.getSimpleBeanWithNoInterfaceSuperClassTagValue(input, aPackage, model); if (superClass != null) { // will act as if super class is a bean @@ -311,9 +314,9 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr // Get available properties List<ObjectModelAttribute> properties = getProperties(input); - boolean usePCS = !getJavaTemplatesStereoTypes().isSkipGeneratePropertyChangeSupport(input, aPackage, model); - boolean generateBooleanGetMethods = getEugeneTagValues().isGenerateBooleanGetMethods(input, aPackage, model); - boolean generateNotEmptyCollections = !getJavaTemplatesStereoTypes().isSkipGenerateNotEmptyCollections(input, aPackage, model); + boolean usePCS = !javaTemplatesStereoTypes.isSkipGeneratePropertyChangeSupport(input, aPackage, model); + boolean generateBooleanGetMethods = eugeneTagValues.isGenerateBooleanGetMethods(input, aPackage, model); + boolean generateNotEmptyCollections = !javaTemplatesStereoTypes.isSkipGenerateNotEmptyCollections(input, aPackage, model); // Add properties field + javabean methods for (ObjectModelAttribute attr : properties) { @@ -375,19 +378,19 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr }*/ ); - boolean generateContructors = !getJavaTemplatesStereoTypes().isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(aClass, aPackage, model) && !aClass.isAbstract(); + boolean generateContructors = !javaTemplatesStereoTypes.isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(aClass, aPackage, model) && !aClass.isAbstract(); if (generateContructors) { generateAbstractBeanDefaultsConstructors(output, typeName); } generateAbstractBeanDefaultsCopyMethods(output, typeName); - boolean generatePredicates = !getJavaTemplatesStereoTypes().isSimpleBeanWithNoInterfaceSkipGeneratePredicates(aClass, aPackage, model); + boolean generatePredicates = !javaTemplatesStereoTypes.isSimpleBeanWithNoInterfaceSkipGeneratePredicates(aClass, aPackage, model); if (generatePredicates) { generateAbstractBeanDefaultsPredicates(aClass, output, typeName); } - boolean generateFunctions = !getJavaTemplatesStereoTypes().isSimpleBeanWithNoInterfaceSkipGenerateFunctions(aClass, aPackage, model); + boolean generateFunctions = !javaTemplatesStereoTypes.isSimpleBeanWithNoInterfaceSkipGenerateFunctions(aClass, aPackage, model); if (generateFunctions) { generateAbstractBeanDefaultsFunctions(aClass, output, typeName); } @@ -719,7 +722,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr if (!superClassIsBean) { // try to find a super class by tag-value - superClassName = getJavaTemplatesTagValues().getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(aClass, aPackage, model); + superClassName = simpleJavaBeanWithNoInterfaceTransformerTagValues.getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(aClass, aPackage, model); } return superClassName; diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformerTagValues.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformerTagValues.java new file mode 100644 index 0000000..5a067ed --- /dev/null +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformerTagValues.java @@ -0,0 +1,421 @@ +package org.nuiton.eugene.java; + +/* + * #%L + * EUGene :: Java templates + * %% + * Copyright (C) 2012 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.collect.ImmutableSet; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; +import org.nuiton.eugene.models.extension.tagvalue.matcher.EqualsTagValueNameMatcher; +import org.nuiton.eugene.models.extension.tagvalue.provider.DefaultTagValueMetadatasProvider; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelPackage; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + +/** + * Defines all tag values managed by Java templates. + * + * @author Tony Chemit - chemit@codelutin.com + * @plexus.component role="org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider" role-hint="simpleJavaBeanWithNoInterface" + * @since 2.5.6 + */ +public class SimpleJavaBeanWithNoInterfaceTransformerTagValues extends DefaultTagValueMetadatasProvider { + + @Override + public String getDescription() { + return t("eugene.simpleBeanWithNoInterfaceTransformer.tagvalues"); + } + + public enum Store implements TagValueMetadata { + + /** + * To generate a factory of generated simple beans. + * + * You must use it on the complete model. + * + * @see #isSimpleBeanWithNoInterfaceSkipGenerateDefaults(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceGenerateDefaults(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateDefaults"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + + /** + * 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 + */ + simpleBeanWithNoInterfaceGeneratePredicates(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGeneratePredicates"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * 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 + */ + simpleBeanWithNoInterfaceGenerateFunctions(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateFunctions"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To generate or not constructors methods on Default classes. + * + * You can globaly use it on the complete model, package or on a specific classifier. + * + * @see #isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(ObjectModelClassifier, ObjectModelPackage, ObjectModel)} + * @since 3.0 + */ + simpleBeanWithNoInterfaceSkipGenerateConstructors(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateConstructors"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag value to use a super class for generated bean. + * + * 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 + * two method named {@code getChild(Collection list, int index)} and + * {@code getChild(List list, int index)} + * + * See new code to know minimum stuff to add in your class for this purpose. + * <pre> + * public abstract class AbstractBean implements Serializable { + * + * private static final long serialVersionUID = 1L; + * + * protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + * + * public void addPropertyChangeListener(PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(listener); + * } + * + * public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(propertyName, listener); + * } + * + * public void removePropertyChangeListener(PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(listener); + * } + * + * public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(propertyName, listener); + * } + * + * protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { + * pcs.firePropertyChange(propertyName, oldValue, newValue); + * } + * + * protected void firePropertyChange(String propertyName, Object newValue) { + * firePropertyChange(propertyName, null, newValue); + * } + * + * protected <T> T getChild(Collection<T> list, int index) { + * return CollectionUtil.getOrNull(list, index); + * } + * + * protected <T> T getChild(List<T> list, int index) { + * return CollectionUtil.getOrNull(list, index); + * } + * } + * </pre> + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanWithNoInterfaceSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceSuperClass(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * 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. + * + * @see #getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceDefaultsSuperClass(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceClassNamePrefix(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanWithNoInterfaceClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceClassNameSuffix(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceDefaultsClassNamePrefix(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a suffix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanWithNoInterfaceDefaultsClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceDefaultsClassNameSuffix(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class); + + private final Set<Class<?>> targets; + private final Class<?> type; + private final String i18nDescriptionKey; + private final String defaultValue; + + Store(String i18nDescriptionKey, Class<?> type, String defaultValue, Class<?>... targets) { + this.targets = ImmutableSet.copyOf(targets); + this.type = type; + this.i18nDescriptionKey = i18nDescriptionKey; + this.defaultValue = defaultValue; + } + + @Override + public String getName() { + return name(); + } + + @Override + public Set<Class<?>> getTargets() { + return targets; + } + + @Override + public Class<?> getType() { + return type; + } + + @Override + public Class<EqualsTagValueNameMatcher> getMatcherClass() { + return EqualsTagValueNameMatcher.class; + } + + @Override + public String getDescription() { + return t(i18nDescriptionKey); + } + + @Override + public String getDefaultValue() { + return defaultValue; + } + + @Override + public boolean isDeprecated() { + return false; + } + + } + + public SimpleJavaBeanWithNoInterfaceTransformerTagValues() { + super((TagValueMetadata[]) Store.values()); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceSuperClass} 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 Store#simpleBeanWithNoInterfaceSuperClass + * @since 3.0 + */ + public String getSimpleBeanWithNoInterfaceSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceSuperClass, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceDefaultsSuperClass} 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 Store#simpleBeanWithNoInterfaceDefaultsSuperClass + * @since 3.0 + */ + public String getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceDefaultsSuperClass, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceClassNamePrefix} 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 Store#simpleBeanWithNoInterfaceClassNamePrefix + * @since 3.0 + */ + public String getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceClassNamePrefix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceClassNameSuffix} 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 Store#simpleBeanWithNoInterfaceClassNameSuffix + * @since 3.0 + */ + public String getSimpleBeanWithNoInterfaceClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceClassNameSuffix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceDefaultsClassNamePrefix} 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 Store#simpleBeanWithNoInterfaceDefaultsClassNamePrefix + * @since 3.0 + */ + public String getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceDefaultsClassNamePrefix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceDefaultsClassNameSuffix} 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 Store#simpleBeanWithNoInterfaceDefaultsClassNameSuffix + * @since 3.0 + */ + public String getSimpleBeanWithNoInterfaceDefaultsClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + String value = TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceDefaultsClassNameSuffix, classifier, aPackage, model); + if (StringUtils.isBlank(value)) { + value = "s"; + } + return value; + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceGenerateDefaults} 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 Store#simpleBeanWithNoInterfaceGenerateDefaults + * @since 3.0 + */ + public boolean isSimpleBeanWithNoInterfaceSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanWithNoInterfaceGenerateDefaults, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceGeneratePredicates} 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 Store#simpleBeanWithNoInterfaceGeneratePredicates + * @since 3.0 + */ + public boolean isSimpleBeanWithNoInterfaceSkipGeneratePredicates(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanWithNoInterfaceGeneratePredicates, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceGenerateFunctions} 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 Store#simpleBeanWithNoInterfaceGenerateFunctions + * @since 3.0 + */ + public boolean isSimpleBeanWithNoInterfaceSkipGenerateFunctions(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanWithNoInterfaceGenerateFunctions, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceSkipGenerateConstructors} 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 Store#simpleBeanWithNoInterfaceSkipGenerateConstructors + * @since 3.0 + */ + public boolean isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanWithNoInterfaceSkipGenerateConstructors, classifier, aPackage, model); + } + +} diff --git a/eugene-java-templates/src/main/resources/i18n/eugene-java-templates_en_GB.properties b/eugene-java-templates/src/main/resources/i18n/eugene-java-templates_en_GB.properties new file mode 100644 index 0000000..485a515 --- /dev/null +++ b/eugene-java-templates/src/main/resources/i18n/eugene-java-templates_en_GB.properties @@ -0,0 +1,45 @@ +eugene.java.stereotype.acceptBeanWithMethods=Accept methods on bean? +eugene.java.stereotype.bean=Is a bean? +eugene.java.stereotype.generateNotEmptyCollections=Generate none empty collections? +eugene.java.stereotype.generatePropertyChangeSupport=Generate PropertychangeSupport? +eugene.java.stereotype.overrideAbstractClasses=Overrides abstract classes? +eugene.java.stereotype.simpleBeanGenerateDefaults=Generate DefaultsBean? +eugene.java.stereotype.simpleBeanGenerateFactory=Generate BeanFactories? +eugene.java.stereotype.simpleBeanGenerateInterface=Generate interface on bean? +eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateDefaults=Generate DefaultsBean? +eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateFunctions=Generate Functions? +eugene.java.stereotype.simpleBeanWithNoInterfaceGeneratePredicates=Generate predicates? +eugene.java.stereotype.simpleBeanWithNoInterfaceSkipGenerateConstructors=No generate constructors' bean? +eugene.java.stereotypes=EUGeNe Java stereotypes +eugene.java.tagvalue.acceptBeanWithMethods=Accept methods on bean? +eugene.java.tagvalue.generateNotEmptyCollections=Generate none empty collections? +eugene.java.tagvalue.generatePropertyChangeSupport=Generate PropertychangeSupport? +eugene.java.tagvalue.java8=Java 8 support +eugene.java.tagvalue.overrideAbstractClasses=Overrides abstract classes? +eugene.java.tagvalues=EUGeNe Java tag values +eugene.javaBeanTransformer.tagvalue.beanSuperClass=Bean super class +eugene.javaBeanTransformer.tagvalues=EUGeNe JavaBean transformer tag values +eugene.simpleBeanTransformer.tagvalue.simpleBeanClassNamePrefix=Prefix to apply on bean class name +eugene.simpleBeanTransformer.tagvalue.simpleBeanClassNameSuffix=Suffix to apply on bean class name +eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsClassNamePrefix=Prefix to apply on DefaultsBean class name +eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsClassNameSuffix=Suffix to apply on DefaultsBean class name +eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsSuperClass=DefaultsBean super class +eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateDefaults=Generate DefaultsBean? +eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateFactory=Generate BeanFactories? +eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateInterface=Generate interface on bean? +eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceNamePrefix=Prefix to apply on bean's interface class name +eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceNameSuffix=Suffix to apply on bean's interface class name +eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceSuperClass=Bean's interface super class +eugene.simpleBeanTransformer.tagvalue.simpleBeanSuperClass=Bean super class +eugene.simpleBeanTransformer.tagvalues=EUGeNe Simple Bean transformer tag values +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceClassNamePrefix=Prefix to apply on bean class name +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceClassNameSuffix=Suffix to apply on bean class name +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNamePrefix=Prefix to apply on DefaultsBean class name +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNameSuffix=Suffix to apply on DefaultsBean class name +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsSuperClass=DefaultsBean super class +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateConstructors=No generate constructors' bean? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateDefaults=Generate DefaultsBean? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateFunctions=Generate Functions? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGeneratePredicates=Generate predicates? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceSuperClass=Bean super class +eugene.simpleBeanWithNoInterfaceTransformer.tagvalues=EUGeNe Simple Bean With No Interface transformer tag values diff --git a/eugene-java-templates/src/main/resources/i18n/eugene-java-templates_fr_FR.properties b/eugene-java-templates/src/main/resources/i18n/eugene-java-templates_fr_FR.properties new file mode 100644 index 0000000..08a7698 --- /dev/null +++ b/eugene-java-templates/src/main/resources/i18n/eugene-java-templates_fr_FR.properties @@ -0,0 +1,45 @@ +eugene.java.stereotype.acceptBeanWithMethods=Accepter les beans avec des méthodes ? +eugene.java.stereotype.bean=Is a bean ? +eugene.java.stereotype.generateNotEmptyCollections=Générer des collections non vides ? +eugene.java.stereotype.generatePropertyChangeSupport=Générer le support PropertyChangeSupport ? +eugene.java.stereotype.overrideAbstractClasses=Surcharger les classes abstraites de bean ? +eugene.java.stereotype.simpleBeanGenerateDefaults=Générer les DefaultsBean ? +eugene.java.stereotype.simpleBeanGenerateFactory=Générer les BeanFactory ? +eugene.java.stereotype.simpleBeanGenerateInterface=Générer les interfaces de bean ? +eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateDefaults=Générer les DefaultsBean ? +eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateFunctions=Générer les Functions ? +eugene.java.stereotype.simpleBeanWithNoInterfaceGeneratePredicates=Générer les Predicats ? +eugene.java.stereotype.simpleBeanWithNoInterfaceSkipGenerateConstructors=Ne pas générer les constructeurs sur bean ? +eugene.java.stereotypes=EUGeNe Java stéréotypes +eugene.java.tagvalue.acceptBeanWithMethods=Accepter les beans avec des méthodes ? +eugene.java.tagvalue.generateNotEmptyCollections=Générer des collections non vides ? +eugene.java.tagvalue.generatePropertyChangeSupport=Générer le support PropertyChangeSupport ? +eugene.java.tagvalue.java8=Utiliser java 8 ? +eugene.java.tagvalue.overrideAbstractClasses=Surcharger les classes abstraites de bean ? +eugene.java.tagvalues=EUGeNe Java tag values +eugene.javaBeanTransformer.tagvalue.beanSuperClass=Super classe du bean +eugene.javaBeanTransformer.tagvalues=EUGeNe JavaBean transformer tag values +eugene.simpleBeanTransformer.tagvalue.simpleBeanClassNamePrefix=Préfixe à appliquer sur le nom du bean +eugene.simpleBeanTransformer.tagvalue.simpleBeanClassNameSuffix=Suffixe à appliquer sur le nom du bean +eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsClassNamePrefix=Préfixe à appliquer sur le nom de DefaultsBean +eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsClassNameSuffix=Suffixe à appliquer sur le nom de Defaultsbean +eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsSuperClass=Super classe de DefaultsBean +eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateDefaults=Générer les DefaultsBean ? +eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateFactory=Générer les BeanFactory ? +eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateInterface=Générer les interfaces de bean ? +eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceNamePrefix=Préfixe à appliquer sur le nom de l'interface du bean +eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceNameSuffix=Suffixe à appliquer sur le nom de l'interface du bean +eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceSuperClass=Super classes de l'interface du bean +eugene.simpleBeanTransformer.tagvalue.simpleBeanSuperClass=Super classe du bean +eugene.simpleBeanTransformer.tagvalues=EUGeNe Simple Bean transformer tag values +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceClassNamePrefix=Préfixe à appliquer sur le nom du bean +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceClassNameSuffix=Suffixe à appliquer sur le nom du bean +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNamePrefix=Préfixe à appliquer sur le nom de DefaultsBean +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNameSuffix=Suffixe à appliquer sur le nom de Defaultsbean +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsSuperClass=Super classe de DefaultsBean +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateConstructors=Ne pas générer les constructeurs sur bean ? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateDefaults=Générer les DefaultsBean ? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateFunctions=Générer les Functions ? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGeneratePredicates=Générer les Predicats ? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceSuperClass=Super classes de l'interface du bean +eugene.simpleBeanWithNoInterfaceTransformer.tagvalues=EUGeNe Simple Bean With No Interface transformer tag values diff --git a/eugene-java-templates/src/test/java/org/nuiton/eugene/java/EugeneJavaTagValuesTest.java b/eugene-java-templates/src/test/java/org/nuiton/eugene/java/EugeneJavaTagValuesTest.java index 6dd1643..3613c9b 100644 --- a/eugene-java-templates/src/test/java/org/nuiton/eugene/java/EugeneJavaTagValuesTest.java +++ b/eugene-java-templates/src/test/java/org/nuiton/eugene/java/EugeneJavaTagValuesTest.java @@ -47,11 +47,11 @@ public class EugeneJavaTagValuesTest { @Test public void validate() throws Exception { - validate(EugeneJavaTagValues.Store.beanSuperClass.getName(), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); - validate(EugeneJavaTagValues.Store.beanSuperClass.getName(), false, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(EugeneJavaTagValues.Store.java8.getName(), true, ObjectModel.class); + validate(EugeneJavaTagValues.Store.java8.getName(), false, ObjectModelOperation.class, ObjectModelAttribute.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); long l = System.nanoTime(); - validate(EugeneJavaTagValues.Store.beanSuperClass.getName() + l, false, ObjectModelPackage.class, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(EugeneJavaTagValues.Store.java8.getName() + l, false, ObjectModel.class, ObjectModelOperation.class, ObjectModelAttribute.class); } diff --git a/eugene/pom.xml b/eugene/pom.xml index 5e0498f..9c67f7d 100644 --- a/eugene/pom.xml +++ b/eugene/pom.xml @@ -178,6 +178,20 @@ </execution> </executions> </plugin> + + <plugin> + <groupId>org.nuiton.i18n</groupId> + <artifactId>i18n-maven-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>parserJava</goal> + <goal>gen</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> </build> diff --git a/eugene/src/main/java/org/nuiton/eugene/EugeneCoreStereotypes.java b/eugene/src/main/java/org/nuiton/eugene/EugeneCoreStereotypes.java index b864d7d..92cb6ec 100644 --- a/eugene/src/main/java/org/nuiton/eugene/EugeneCoreStereotypes.java +++ b/eugene/src/main/java/org/nuiton/eugene/EugeneCoreStereotypes.java @@ -1,5 +1,27 @@ package org.nuiton.eugene; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; import org.nuiton.eugene.models.extension.stereotype.StereotypeUtil; @@ -11,6 +33,7 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import java.util.Set; import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; /** * Defines all stereotypes managed by Eugene. @@ -26,6 +49,11 @@ import static org.nuiton.i18n.I18n.n; */ public class EugeneCoreStereotypes extends DefaultStereotypeMetadatasProvider { + @Override + public String getDescription() { + return t("eugene.core.stereotypes"); + } + public enum Store implements StereotypeMetadata { /** * Stereotype to mark an attribute with multiplicity as ordered. @@ -45,16 +73,16 @@ public class EugeneCoreStereotypes extends DefaultStereotypeMetadatasProvider { */ unique(n("eugene.core.stereotypes.unique"), ObjectModelAttribute.class), /** - * Stereotype to skip generation for some transformer. + * Stereotype to skip generation for some templates. */ skip(n("eugene.core.stereotypes.skip"), ObjectModelClassifier.class, ObjectModelPackage.class); private final Set<Class<?>> targets; - private final String i18nDocumentationKey; + private final String i18nDescriptionKey; - Store(String i18nDocumentationKey, Class<?>... targets) { + Store(String i18nDescriptionKey, Class<?>... targets) { this.targets = ImmutableSet.copyOf(targets); - this.i18nDocumentationKey = i18nDocumentationKey; + this.i18nDescriptionKey = i18nDescriptionKey; } @Override @@ -68,8 +96,8 @@ public class EugeneCoreStereotypes extends DefaultStereotypeMetadatasProvider { } @Override - public String getI18nDocumentationKey() { - return i18nDocumentationKey; + public String getDescription() { + return t(i18nDescriptionKey); } @Override diff --git a/eugene/src/main/java/org/nuiton/eugene/EugeneCoreTagValues.java b/eugene/src/main/java/org/nuiton/eugene/EugeneCoreTagValues.java index 9145702..8922adf 100644 --- a/eugene/src/main/java/org/nuiton/eugene/EugeneCoreTagValues.java +++ b/eugene/src/main/java/org/nuiton/eugene/EugeneCoreTagValues.java @@ -1,5 +1,27 @@ package org.nuiton.eugene; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; @@ -14,6 +36,7 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import java.util.Set; import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; /** * Created on 24/09/16. @@ -29,6 +52,11 @@ import static org.nuiton.i18n.I18n.n; */ public class EugeneCoreTagValues extends DefaultTagValueMetadatasProvider { + @Override + public String getDescription() { + return t("eugene.core.tagvalues"); + } + public enum Store implements TagValueMetadata { /** @@ -88,13 +116,13 @@ public class EugeneCoreTagValues extends DefaultTagValueMetadatasProvider { private final Set<Class<?>> targets; private final Class<?> type; - private final String i18nDocumentationKey; + private final String i18nDescriptionKey; private final String defaultValue; - Store(String i18nDocumentationKey, Class<?> type, String defaultValue, Class<?>... targets) { + Store(String i18nDescriptionKey, Class<?> type, String defaultValue, Class<?>... targets) { this.targets = ImmutableSet.copyOf(targets); this.type = type; - this.i18nDocumentationKey = i18nDocumentationKey; + this.i18nDescriptionKey = i18nDescriptionKey; this.defaultValue = defaultValue; } @@ -119,8 +147,8 @@ public class EugeneCoreTagValues extends DefaultTagValueMetadatasProvider { } @Override - public String getI18nDocumentationKey() { - return i18nDocumentationKey; + public String getDescription() { + return t(i18nDescriptionKey); } @Override diff --git a/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java b/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java index 0fe6f0d..0ed4416 100644 --- a/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java +++ b/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java @@ -25,6 +25,9 @@ package org.nuiton.eugene; import org.apache.commons.lang3.StringUtils; import org.nuiton.eugene.models.Model; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; +import org.nuiton.eugene.models.extension.tagvalue.WithTagValues; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; @@ -33,8 +36,6 @@ import org.nuiton.eugene.models.object.ObjectModelElement; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelParameter; import org.nuiton.eugene.models.object.SerialVersionUIDBuilder; -import org.nuiton.eugene.models.tagvalue.TagValueAble; -import org.nuiton.eugene.models.tagvalue.TagValues; import org.nuiton.util.StringUtil; import java.io.File; @@ -56,12 +57,6 @@ public class GeneratorUtil { public static final String SERIAL_VERSION_UID = "serialVersionUID"; /** - * Static singleton instance used to read defaultValue - * TODO-tchemit 2014-06-19 Remove this when remove deprecated methods using it - */ - protected final static EugeneCoreTagValues EUGENE_CORE_TAG_VALUES = new EugeneCoreTagValues(); - - /** * return parent package of given package (return given package if it is a root package) * eg : org.nuiton.eugene.models -> org.nuiton.eugene * eg : org -> org @@ -510,7 +505,7 @@ public class GeneratorUtil { * @param element l'élément à tester * @param model le modele utilisé * @return la valeur du tagValue ou null - * @deprecated since 2.9 (will be remove in version 3.0), prefer use now {@link TagValues#findTagValue(String, TagValueAble...)} + * @deprecated since 2.9 (will be remove in version 3.0), prefer use now {@link TagValueUtil#findTagValue(TagValueMetadata, WithTagValues...)} */ @Deprecated public static String findTagValue(String tagName, diff --git a/eugene/src/main/java/org/nuiton/eugene/ModelReader.java b/eugene/src/main/java/org/nuiton/eugene/ModelReader.java index 827f9ae..8332479 100644 --- a/eugene/src/main/java/org/nuiton/eugene/ModelReader.java +++ b/eugene/src/main/java/org/nuiton/eugene/ModelReader.java @@ -111,31 +111,4 @@ public abstract class ModelReader<M extends Model> { */ public abstract M read(File... file) throws IOException; - public TagValueMetadatasProvider getTagValueMetadatasProvider() { - return tagValueMetadatasProvider; - } - - /** - * Sets the provider of available tag values. - * - * @param tagValueMetadatasProvider the provider to use - * @since 2.9 - */ - public void setTagValueMetadatasProvider(TagValueMetadatasProvider tagValueMetadatasProvider) { - this.tagValueMetadatasProvider = tagValueMetadatasProvider; - } - - public StereotypeMetadatasProvider getStereotypeMetadatasProvider() { - return stereotypeMetadatasProvider; - } - - /** - * Sets the provider of available stereotypes. - * - * @param stereotypeMetadatasProvider the provider to use - * @since 2.9 - */ - public void setStereotypeMetadatasProvider(StereotypeMetadatasProvider stereotypeMetadatasProvider) { - this.stereotypeMetadatasProvider = stereotypeMetadatasProvider; - } } 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 ab57b7d..baa3750 100644 --- a/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java +++ b/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java @@ -30,10 +30,6 @@ import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.Template; import org.nuiton.eugene.java.extension.ImportsManager; import org.nuiton.eugene.java.extension.ObjectModelAnnotation; -import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadatasProviderManagerExtension; -import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; -import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadatasProviderManagerExtension; -import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; @@ -68,8 +64,7 @@ import java.util.Set; */ public abstract class ObjectModelTransformerToJava extends ObjectModelTransformer<ObjectModel> { - private static final Log log = - LogFactory.getLog(ObjectModelTransformerToJava.class); + private static final Log log = LogFactory.getLog(ObjectModelTransformerToJava.class); /** * internal builder @@ -78,13 +73,10 @@ public abstract class ObjectModelTransformerToJava extends ObjectModelTransforme private String constantPrefix; - private EugeneCoreTagValues eugeneTagValues; + protected final EugeneCoreTagValues eugeneTagValues; - public EugeneCoreTagValues getEugeneTagValues() { - if (eugeneTagValues == null) { - eugeneTagValues = getTagValueMetadatasProvider(EugeneCoreTagValues.class); - } - return eugeneTagValues; + public ObjectModelTransformerToJava() { + eugeneTagValues = new EugeneCoreTagValues(); } @Override @@ -242,7 +234,7 @@ public abstract class ObjectModelTransformerToJava extends ObjectModelTransforme protected String getConstantPrefix(ObjectModelClassifier input) { // look if there is a constant_prefix tag value - String prefix = getEugeneTagValues().getConstantPrefixTagValue( + String prefix = eugeneTagValues.getConstantPrefixTagValue( input, input == null ? null : getPackage(input), getModel()); @@ -1017,18 +1009,4 @@ public abstract class ObjectModelTransformerToJava extends ObjectModelTransforme return isInClassPath(packageName + "." + className); } - protected <T extends TagValueMetadatasProvider> T getTagValueMetadatasProvider(Class<T> providerType) { - - TagValueMetadatasProviderManagerExtension extension = model.getExtension( - TagValueMetadatasProviderManagerExtension.OBJECTMODEL_EXTENSION, TagValueMetadatasProviderManagerExtension.class); - return extension.getProvider(providerType); - } - - protected <T extends StereotypeMetadatasProvider> T getStereotypeMetadatasProvider(Class<T> providerType) { - - StereotypeMetadatasProviderManagerExtension extension = model.getExtension( - StereotypeMetadatasProviderManagerExtension.OBJECTMODEL_EXTENSION, StereotypeMetadatasProviderManagerExtension.class); - return extension.getProvider(providerType); - } - } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadata.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadata.java index cc15931..42d81de 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadata.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadata.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.stereotype; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import java.util.Set; /** @@ -30,7 +52,7 @@ public interface StereotypeMetadata { * * @return the i18n documentation key */ - String getI18nDocumentationKey(); + String getDescription(); /** * @return {@code true} if this stereotype is deprecated diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadatasProviderManagerExtension.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadatasProviderManagerExtension.java deleted file mode 100644 index 314cc4b..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadatasProviderManagerExtension.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.nuiton.eugene.models.extension.stereotype; - -import com.google.common.base.Preconditions; -import org.nuiton.eugene.models.extension.stereotype.provider.AggregateStereotypeMetadatasProvider; -import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; - -/** - * Created on 24/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class StereotypeMetadatasProviderManagerExtension { - - /** - * Extension static used to identify this extension in ObjectModel. - */ - public static final String OBJECTMODEL_EXTENSION = "stereotypeMetadatasProvider"; - - protected AggregateStereotypeMetadatasProvider prodiver; - - public void setProdiver(AggregateStereotypeMetadatasProvider prodiver) { - this.prodiver = prodiver; - } - - public <T extends StereotypeMetadatasProvider> T getProvider(Class<T> providerType) { - - Preconditions.checkState(prodiver != null, "No prodiver assigned"); - - StereotypeMetadatasProvider result = null; - for (StereotypeMetadatasProvider stereotypeDefinitionProvider : prodiver) { - if (providerType.equals(stereotypeDefinitionProvider.getClass())) { - result = stereotypeDefinitionProvider; - break; - } - } - - Preconditions.checkState(result != null, "No prodiver of this type: " + providerType.getName()); - return (T) result; - - } - -} \ No newline at end of file diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeUtil.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeUtil.java index f520ab7..2aac49f 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeUtil.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeUtil.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.stereotype; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.object.ObjectModelElement; import org.nuiton.eugene.models.object.ObjectModelPackage; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/AggregateStereotypeMetadatasProvider.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/AggregateStereotypeMetadatasProvider.java index 76e3602..aba170a 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/AggregateStereotypeMetadatasProvider.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/AggregateStereotypeMetadatasProvider.java @@ -24,8 +24,6 @@ package org.nuiton.eugene.models.extension.stereotype.provider; import com.google.common.base.Optional; import com.google.common.collect.ImmutableSet; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.models.extension.stereotype.MismatchStereotypeTargetException; import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; import org.nuiton.eugene.models.extension.stereotype.StereotypeNotFoundException; @@ -41,9 +39,6 @@ import java.util.ServiceLoader; */ public class AggregateStereotypeMetadatasProvider implements StereotypeMetadatasProvider, Iterable<StereotypeMetadatasProvider> { - /** Logger. */ - private static final Log log = LogFactory.getLog(AggregateStereotypeMetadatasProvider.class); - protected final Iterable<StereotypeMetadatasProvider> providers; /** @@ -76,6 +71,11 @@ public class AggregateStereotypeMetadatasProvider implements StereotypeMetadatas } @Override + public String getDescription() { + return null; + } + + @Override public ImmutableSet<StereotypeMetadata> getStereotypes() { ImmutableSet.Builder<StereotypeMetadata> builder = ImmutableSet.builder(); for (StereotypeMetadatasProvider tagValuesMetadatasProvider : providers) { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/DefaultStereotypeMetadatasProvider.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/DefaultStereotypeMetadatasProvider.java index e483b38..0c76110 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/DefaultStereotypeMetadatasProvider.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/DefaultStereotypeMetadatasProvider.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.stereotype.provider; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.base.Optional; import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.extension.stereotype.MismatchStereotypeTargetException; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/StereotypeMetadatasProvider.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/StereotypeMetadatasProvider.java index 4e3fdf4..4e58017 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/StereotypeMetadatasProvider.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/StereotypeMetadatasProvider.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.stereotype.provider; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.base.Optional; import org.nuiton.eugene.models.extension.stereotype.MismatchStereotypeTargetException; import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; @@ -14,6 +36,8 @@ import java.util.Set; */ public interface StereotypeMetadatasProvider { + String getDescription(); + Set<StereotypeMetadata> getStereotypes(); void validate(String stereotypeName, Class<?> type) throws StereotypeNotFoundException, MismatchStereotypeTargetException; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadata.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadata.java index 6d0a86b..7d55c5e 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadata.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadata.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.tagvalue; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import org.nuiton.eugene.models.extension.tagvalue.matcher.TagValueDefinitionMatcher; import java.util.Set; @@ -30,7 +52,7 @@ public interface TagValueMetadata { * * @return the i18n documentation key */ - String getI18nDocumentationKey(); + String getDescription(); /** * @return default value for this tag value diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadatasProviderManagerExtension.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadatasProviderManagerExtension.java deleted file mode 100644 index e831420..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadatasProviderManagerExtension.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.nuiton.eugene.models.extension.tagvalue; - -import com.google.common.base.Preconditions; -import org.nuiton.eugene.models.extension.tagvalue.provider.AggregateTagValueMetadatasProvider; -import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; - -/** - * Created on 24/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class TagValueMetadatasProviderManagerExtension { - - /** - * Extension static used to identify this extension in ObjectModel. - */ - public static final String OBJECTMODEL_EXTENSION = "tagValueMetadatasProvider"; - - protected AggregateTagValueMetadatasProvider prodiver; - - public void setProdiver(AggregateTagValueMetadatasProvider prodiver) { - this.prodiver = prodiver; - } - - public <T extends TagValueMetadatasProvider> T getProvider(Class<T> providerType) { - - Preconditions.checkState(prodiver != null, "No prodiver assigned"); - - TagValueMetadatasProvider result = null; - for (TagValueMetadatasProvider stereotypeDefinitionProvider : prodiver) { - if (providerType.equals(stereotypeDefinitionProvider.getClass())) { - result = stereotypeDefinitionProvider; - break; - } - } - - Preconditions.checkState(result != null, "No prodiver of this type: " + providerType.getName()); - return (T) result; - - } - -} \ No newline at end of file diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueUtil.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueUtil.java index 9a40b42..3a5f220 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueUtil.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueUtil.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.tagvalue; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import org.apache.commons.lang3.StringUtils; import org.nuiton.eugene.models.object.ObjectModelElement; import org.nuiton.eugene.models.object.ObjectModelPackage; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/AggregateTagValueMetadatasProvider.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/AggregateTagValueMetadatasProvider.java index 6167328..6b31ba6 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/AggregateTagValueMetadatasProvider.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/AggregateTagValueMetadatasProvider.java @@ -1,10 +1,30 @@ package org.nuiton.eugene.models.extension.tagvalue.provider; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.models.extension.tagvalue.MismatchTagValueTargetException; import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; import org.nuiton.eugene.models.extension.tagvalue.TagValueNotFoundException; @@ -20,9 +40,6 @@ import java.util.Set; */ public class AggregateTagValueMetadatasProvider implements TagValueMetadatasProvider, Iterable<TagValueMetadatasProvider> { - /** Logger. */ - private static final Log log = LogFactory.getLog(AggregateTagValueMetadatasProvider.class); - protected final Iterable<TagValueMetadatasProvider> providers; /** @@ -55,6 +72,11 @@ public class AggregateTagValueMetadatasProvider implements TagValueMetadatasProv } @Override + public String getDescription() { + return null; + } + + @Override public Set<TagValueMetadata> getTagValues() { ImmutableSet.Builder<TagValueMetadata> builder = ImmutableSet.builder(); for (TagValueMetadatasProvider tagValuesMetadatasProvider : providers) { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/DefaultTagValueMetadatasProvider.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/DefaultTagValueMetadatasProvider.java index 8524dbc..2cff3ea 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/DefaultTagValueMetadatasProvider.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/DefaultTagValueMetadatasProvider.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.tagvalue.provider; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.base.Optional; import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.extension.tagvalue.MismatchTagValueTargetException; @@ -17,7 +39,7 @@ import java.util.Set; * * @author Tony Chemit - chemit@codelutin.com */ -public class DefaultTagValueMetadatasProvider implements TagValueMetadatasProvider { +public abstract class DefaultTagValueMetadatasProvider implements TagValueMetadatasProvider { protected final Set<TagValueMetadata> tagValues; protected final Set<TagValueDefinitionMatcher> matcher; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/TagValueMetadatasProvider.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/TagValueMetadatasProvider.java index 67ef9ec..c7f6996 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/TagValueMetadatasProvider.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/TagValueMetadatasProvider.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.tagvalue.provider; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.base.Optional; import org.nuiton.eugene.models.extension.tagvalue.MismatchTagValueTargetException; import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; @@ -14,6 +36,8 @@ import java.util.Set; */ public interface TagValueMetadatasProvider { + String getDescription(); + Set<TagValueMetadata> getTagValues(); void validate(String tagValueName, Class<?> type) throws TagValueNotFoundException, MismatchTagValueTargetException; 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 403183f..b7396a9 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 @@ -23,53 +23,24 @@ package org.nuiton.eugene.models.object.reader; */ import com.google.common.collect.Sets; -import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.EugeneCoreTagValues; import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.models.extension.stereotype.InvalidStereotypeSyntaxException; -import org.nuiton.eugene.models.extension.stereotype.MismatchStereotypeTargetException; -import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; -import org.nuiton.eugene.models.extension.stereotype.StereotypeNotFoundException; -import org.nuiton.eugene.models.extension.stereotype.StereotypeUtil; -import org.nuiton.eugene.models.extension.stereotype.provider.AggregateStereotypeMetadatasProvider; import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; -import org.nuiton.eugene.models.extension.tagvalue.MismatchTagValueTargetException; -import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; -import org.nuiton.eugene.models.extension.tagvalue.TagValueNotFoundException; -import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; -import org.nuiton.eugene.models.extension.tagvalue.provider.AggregateTagValueMetadatasProvider; import org.nuiton.eugene.models.object.ObjectModel; -import org.nuiton.eugene.models.object.ObjectModelAssociationClass; -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.ObjectModelElement; -import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelPackage; import org.nuiton.eugene.models.object.reader.extension.LoadModelExtension; -import org.nuiton.eugene.models.object.xml.ObjectModelAssociationClassImpl; -import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl; import org.nuiton.eugene.models.object.xml.ObjectModelImpl; import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; -import org.nuiton.eugene.models.stereotype.Stereotypes; import org.nuiton.util.FileUtil; -import org.nuiton.util.RecursiveProperties; -import org.nuiton.util.StringUtil; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; import java.util.LinkedHashSet; -import java.util.List; -import java.util.Properties; import java.util.Set; -import java.util.regex.Matcher; /** * Abstract object model reader. @@ -81,22 +52,6 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> private static final Log log = LogFactory.getLog(AbstractObjectModelReader.class); - public static final String TAGVALUE = "tagvalue"; - - public static final String TAG_VALUE = "tagValue"; - - public static final String STEREOTYPE = "stereotype"; - - public static final String OPERATION = "operation"; - - public static final String ATTRIBUTE = "attribute"; - - public static final String CLASS = "class"; - - public static final String MODEL = "model"; - - public static final String PACKAGE = "package"; - @Override public String getModelType() { return ModelHelper.ModelType.OBJECT.getAlias(); @@ -106,19 +61,6 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> protected void beforeReadFile(File... files) { - if (tagValueMetadatasProvider == null) { - if (log.isDebugEnabled()) { - log.debug("No tag value provider filled, will instanciate a new default one"); - } - setTagValueMetadatasProvider(new AggregateTagValueMetadatasProvider(getClass().getClassLoader())); - } - if (stereotypeMetadatasProvider == null) { - if (log.isDebugEnabled()) { - log.debug("No stereotype provider filled, will instanciate a new default one"); - } - setStereotypeMetadatasProvider(new AggregateStereotypeMetadatasProvider(getClass().getClassLoader())); - } - } @Override @@ -143,11 +85,11 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> File propFile = new File(dir, name + ".properties"); if (!propFile.exists()) { if (isVerbose()) { - log.info("Pas de fichier de propriete " + propFile + " associé au model"); + log.info("Pas de fichier de propriétés " + propFile + " associé au model"); } } else { if (isVerbose()) { - log.info("Lecture du fichier de propriete " + propFile + " associé au model"); + log.info("Lecture du fichier de propriétés " + propFile + " associé au model"); } try { loadModelExtension.load(propFile); @@ -162,235 +104,13 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> if (log.isDebugEnabled()) { for (ObjectModelClass m : model.getClasses()) { - log.debug("loaded class in objectmodel : " + m.getName()); + log.debug("loaded class in model: " + m.getName()); } } return model; } /** - * Retrieve an attribute from a {@code clazz} with its {@code name}. - * This method manage the association class case to explore participants - * attributes if needed. - * - * @param clazz where the attribute need to be find - * @param name attribute name to find - * @return the attribute found or null - */ - @Deprecated - protected ObjectModelAttribute getAttribute(ObjectModelClass clazz, - String name) { - ObjectModelAttribute result = clazz.getAttribute(name); - - // Ano #619 : FD-2010-05-17 : Specific case for Association class : - // check on participant attributes - if (result == null && clazz instanceof ObjectModelAssociationClassImpl) { - if (log.isDebugEnabled()) { - log.debug("Attribute " + name + " not found from " + - clazz.getQualifiedName() + " association class. " + - "Will check participants..."); - } - ObjectModelAssociationClass assoc = (ObjectModelAssociationClass) clazz; - for (ObjectModelAttribute participant : assoc.getParticipantsAttributes()) { - if (participant.getName().equals(name)) { - result = participant; - break; - } - } - } - return result; - } - - @Deprecated - public Properties loadModelProperties(File propFile, - ObjectModel model) throws IOException { - - Properties prop = new RecursiveProperties(); - - try (FileInputStream inStream = new FileInputStream(propFile)) { - prop.load(inStream); - } - - // number of sucessfull imported tag values into model - boolean safe = true; - - int numberImportedTagValues = 0; - int numberImportedStereotypes = 0; - - // get all the tagvalues keys and sort them - List<String> keys = new ArrayList<>(); - CollectionUtils.addAll(keys, prop.keys()); - Collections.sort(keys); - - boolean strictLoading = isStrictLoading(); - // for each tag value try to import in in model - for (String key : keys) { - String value = prop.getProperty(key); - - boolean stereoTypeKey = isStereotype(key); - boolean tagValueTypeKey = isTagValue(key); - - if (log.isDebugEnabled()) { - log.debug("Property: '" + key + "' = " + value); - } - - if (key.startsWith(MODEL)) { - - // model stereotype - if (stereoTypeKey) { - - 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 (tagValueTypeKey) { - - 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)) { - - // package stereotype or tag value - - if (stereoTypeKey) { - - // package stereotype - Matcher matcher; - try { - matcher = StereotypeUtil.getPackageMatcher(key); - } catch (InvalidStereotypeSyntaxException e) { - String message = "Invalid stereotype [" + key + "] : syntax is not correct."; - if (strictLoading) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - safe = false; - continue; - } - - String fqn = matcher.group(1); - fqn = StringUtil.substring(fqn, 0, -1); // remove ended . - // target is package - String target = PACKAGE; - // target real type - Class<?> targetType = getTargetType(target); - - Set<String> stereotypes = StereotypeUtil.getStereotypes(value); - for (String stereotype : stereotypes) { - boolean loaded = loadPackageStereotype(model, key, fqn, targetType, stereotype); - safe &= loaded; - if (loaded) { - numberImportedStereotypes++; - } - } - continue; - - } - - boolean loaded = loadPackageTagValue(model, key, value); - if (loaded) { - numberImportedTagValues++; - } - safe &= loaded; - - continue; - } - - // element tag value or stereotype - - if (stereoTypeKey) { - - // stereotype property - - // check key is ok - Matcher matcher; - try { - matcher = StereotypeUtil.getMatcher(key); - } catch (InvalidStereotypeSyntaxException e) { - String message = "Invalid stereotype [" + key + "] : syntax is not correct."; - if (strictLoading) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - safe = false; - continue; - } - - String fqn = matcher.group(1); - fqn = StringUtil.substring(fqn, 0, -1); // remove ended . - // target is class, attribute or operation - String target = matcher.group(2); - String targetName = matcher.group(3); - // target real type - Class<?> targetType = getTargetType(target); - - Set<String> stereotypes = StereotypeUtil.getStereotypes(value); - for (String stereotype : stereotypes) { - boolean loaded = loadStereotype(model, key, fqn, target, targetName, targetType, stereotype); - safe &= loaded; - if (loaded) { - numberImportedStereotypes++; - } - } - continue; - - } - - // tag value property - - boolean loaded = loadTagValue(model, key, value); - if (loaded) { - numberImportedTagValues++; - } - safe &= loaded; - } - if (isVerbose()) { - log.info(numberImportedTagValues + " tag values were succesfull imported from " + propFile); - log.info(numberImportedStereotypes + " stereotypes were succesfull imported from " + propFile); - } - if (!safe) { - - String errorMessage = "There is some tag value(s) or stereotype(s) failed to be imported from " + propFile; - if (strictLoading) { - throw new InvalidModelPropertiesException(errorMessage); - } - if (isVerbose()) { - log.info(errorMessage); - } - } - return prop; - } - - /** * Add all missing sub packages in a model. * * @param model the model to scan @@ -403,7 +123,7 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> String aPackageName = aPackage.getName(); if (verbose) { - log.info("Treate package: " + aPackageName); + log.info("Treat package: " + aPackageName); } if (subPackageNames.add(aPackageName)) { @@ -456,601 +176,4 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> } } - @Deprecated - protected boolean loadModelTagValue(ObjectModel model, String key, String value) throws InvalidModelPropertiesException { - - Matcher matcher; - try { - matcher = TagValueUtil.getModelMatcher(key); - } catch (InvalidTagValueSyntaxException e) { - String message = "Invalid model tag value [" + key + "] : only tagvalue or tagValue is allowed on model in properties"; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - return false; - } - - String tag = matcher.group(2); - - boolean safe = false; - - try { - tagValueMetadatasProvider.validate(tag, ObjectModel.class); - safe = true; - } catch (TagValueNotFoundException e) { - String message = "Invalid model tag value [" + key + "] : the tagvalue '" + tag + "' is unknown."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } catch (MismatchTagValueTargetException e) { - String message = "Invalid model tag value [" + key + "] : this tagvalue '" + tag + "' can not be apply on the model."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } - - if (safe) { - - // test if tagValue is deprecated - TagValueMetadata tagValueMetadata = tagValueMetadatasProvider.getTagValue(tag).get(); - boolean deprecated = tagValueMetadata.isDeprecated(); - if (deprecated) { - if (log.isWarnEnabled()) { - log.warn("Deprecated tagValue usage [" + key + "] : " + value); - } - } - } else { - if (isStrictLoading()) { - // in strict loading do not accept unsafe tags - return false; - } - } - - ObjectModelImpl modelImpl = (ObjectModelImpl) model; - if (tag.equals(EugeneCoreTagValues.Store.version.getName())) { - - // push directly the version in the model version property - modelImpl.setVersion(value); - } - if (isVerbose()) { - log.info("model tag value imported " + key + " --> " + tag + " = " + value); - } - modelImpl.addTagValue(tag, value); - return true; - } - - @Deprecated - protected boolean loadPackageTagValue(ObjectModel model, String key, String value) throws InvalidModelPropertiesException { - - Matcher matcher; - try { - matcher = TagValueUtil.getPackageMatcher(key); - } catch (InvalidTagValueSyntaxException e) { - String message = "Invalid package tag value [" + key + "]"; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - return false; - } - - String packageName = matcher.group(1); - packageName = StringUtil.substring(packageName, 0, -1); // remove ended . - String tag = matcher.group(3); - - boolean safe = false; - - try { - tagValueMetadatasProvider.validate(tag, ObjectModelPackage.class); - safe = true; - } catch (TagValueNotFoundException e) { - String message = "Invalid model tag value [" + key + "] : the tagvalue '" + tag + "' is unknown."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } catch (MismatchTagValueTargetException e) { - String message = "Invalid model tag value [" + key + "] : this tagvalue '" + tag + "' can not be apply on the model."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } - - if (safe) { - - // test if tagValue is deprecated - TagValueMetadata tagValueMetadata = tagValueMetadatasProvider.getTagValue(tag).get(); - boolean deprecated = tagValueMetadata.isDeprecated(); - if (deprecated) { - if (log.isWarnEnabled()) { - log.warn("Deprecated tagValue usage [" + key + "] : " + value); - } - } - } else { - if (isStrictLoading()) { - // in strict loading do not accept unsafe tags - return false; - } - } - - ObjectModelPackage aPackage = model.getPackage(packageName); - if (isVerbose()) { - log.info("package tag value imported " + key + " --> " + tag + " = " + value); - } - aPackage.addTagValue(tag, value); - return true; - } - - @Deprecated - protected boolean loadTagValue(ObjectModel model, String key, String value) { - Matcher matcher; - try { - matcher = TagValueUtil.getMatcher(key); - } catch (InvalidTagValueSyntaxException e) { - - String message = "Invalid tag value [" + key + "] : syntax is not correct."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - return false; - } - - String fqn = matcher.group(1); - fqn = StringUtil.substring(fqn, 0, -1); // remove ended dot - // target is class, attribute or operation - String target = matcher.group(2); - // name of the target (can be null on class) - String targetName = matcher.group(3); - // type is tagvalue - String type = matcher.group(4).toLowerCase(); - // name of the tag value - String tag = matcher.group(5); - // target real type - Class<?> targetType = getTargetType(target); - - if (log.isDebugEnabled()) { - log.debug("Property: '" + key + "' => " - + "fqn:" + fqn + " target:" + target - + " targetName:" + targetName - + " type:" + type + " tag:" + tag); - } - - boolean safe = false; - - try { - tagValueMetadatasProvider.validate(tag, targetType); - safe = true; - } catch (TagValueNotFoundException e) { - - String message = "Invalid tag value [" + key + "] : this tagvalue '" + tag + "' is unknown."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - - } catch (MismatchTagValueTargetException e) { - String message = "Invalid tag value [" + key + "] : this tagvalue '" + tag + "' can not be apply on the given type '" + target + "'."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } - - - if (safe) { - - // test if tagValue is deprecated - TagValueMetadata tagValueMetadata = tagValueMetadatasProvider.getTagValue(tag).get(); - boolean deprecated = tagValueMetadata.isDeprecated(); - if (deprecated) { - if (log.isWarnEnabled()) { - log.warn("Deprecated tagValue usage [" + key + "] : " + value); - } - } - } else { - - if (isStrictLoading()) { - // in strict loading do not accept unsafe tags - return false; - } - } - - ObjectModelClassifier omc = getClassifier(model, TAGVALUE, key, fqn); - if (omc == null) { - - // classifier not found - return false; - } - - List<ObjectModelElement> elements = - getObjectElements(omc, TAGVALUE, key, fqn, target, targetName); - - if (elements == null) { - - // no elements to apply - return false; - } - - for (ObjectModelElement element : elements) { - - if (log.isDebugEnabled()) { - log.debug("add tagValue " + tag - + ", value:" + value - + " to element:" + element); - } - element.addTagValue(tag, value); - - } - if (isVerbose()) { - log.info("tag value imported " + key + " --> " + fqn + ":" + target + ":" + targetName + ":" + type + ":" + tag + " = " + value); - } - return true; - } - - @Deprecated - protected boolean loadModelStereotype(ObjectModel model, String stereotype) throws InvalidModelPropertiesException { - - - boolean safe = false; - - try { - stereotypeMetadatasProvider.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 - StereotypeMetadata tagValueMetadata = stereotypeMetadatasProvider.getStereotype(stereotype).get(); - boolean deprecated = tagValueMetadata.isDeprecated(); - 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; - } - - @Deprecated - protected boolean loadStereotype(ObjectModel model, - String key, - String fqn, - String target, - String targetName, - Class<?> targetType, - String stereotype) { - - boolean safe = false; - try { - stereotypeMetadatasProvider.validate(stereotype, targetType); - safe = true; - } catch (StereotypeNotFoundException e) { - - String message = "Invalid model stereotype [" + key + "] : 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 [" + key + "] : this stereotype '" + stereotype + "' can not be apply on '" + targetType + "'."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } - - if (safe) { - - // test if stereotype is deprecated - StereotypeMetadata tagValueMetadata = stereotypeMetadatasProvider.getStereotype(stereotype).get(); - boolean deprecated = tagValueMetadata.isDeprecated(); - - if (deprecated) { - if (log.isWarnEnabled()) { - log.warn("Deprecated stereotype usage [" + key + "] : " + stereotype); - } - } - } else { - if (isStrictLoading()) { - // in strict loading do not accept unsafe stereotypes - return false; - } - } - - if (log.isDebugEnabled()) { - log.debug("Property: '" + key + "' => " - + "fqn:" + fqn + " target:" + target - + " targetName:" + targetName - + " type:" + stereotype); - } - - ObjectModelClassifier omc = getClassifier(model, STEREOTYPE, key, fqn); - if (omc == null) { - - // classifier not found - return false; - } - - List<ObjectModelElement> elems = getObjectElements(omc, STEREOTYPE, key, fqn, target, targetName); - - if (CollectionUtils.isEmpty(elems)) { - - // no element to apply - return false; - } - - for (ObjectModelElement elem : elems) { - elem.addStereotype(stereotype); - } - - if (isVerbose()) { - log.info("stereotype imported " + key + " --> " + fqn + ":" + target + ":" + targetName + ":" + stereotype + " = " + stereotype); - } - - return true; - } - - @Deprecated - protected boolean loadPackageStereotype(ObjectModel model, - String key, - String fqn, - Class<?> targetType, - String stereotype) { - - boolean safe = false; - try { - stereotypeMetadatasProvider.validate(stereotype, targetType); - safe = true; - } catch (StereotypeNotFoundException e) { - - String message = "Invalid model stereotype [" + key + "] : 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 [" + key + "] : this stereotype '" + stereotype + "' can not be apply on '" + targetType + "'."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } - - if (safe) { - - // test if tagValue is deprecated - StereotypeMetadata tagValueMetadata = stereotypeMetadatasProvider.getStereotype(stereotype).get(); - boolean deprecated = tagValueMetadata.isDeprecated(); - - if (deprecated) { - if (log.isWarnEnabled()) { - log.warn("Deprecated stereotype usage [" + key + "] : " + stereotype); - } - } - } else { - if (isStrictLoading()) { - // in strict loading do not accept unsafe stereotypes - return false; - } - } - - if (log.isDebugEnabled()) { - log.debug("Property: '" + key + "' => " - + "fqn:" + fqn - + " type:" + stereotype); - } - - ObjectModelPackage omc = model.getPackage(fqn); - if (omc == null) { - - // package not found - return false; - } - - omc.addStereotype(stereotype); - - if (isVerbose()) { - log.info("stereotype imported " + key + " --> " + fqn + ":" + ":" + stereotype + " = " + stereotype); - } - - return true; - } - - @Deprecated - protected Class<?> getTargetType(String target) { - if (ATTRIBUTE.equals(target)) { - return ObjectModelAttribute.class; - } - if (OPERATION.equals(target)) { - return ObjectModelOperation.class; - } - if (CLASS.equals(target)) { - return ObjectModelClassifier.class; - } - if (PACKAGE.equals(target)) { - return ObjectModelPackage.class; - } - - return null; - } - - @Deprecated - protected ObjectModelClassifier getClassifier(ObjectModel model, String type, String key, String fqn) { - ObjectModelClassifier omc = model.getClassifier(fqn); - if (omc == null) { - if (log.isWarnEnabled()) { - log.warn("Invalid " + type + " [" + key + - "] : Could not find classifier for " + fqn); - } - return null; - } - - //todo tchemit 2010-11-25 : what does it mean ? every thing extends ObjectModelClassifierImpl - if (!(omc instanceof ObjectModelClassifierImpl)) { - // TODO il faudra avoir des methodes d'acces en Set sur l'interface pour eviter ce message - if (log.isWarnEnabled()) { - log.warn("Can't add properties to model, " + - "it's not an " + - "ObjectModelClassifierImpl : " + - omc.getQualifiedName()); - } - return null; - } - return omc; - } - - @Deprecated - protected List<ObjectModelElement> getObjectElements(ObjectModelClassifier omc, String type, String key, String fqn, String target, String targetName) { - List<ObjectModelElement> elems = new ArrayList<>(); - if (CLASS.equals(target)) { - elems.add(omc); - } else if (ATTRIBUTE.equals(target)) { - - ObjectModelAttribute attr = - getAttribute((ObjectModelClass) omc, targetName); - if (attr != null && attr.isNavigable()) { - elems.add(attr); - } - - } else if (OPERATION.equals(target)) { - elems.addAll(omc.getOperations(targetName)); - } - - if (elems.isEmpty()) { - if (log.isWarnEnabled()) { - log.warn("Invalid " + type + " [" + key + "] : Could not find any element '" + targetName + "' of type '" + target + "' on classifier '" + fqn + "'."); - } - return null; - } - - Iterator<ObjectModelElement> itr = elems.iterator(); - while (itr.hasNext()) { - ObjectModelElement element = itr.next(); - if (element == null) { - if (log.isWarnEnabled()) { - log.warn("Invalid " + type + " [" + key + "] : Element '" + targetName + "' of type '" + target + "' on classifier '" + fqn + "' is null."); - } - itr.remove(); - } - } - - return elems; - } - - @Deprecated - protected boolean isTagValue(String key) { - return key.contains(TAGVALUE) || key.contains(TAG_VALUE); - } - - @Deprecated - protected boolean isStereotype(String key) { - return key.contains(STEREOTYPE); - } - } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java index 7ca8b01..3c605de 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java @@ -30,7 +30,6 @@ import org.nuiton.eugene.models.extension.stereotype.StereotypeUtil; import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; import org.nuiton.eugene.models.object.reader.InvalidModelPropertiesException; -import org.nuiton.eugene.models.stereotype.Stereotypes; import org.nuiton.util.RecursiveProperties; import org.nuiton.util.StringUtil; @@ -47,14 +46,6 @@ import java.util.Properties; import java.util.Set; import java.util.regex.Matcher; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.ATTRIBUTE; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.CLASS; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.MODEL; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.PACKAGE; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.STEREOTYPE; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.TAGVALUE; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.TAG_VALUE; - /** * Created on 09/09/16. * @@ -92,7 +83,7 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { } - if (strictLoading &&!safe) { + if (strictLoading && !safe) { String errorMessage = "There is some tag value(s) or stereotype(s) failed to be imported from " + file; throw new InvalidModelPropertiesException(errorMessage); @@ -117,7 +108,7 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { // model stereotype if (stereoTypeKey) { - Set<String> stereotypes = Stereotypes.getStereotypes(value); + Set<String> stereotypes = StereotypeUtil.getStereotypes(value); for (String stereotype : stereotypes) { safe &= callback.onModelStereotypeFound(stereotype); } @@ -152,7 +143,7 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { String fqn = matcher.group(1); fqn = StringUtil.substring(fqn, 0, -1); // remove ended . - Set<String> stereotypes = Stereotypes.getStereotypes(value); + Set<String> stereotypes = StereotypeUtil.getStereotypes(value); for (String stereotype : stereotypes) { safe &= callback.onPackageStereotypeFound(fqn, stereotype); } @@ -193,7 +184,7 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { String target = matcher.group(2); String targetName = matcher.group(3); - Set<String> stereotypes = Stereotypes.getStereotypes(value); + Set<String> stereotypes = StereotypeUtil.getStereotypes(value); for (String stereotype : stereotypes) { if (CLASS.equals(target)) { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParser.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParser.java index 9ab5866..8034d27 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParser.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParser.java @@ -35,5 +35,20 @@ import java.io.IOException; * @author Tony Chemit - chemit@codelutin.com */ public interface ModelExtensionFileParser { + + String TAGVALUE = "tagvalue"; + + String TAG_VALUE = "tagValue"; + + String STEREOTYPE = "stereotype"; + + String ATTRIBUTE = "attribute"; + + String CLASS = "class"; + + String MODEL = "model"; + + String PACKAGE = "package"; + void parse(File file, ModelExtensionFileParserCallback callback) throws IOException, InvalidStereotypeSyntaxException, InvalidTagValueSyntaxException; } diff --git a/eugene/src/main/resources/i18n/eugene_en_GB.properties b/eugene/src/main/resources/i18n/eugene_en_GB.properties new file mode 100644 index 0000000..30f0113 --- /dev/null +++ b/eugene/src/main/resources/i18n/eugene_en_GB.properties @@ -0,0 +1,11 @@ +eugene.core.stereotypes=EUGeNe Core stereotypes +eugene.core.stereotypes.ordered=Is attribute ordererd ? +eugene.core.stereotypes.skip=Skip generation +eugene.core.stereotypes.unique=Is attribute unique ? +eugene.core.tagValues.attributeGeneric=Generic type of attribute +eugene.core.tagValues.constantPrefix=Constant field prefix +eugene.core.tagValues.documentation=Documentation +eugene.core.tagValues.generateBooleanGetMethods=Generate getter on Boolean +eugene.core.tagValues.i18n=I18n prefix +eugene.core.tagValues.version=Version of model +eugene.core.tagvalues=EUGeNe Core tag values diff --git a/eugene/src/main/resources/i18n/eugene_fr_FR.properties b/eugene/src/main/resources/i18n/eugene_fr_FR.properties new file mode 100644 index 0000000..db0b548 --- /dev/null +++ b/eugene/src/main/resources/i18n/eugene_fr_FR.properties @@ -0,0 +1,11 @@ +eugene.core.stereotypes=EUGeNe stéréotypes +eugene.core.stereotypes.ordered=L'attribut est-il ordonné ? +eugene.core.stereotypes.skip=Ne pas générer +eugene.core.stereotypes.unique=L'attribut est-il unique ? +eugene.core.tagValues.attributeGeneric=Type générique de l'attribut +eugene.core.tagValues.constantPrefix=Préfixe des constantes +eugene.core.tagValues.documentation=Documentation +eugene.core.tagValues.generateBooleanGetMethods=Génerer les getters sur le type Boolean +eugene.core.tagValues.i18n=Préfix i18n +eugene.core.tagValues.version=Version du modèle +eugene.core.tagvalues=EUGeNe Core tag values diff --git a/eugene/src/test/java/org/nuiton/eugene/EugeneCoreStereotypesTest.java b/eugene/src/test/java/org/nuiton/eugene/EugeneCoreStereotypesTest.java index fa1af5a..b084ef4 100644 --- a/eugene/src/test/java/org/nuiton/eugene/EugeneCoreStereotypesTest.java +++ b/eugene/src/test/java/org/nuiton/eugene/EugeneCoreStereotypesTest.java @@ -1,5 +1,27 @@ package org.nuiton.eugene; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import org.junit.Assert; import org.junit.Before; import org.junit.Test; diff --git a/eugene/src/test/java/org/nuiton/eugene/EugeneCoreTagValuesTest.java b/eugene/src/test/java/org/nuiton/eugene/EugeneCoreTagValuesTest.java index d694981..57c8160 100644 --- a/eugene/src/test/java/org/nuiton/eugene/EugeneCoreTagValuesTest.java +++ b/eugene/src/test/java/org/nuiton/eugene/EugeneCoreTagValuesTest.java @@ -1,5 +1,27 @@ package org.nuiton.eugene; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import org.junit.Assert; import org.junit.Before; import org.junit.Test; diff --git a/pom.xml b/pom.xml index e154149..04141da 100644 --- a/pom.xml +++ b/pom.xml @@ -136,6 +136,7 @@ <!-- redmine project Id --> <projectId>eugene</projectId> + <ciViewId>Eugene</ciViewId> <processorPluginVersion>1.3</processorPluginVersion> <nuitonUtilsVersion>3.0-rc-15</nuitonUtilsVersion> @@ -151,11 +152,17 @@ <plexusPluginVersion>1.3.8</plexusPluginVersion> <doxiaVersion>1.6</doxiaVersion> <mavenVersion>3.3.9</mavenVersion> - - <ciViewId>Eugene</ciViewId> + + <!-- Java level configuration --> <javaVersion>1.7</javaVersion> <signatureArtifactId>java17</signatureArtifactId> <signatureVersion>1.0</signatureVersion> + + <!-- I18n configuration --> + <i18n.failsIfAnyKeyMissingValue>true</i18n.failsIfAnyKeyMissingValue> + <i18n.checkBundle>true</i18n.checkBundle> + <i18n.showEmpty>true</i18n.showEmpty> + </properties> <dependencyManagement> -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.