This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit df54aeb665547d67a76725f6afe9b1979e4ec2e8 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Oct 8 14:40:49 2016 +0200 Remove notion of stereotypes, only keep tag values (stereotypes are boolean tag values) (Fixes #4064) --- .../eugene/java/AbstractJavaBeanTransformer.java | 12 +- .../nuiton/eugene/java/EugeneJavaStereoTypes.java | 436 --------------------- .../nuiton/eugene/java/EugeneJavaTagValues.java | 30 ++ .../nuiton/eugene/java/JavaBeanTransformer.java | 8 +- .../eugene/java/JavaBeanTransformerTagValues.java | 2 +- .../eugene/java/JavaEnumerationTransformer.java | 4 +- .../eugene/java/SimpleJavaBeanTransformer.java | 30 +- .../java/SimpleJavaBeanTransformerTagValues.java | 2 +- .../SimpleJavaBeanWithNoInterfaceTransformer.java | 14 +- ...avaBeanWithNoInterfaceTransformerTagValues.java | 2 +- ...stereotype.provider.StereotypeMetadatasProvider | 1 - ...ion.tagvalue.provider.TagValueMetadatasProvider | 5 +- .../eugene/java/EugeneJavaStereoTypesTest.java | 80 ---- .../eugene/java/EugeneJavaTagValuesTest.java | 15 + .../nuiton/eugene/plugin/AvailableDataMojo.java | 101 +---- .../nuiton/eugene/plugin/StereotypesReport.java | 88 ----- .../eugene/plugin/modelextension/ClassBean.java | 6 +- .../eugene/plugin/modelextension/ElementBean.java | 20 +- .../plugin/modelextension/ModelBeanBuilder.java | 13 +- .../plugin/renderer/StereotypesReportRenderer.java | 177 --------- .../writer/BaseChainedFileWriterToMemoryModel.java | 2 +- .../org/nuiton/eugene/EugeneCoreStereotypes.java | 161 -------- .../org/nuiton/eugene/EugeneCoreTagValues.java | 81 +++- .../main/java/org/nuiton/eugene/ModelReader.java | 10 +- .../org/nuiton/eugene/java/JavaGeneratorUtil.java | 8 +- .../main/java/org/nuiton/eugene/models/Model.java | 3 +- .../MismatchStereotypeTargetException.java | 34 -- .../extension/stereotype/StereotypeMetadata.java | 62 --- .../stereotype/StereotypeNotFoundException.java | 34 -- .../extension/stereotype/StereotypeUtil.java | 153 -------- .../extension/stereotype/WithStereotypes.java | 58 --- .../AggregateStereotypeMetadatasProvider.java | 113 ------ .../DefaultStereotypeMetadatasProvider.java | 84 ---- .../provider/StereotypeMetadatasProvider.java | 47 --- .../InvalidStereotypeSyntaxException.java | 2 +- .../MissingStereoTypeException.java | 2 +- .../models/extension/tagvalue/TagValueUtil.java | 27 ++ .../eugene/models/object/ObjectModelElement.java | 3 +- .../eugene/models/object/ObjectModelPackage.java | 3 +- .../object/reader/AbstractObjectModelReader.java | 2 +- .../extension/CompactModelExtensionFileParser.java | 9 +- .../extension/FlatModelExtensionFileParser.java | 13 +- .../reader/extension/LoadModelExtension.java | 46 +-- .../reader/extension/ModelExtensionFileParser.java | 2 +- .../object/xml/ObjectModelAttributeImpl.java | 4 +- .../models/object/xml/ObjectModelElementImpl.java | 21 +- .../eugene/models/object/xml/ObjectModelImpl.java | 56 +-- .../models/object/xml/ObjectModelPackageImpl.java | 1 - .../eugene/models/state/xml/StateModelImpl.java | 21 +- ...stereotype.provider.StereotypeMetadatasProvider | 1 - .../nuiton/eugene/EugeneCoreStereotypesTest.java | 74 ---- .../org/nuiton/eugene/EugeneCoreTagValuesTest.java | 7 + 52 files changed, 312 insertions(+), 1878 deletions(-) diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java index 39a5868..cfb4c18 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,7 +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.extension.tagvalue.MissingStereoTypeException; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelClassifier; @@ -61,11 +61,9 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer private static final Log log = LogFactory.getLog(AbstractJavaBeanTransformer.class); protected final EugeneJavaTagValues javaTemplatesTagValues; - protected final EugeneJavaStereoTypes javaTemplatesStereoTypes; public AbstractJavaBeanTransformer() { javaTemplatesTagValues = new EugeneJavaTagValues(); - javaTemplatesStereoTypes = new EugeneJavaStereoTypes(); } protected boolean notFoundInClassPath(ObjectModelClass input, String className) { @@ -779,8 +777,8 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer ObjectModelClassifier output) { String i18nPrefix = eugeneTagValues.getI18nPrefixTagValue(input, - aPackage, - model); + aPackage, + model); if (!StringUtils.isEmpty(i18nPrefix)) { generateI18nBlock(input, output, i18nPrefix); } @@ -853,7 +851,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer if (!notInClassPath) { - boolean canOverride = javaTemplatesStereoTypes.isOverrideAbstractClasses(aclass, aPackage, model); + boolean canOverride = javaTemplatesTagValues.isOverrideAbstractClasses(aclass, aPackage, model); String fqn = aclass.getPackageName() + "." + abstractClassName; if (!canOverride) { String message = "Can not override abstract class " + fqn + ", already found in classpath"; @@ -879,7 +877,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer if (!noMethods) { - boolean canOverride = javaTemplatesStereoTypes.isAcceptBeanWithMethods(aclass, aPackage, model); + boolean canOverride = javaTemplatesTagValues.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."; 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 deleted file mode 100644 index 244bdc2..0000000 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaStereoTypes.java +++ /dev/null @@ -1,436 +0,0 @@ -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.stereotype.StereotypeMetadata; -import org.nuiton.eugene.models.extension.stereotype.StereotypeUtil; -import org.nuiton.eugene.models.extension.stereotype.provider.DefaultStereotypeMetadatasProvider; -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 stereotypes managed by Java templates. - * - * @author Tony Chemit - chemit@codelutin.com - * @plexus.component role="org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider" role-hint="eugene-java-templates" - * @since 2.5.6 - */ -public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { - - @Override - public String getDescription() { - return t("eugene.java.stereotypes"); - } - - public enum Store implements StereotypeMetadata { - - /** - * Stereotype for JavaBean objects to place on a classifier. - * - * @see #hasBeanStereotype(ObjectModelClassifier, ObjectModelPackage) - * @see #hasBeanStereotype(ObjectModelPackage) - * @since 2.5.6 - */ - 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). - * - * By default, user should never add methods in bean classes, simply write them in your java code!. - * - * You can globaly use it on the complete model, on packages, or to a specific classifier. - * - * @see #isAcceptBeanWithMethods(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - @Deprecated - acceptBeanWithMethods(n("eugene.java.stereotype.acceptBeanWithMethods"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * Tag value to authorize user to override abstract classes. - * - * By default, user should never override abstract classes but works on implementation ones. - * - * You can globaly use it on the complete model, on packages, or to a specific classifier. - * - * @see #isOverrideAbstractClasses(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - @Deprecated - overrideAbstractClasses(n("eugene.java.stereotype.overrideAbstractClasses"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * 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 - */ - @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. - * - * 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 - */ - @Deprecated - generateNotEmptyCollections(n("eugene.java.stereotype.generateNotEmptyCollections"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * 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 - */ - @Deprecated - simpleBeanGenerateInterface(n("eugene.java.stereotype.simpleBeanGenerateInterface"), true, 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 - */ - @Deprecated - simpleBeanGenerateFactory(n("eugene.java.stereotype.simpleBeanGenerateFactory"), true, 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 - */ - @Deprecated - simpleBeanGenerateDefaults(n("eugene.java.stereotype.simpleBeanGenerateDefaults"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To generate a factory of generated simple beans. - * - * You must use it on the complete model. - * - * @see #isSimpleBeanWithNoInterfaceSkipGenerateDefaults(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - @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. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #isSimpleBeanWithNoInterfaceSkipGeneratePredicates(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - @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. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #isSimpleBeanWithNoInterfaceSkipGenerateFunctions(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - @Deprecated - simpleBeanWithNoInterfaceGenerateFunctions(n("eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateFunctions"), true, 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 - */ - @Deprecated - simpleBeanWithNoInterfaceSkipGenerateConstructors(n("eugene.java.stereotype.simpleBeanWithNoInterfaceSkipGenerateConstructors"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class); - - private final Set<Class<?>> targets; - private final String i18nDescriptionKey; - private final boolean deprecated; - - Store(String i18nDescriptionKey, boolean deprecated, Class<?>... targets) { - this.deprecated = deprecated; - this.targets = ImmutableSet.copyOf(targets); - this.i18nDescriptionKey = i18nDescriptionKey; - } - - @Override - public String getName() { - return name(); - } - - @Override - public Set<Class<?>> getTargets() { - return targets; - } - - @Override - public String getDescription() { - return t(i18nDescriptionKey); - } - - @Override - public boolean isDeprecated() { - return deprecated; - } - } - - public EugeneJavaStereoTypes() { - super((StereotypeMetadata[]) Store.values()); - } - - /** - * Check if the given classifier has the {@link Store#bean} stereotype. - * - * @param classifier classifier to test - * @return {@code true} if stereotype was found, {@code false otherwise} - * @see Store#bean - */ - public static boolean hasBeanStereotype(ObjectModelClassifier classifier, ObjectModelPackage aPackage) { - return StereotypeUtil.findDirectStereotype(Store.bean, classifier, aPackage); - } - - /** - * Check if the given aPackage has the {@link Store#bean} stereotype. - * - * @param aPackage classifier to test - * @return {@code true} if stereotype was found, {@code false otherwise} - * @see Store#bean - */ - public static boolean hasBeanStereotype(ObjectModelPackage aPackage) { - return StereotypeUtil.findDirectStereotype(Store.bean, aPackage); - } - - /** - * Obtain the value of the {@link Store#acceptBeanWithMethods} tag value on the given model, package or classifier. - * - * It will first look on the model, then and package and then in the given classifier. - * - * If no value found, then will use the default value of the tag value. - * - * @param classifier classifier to seek - * @param aPackage package to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#acceptBeanWithMethods - * @since 3.0 - */ - @Deprecated - public boolean isAcceptBeanWithMethods(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return StereotypeUtil.findDirectStereotype(Store.acceptBeanWithMethods, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#overrideAbstractClasses} tag value on the given model, package or classifier. - * - * It will first look on the model, then and package and then in the given classifier. - * - * If no value found, then will use the default value of the tag value. - * - * @param classifier classifier to seek - * @param aPackage package to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#overrideAbstractClasses - * @since 3.0 - */ - @Deprecated - public boolean isOverrideAbstractClasses(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return StereotypeUtil.findDirectStereotype(Store.overrideAbstractClasses, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#generatePropertyChangeSupport} tag value on the given model, package or classifier. - * - * It will first look on the model, then and package and then in the given classifier. - * - * If no value found, then will use the default value of the tag value. - * - * @param classifier classifier to seek - * @param aPackage package to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#generatePropertyChangeSupport - * @since 2.12 - */ - @Deprecated - public boolean isSkipGeneratePropertyChangeSupport(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return StereotypeUtil.findDirectStereotype(Store.generatePropertyChangeSupport, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#generateNotEmptyCollections} tag value on the given model, package or classifier. - * - * It will first look on the model, then and package and then in the given classifier. - * - * If no value found, then will use the default value of the tag value. - * - * @param classifier classifier to seek - * @param aPackage package to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#generateNotEmptyCollections - * @since 2.12 - */ - @Deprecated - public boolean isSkipGenerateNotEmptyCollections(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return StereotypeUtil.findDirectStereotype(Store.generateNotEmptyCollections, classifier, aPackage, model); - } - - /** - * 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 - */ - @Deprecated - public boolean isSimpleBeanSkipGenerateInterface(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return StereotypeUtil.findDirectStereotype(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 - */ - @Deprecated - public boolean isSimpleBeanSkipGenerateFactory(ObjectModel model) { - return StereotypeUtil.findDirectStereotype(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 - */ - @Deprecated - public boolean isSimpleBeanSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return StereotypeUtil.findDirectStereotype(Store.simpleBeanGenerateDefaults, classifier, aPackage, model); - } - - /** - * 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 - */ - @Deprecated - public boolean isSimpleBeanWithNoInterfaceSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return StereotypeUtil.findDirectStereotype(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 - */ - @Deprecated - public boolean isSimpleBeanWithNoInterfaceSkipGeneratePredicates(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return StereotypeUtil.findDirectStereotype(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 - */ - @Deprecated - public boolean isSimpleBeanWithNoInterfaceSkipGenerateFunctions(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return StereotypeUtil.findDirectStereotype(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 - */ - @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 f9d013d..2d000a5 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 @@ -53,6 +53,15 @@ public class EugeneJavaTagValues extends DefaultTagValueMetadatasProvider { public enum Store implements TagValueMetadata { /** + * Boolean tag value for JavaBean objects to place on a classifier or package. + * + * @see #isBean(ObjectModelClassifier, ObjectModelPackage) + * @see #isBean(ObjectModelPackage) + * @since 2.5.6 + */ + bean(n("eugene.java.stereotype.bean"), boolean.class, null, ObjectModelClassifier.class, ObjectModelPackage.class), + + /** * Tag value to authorize user to generate some bean with methods, some generators won't generate them : Lots code). * * By default, user should never add methods in bean classes, simply write them in your java code!. @@ -244,4 +253,25 @@ public class EugeneJavaTagValues extends DefaultTagValueMetadatasProvider { return TagValueUtil.findBooleanTagValue(Store.java8, model); } + /** + * Check if the given classifier has the {@link Store#bean} stereotype. + * + * @param classifier classifier to test + * @return {@code true} if stereotype was found, {@code false otherwise} + * @see Store#bean + */ + public boolean isBean(ObjectModelClassifier classifier, ObjectModelPackage aPackage) { + return TagValueUtil.findBooleanTagValue(Store.bean, classifier, aPackage); + } + + /** + * Check if the given aPackage has the {@link Store#bean} stereotype. + * + * @param aPackage classifier to test + * @return {@code true} if stereotype was found, {@code false otherwise} + * @see Store#bean + */ + public boolean isBean(ObjectModelPackage aPackage) { + return TagValueUtil.findBooleanTagValue(Store.bean, aPackage); + } } 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 8dde685..ff7e967 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 @@ -61,7 +61,7 @@ public class JavaBeanTransformer extends AbstractJavaBeanTransformer { ObjectModelPackage aPackage = getPackage(input); - if (!JavaTemplatesStereoTypes.hasBeanStereotype(input, aPackage)) { + if (!javaTemplatesTagValues.isBean(input, aPackage)) { // not a bean return; @@ -138,7 +138,7 @@ public class JavaBeanTransformer extends AbstractJavaBeanTransformer { Collection<ObjectModelClass> superclasses = input.getSuperclasses(); if (CollectionUtils.isNotEmpty(superclasses)) { for (ObjectModelClass superclass : superclasses) { - if (JavaTemplatesStereoTypes.hasBeanStereotype(superclass, aPackage)) { + if (javaTemplatesTagValues.isBean(superclass, aPackage)) { superClassIsBean = true; break; } @@ -180,10 +180,10 @@ public class JavaBeanTransformer extends AbstractJavaBeanTransformer { generateI18nBlockAndConstants(aPackage, input, output); - boolean usePCS = !javaTemplatesStereoTypes.isSkipGeneratePropertyChangeSupport(input, aPackage, model); + boolean usePCS = !javaTemplatesTagValues.isSkipGeneratePropertyChangeSupport(input, aPackage, model); boolean generateBooleanGetMethods = eugeneTagValues.isGenerateBooleanGetMethods(input, aPackage, model); - boolean generateNotEmptyCollections = !javaTemplatesStereoTypes.isSkipGenerateNotEmptyCollections(input, aPackage, model); + boolean generateNotEmptyCollections = !javaTemplatesTagValues.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 index febd6ad..f2a20e8 100644 --- 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 @@ -55,7 +55,7 @@ public class JavaBeanTransformerTagValues extends DefaultTagValueMetadatasProvid /** * 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}), + * If the bean needs Property change support (says you use the {@link EugeneJavaTagValues.Store#generatePropertyChangeSupport}), * then your class must provide everything for it. * * More over, if you use some collections in your bean you must also define 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 bcd5b54..62578bd 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 @@ -27,7 +27,7 @@ package org.nuiton.eugene.java; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.EugeneCoreStereotypes; +import org.nuiton.eugene.EugeneCoreTagValues; import org.nuiton.eugene.models.object.ObjectModelEnumeration; import org.nuiton.eugene.models.object.ObjectModelPackage; @@ -72,7 +72,7 @@ public class JavaEnumerationTransformer extends ObjectModelTransformerToJava { protected boolean canGenerate(ObjectModelEnumeration input) { ObjectModelPackage aPackage = getPackage(input); - boolean b = !EugeneCoreStereotypes.hasSkipStereotype(input, aPackage); + boolean b = !EugeneCoreTagValues.isSkip(input, aPackage); if (b) { // check if not found in class-path 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 88c9405..0bc33b4 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 @@ -44,6 +44,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; + /** * SimpleJavaBeanTransformer generates simple bean with pcs support * (and nothing else) according to the JavaBeans 1.1 norm with no Impl generation mecanism. @@ -82,7 +83,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { ObjectModelPackage aPackage = getPackage(input); - if (!JavaTemplatesStereoTypes.hasBeanStereotype(input, aPackage)) { + if (!javaTemplatesTagValues.isBean(input, aPackage)) { // not a bean return; @@ -131,7 +132,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { } boolean generateClass = notFoundInClassPath(input, className) - && canGenerateClassWithMethods(aPackage, input, className); + && canGenerateClassWithMethods(aPackage, input, className); if (generateClass) { @@ -147,8 +148,8 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { generateBeanDefaults(input, abstractDefaultClassName, defaultClassName); } - boolean generateAbstractDefaults = !javaTemplatesStereoTypes.isSimpleBeanSkipGenerateDefaults(input, aPackage, model) - && canGenerateAbstractClass(aPackage, input, abstractDefaultClassName); + boolean generateAbstractDefaults = !simpleJavaBeanTransformerTagValues.isSimpleBeanSkipGenerateDefaults(input, aPackage, model) + && canGenerateAbstractClass(aPackage, input, abstractDefaultClassName); if (generateAbstractDefaults) { generateBeanAbstractDefaults(aPackage, input, abstractDefaultClassName); @@ -157,7 +158,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { protected boolean canGenerateFactory(ObjectModel model, String className) { - boolean generateFactory = !javaTemplatesStereoTypes.isSimpleBeanSkipGenerateFactory(model); + boolean generateFactory = !simpleJavaBeanTransformerTagValues.isSimpleBeanSkipGenerateFactory(model); String defaultPackage = getDefaultPackageName(); @@ -170,7 +171,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { ObjectModelClass input, String className) { - boolean generateInterface = !javaTemplatesStereoTypes.isSimpleBeanSkipGenerateInterface(input, aPackage, model); + boolean generateInterface = !simpleJavaBeanTransformerTagValues.isSimpleBeanSkipGenerateInterface(input, aPackage, model); return generateInterface && notFoundInClassPath(input, className); @@ -181,7 +182,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { boolean withInput = input != null; boolean canGenerate = notFoundInClassPath(input, className) - && !javaTemplatesStereoTypes.isSimpleBeanSkipGenerateDefaults(input, aPackage, model); + && !simpleJavaBeanTransformerTagValues.isSimpleBeanSkipGenerateDefaults(input, aPackage, model); if (canGenerate) { @@ -190,7 +191,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { // class in not abstract // class is a bean - canGenerate = !input.isAbstract() && JavaTemplatesStereoTypes.hasBeanStereotype(input, aPackage); + canGenerate = !input.isAbstract() && javaTemplatesTagValues.isBean(input, aPackage); } } @@ -209,8 +210,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { ObjectModelPackage aPackage = getPackage(packageName); - if (!aClass.isAbstract() && - JavaTemplatesStereoTypes.hasBeanStereotype(aClass, aPackage)) { + if (!aClass.isAbstract() && javaTemplatesTagValues.isBean(aClass, aPackage)) { String typeName = getBeanInterfaceName(aPackage, aClass); String typeBeanName = getBeanClassName(aPackage, aClass); @@ -265,10 +265,10 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { Collection<ObjectModelClass> superclasses = input.getSuperclasses(); if (CollectionUtils.isNotEmpty(superclasses)) { for (ObjectModelClass superclass : superclasses) { - if (JavaTemplatesStereoTypes.hasBeanStereotype(superclass, aPackage)) { + if (javaTemplatesTagValues.isBean(superclass, aPackage)) { superClassIsBean = true; superClass = superclass.getPackageName() + "." + - getBeanInterfaceName(aPackage, superclass); + getBeanInterfaceName(aPackage, superclass); break; } superClass = superclass.getQualifiedName(); @@ -339,7 +339,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { Collection<ObjectModelClass> superclasses = input.getSuperclasses(); if (CollectionUtils.isNotEmpty(superclasses)) { for (ObjectModelClass superclass : superclasses) { - if (JavaTemplatesStereoTypes.hasBeanStereotype(superclass, aPackage)) { + if (javaTemplatesTagValues.isBean(superclass, aPackage)) { superClassIsBean = true; superClass = superclass.getPackageName() + "." + getBeanClassName(aPackage, superclass); break; @@ -390,10 +390,10 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { // Get available properties List<ObjectModelAttribute> properties = getProperties(input); - boolean usePCS = !javaTemplatesStereoTypes.isSkipGeneratePropertyChangeSupport(input, aPackage, model); + boolean usePCS = !javaTemplatesTagValues.isSkipGeneratePropertyChangeSupport(input, aPackage, model); boolean generateBooleanGetMethods = eugeneTagValues.isGenerateBooleanGetMethods(input, aPackage, model); - boolean generateNotEmptyCollections = !javaTemplatesStereoTypes.isSkipGenerateNotEmptyCollections(input, aPackage, model); + boolean generateNotEmptyCollections = !javaTemplatesTagValues.isSkipGenerateNotEmptyCollections(input, aPackage, model); // Add properties field + javabean methods for (ObjectModelAttribute attr : properties) { diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformerTagValues.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformerTagValues.java index 378aef4..ca5e907 100644 --- 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 @@ -85,7 +85,7 @@ public class SimpleJavaBeanTransformerTagValues extends DefaultTagValueMetadatas /** * 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}, + * If the bean needs Property change support (says you use the tag-value {@link EugeneJavaTagValues.Store#generatePropertyChangeSupport}, * then your class must provide evrything for it. * * More over, if you use some collections in your bean you must also define 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 79ae81a..ca783ca 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 @@ -97,7 +97,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr for (ObjectModelClass aClass : model.getClasses()) { ObjectModelPackage aPackage = model.getPackage(aClass.getPackageName()); - if (JavaTemplatesStereoTypes.hasBeanStereotype(aClass, aPackage)) { + if (javaTemplatesTagValues.isBean(aClass, aPackage)) { beanClassesBuilder.add(aClass); @@ -107,7 +107,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr String generateName = generateName(classNamePrefix, aClass.getName(), classNameSuffix); beanNameTranslationBuilder.put(aClass, generateName); - boolean canGenerateDefaults = !javaTemplatesStereoTypes.isSimpleBeanWithNoInterfaceSkipGenerateDefaults(aClass, aPackage, model); + boolean canGenerateDefaults = !simpleJavaBeanWithNoInterfaceTransformerTagValues.isSimpleBeanWithNoInterfaceSkipGenerateDefaults(aClass, aPackage, model); if (canGenerateDefaults) { @@ -314,9 +314,9 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr // Get available properties List<ObjectModelAttribute> properties = getProperties(input); - boolean usePCS = !javaTemplatesStereoTypes.isSkipGeneratePropertyChangeSupport(input, aPackage, model); + boolean usePCS = !javaTemplatesTagValues.isSkipGeneratePropertyChangeSupport(input, aPackage, model); boolean generateBooleanGetMethods = eugeneTagValues.isGenerateBooleanGetMethods(input, aPackage, model); - boolean generateNotEmptyCollections = !javaTemplatesStereoTypes.isSkipGenerateNotEmptyCollections(input, aPackage, model); + boolean generateNotEmptyCollections = !javaTemplatesTagValues.isSkipGenerateNotEmptyCollections(input, aPackage, model); // Add properties field + javabean methods for (ObjectModelAttribute attr : properties) { @@ -378,19 +378,19 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr }*/ ); - boolean generateContructors = !javaTemplatesStereoTypes.isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(aClass, aPackage, model) && !aClass.isAbstract(); + boolean generateContructors = !simpleJavaBeanWithNoInterfaceTransformerTagValues.isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(aClass, aPackage, model) && !aClass.isAbstract(); if (generateContructors) { generateAbstractBeanDefaultsConstructors(output, typeName); } generateAbstractBeanDefaultsCopyMethods(output, typeName); - boolean generatePredicates = !javaTemplatesStereoTypes.isSimpleBeanWithNoInterfaceSkipGeneratePredicates(aClass, aPackage, model); + boolean generatePredicates = !simpleJavaBeanWithNoInterfaceTransformerTagValues.isSimpleBeanWithNoInterfaceSkipGeneratePredicates(aClass, aPackage, model); if (generatePredicates) { generateAbstractBeanDefaultsPredicates(aClass, output, typeName); } - boolean generateFunctions = !javaTemplatesStereoTypes.isSimpleBeanWithNoInterfaceSkipGenerateFunctions(aClass, aPackage, model); + boolean generateFunctions = !simpleJavaBeanWithNoInterfaceTransformerTagValues.isSimpleBeanWithNoInterfaceSkipGenerateFunctions(aClass, aPackage, model); if (generateFunctions) { generateAbstractBeanDefaultsFunctions(aClass, output, typeName); } 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 index 5a067ed..7887a24 100644 --- 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 @@ -97,7 +97,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformerTagValues extends DefaultTa /** * 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}, + * If the bean needs Property change support (says you use the tag-value {@link EugeneJavaTagValues.Store#generatePropertyChangeSupport}, * then your class must provide evrything for it. * * More over, if you use some collections in your bean you must also define diff --git a/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider b/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider deleted file mode 100644 index a0b948a..0000000 --- a/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider +++ /dev/null @@ -1 +0,0 @@ -org.nuiton.eugene.java.EugeneJavaStereoTypes \ No newline at end of file diff --git a/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider b/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider index 982aa83..1c26f8d 100644 --- a/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider +++ b/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider @@ -1 +1,4 @@ -org.nuiton.eugene.java.EugeneJavaTagValues \ No newline at end of file +org.nuiton.eugene.java.EugeneJavaTagValues +org.nuiton.eugene.java.JavaBeanTransformerTagValues +org.nuiton.eugene.java.SimpleJavaBeanTransformerTagValues +org.nuiton.eugene.java.SimpleJavaBeanWithNoInterfaceTransformerTagValues diff --git a/eugene-java-templates/src/test/java/org/nuiton/eugene/java/EugeneJavaStereoTypesTest.java b/eugene-java-templates/src/test/java/org/nuiton/eugene/java/EugeneJavaStereoTypesTest.java deleted file mode 100644 index 1ebd33b..0000000 --- a/eugene-java-templates/src/test/java/org/nuiton/eugene/java/EugeneJavaStereoTypesTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.nuiton.eugene.java; - -/* - * #%L - * EUGene :: Java templates - * %% - * Copyright (C) 2012 - 2014 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.nuiton.eugene.models.extension.stereotype.MismatchStereotypeTargetException; -import org.nuiton.eugene.models.extension.stereotype.StereotypeNotFoundException; -import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; -import org.nuiton.eugene.models.object.ObjectModel; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelClassifier; -import org.nuiton.eugene.models.object.ObjectModelEnumeration; -import org.nuiton.eugene.models.object.ObjectModelInterface; -import org.nuiton.eugene.models.object.ObjectModelOperation; -import org.nuiton.eugene.models.object.ObjectModelPackage; - -public class EugeneJavaStereoTypesTest { - - protected StereotypeMetadatasProvider provider; - - @Before - public void setUp() throws Exception { - provider = new EugeneJavaStereoTypes(); - } - - @Test - public void validate() throws Exception { - - validate(EugeneJavaStereoTypes.Store.bean.getName(), true, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class, ObjectModelInterface.class); - validate(EugeneJavaStereoTypes.Store.generateNotEmptyCollections.getName(), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); - validate(EugeneJavaStereoTypes.Store.generatePropertyChangeSupport.getName(), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); - validate(EugeneJavaStereoTypes.Store.generateNotEmptyCollections.getName(), false, ObjectModelOperation.class, ObjectModelAttribute.class); - validate(EugeneJavaStereoTypes.Store.generatePropertyChangeSupport.getName(), false, ObjectModelOperation.class, ObjectModelAttribute.class); - - validate(EugeneJavaStereoTypes.Store.bean.getName(), false, ObjectModel.class, ObjectModelOperation.class); - - long l = System.nanoTime(); - validate(EugeneJavaStereoTypes.Store.bean.getName() + l, false, ObjectModelPackage.class, ObjectModel.class, ObjectModelOperation.class); - validate(EugeneJavaStereoTypes.Store.generateNotEmptyCollections.getName() + l, false, ObjectModelPackage.class, ObjectModelOperation.class, ObjectModelAttribute.class); - validate(EugeneJavaStereoTypes.Store.generatePropertyChangeSupport.getName() + l, false, ObjectModelPackage.class, ObjectModelOperation.class, ObjectModelAttribute.class); - - } - - protected void validate(String name, boolean expected, Class<?>... types) { - for (Class<?> type : types) { - try { - provider.validate(name, type); - Assert.assertTrue(expected); - } catch (StereotypeNotFoundException e) { - Assert.assertFalse(expected); - } catch (MismatchStereotypeTargetException e) { - Assert.assertFalse(expected); - } - } - } - -} 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 3613c9b..66b7507 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 @@ -33,6 +33,7 @@ import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelClassifier; import org.nuiton.eugene.models.object.ObjectModelEnumeration; +import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelPackage; @@ -47,10 +48,24 @@ public class EugeneJavaTagValuesTest { @Test public void validate() throws Exception { + + validate(EugeneJavaTagValues.Store.bean.getName(), true, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class, ObjectModelInterface.class); + validate(EugeneJavaTagValues.Store.generateNotEmptyCollections.getName(), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); + validate(EugeneJavaTagValues.Store.generatePropertyChangeSupport.getName(), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); + validate(EugeneJavaTagValues.Store.generateNotEmptyCollections.getName(), false, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(EugeneJavaTagValues.Store.generatePropertyChangeSupport.getName(), false, ObjectModelOperation.class, ObjectModelAttribute.class); + + validate(EugeneJavaTagValues.Store.bean.getName(), false, ObjectModel.class, ObjectModelOperation.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.bean.getName() + l, false, ObjectModelPackage.class, ObjectModel.class, ObjectModelOperation.class); + validate(EugeneJavaTagValues.Store.generateNotEmptyCollections.getName() + l, false, ObjectModelPackage.class, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(EugeneJavaTagValues.Store.generatePropertyChangeSupport.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-maven-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java index 23bc216..2952b8f 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java @@ -35,8 +35,6 @@ import org.apache.maven.plugins.annotations.ResolutionScope; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.Template; import org.nuiton.eugene.models.Model; -import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; -import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; import org.nuiton.eugene.models.object.ObjectModel; @@ -81,7 +79,7 @@ public class AvailableDataMojo extends AbstractMojo { * * @since 2.0.0 */ - @Parameter(property = "dataTypes", defaultValue = "") + @Parameter(property = "dataTypes") protected String dataTypes; /** @@ -104,14 +102,6 @@ public class AvailableDataMojo extends AbstractMojo { protected Map<String, ChainedFileWriter> writers; /** - * All available stereotype providers introspects via plexus. - * - * @since 2.9 - */ - @Component(role = StereotypeMetadatasProvider.class) - protected Map<String, StereotypeMetadatasProvider> stereotypeMetadatasProviders; - - /** * All available tag value providers introspects via plexus. * * @since 2.9 @@ -121,8 +111,6 @@ public class AvailableDataMojo extends AbstractMojo { protected TagValueMetadatasProvider currentTagValueMetadatasProvider; - protected StereotypeMetadatasProvider currentStereotypeMetadatasProvider; - @Override public void execute() throws MojoExecutionException, MojoFailureException { StringBuilder buffer = new StringBuilder(); @@ -181,10 +169,10 @@ public class AvailableDataMojo extends AbstractMojo { String format = "\nFound %s %ss in %s provider(s) : %s\n"; buffer.append(String.format(format, - nbData, - dataType, - tagValueMetadatasProviders.size(), - tagValueMetadatasProviders.keySet()) + nbData, + dataType, + tagValueMetadatasProviders.size(), + tagValueMetadatasProviders.keySet()) ); for (Map.Entry<String, TagValueMetadatasProvider> e : tagValueMetadatasProviders.entrySet()) { @@ -209,46 +197,6 @@ public class AvailableDataMojo extends AbstractMojo { data.toString(buffer, e2); } } - } else if (data == AvailableData.stereotype) { - - int nbData = 0; - for (StereotypeMetadatasProvider provider : stereotypeMetadatasProviders.values()) { - currentStereotypeMetadatasProvider = provider; - nbData += data.getData(this).size(); - } - currentStereotypeMetadatasProvider = null; - - String format = "\nFound %s %ss in %s provider(s) : %s\n"; - - buffer.append(String.format(format, - nbData, - dataType, - stereotypeMetadatasProviders.size(), - stereotypeMetadatasProviders.keySet()) - ); - - for (Map.Entry<String, StereotypeMetadatasProvider> e : stereotypeMetadatasProviders.entrySet()) { - String providerName = e.getKey(); - currentStereotypeMetadatasProvider = e.getValue(); - Map<String, ?> map = data.getData(this); - - int size = map.size(); - buffer.append("\nProvider [").append(providerName).append("] - "); - if (size == 0) { - buffer.append("No available ").append(dataType).append("."); - } else if (size == 1) { - buffer.append("Found one ").append(dataType).append(" : "); - } else { - buffer.append("Found "); - buffer.append(size); - buffer.append(" "); - buffer.append(dataType); - buffer.append("s : "); - } - for (Map.Entry<String, ?> e2 : map.entrySet()) { - data.toString(buffer, e2); - } - } } else { Map<String, ?> map = data.getData(this); @@ -351,45 +299,6 @@ public class AvailableDataMojo extends AbstractMojo { buffer.append("\' : "); buffer.append(t(((TagValueMetadata) value).getDescription())); } - }, - stereotype { - @Override - public Map<String, ?> getData(AvailableDataMojo mojo) { - Set<StereotypeMetadata> stereotypes = mojo.currentStereotypeMetadatasProvider.getStereotypes(); - return Maps.uniqueIndex(stereotypes, new Function<StereotypeMetadata, String>() { - @Override - public String apply(StereotypeMetadata input) { - return input.getName(); - } - }); - } - - @Override - String toString(Object data) { - StereotypeMetadata d = (StereotypeMetadata) data; - StringBuilder sb = new StringBuilder(); - Set<Class<?>> targets = d.getTargets(); - for (Class<?> aClass : targets) { - sb.append(", ").append(aClass.getSimpleName()); - } - String result = sb.toString(); - if (targets.size() > 0) { - result = result.substring(2); - } - return result; - } - - @Override - void toString(StringBuilder buffer, Map.Entry<String, ?> e) { - String name = e.getKey(); - Object value = e.getValue(); - buffer.append("\n ["); - buffer.append(name); - buffer.append("] targets : '"); - buffer.append(toString(value)); - buffer.append("\' : "); - buffer.append(t(((StereotypeMetadata) value).getDescription())); - } }; abstract Map<String, ?> getData(AvailableDataMojo mojo); diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/StereotypesReport.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/StereotypesReport.java deleted file mode 100644 index 34ed9cb..0000000 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/StereotypesReport.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.nuiton.eugene.plugin; - -/* - * #%L - * EUGene :: Maven plugin - * %% - * Copyright (C) 2006 - 2014 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import org.apache.maven.plugins.annotations.Component; -import org.apache.maven.plugins.annotations.Mojo; -import org.apache.maven.plugins.annotations.Parameter; -import org.apache.maven.plugins.annotations.ResolutionScope; -import org.apache.maven.reporting.MavenReportException; -import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; -import org.nuiton.eugene.plugin.renderer.StereotypesReportRenderer; - -import java.util.Locale; -import java.util.Map; - -/** - * To report a {@link StereotypeMetadatasProvider}. - * - * Created on 5/31/14. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 2.10 - */ -@Mojo(name = "stereotypes-report", requiresReports = true, - requiresDependencyResolution = ResolutionScope.COMPILE) -public class StereotypesReport extends AbstractEugeneReport<StereotypeMetadatasProvider> { - - /** - * Name of the stereotypes provider. - * - * This is the role-hint given to the tag value provider to describe. - */ - @Parameter(property = "eugene.providerName", defaultValue = "${project.artifactId}", required = true) - protected String providerName; - - @Component(role = StereotypeMetadatasProvider.class) - protected Map<String, StereotypeMetadatasProvider> providers; - - @Override - protected StereotypeMetadatasProvider initData(Locale locale) throws MavenReportException { - - StereotypeMetadatasProvider provider = providers.get(providerName); - - if (provider == null) { - - String errorMessage = i18n.format(getOutputName(), locale, "stereotypeProvider.not.found", providerName); - throw new MavenReportException(errorMessage); - - } - - return provider; - - } - - @Override - protected StereotypesReportRenderer createRenderer(Locale locale, StereotypeMetadatasProvider data) { - - return new StereotypesReportRenderer( - getSink(), i18n, locale, getOutputName(), javaDocDestDir, jxrDestDir, data); - - } - - @Override - public String getOutputName() { - return "stereotypes-report"; - } - -} diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ClassBean.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ClassBean.java index 450797d..7fec0ea 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ClassBean.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ClassBean.java @@ -50,7 +50,9 @@ public class ClassBean extends ElementBean { for (AttributeBean attributeBean : attributes) { for (Map.Entry<String, String> entry : attributeBean.tagValues.entrySet()) { - attributesTagValues.put(attributeBean.name + "." + entry.getKey(), entry.getValue()); + if (!"true".equals(entry.getValue())) { + attributesTagValues.put(attributeBean.name + "." + entry.getKey(), entry.getValue()); + } } } return attributesTagValues; @@ -60,7 +62,7 @@ public class ClassBean extends ElementBean { Set<String> attributesStereotypes = new TreeSet<>(); for (AttributeBean attributeBean : attributes) { - for (String entry : attributeBean.stereotypes) { + for (String entry : attributeBean.getStereotypes()) { attributesStereotypes.add(attributeBean.name + "." + entry); } } diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ElementBean.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ElementBean.java index 8774075..7791ae2 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ElementBean.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ElementBean.java @@ -22,13 +22,10 @@ package org.nuiton.eugene.plugin.modelextension; * #L% */ -import org.nuiton.eugene.models.extension.stereotype.WithStereotypes; -import org.nuiton.eugene.models.tagvalue.TagValueAble; - +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import java.util.TreeMap; -import java.util.TreeSet; /** * Created on 10/09/16. @@ -39,12 +36,10 @@ public class ElementBean implements Comparable<ElementBean> { protected final String name; protected final Map<String, String> tagValues; - protected final Set<String> stereotypes; public ElementBean(String name) { this.name = name; this.tagValues = new TreeMap<>(); - this.stereotypes = new TreeSet<>(); } public String getName() { @@ -56,7 +51,13 @@ public class ElementBean implements Comparable<ElementBean> { } public Set<String> getStereotypes() { - return stereotypes; + Set<String> result = new LinkedHashSet<>(); + for (Map.Entry<String, String> entry : tagValues.entrySet()) { + if ("true".equals(entry.getValue())) { + result.add(entry.getKey()); + } + } + return result; } @Override @@ -64,9 +65,4 @@ public class ElementBean implements Comparable<ElementBean> { return name.compareTo(o.name); } - public <T extends TagValueAble & WithStereotypes> void load(T tag) { - this.tagValues.putAll(tag.getTagValues()); - this.stereotypes.addAll(tag.getStereotypes()); - } - } diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBeanBuilder.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBeanBuilder.java index 3162419..fa9d5b6 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBeanBuilder.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/modelextension/ModelBeanBuilder.java @@ -22,7 +22,7 @@ package org.nuiton.eugene.plugin.modelextension; * #L% */ -import org.nuiton.eugene.models.extension.stereotype.InvalidStereotypeSyntaxException; +import org.nuiton.eugene.models.extension.tagvalue.InvalidStereotypeSyntaxException; import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; import org.nuiton.eugene.models.object.reader.extension.ModelExtensionFileParser; import org.nuiton.eugene.models.object.reader.extension.ModelExtensionFileParserCallback; @@ -106,7 +106,7 @@ public class ModelBeanBuilder implements ModelExtensionFileParserCallback { @Override public boolean onModelStereotypeFound(String stereotype) { - addStereotype(modelBean, stereotype); + addTagValue(modelBean, stereotype, "true"); modelStereotypeHits++; return true; } @@ -120,7 +120,7 @@ public class ModelBeanBuilder implements ModelExtensionFileParserCallback { @Override public boolean onPackageStereotypeFound(String packageName, String stereotype) { - addStereotype(modelBean.getOrCreatePackage(packageName), stereotype); + addTagValue(modelBean.getOrCreatePackage(packageName), stereotype, "true"); packageStereotypeHits++; return true; } @@ -134,7 +134,7 @@ public class ModelBeanBuilder implements ModelExtensionFileParserCallback { @Override public boolean onClassStereotypeFound(String className, String stereotype) { - addStereotype(modelBean.getOrCreateClass(className), stereotype); + addTagValue(modelBean.getOrCreateClass(className), stereotype, "true"); classStereotypeHits++; return true; } @@ -148,7 +148,7 @@ public class ModelBeanBuilder implements ModelExtensionFileParserCallback { @Override public boolean onAttributeStereotypeFound(String className, String attributeName, String stereotype) { - addStereotype(modelBean.getOrCreateClassAttribute(className, attributeName), stereotype); + addTagValue(modelBean.getOrCreateClassAttribute(className, attributeName), stereotype, "true"); classAttributeStereotypeHits++; return true; } @@ -164,7 +164,4 @@ public class ModelBeanBuilder implements ModelExtensionFileParserCallback { elementBean.getTagValues().put(tag, value); } - protected void addStereotype(ElementBean elementBean, String stereotype) { - elementBean.getStereotypes().add(stereotype); - } } diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/StereotypesReportRenderer.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/StereotypesReportRenderer.java deleted file mode 100644 index 1605b25..0000000 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/StereotypesReportRenderer.java +++ /dev/null @@ -1,177 +0,0 @@ -package org.nuiton.eugene.plugin.renderer; - -/* - * #%L - * EUGene :: Maven plugin - * %% - * Copyright (C) 2006 - 2014 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import org.apache.commons.collections4.CollectionUtils; -import org.apache.maven.doxia.sink.Sink; -import org.codehaus.plexus.i18n.I18N; -import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; -import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; - -import java.util.Locale; -import java.util.Set; - -/** - * Created on 5/31/14. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 2.10 - */ -public class StereotypesReportRenderer extends AbstractEugeneReportRenderer<StereotypeMetadatasProvider, StereotypeMetadata> { - - public StereotypesReportRenderer(Sink sink, - I18N i18n, - Locale locale, - String bundleName, - String javaDocDestDir, - String jxrDestDir, - StereotypeMetadatasProvider data) { - super(sink, i18n, locale, bundleName, javaDocDestDir, jxrDestDir, data); - } - - @Override - protected Set<StereotypeMetadata> getDataDetails() { - return data.getStereotypes(); - } - - @Override - protected String getProviderDescription(StereotypeMetadatasProvider data) { - return data.getDescription(); - } - - @Override - protected void renderSummaryTable(StereotypeMetadatasProvider provider, Set<StereotypeMetadata> details) { - - sink.section2(); - - sink.sectionTitle2(); - sink.text(getText("report.provider.stereotype.name")); - sink.text(provider.getDescription()); - sink.sectionTitle2_(); - - if (CollectionUtils.isEmpty(details)) { - - sink.text(getText("report.noStereotype")); - - } else { - - sink.section3(); - - sink.sectionTitle3(); - sink.text(getText("report.summary.stereotype")); - sink.sectionTitle3_(); - - sink.lineBreak(); - - - sink.table(); - - sink.tableRow(); - sinkHeaderCellText(getText("report.stereotype.name")); - sinkHeaderCellText(getText("report.stereotype.description")); - sink.tableRow_(); - - for (StereotypeMetadata entry : details) { - - String stereotypeName = entry.getName(); - - sink.tableRow(); - sinkCellLink(stereotypeName, "./" + bundleName + ".html#detail_" + stereotypeName); - sinkCellText(entry.getDescription()); - sink.tableRow_(); - - } - - sink.table_(); - - sink.section3_(); - - } - - sink.section2_(); - - } - - @Override - protected void renderDetail(StereotypeMetadata detail) { - - sink.section2(); - sink.sectionTitle2(); - sink.anchor("detail_" + detail.getName()); - sink.text(getText("report.detail.stereotype.title") + " " + detail.getName()); - sink.anchor_(); - sink.sectionTitle2_(); - - sink.lineBreak(); - - sink.table(); - - sink.tableRow(); - sinkHeaderCellText(getText("report.detail.stereotype.name")); - sinkCellText(detail.getName()); - sink.tableRow_(); - - sink.tableRow(); - sinkHeaderCellText(getText("report.detail.stereotype.description")); - sinkCellText(detail.getDescription()); - sink.tableRow_(); - - sink.tableRow(); - sinkHeaderCellText(getText("report.detail.stereotype.target")); - sink.tableCell(); - - renderTargets(detail.getTargets()); - - sink.tableCell_(); - sink.tableRow_(); - - sink.table_(); - - sink.section3(); - sink.sectionTitle3(); - sink.text(getText("report.detail.stereotype.usage.title")); - sink.sectionTitle3_(); - - sink.text("//TODO Example of usage of this stereotype"); - - sink.section3_(); - - sink.section2_(); - - } - - @Override - protected String getEugeneDocLink() { - - String url; - - if (locale.getCountry().equals(Locale.FRENCH.getCountry())) { - url = "http://eugene.nuiton.org/v/latest/fr/eugene/stereotypes.html"; - } else { - url = "http://eugene.nuiton.org/v/latest/eugene/stereotypes.html"; - } - - return url; - - } -} diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java index 3eb3787..06e8fd8 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java @@ -24,7 +24,7 @@ package org.nuiton.eugene.plugin.writer; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.models.Model; -import org.nuiton.eugene.models.extension.stereotype.InvalidStereotypeSyntaxException; +import org.nuiton.eugene.models.extension.tagvalue.InvalidStereotypeSyntaxException; import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.reader.extension.LoadModelExtension; diff --git a/eugene/src/main/java/org/nuiton/eugene/EugeneCoreStereotypes.java b/eugene/src/main/java/org/nuiton/eugene/EugeneCoreStereotypes.java deleted file mode 100644 index 92cb6ec..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/EugeneCoreStereotypes.java +++ /dev/null @@ -1,161 +0,0 @@ -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; -import org.nuiton.eugene.models.extension.stereotype.provider.DefaultStereotypeMetadatasProvider; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -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 stereotypes managed by Eugene. - * - * In another library using eugene, please extends this contract to put your - * own stereotypes, to get a unique place where to find stereotypes. - * - * Created on 24/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @plexus.component role="org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider" role-hint="eugene" - * @since 3.0 - */ -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. - * - * It means that order of insertion is maintained: in Java, it will lead - * to a collection typed with {@link java.util.List} or {@link java.util.LinkedHashSet} - * or {@link java.util.LinkedHashMap}. - * - * @since 2.8 - */ - ordered(n("eugene.core.stereotypes.ordered"), ObjectModelAttribute.class), - /** - * Stereotype to mark an attribute with multiplicity as unique. - * - * It means that uniqueness of elements is maintained in the collection: in Java, it - * will lead to a collection typed with {@link java.util.Set}. - */ - unique(n("eugene.core.stereotypes.unique"), ObjectModelAttribute.class), - /** - * 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 i18nDescriptionKey; - - Store(String i18nDescriptionKey, Class<?>... targets) { - this.targets = ImmutableSet.copyOf(targets); - this.i18nDescriptionKey = i18nDescriptionKey; - } - - @Override - public String getName() { - return name(); - } - - @Override - public Set<Class<?>> getTargets() { - return targets; - } - - @Override - public String getDescription() { - return t(i18nDescriptionKey); - } - - @Override - public boolean isDeprecated() { - return false; - } - - } - - public EugeneCoreStereotypes() { - super((StereotypeMetadata[]) Store.values()); - } - - /** - * Check if the given attribute has the {@link Store#ordered} stereotype. - * - * @param attribute attribute to test - * @return {@code true} if stereotype was found, {@code false otherwise} - * @see Store#ordered - * @since 2.9 - */ - public static boolean hasOrderedStereotype(ObjectModelAttribute attribute) { - return StereotypeUtil.findDirectStereotype(Store.ordered, attribute); - } - - /** - * Check if the given attribute has the {@link Store#unique} stereotype. - * - * @param attribute attribute to test - * @return {@code true} if stereotype was found, {@code false otherwise} - * @see Store#unique - * @since 2.9 - */ - public static boolean hasUniqueStereotype(ObjectModelAttribute attribute) { - return StereotypeUtil.findDirectStereotype(Store.unique, attribute); - } - - /** - * Check if the given classifier has the {@link Store#skip} stereotype. - * - * @param classifier classifier to test - * @param aPackage package to test - * @return {@code true} if stereotype was found, {@code false otherwise} - * @see Store#skip - * @since 2.9 - */ - public static boolean hasSkipStereotype(ObjectModelClassifier classifier, ObjectModelPackage aPackage) { - return StereotypeUtil.findDirectStereotype(Store.skip, classifier, aPackage); - } - - /** - * Check if the given package has the {@link Store#skip} stereotype. - * - * @param aPackage package to test - * @return {@code true} if stereotype was found, {@code false otherwise} - * @see Store#skip - */ - public static boolean hasSkipStereotype(ObjectModelPackage aPackage) { - return StereotypeUtil.findDirectStereotype(Store.skip, aPackage); - } -} diff --git a/eugene/src/main/java/org/nuiton/eugene/EugeneCoreTagValues.java b/eugene/src/main/java/org/nuiton/eugene/EugeneCoreTagValues.java index 8922adf..c146772 100644 --- a/eugene/src/main/java/org/nuiton/eugene/EugeneCoreTagValues.java +++ b/eugene/src/main/java/org/nuiton/eugene/EugeneCoreTagValues.java @@ -112,7 +112,30 @@ public class EugeneCoreTagValues extends DefaultTagValueMetadatasProvider { * * @since 3.0 */ - attributeGeneric(n("eugene.core.tagValues.attributeGeneric"), String.class, null, ObjectModelAttribute.class); + attributeGeneric(n("eugene.core.tagValues.attributeGeneric"), String.class, null, ObjectModelAttribute.class), + + /** + * Stereotype to mark an attribute with multiplicity as ordered. + * + * It means that order of insertion is maintained: in Java, it will lead + * to a collection typed with {@link java.util.List} or {@link java.util.LinkedHashSet} + * or {@link java.util.LinkedHashMap}. + * + * @since 2.8 + */ + ordered(n("eugene.core.stereotypes.ordered"), boolean.class, null,ObjectModelAttribute.class), + /** + * Stereotype to mark an attribute with multiplicity as unique. + * + * It means that uniqueness of elements is maintained in the collection: in Java, it + * will lead to a collection typed with {@link java.util.Set}. + */ + unique(n("eugene.core.stereotypes.unique"), boolean.class, null,ObjectModelAttribute.class), + /** + * Stereotype to skip generation for some templates. + */ + skip(n("eugene.core.stereotypes.skip"), boolean.class, null,ObjectModelClassifier.class, ObjectModelPackage.class); + private final Set<Class<?>> targets; private final Class<?> type; @@ -204,13 +227,13 @@ public class EugeneCoreTagValues extends DefaultTagValueMetadatasProvider { } /** - * Cherche et renvoie le prefixe i18n à utiliser sur cet element, sinon sur + * Cherche et renvoie le préfixe i18n à utiliser sur cet element, sinon sur * le model. * - * @param element l'élément à tester + * @param element element to seek * @param aPackage package to seek - * @param model le modele utilisé - * @return le prefix i18n ou <code>null</code> si non spécifié + * @param model model to seek + * @return le préfixe i18n ou <code>null</code> si non spécifié * @since 2.3 */ public String getI18nPrefixTagValue(ObjectModelElement element, ObjectModelPackage aPackage, ObjectModel model) { @@ -261,4 +284,52 @@ public class EugeneCoreTagValues extends DefaultTagValueMetadatasProvider { public String getAttributeGenericTagValue(ObjectModelAttribute attribute) { return TagValueUtil.findTagValue(Store.attributeGeneric, attribute); } + + /** + * Check if the given attribute has the {@link Store#ordered} boolean tag value. + * + * @param attribute attribute to test + * @return {@code true} if boolean tag value was found, {@code false otherwise} + * @see Store#ordered + * @since 2.9 + */ + public static boolean isOrdered(ObjectModelAttribute attribute) { + return TagValueUtil.findBooleanTagValue(Store.ordered, attribute); + } + + /** + * Check if the given attribute has the {@link Store#unique} boolean tag value. + * + * @param attribute attribute to test + * @return {@code true} if boolean tag value was found, {@code false otherwise} + * @see Store#unique + * @since 2.9 + */ + public static boolean isUnique(ObjectModelAttribute attribute) { + return TagValueUtil.findBooleanTagValue(Store.unique, attribute); + } + + /** + * Check if the given classifier has the {@link Store#skip} boolean tag value. + * + * @param classifier classifier to test + * @param aPackage package to test + * @return {@code true} if boolean tag value was found, {@code false otherwise} + * @see Store#skip + * @since 2.9 + */ + public static boolean isSkip(ObjectModelClassifier classifier, ObjectModelPackage aPackage) { + return TagValueUtil.findBooleanTagValue(Store.skip, classifier, aPackage); + } + + /** + * Check if the given package has the {@link Store#skip} boolean tag value. + * + * @param aPackage package to test + * @return {@code true} if boolean tag value was found, {@code false otherwise} + * @see Store#skip + */ + public static boolean isSkip(ObjectModelPackage aPackage) { + return TagValueUtil.findBooleanTagValue(Store.skip, aPackage); + } } diff --git a/eugene/src/main/java/org/nuiton/eugene/ModelReader.java b/eugene/src/main/java/org/nuiton/eugene/ModelReader.java index 8332479..c49f942 100644 --- a/eugene/src/main/java/org/nuiton/eugene/ModelReader.java +++ b/eugene/src/main/java/org/nuiton/eugene/ModelReader.java @@ -23,7 +23,6 @@ package org.nuiton.eugene; import org.nuiton.eugene.models.Model; -import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; import java.io.File; @@ -61,14 +60,7 @@ public abstract class ModelReader<M extends Model> { * @since 2.9 */ protected TagValueMetadatasProvider tagValueMetadatasProvider; - - /** - * Provider of stereotypes. - * - * @since 2.9 - */ - protected StereotypeMetadatasProvider stereotypeMetadatasProvider; - + /** * Gets the type of model. * diff --git a/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java b/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java index 255371d..edc303b 100644 --- a/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java +++ b/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java @@ -22,7 +22,7 @@ package org.nuiton.eugene.java; import org.apache.commons.lang3.StringUtils; -import org.nuiton.eugene.EugeneCoreStereotypes; +import org.nuiton.eugene.EugeneCoreTagValues; import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; @@ -351,13 +351,13 @@ public class JavaGeneratorUtil extends GeneratorUtil { } public static boolean isOrdered(ObjectModelAttribute attr) { - return attr.isOrdered() || EugeneCoreStereotypes.hasOrderedStereotype(attr); + return attr.isOrdered() || EugeneCoreTagValues.isOrdered(attr); } public static Class<?> getCollectionType(ObjectModelAttribute attr) { boolean ordered = isOrdered(attr); - boolean unique = EugeneCoreStereotypes.hasUniqueStereotype(attr); + boolean unique = EugeneCoreTagValues.isUnique(attr); // Change type for Multiple attribute Class<?> result; @@ -381,7 +381,7 @@ public class JavaGeneratorUtil extends GeneratorUtil { public static Class<?> getCollectionInstanceType(ObjectModelAttribute attr) { boolean ordered = isOrdered(attr); - boolean unique = EugeneCoreStereotypes.hasUniqueStereotype(attr); + boolean unique = EugeneCoreTagValues.isUnique(attr); // Change type for Multiple attribute Class<?> result; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/Model.java b/eugene/src/main/java/org/nuiton/eugene/models/Model.java index 7e3fe2d..74180c7 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/Model.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/Model.java @@ -23,7 +23,6 @@ package org.nuiton.eugene.models; -import org.nuiton.eugene.models.extension.stereotype.WithStereotypes; import org.nuiton.eugene.models.extension.tagvalue.WithTagValues; import org.nuiton.eugene.models.stereotype.StereotypeAble; import org.nuiton.eugene.models.tagvalue.TagValueAble; @@ -31,7 +30,7 @@ import org.nuiton.eugene.models.tagvalue.TagValueAble; /** * Model. */ -public interface Model extends TagValueAble, StereotypeAble, WithTagValues, WithStereotypes { +public interface Model extends TagValueAble, StereotypeAble, WithTagValues { /** * Plexus role name diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/MismatchStereotypeTargetException.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/MismatchStereotypeTargetException.java deleted file mode 100644 index 4323580..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/MismatchStereotypeTargetException.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.nuiton.eugene.models.extension.stereotype; - -/* - * #%L - * EUGene :: EUGene - * %% - * Copyright (C) 2004 - 2014 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/** - * Created on 4/27/14. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.0 - */ -public class MismatchStereotypeTargetException extends Exception { - - private static final long serialVersionUID = 1L; -} 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 deleted file mode 100644 index 42d81de..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadata.java +++ /dev/null @@ -1,62 +0,0 @@ -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; - -/** - * To define a stereotype metadata. - * - * Created on 24/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public interface StereotypeMetadata { - - /** - * Get the stereotype name. - * - * @return the stereotype name - */ - String getName(); - - /** - * Define the types of object model api which can use this tag value. - * - * @return the set of target object model element which can accept the tag value. - */ - Set<Class<?>> getTargets(); - - /** - * Get the i18n documentation key. - * - * @return the i18n documentation key - */ - String getDescription(); - - /** - * @return {@code true} if this stereotype is deprecated - */ - boolean isDeprecated(); - -} diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeNotFoundException.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeNotFoundException.java deleted file mode 100644 index d97384e..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeNotFoundException.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.nuiton.eugene.models.extension.stereotype; - -/* - * #%L - * EUGene :: EUGene - * %% - * Copyright (C) 2004 - 2014 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/** - * Created on 4/27/14. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.0 - */ -public class StereotypeNotFoundException extends Exception { - - private static final long serialVersionUID = 1L; -} 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 deleted file mode 100644 index 2aac49f..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeUtil.java +++ /dev/null @@ -1,153 +0,0 @@ -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; - -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Created on 24/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.0 - */ -public class StereotypeUtil { - - protected static final Pattern PACKAGE_STEREOTYPE_PATTERN = Pattern - .compile("^package\\.((?:[_a-zA-Z0-9]+\\.)+)?(?:(stereotype)?)$"); - - protected static final Pattern STEREOTYPE_PATTERN = Pattern - .compile("^((?:[_a-zA-Z0-9]+\\.)+(?:_?[a-zA-Z][_a-zA-Z0-9]*\\.)+)(?:(class|attribute|operation))\\.(?:([_a-zA-Z0-9]+)\\.)?(?:(stereotype)?)$"); - - - public static Matcher getMatcher(String key) throws InvalidStereotypeSyntaxException { - Matcher matcher = STEREOTYPE_PATTERN.matcher(key); - if (!matcher.find()) { - throw new InvalidStereotypeSyntaxException(); - } - return matcher; - } - - public static Matcher getPackageMatcher(String key) throws InvalidStereotypeSyntaxException { - Matcher matcher = PACKAGE_STEREOTYPE_PATTERN.matcher(key); - if (!matcher.find()) { - throw new InvalidStereotypeSyntaxException(); - } - return matcher; - } - - public static Set<String> getStereotypes(String value) { - String[] split = value.split("\\s*,\\s*"); - return ImmutableSet.<String>builder().add(split).build(); - } - - - - /** - * Seek for a stereotype amoung elements given using these rules: - * <ul> - * <li>Look into {@code elements} and return the first element with this stereotype found.</li> - * </ul> - * <strong>Note:</strong> Order of {@code elements} is important, better then to - * always starts from specialized to more general level (for example from attribute, - * to classifier or model). - * - * @param stereotypeName stereotype to find - * @param elements not null elements to test - * @return {@code true} if found stereotype, {@code false} otherwise - * @since 3.0 - */ - public static boolean findDirectStereotype(StereotypeMetadata stereotypeName, WithStereotypes... elements) { - boolean value = false; - for (WithStereotypes element : elements) { - if (element != null) { - if (element instanceof ObjectModelPackage) { - value = findDirectStereotype(stereotypeName, (ObjectModelPackage) element); - } else { - value = element.hasStereotype(stereotypeName.getName()); - } - if (value) { - break; - } - } - } - - return value; - - } - - /** - * Seek for a stereotype amoung elements given using these rules: - * <ul> - * <li>Look into {@code elements} and return the first element with this stereotype found.</li> - * <li>If not found, Look into {@code elements} declaringElement (for each - * element that is a {@link ObjectModelElement} and return the first not empty tag - * element with this stereotype found.</li> - * </ul> - * <strong>Note:</strong> Order of {@code elements} is important, better then to - * always starts from specialized to more general level (for example from attribute, - * to classifier or model). - * - * @param stereotypeName stereotype to find - * @param elements not null elements to test - * @return {@code true} if found stereotype, {@code false} otherwise - * @since 3.0 - */ - public static boolean findStereotype(StereotypeMetadata stereotypeName, WithStereotypes... elements) { - - boolean result = findDirectStereotype(stereotypeName, elements); - - if (result) { - return result; - } - - for (WithStereotypes element : elements) { - if (element instanceof ObjectModelElement) { - // try in declaring element - ObjectModelElement declaringElement = ((ObjectModelElement) element).getDeclaringElement(); - if (declaringElement != null) { - boolean value = findStereotype(stereotypeName, declaringElement); - if (value) { - return value; - } - } - } - } - return false; - - } - - protected static boolean findDirectStereotype(StereotypeMetadata stereotypeName, ObjectModelPackage element) { - boolean withStereotype = element.hasStereotype(stereotypeName.getName()); - if (!withStereotype && element.getParentPackage() != null) { - withStereotype = findDirectStereotype(stereotypeName, element.getParentPackage()); - } - return withStereotype; - } - -} diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/WithStereotypes.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/WithStereotypes.java deleted file mode 100644 index 77b2f24..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/WithStereotypes.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.nuiton.eugene.models.extension.stereotype; - -/* - * #%L - * EUGene :: EUGene - * %% - * Copyright (C) 2004 - 2014 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import java.util.Set; - -/** - * Created on 4/26/14. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 2.9 - */ -public interface WithStereotypes { - - /** - * Returns the stereotypes names associated with this element. - * - * @return a Collection containing all stereotypes names associated with this element as String. - */ - Set<String> getStereotypes(); - - /** - * Returns whether this element has a stereotype corresponding to the given name, or not. - * - * @param stereotypeName stereotype name - * @return a boolean indicating whether this element has a stereotype corresponding to the given name, or not. - */ - boolean hasStereotype(String stereotypeName); - - /** - * Add a stereotype. - * - * @param stereotype stereotype to add - */ - void addStereotype(String stereotype); - - void removeStereotype(String stereotype); -} 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 deleted file mode 100644 index aba170a..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/AggregateStereotypeMetadatasProvider.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.nuiton.eugene.models.extension.stereotype.provider; - -/* - * #%L - * EUGene :: EUGene - * %% - * Copyright (C) 2004 - 2014 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Optional; -import com.google.common.collect.ImmutableSet; -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 java.util.Iterator; -import java.util.ServiceLoader; - -/** - * Created on 4/27/14. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 2.9 - */ -public class AggregateStereotypeMetadatasProvider implements StereotypeMetadatasProvider, Iterable<StereotypeMetadatasProvider> { - - protected final Iterable<StereotypeMetadatasProvider> providers; - - /** - * Obtain a new provider of stereotype definitions. - * - * @param loader the classloader to use (if none given will use the one of the current thread) - */ - public AggregateStereotypeMetadatasProvider(ClassLoader loader) { - if (loader == null) { - - // use the current thread loader - loader = Thread.currentThread().getContextClassLoader(); - } - this.providers = ServiceLoader.load(StereotypeMetadatasProvider.class, loader); - - } - - /** - * Obtain a new provider of stereotype definitions. - * - * @param providers the list of providers to use in the factory - */ - public AggregateStereotypeMetadatasProvider(Iterable<StereotypeMetadatasProvider> providers) { - this.providers = providers; - } - - @Override - public Iterator<StereotypeMetadatasProvider> iterator() { - return providers.iterator(); - } - - @Override - public String getDescription() { - return null; - } - - @Override - public ImmutableSet<StereotypeMetadata> getStereotypes() { - ImmutableSet.Builder<StereotypeMetadata> builder = ImmutableSet.builder(); - for (StereotypeMetadatasProvider tagValuesMetadatasProvider : providers) { - builder.addAll(tagValuesMetadatasProvider.getStereotypes()); - } - - return builder.build(); - } - - @Override - public void validate(String stereotypeName, Class<?> type) throws StereotypeNotFoundException, MismatchStereotypeTargetException { - for (StereotypeMetadatasProvider provider : providers) { - try { - provider.validate(stereotypeName, type); - return; - } catch (StereotypeNotFoundException e) { - // do nothing here - } - } - throw new StereotypeNotFoundException(); - - } - - @Override - public Optional<StereotypeMetadata> getStereotype(String stereotypeName) { - for (StereotypeMetadatasProvider provider : providers) { - Optional<StereotypeMetadata> result = provider.getStereotype(stereotypeName); - if (result.isPresent()) { - return result; - } - } - return Optional.absent(); - } - -} 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 deleted file mode 100644 index 0c76110..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/DefaultStereotypeMetadatasProvider.java +++ /dev/null @@ -1,84 +0,0 @@ -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; -import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; -import org.nuiton.eugene.models.extension.stereotype.StereotypeNotFoundException; - -import java.util.Set; - -/** - * Created on 24/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public abstract class DefaultStereotypeMetadatasProvider implements StereotypeMetadatasProvider { - - protected Set<StereotypeMetadata> stereotypes; - - protected DefaultStereotypeMetadatasProvider(StereotypeMetadata... stereotypes) { - this.stereotypes = ImmutableSet.copyOf(stereotypes); - } - - @Override - public Set<StereotypeMetadata> getStereotypes() { - return stereotypes; - } - - @Override - public void validate(String stereotypeName, Class<?> type) throws StereotypeNotFoundException, MismatchStereotypeTargetException { - Optional<StereotypeMetadata> def = getStereotype(stereotypeName); - - if (!def.isPresent()) { - throw new StereotypeNotFoundException(); - } - - boolean valid = false; - - for (Class<?> target : def.get().getTargets()) { - if (target.equals(type) || target.isAssignableFrom(type)) { - - // found one accepting target - valid = true; - break; - } - } - if (!valid) { - throw new MismatchStereotypeTargetException(); - } - } - - @Override - public Optional<StereotypeMetadata> getStereotype(String stereotypeName) { - for (StereotypeMetadata metadata : stereotypes) { - if (stereotypeName.equals(metadata.getName())) { - return Optional.of(metadata); - } - } - return Optional.absent(); - } - -} \ No newline at end of file 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 deleted file mode 100644 index 4e58017..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/StereotypeMetadatasProvider.java +++ /dev/null @@ -1,47 +0,0 @@ -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; -import org.nuiton.eugene.models.extension.stereotype.StereotypeNotFoundException; - -import java.util.Set; - -/** - * Created on 24/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public interface StereotypeMetadatasProvider { - - String getDescription(); - - Set<StereotypeMetadata> getStereotypes(); - - void validate(String stereotypeName, Class<?> type) throws StereotypeNotFoundException, MismatchStereotypeTargetException; - - Optional<StereotypeMetadata> getStereotype(String stereotypeName); - -} \ No newline at end of file diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/InvalidStereotypeSyntaxException.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/InvalidStereotypeSyntaxException.java similarity index 94% rename from eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/InvalidStereotypeSyntaxException.java rename to eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/InvalidStereotypeSyntaxException.java index 7aa8ef8..c06757f 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/InvalidStereotypeSyntaxException.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/InvalidStereotypeSyntaxException.java @@ -1,4 +1,4 @@ -package org.nuiton.eugene.models.extension.stereotype; +package org.nuiton.eugene.models.extension.tagvalue; /* * #%L diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/MissingStereoTypeException.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/MissingStereoTypeException.java similarity index 98% rename from eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/MissingStereoTypeException.java rename to eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/MissingStereoTypeException.java index 2b28d75..5663c4b 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/MissingStereoTypeException.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/MissingStereoTypeException.java @@ -1,4 +1,4 @@ -package org.nuiton.eugene.models.extension.stereotype; +package org.nuiton.eugene.models.extension.tagvalue; /* * #%L 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 3a5f220..c27a0b6 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 @@ -22,10 +22,12 @@ package org.nuiton.eugene.models.extension.tagvalue; * #L% */ +import com.google.common.collect.ImmutableSet; import org.apache.commons.lang3.StringUtils; import org.nuiton.eugene.models.object.ObjectModelElement; import org.nuiton.eugene.models.object.ObjectModelPackage; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -65,6 +67,10 @@ public class TagValueUtil { */ protected static final Pattern PACKAGE_TAG_VALUE_PATTERN = Pattern.compile( "^package\\.((?:[_a-zA-Z0-9]+\\.)+)(?:(tagvalue|tagValue)?)\\.((?:[_a-zA-Z0-9]+)+(?:\\.?[_a-zA-Z0-9]+)*)$"); + protected static final Pattern PACKAGE_STEREOTYPE_PATTERN = Pattern + .compile("^package\\.((?:[_a-zA-Z0-9]+\\.)+)?(?:(stereotype)?)$"); + protected static final Pattern STEREOTYPE_PATTERN = Pattern + .compile("^((?:[_a-zA-Z0-9]+\\.)+(?:_?[a-zA-Z][_a-zA-Z0-9]*\\.)+)(?:(class|attribute|operation))\\.(?:([_a-zA-Z0-9]+)\\.)?(?:(stereotype)?)$"); public static Matcher getModelMatcher(String key) throws InvalidTagValueSyntaxException { Matcher matcher = MODEL_TAG_VALUE_PATTERN.matcher(key); @@ -212,4 +218,25 @@ public class TagValueUtil { return value; } + + public static Matcher getStereotypeMatcher(String key) throws InvalidStereotypeSyntaxException { + Matcher matcher = STEREOTYPE_PATTERN.matcher(key); + if (!matcher.find()) { + throw new InvalidStereotypeSyntaxException(); + } + return matcher; + } + + public static Matcher getPackageStereotypeMatcher(String key) throws InvalidStereotypeSyntaxException { + Matcher matcher = PACKAGE_STEREOTYPE_PATTERN.matcher(key); + if (!matcher.find()) { + throw new InvalidStereotypeSyntaxException(); + } + return matcher; + } + + public static Set<String> getStereotypes(String value) { + String[] split = value.split("\\s*,\\s*"); + return ImmutableSet.<String>builder().add(split).build(); + } } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelElement.java b/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelElement.java index 27e949f..56d900d 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelElement.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelElement.java @@ -22,7 +22,6 @@ package org.nuiton.eugene.models.object; -import org.nuiton.eugene.models.extension.stereotype.WithStereotypes; import org.nuiton.eugene.models.extension.tagvalue.WithTagValues; import org.nuiton.eugene.models.stereotype.StereotypeAble; import org.nuiton.eugene.models.tagvalue.TagValueAble; @@ -34,7 +33,7 @@ import java.util.List; * * @author Cédric Pineau - pineau@codelutin.com */ -public interface ObjectModelElement extends TagValueAble, StereotypeAble, WithTagValues, WithStereotypes { +public interface ObjectModelElement extends TagValueAble, StereotypeAble, WithTagValues { /** * Returns the name of this element. diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelPackage.java b/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelPackage.java index c37505c..2a15149 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelPackage.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelPackage.java @@ -22,7 +22,6 @@ package org.nuiton.eugene.models.object; * #L% */ -import org.nuiton.eugene.models.extension.stereotype.WithStereotypes; import org.nuiton.eugene.models.extension.tagvalue.WithTagValues; import org.nuiton.eugene.models.stereotype.StereotypeAble; import org.nuiton.eugene.models.tagvalue.TagValueAble; @@ -35,7 +34,7 @@ import java.util.List; * @author Tony Chemit - chemit@codelutin.com * @since 2.12 */ -public interface ObjectModelPackage extends TagValueAble, StereotypeAble, WithTagValues, WithStereotypes { +public interface ObjectModelPackage extends TagValueAble, StereotypeAble, WithTagValues { /** * @return the name of this package. 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 b7396a9..95ccb29 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 @@ -27,7 +27,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.ModelReader; -import org.nuiton.eugene.models.extension.stereotype.InvalidStereotypeSyntaxException; +import org.nuiton.eugene.models.extension.tagvalue.InvalidStereotypeSyntaxException; import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelClass; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/CompactModelExtensionFileParser.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/CompactModelExtensionFileParser.java index a4dc731..b3b8990 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/CompactModelExtensionFileParser.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/CompactModelExtensionFileParser.java @@ -24,8 +24,6 @@ package org.nuiton.eugene.models.object.reader.extension; import com.google.common.base.Preconditions; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import java.io.File; import java.io.IOException; @@ -40,9 +38,6 @@ import java.util.List; */ public class CompactModelExtensionFileParser implements ModelExtensionFileParser { - /** Logger. */ - private static final Log log = LogFactory.getLog(CompactModelExtensionFileParser.class); - public CompactModelExtensionFileParser(boolean strictLoading) { this.strictLoading = strictLoading; } @@ -114,7 +109,7 @@ public class CompactModelExtensionFileParser implements ModelExtensionFileParser case PACKAGE: { if (line.startsWith(" ")) { - Preconditions.checkState(name != null, "Pas de nom de paquetage déclaré"); + Preconditions.checkState(name != null, "No package name defined"); line = line.trim(); @@ -142,7 +137,7 @@ public class CompactModelExtensionFileParser implements ModelExtensionFileParser if (line.startsWith(" ")) { - Preconditions.checkState(name != null, "Pas de nom de classe déclaré"); + Preconditions.checkState(name != null, "No class name defined"); line = line.trim(); 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 3c605de..176f18d 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 @@ -25,8 +25,7 @@ package org.nuiton.eugene.models.object.reader.extension; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.models.extension.stereotype.InvalidStereotypeSyntaxException; -import org.nuiton.eugene.models.extension.stereotype.StereotypeUtil; +import org.nuiton.eugene.models.extension.tagvalue.InvalidStereotypeSyntaxException; import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; import org.nuiton.eugene.models.object.reader.InvalidModelPropertiesException; @@ -108,7 +107,7 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { // model stereotype if (stereoTypeKey) { - Set<String> stereotypes = StereotypeUtil.getStereotypes(value); + Set<String> stereotypes = TagValueUtil.getStereotypes(value); for (String stereotype : stereotypes) { safe &= callback.onModelStereotypeFound(stereotype); } @@ -138,12 +137,12 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { if (stereoTypeKey) { // package stereotype - Matcher matcher = StereotypeUtil.getPackageMatcher(key); + Matcher matcher = TagValueUtil.getPackageStereotypeMatcher(key); String fqn = matcher.group(1); fqn = StringUtil.substring(fqn, 0, -1); // remove ended . - Set<String> stereotypes = StereotypeUtil.getStereotypes(value); + Set<String> stereotypes = TagValueUtil.getStereotypes(value); for (String stereotype : stereotypes) { safe &= callback.onPackageStereotypeFound(fqn, stereotype); } @@ -176,7 +175,7 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { // stereotype property // check key is ok - Matcher matcher = StereotypeUtil.getMatcher(key); + Matcher matcher = TagValueUtil.getStereotypeMatcher(key); String fqn = matcher.group(1); fqn = StringUtil.substring(fqn, 0, -1); // remove ended . @@ -184,7 +183,7 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { String target = matcher.group(2); String targetName = matcher.group(3); - Set<String> stereotypes = StereotypeUtil.getStereotypes(value); + Set<String> stereotypes = TagValueUtil.getStereotypes(value); for (String stereotype : stereotypes) { if (CLASS.equals(target)) { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/LoadModelExtension.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/LoadModelExtension.java index 43a6ca8..aa639a4 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/LoadModelExtension.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/LoadModelExtension.java @@ -25,12 +25,7 @@ package org.nuiton.eugene.models.object.reader.extension; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.EugeneCoreTagValues; -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.provider.AggregateStereotypeMetadatasProvider; -import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; +import org.nuiton.eugene.models.extension.tagvalue.InvalidStereotypeSyntaxException; import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; import org.nuiton.eugene.models.extension.tagvalue.MismatchTagValueTargetException; import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; @@ -65,7 +60,6 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension protected final boolean strictLoading; protected final M model; protected final TagValueMetadatasProvider tagValueMetadatasProvider; - protected final StereotypeMetadatasProvider stereotypeMetadatasProvider; public static <M extends ObjectModel> void loadForFlatModel(boolean verbose, boolean strictLoading, M model, File modelExtension) throws IOException { FlatModelExtensionFileParser parser = new FlatModelExtensionFileParser(strictLoading); @@ -94,7 +88,6 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension this.strictLoading = strictLoading; this.model = model; this.tagValueMetadatasProvider = new AggregateTagValueMetadatasProvider(getClass().getClassLoader()); - this.stereotypeMetadatasProvider = new AggregateStereotypeMetadatasProvider(getClass().getClassLoader()); } public void load(File modelExtension) throws IOException, InvalidTagValueSyntaxException, InvalidStereotypeSyntaxException { @@ -166,9 +159,9 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension boolean safe = false; try { - stereotypeMetadatasProvider.validate(stereotype, ObjectModel.class); + tagValueMetadatasProvider.validate(stereotype, ObjectModel.class); safe = true; - } catch (StereotypeNotFoundException e) { + } catch (TagValueNotFoundException e) { String message = "Invalid model stereotype [" + stereotype + "] : the stereotype '" + stereotype + "' is unknown."; if (strictLoading) { @@ -176,7 +169,7 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension } else { log.warn(message); } - } catch (MismatchStereotypeTargetException e) { + } catch (MismatchTagValueTargetException e) { String message = "Invalid model stereotype [" + stereotype + "] : this stereotype '" + stereotype + "' can not be apply on model."; if (strictLoading) { log.error(message); @@ -188,7 +181,7 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension if (safe) { // test if stereotype is deprecated - StereotypeMetadata tagValueMetadata = stereotypeMetadatasProvider.getStereotype(stereotype).get(); + TagValueMetadata tagValueMetadata = tagValueMetadatasProvider.getTagValue(stereotype).get(); boolean deprecated = tagValueMetadata.isDeprecated(); if (deprecated) { log.warn("Deprecated model stereotype usage: " + stereotype); @@ -261,16 +254,16 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension boolean safe = false; try { - stereotypeMetadatasProvider.validate(stereotype, ObjectModelPackage.class); + tagValueMetadatasProvider.validate(stereotype, ObjectModelPackage.class); safe = true; - } catch (StereotypeNotFoundException e) { + } catch (TagValueNotFoundException e) { String message = "Invalid model stereotype on package [" + packageName + "]: the stereotype '" + stereotype + "' is unknown."; if (strictLoading) { log.error(message); } else { log.warn(message); } - } catch (MismatchStereotypeTargetException e) { + } catch (MismatchTagValueTargetException e) { String message = "Invalid model stereotype on package [" + packageName + "]: this stereotype '" + stereotype + "' can not be apply on package."; if (strictLoading) { log.error(message); @@ -282,7 +275,7 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension if (safe) { // test if tagValue is deprecated - StereotypeMetadata tagValueMetadata = stereotypeMetadatasProvider.getStereotype(stereotype).get(); + TagValueMetadata tagValueMetadata = tagValueMetadatasProvider.getTagValue(stereotype).get(); boolean deprecated = tagValueMetadata.isDeprecated(); if (deprecated) { log.warn("Deprecated stereotype usage on package [" + packageName + "]: " + stereotype); @@ -301,7 +294,7 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension return false; } - omc.addStereotype(stereotype); + omc.addTagValue(stereotype, "true"); if (verbose) { log.info("imported stereotype on package [" + packageName + "] → " + stereotype); @@ -375,9 +368,9 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension boolean safe = false; try { - stereotypeMetadatasProvider.validate(stereotype, ObjectModelClassifier.class); + tagValueMetadatasProvider.validate(stereotype, ObjectModelClassifier.class); safe = true; - } catch (StereotypeNotFoundException e) { + } catch (TagValueNotFoundException e) { String message = "Invalid model stereotype on class [" + className + "]: the stereotype '" + stereotype + "' is unknown."; if (strictLoading) { @@ -385,7 +378,7 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension } else { log.warn(message); } - } catch (MismatchStereotypeTargetException e) { + } catch (MismatchTagValueTargetException e) { String message = "Invalid model stereotype on class [" + className + "]: this stereotype '" + stereotype + "' can not be apply on class scope."; if (strictLoading) { log.error(message); @@ -397,7 +390,7 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension if (safe) { // test if stereotype is deprecated - StereotypeMetadata tagValueMetadata = stereotypeMetadatasProvider.getStereotype(stereotype).get(); + TagValueMetadata tagValueMetadata = tagValueMetadatasProvider.getTagValue(stereotype).get(); boolean deprecated = tagValueMetadata.isDeprecated(); if (deprecated) { if (log.isWarnEnabled()) { @@ -498,9 +491,9 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension boolean safe = false; try { - stereotypeMetadatasProvider.validate(stereotype, ObjectModelAttribute.class); + tagValueMetadatasProvider.validate(stereotype, ObjectModelAttribute.class); safe = true; - } catch (StereotypeNotFoundException e) { + } catch (TagValueNotFoundException e) { String message = "Invalid model stereotype on attribute [" + className + "#" + attributeName + "]: the stereotype '" + stereotype + "' is unknown."; if (strictLoading) { @@ -508,7 +501,7 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension } else { log.warn(message); } - } catch (MismatchStereotypeTargetException e) { + } catch (MismatchTagValueTargetException e) { String message = "Invalid model stereotype on attribute [" + className + "#" + attributeName + "]: this stereotype '" + stereotype + "' can not be apply on attribute scope."; if (strictLoading) { log.error(message); @@ -520,7 +513,7 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension if (safe) { // test if stereotype is deprecated - StereotypeMetadata tagValueMetadata = stereotypeMetadatasProvider.getStereotype(stereotype).get(); + TagValueMetadata tagValueMetadata = tagValueMetadatasProvider.getTagValue(stereotype).get(); boolean deprecated = tagValueMetadata.isDeprecated(); if (deprecated) { log.warn("Deprecated stereotype usage on attribute [" + className + "]: " + stereotype); @@ -587,8 +580,7 @@ public class LoadModelExtension<M extends ObjectModel> implements ModelExtension * @param name attribute name to find * @return the attribute found or null */ - protected ObjectModelAttribute getAttribute(ObjectModelClassifier clazz, - String name) { + protected ObjectModelAttribute getAttribute(ObjectModelClassifier clazz, String name) { ObjectModelAttribute result = clazz.getAttribute(name); // Ano #619 : FD-2010-05-17 : Specific case for Association class : 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 8034d27..71e35c5 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 @@ -23,7 +23,7 @@ package org.nuiton.eugene.models.object.reader.extension; */ -import org.nuiton.eugene.models.extension.stereotype.InvalidStereotypeSyntaxException; +import org.nuiton.eugene.models.extension.tagvalue.InvalidStereotypeSyntaxException; import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; import java.io.File; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java index 417338b..2dc8fc0 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java @@ -26,7 +26,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; import org.apache.commons.lang3.StringUtils; -import org.nuiton.eugene.EugeneCoreStereotypes; +import org.nuiton.eugene.EugeneCoreTagValues; import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; @@ -298,7 +298,7 @@ public class ObjectModelAttributeImpl extends ObjectModelParameterImpl @Override public ObjectModelImplRef addStereotype(ObjectModelImplRef stereotype) { String stereotypeName = stereotype.getName(); - if (EugeneCoreStereotypes.Store.ordered.getName().equals(stereotypeName)) { + if (EugeneCoreTagValues.Store.ordered.getName().equals(stereotypeName)) { setOrdered(true); } return super.addStereotype(stereotype); diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelElementImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelElementImpl.java index d35e606..33b9df1 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelElementImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelElementImpl.java @@ -34,6 +34,7 @@ import org.nuiton.eugene.models.object.ObjectModelModifier; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -57,8 +58,6 @@ public abstract class ObjectModelElementImpl implements ObjectModelElement { protected String documentation; - protected Set<String> stereotypes; - protected Map<String, String> tagValues; protected List<String> comments; @@ -67,7 +66,6 @@ public abstract class ObjectModelElementImpl implements ObjectModelElement { public ObjectModelElementImpl() { tagValues = new HashMap<>(); - stereotypes = new HashSet<>(); comments = new ArrayList<>(); modifiers = new HashSet<>(); } @@ -111,7 +109,7 @@ public abstract class ObjectModelElementImpl implements ObjectModelElement { if (stereotype == null) { return new ObjectModelImplRef(); } - stereotypes.add(stereotype.getName()); + addStereotype(stereotype.getName()); return stereotype; } @@ -197,22 +195,27 @@ public abstract class ObjectModelElementImpl implements ObjectModelElement { @Override public Set<String> getStereotypes() { - return stereotypes; + Set<String> result = new LinkedHashSet<>(); + for (Map.Entry<String, String> entry : tagValues.entrySet()) { + if ("true".equals(entry.getValue())) { + result.add(entry.getKey()); + } + } + return result; } @Override public boolean hasStereotype(String stereotypeName) { - return stereotypes.contains(stereotypeName); + return tagValues.containsKey(stereotypeName); } @Override public void addStereotype(String stereotype) { - stereotypes.add(stereotype); + tagValues.put(stereotype, "true"); } - @Override public void removeStereotype(String stereotype) { - stereotypes.remove(stereotype); + tagValues.remove(stereotype); } @Override diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java index 425cd6f..a55c312 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java @@ -37,7 +37,6 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; @@ -79,8 +78,6 @@ public class ObjectModelImpl implements ObjectModel { protected Map<String, String> tagValues = new HashMap<>(); - protected Set<String> stereotypes = new HashSet<>(); - /** * Used to add others specific object to the model * The key defined must be unique to get the significative extension associated to @@ -140,7 +137,7 @@ public class ObjectModelImpl implements ObjectModel { if (!(initialElement instanceof ObjectModelClassImpl)) { throw new IllegalArgumentException( "\"" + clazz + "\" is incompatible with already " + - "defined element \"" + initialElement + "\""); + "defined element \"" + initialElement + "\""); } ObjectModelClassImpl initialClazz = (ObjectModelClassImpl) initialElement; @@ -171,8 +168,8 @@ public class ObjectModelImpl implements ObjectModel { if (!(initialElement instanceof ObjectModelAssociationClassImpl)) { throw new IllegalArgumentException( "\"" + clazz + "\" is incompatible with " + - "already defined element \"" + initialElement + - "\"" + "already defined element \"" + initialElement + + "\"" ); } ObjectModelAssociationClassImpl initialClazz = @@ -243,7 +240,7 @@ public class ObjectModelImpl implements ObjectModel { @Override public ObjectModelClassifier getClassifier(String qualifiedClassifierName) { return qualifiedClassifierName == null ? null - : classifiers.get(qualifiedClassifierName); + : classifiers.get(qualifiedClassifierName); } /** @@ -302,8 +299,8 @@ public class ObjectModelImpl implements ObjectModel { if (!(initialElement instanceof ObjectModelInterfaceImpl)) { throw new IllegalArgumentException( "\"" + interfacez + "\" is incompatible with " + - "already defined element \"" + initialElement + - "\""); + "already defined element \"" + initialElement + + "\""); } ObjectModelInterfaceImpl initialInterfacez = (ObjectModelInterfaceImpl) initialElement; @@ -330,7 +327,7 @@ public class ObjectModelImpl implements ObjectModel { if (result == null) { if (log.isDebugEnabled()) { log.debug("Interface " + qualifiedInterfaceName + - " not found in model"); + " not found in model"); } } return result; @@ -366,7 +363,7 @@ public class ObjectModelImpl implements ObjectModel { if (result == null) { if (log.isDebugEnabled()) { log.debug("Enumeration " + qualifiedEnumerationName + - " not found in model"); + " not found in model"); } } return result; @@ -384,38 +381,43 @@ public class ObjectModelImpl implements ObjectModel { @Override public Set<String> getStereotypes() { - return stereotypes; + Set<String> result = new LinkedHashSet<>(); + for (Map.Entry<String, String> entry : tagValues.entrySet()) { + if ("true".equals(entry.getValue())) { + result.add(entry.getKey()); + } + } + return result; } @Override public boolean hasStereotype(String stereotypeName) { - return stereotypes.contains(stereotypeName); + return tagValues.containsKey(stereotypeName); } @Override public void addStereotype(String stereotype) { - stereotypes.add(stereotype); + tagValues.put(stereotype, "true"); } - @Override public void removeStereotype(String stereotype) { - stereotypes.remove(stereotype); + tagValues.remove(stereotype); } public void removePackage(String packageName) { - for (ObjectModelClass objectModelClass : new LinkedHashSet<>(classes.values()) ) { - if (objectModelClass.getQualifiedName().startsWith(packageName+".")) { + for (ObjectModelClass objectModelClass : new LinkedHashSet<>(classes.values())) { + if (objectModelClass.getQualifiedName().startsWith(packageName + ".")) { classes.remove(objectModelClass.getQualifiedName()); } } - for (ObjectModelInterface objectModelInterface : new LinkedHashSet<>(interfaces.values()) ) { - if (objectModelInterface.getQualifiedName().startsWith(packageName+".")) { + for (ObjectModelInterface objectModelInterface : new LinkedHashSet<>(interfaces.values())) { + if (objectModelInterface.getQualifiedName().startsWith(packageName + ".")) { classes.remove(objectModelInterface.getQualifiedName()); } } - for (ObjectModelEnumeration objectModelEnumeration : new LinkedHashSet<>(enumerations.values()) ) { - if (objectModelEnumeration.getQualifiedName().startsWith(packageName+".")) { + for (ObjectModelEnumeration objectModelEnumeration : new LinkedHashSet<>(enumerations.values())) { + if (objectModelEnumeration.getQualifiedName().startsWith(packageName + ".")) { classes.remove(objectModelEnumeration.getQualifiedName()); } } @@ -426,7 +428,7 @@ public class ObjectModelImpl implements ObjectModel { public void removeClass(String className) { classes.remove(className); - + } public void removeInterface(String interfaceName) { @@ -436,7 +438,7 @@ public class ObjectModelImpl implements ObjectModel { public void removeEnumeration(String enumerationName) { enumerations.remove(enumerationName); } - + protected void mergePackages( ObjectModelPackageImpl initialPackage, ObjectModelPackageImpl additionalPackage) { @@ -556,7 +558,7 @@ public class ObjectModelImpl implements ObjectModel { for (it = additionalClazzifier.getStereotypes().iterator(); it.hasNext(); ) { String stereotype = (String) it.next(); if (!initialClazzifier.getStereotypes().contains(stereotype)) { - initialClazzifier.stereotypes.add(stereotype); + initialClazzifier.addStereotype(stereotype); } } @@ -669,7 +671,7 @@ public class ObjectModelImpl implements ObjectModel { if (StringUtils.isNotEmpty(oldValue) && !oldValue.equals(value)) { if (log.isWarnEnabled()) { log.warn("Replace tagValue '" + tagValue + "' (old:" + - oldValue + ", new: " + value + ")"); + oldValue + ", new: " + value + ")"); } } tagValues.put(tagValue, value); @@ -714,7 +716,7 @@ public class ObjectModelImpl implements ObjectModel { result = extensionClass.newInstance(); } catch (Exception eee) { // IllegalAccessException and InstantiationException throw new RuntimeException("Unable to create new extension '" + extensionClass.getName() + - "' for '" + reference + "'", eee); + "' for '" + reference + "'", eee); } extensions.put(reference, result); } else { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelPackageImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelPackageImpl.java index 16dfe5f..556f553 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelPackageImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelPackageImpl.java @@ -110,7 +110,6 @@ public class ObjectModelPackageImpl implements ObjectModelPackage { stereotypes.add(stereotype); } - @Override public void removeStereotype(String stereotype) { stereotypes.remove(stereotype); } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java index ddabd63..e8c3533 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java @@ -29,7 +29,7 @@ import org.nuiton.eugene.models.state.StateModelStateChart; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -62,8 +62,6 @@ public class StateModelImpl implements StateModel { */ protected Map<String, String> modelTagValues; - protected Set<String> stereotypes = new HashSet<>(); - /** * Used to add others specific object to the model * The key defined must be unique to get the significative extension associated to @@ -90,22 +88,27 @@ public class StateModelImpl implements StateModel { @Override public Set<String> getStereotypes() { - return stereotypes; + Set<String> result = new LinkedHashSet<>(); + for (Map.Entry<String, String> entry : modelTagValues.entrySet()) { + if ("true".equals(entry.getValue())) { + result.add(entry.getKey()); + } + } + return result; } @Override public boolean hasStereotype(String stereotypeName) { - return stereotypes.contains(stereotypeName); + return modelTagValues.containsKey(stereotypeName); } @Override public void addStereotype(String stereotype) { - stereotypes.add(stereotype); + modelTagValues.put(stereotype, "true"); } - @Override public void removeStereotype(String stereotype) { - stereotypes.remove(stereotype); + modelTagValues.remove(stereotype); } /** @@ -214,7 +217,7 @@ public class StateModelImpl implements StateModel { result = extensionClass.newInstance(); } catch (Exception eee) { // IllegalAccessException and InstantiationException throw new RuntimeException("Unable to create new extension '" + extensionClass.getName() + - "' for '" + reference + "'", eee); + "' for '" + reference + "'", eee); } extensions.put(reference, result); } else { diff --git a/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider b/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider deleted file mode 100644 index c5380f2..0000000 --- a/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider +++ /dev/null @@ -1 +0,0 @@ -org.nuiton.eugene.EugeneCoreStereotypes \ No newline at end of file diff --git a/eugene/src/test/java/org/nuiton/eugene/EugeneCoreStereotypesTest.java b/eugene/src/test/java/org/nuiton/eugene/EugeneCoreStereotypesTest.java deleted file mode 100644 index b084ef4..0000000 --- a/eugene/src/test/java/org/nuiton/eugene/EugeneCoreStereotypesTest.java +++ /dev/null @@ -1,74 +0,0 @@ -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; -import org.nuiton.eugene.models.extension.stereotype.MismatchStereotypeTargetException; -import org.nuiton.eugene.models.extension.stereotype.StereotypeNotFoundException; -import org.nuiton.eugene.models.object.ObjectModel; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelClassifier; -import org.nuiton.eugene.models.object.ObjectModelEnumeration; -import org.nuiton.eugene.models.object.ObjectModelInterface; -import org.nuiton.eugene.models.object.ObjectModelOperation; - -/** - * Created on 24/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class EugeneCoreStereotypesTest { - - protected EugeneCoreStereotypes provider; - - @Before - public void setUp() throws Exception { - provider = new EugeneCoreStereotypes(); - } - - @Test - public void validate() throws Exception { - - validate(EugeneCoreStereotypes.Store.ordered.name(), true, ObjectModelAttribute.class); - - validate(EugeneCoreStereotypes.Store.ordered.name(), false, ObjectModel.class, ObjectModelOperation.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class, ObjectModelInterface.class); - - long l = System.nanoTime(); - validate(EugeneCoreStereotypes.Store.ordered.name() + l, false, ObjectModel.class, ObjectModelOperation.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class, ObjectModelInterface.class); - - } - - protected void validate(String name, boolean expected, Class<?>... types) { - for (Class<?> type : types) { - try { - provider.validate(name, type); - Assert.assertTrue(expected); - } catch (StereotypeNotFoundException | MismatchStereotypeTargetException e) { - Assert.assertFalse(expected); - } - } - } -} diff --git a/eugene/src/test/java/org/nuiton/eugene/EugeneCoreTagValuesTest.java b/eugene/src/test/java/org/nuiton/eugene/EugeneCoreTagValuesTest.java index 57c8160..b8d3e5d 100644 --- a/eugene/src/test/java/org/nuiton/eugene/EugeneCoreTagValuesTest.java +++ b/eugene/src/test/java/org/nuiton/eugene/EugeneCoreTagValuesTest.java @@ -32,6 +32,7 @@ import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelClassifier; import org.nuiton.eugene.models.object.ObjectModelEnumeration; +import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelPackage; import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; @@ -62,10 +63,16 @@ public class EugeneCoreTagValuesTest { validate(EugeneCoreTagValues.Store.i18n.getName(), false, ObjectModelOperation.class, ObjectModelAttribute.class); validate(EugeneCoreTagValues.Store.version.getName(), false, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(EugeneCoreTagValues.Store.ordered.name(), true, ObjectModelAttribute.class); + validate(EugeneCoreTagValues.Store.ordered.name(), false, ObjectModel.class, ObjectModelOperation.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class, ObjectModelInterface.class); + long l = System.nanoTime(); validate(EugeneCoreTagValues.Store.constantPrefix.getName() + l, false, ObjectModelOperation.class, ObjectModelPackage.class, ObjectModelAttribute.class); validate(EugeneCoreTagValues.Store.i18n.getName() + l, false, ObjectModelOperation.class, ObjectModelPackage.class, ObjectModelAttribute.class); validate(EugeneCoreTagValues.Store.version.getName() + l, false, ObjectModelClassifier.class, ObjectModelPackage.class, ObjectModelOperation.class, ObjectModelAttribute.class); + + validate(EugeneCoreTagValues.Store.ordered.name() + l, false, ObjectModel.class, ObjectModelOperation.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class, ObjectModelInterface.class); + } @Test -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.