r1346 - in trunk: eugene/src/main/java/org/nuiton/eugene eugene/src/main/java/org/nuiton/eugene/java eugene/src/main/java/org/nuiton/eugene/models eugene/src/main/java/org/nuiton/eugene/models/object eugene/src/main/java/org/nuiton/eugene/models/object/reader eugene/src/main/java/org/nuiton/eugene/models/object/xml eugene/src/main/java/org/nuiton/eugene/models/stereotype eugene/src/main/java/org/nuiton/eugene/models/tagvalue eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher eug
Author: tchemit Date: 2014-04-27 14:17:19 +0200 (Sun, 27 Apr 2014) New Revision: 1346 Url: http://forge.nuiton.org/projects/eugene/repository/revisions/1346 Log: refs #3175: Improve Stereotype and TagValue API Added: trunk/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider trunk/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesStereoTypesTest.java trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesTagValuesTest.java trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/ trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/AggregateStereotypeDefinitionProvider.java trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/MismatchStereotypeTargetException.java trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/MyStereotypeDefinitionProvider.java trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeAble.java trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinition.java trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProvider.java trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProviders.java trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeNotFoundException.java trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/package-info.java trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/AggregateTagValueDefinitionProvider.java trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/MismatchTagValueTargetException.java trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueAble.java trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinition.java trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinitionProvider.java trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinitionProviders.java trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueNotFoundException.java trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValues.java trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher/ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher/EqualsTagValueNameMatcher.java trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher/StartsWithTagNameMatcher.java trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher/TagValueDefinitionMatcher.java trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/package-info.java trunk/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider trunk/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider trunk/eugene/src/test/java/org/nuiton/eugene/EugeneStereotypesTest.java trunk/eugene/src/test/java/org/nuiton/eugene/EugeneTagValuesTest.java Removed: trunk/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.metas.ModelPropertiesProvider trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesModelPropertiesProviderTest.java trunk/eugene/src/main/java/org/nuiton/eugene/metas/ trunk/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.metas.ModelPropertiesProvider trunk/eugene/src/test/java/org/nuiton/eugene/EugeneModelPropertiesProviderTest.java Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaEnumerationTransformer.java trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesGeneratorUtil.java trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesModelPropertiesProvider.java trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesStereoTypes.java trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformer.java trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/package-info.java trunk/eugene-maven-plugin/pom.xml trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java trunk/eugene/src/main/java/org/nuiton/eugene/EugeneModelPropertiesProvider.java trunk/eugene/src/main/java/org/nuiton/eugene/EugeneStereoTypes.java trunk/eugene/src/main/java/org/nuiton/eugene/EugeneTagValues.java trunk/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java trunk/eugene/src/main/java/org/nuiton/eugene/ModelPropertiesUtil.java trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java trunk/eugene/src/main/java/org/nuiton/eugene/models/Model.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelElement.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelElementImpl.java trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI21ToObjectModelTest.java trunk/src/site/fr/rst/06-fonctionnalites-avancees.rst trunk/src/site/rst/06-fonctionnalites-avancees.rst Modified: trunk/eugene/src/main/java/org/nuiton/eugene/EugeneModelPropertiesProvider.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/EugeneModelPropertiesProvider.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/java/org/nuiton/eugene/EugeneModelPropertiesProvider.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -1,18 +1,40 @@ package org.nuiton.eugene; -import org.nuiton.eugene.metas.ModelPropertiesProvider; +/* + * #%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% + */ + /** * The Eugene provider of tag values and stereotypes. * * @author tchemit <chemit@codelutin.com> - * @plexus.component role="org.nuiton.eugene.metas.ModelPropertiesProvider" role-hint="eugene" * @since 2.3 + * @deprecated since 2.9, use now {@link EugeneStereoTypes} and {@link EugeneTagValues}. */ -public class EugeneModelPropertiesProvider extends ModelPropertiesProvider { +@Deprecated +public class EugeneModelPropertiesProvider extends ModelPropertiesUtil.ModelPropertiesProvider { @Override - public void initStores() throws IllegalAccessException { + public void init() throws IllegalAccessException { scanStereotypeClass(EugeneStereoTypes.class); scanTagValueClass(EugeneTagValues.class); } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/EugeneStereoTypes.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/EugeneStereoTypes.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/java/org/nuiton/eugene/EugeneStereoTypes.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -24,10 +24,10 @@ */ package org.nuiton.eugene; -import org.nuiton.eugene.java.JavaGeneratorUtil; -import org.nuiton.eugene.metas.StereotypeDefinition; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.stereotype.StereotypeDefinition; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; /** * Defines all stereotypes managed by Eugene. @@ -36,20 +36,21 @@ * own stereotypes, to get a unique place where to find stereotypes. * * @author tchemit <chemit@codelutin.com> - * @since 2.3 + * @plexus.component role="org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider" role-hint="eugene" + * @since 2.9 */ -public interface EugeneStereoTypes { +public class EugeneStereoTypes extends StereotypeDefinitionProvider { /** * Stéréotype pour les attributs à indexer en base. * - * @see GeneratorUtil#hasIndexedStereotype(ObjectModelAttribute) + * @see #hasIndexedStereotype(ObjectModelAttribute) * @deprecated since 2.8, use {@link #STEREOTYPE_ORDERED} instead, will be removed in version 3.0 */ @StereotypeDefinition(target = ObjectModelAttribute.class, documentation = "To specify that a attribute is indexed") @Deprecated - String STEREOTYPE_INDEXED = "indexed"; + public static final String STEREOTYPE_INDEXED = "indexed"; /** * Stereotype to mark an attribute with multiplicity as ordered. @@ -58,12 +59,12 @@ * to a collection typed with {@link java.util.List} or {@link java.util.LinkedHashSet} * or {@link java.util.LinkedHashMap}. * - * @see GeneratorUtil#hasOrderedStereotype(ObjectModelAttribute) + * @see #hasOrderedStereotype(ObjectModelAttribute) * @since 2.8 */ @StereotypeDefinition(target = ObjectModelAttribute.class, documentation = "To specify that a attribute is ordered") - String STEREOTYPE_ORDERED = "ordered"; + public static final String STEREOTYPE_ORDERED = "ordered"; /** * Stereotype to mark an attribute with multiplicity as unique. @@ -71,19 +72,70 @@ * 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}. * - * @see JavaGeneratorUtil#hasUniqueStereotype(ObjectModelAttribute) + * @see #hasUniqueStereotype(ObjectModelAttribute) */ @StereotypeDefinition(target = ObjectModelAttribute.class, documentation = "To specify that an attribute is unique") - String STEREOTYPE_UNIQUE = "unique"; + public static final String STEREOTYPE_UNIQUE = "unique"; /** * Stereotype to skip generation for some transformer. * - * @see JavaGeneratorUtil#hasSkipStereotype(ObjectModelClassifier) + * @see #hasSkipStereotype(ObjectModelClassifier) */ @StereotypeDefinition(target = ObjectModelClassifier.class, documentation = "To specify that a classifier should not been generated.") - String STEREOTYPE_SKIP = "skip"; + public static final String STEREOTYPE_SKIP = "skip"; + /** + * Check if the given attribute has the {@link #STEREOTYPE_INDEXED} stereotype. + * + * @param attribute attribute to test + * @return {@code true} if stereotype was found, {@code false otherwise} + * @see #STEREOTYPE_INDEXED + * @see #hasIndexedStereotype(ObjectModelAttribute) + * @since 2.3 + * @deprecated {@link #STEREOTYPE_INDEXED} is deprecated + */ + @Deprecated + public static boolean hasIndexedStereotype(ObjectModelAttribute attribute) { + return attribute.hasStereotype(EugeneStereoTypes.STEREOTYPE_INDEXED); + } + + /** + * Check if the given attribute has the {@link #STEREOTYPE_ORDERED} stereotype. + * + * @param attribute attribute to test + * @return {@code true} if stereotype was found, {@code false otherwise} + * @see #STEREOTYPE_ORDERED + * @since 2.9 + */ + public static boolean hasOrderedStereotype(ObjectModelAttribute attribute) { + return attribute.hasStereotype(EugeneStereoTypes.STEREOTYPE_ORDERED); + } + + /** + * Check if the given attribute has the {@link #STEREOTYPE_UNIQUE} stereotype. + * + * @param attribute attribute to test + * @return {@code true} if stereotype was found, {@code false otherwise} + * @see #STEREOTYPE_UNIQUE + * @since 2.9 + */ + public static boolean hasUniqueStereotype(ObjectModelAttribute attribute) { + return attribute.hasStereotype(EugeneStereoTypes.STEREOTYPE_UNIQUE); + } + + /** + * Check if the given classifier has the {@link #STEREOTYPE_SKIP} stereotype. + * + * @param classifier classifier to test + * @return {@code true} if stereotype was found, {@code false otherwise} + * @see #STEREOTYPE_SKIP + * @since 2.9 + */ + public static boolean hasSkipStereotype(ObjectModelClassifier classifier) { + return classifier.hasStereotype(EugeneStereoTypes.STEREOTYPE_SKIP); + } + } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/EugeneTagValues.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/EugeneTagValues.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/java/org/nuiton/eugene/EugeneTagValues.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -24,11 +24,12 @@ */ package org.nuiton.eugene; -import org.nuiton.eugene.java.JavaGeneratorUtil; -import org.nuiton.eugene.metas.TagValueDefinition; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelClassifier; import org.nuiton.eugene.models.object.ObjectModelElement; +import org.nuiton.eugene.models.tagvalue.TagValueDefinition; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; +import org.nuiton.eugene.models.tagvalue.TagValues; /** * Defines all tag values managed by Eugene. @@ -37,9 +38,10 @@ * own tag values, to get a unique place where to find tag values. * * @author tchemit <chemit@codelutin.com> + * @plexus.component role="org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider" role-hint="eugene" * @since 2.3 */ -public interface EugeneTagValues { +public class EugeneTagValues extends TagValueDefinitionProvider { /** * Tag value to add the version of the model from outside (says in the @@ -53,7 +55,7 @@ */ @TagValueDefinition(target = {ObjectModel.class}, documentation = "To set the version of the model.") - String TAG_VERSION = "version"; + public static final String TAG_VERSION = "version"; /** * Tag value to add on constants enumeration (or other incoming dev) @@ -61,13 +63,13 @@ * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see GeneratorUtil#getDocumentationTagValue(ObjectModel) - * @see GeneratorUtil#getDocumentationTagValue(ObjectModelElement) + * @see #getDocumentationTagValue(ObjectModel) + * @see #getDocumentationTagValue(ObjectModelElement) * @since 2.5 */ @TagValueDefinition(target = {ObjectModel.class, ObjectModelElement.class}, documentation = "Sets the documentation of a model or any of his elements") - String TAG_DOCUMENTATION = "documentation"; + public static final String TAG_DOCUMENTATION = "documentation"; /** * Tag value to add on constants enumeration (or other incoming dev) @@ -75,35 +77,109 @@ * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaGeneratorUtil#getConstantPrefixTagValue(ObjectModel, ObjectModelClassifier) + * @see #getConstantPrefixTagValue(ObjectModelClassifier, ObjectModel) * @since 2.3 */ @TagValueDefinition(target = {ObjectModel.class, ObjectModelClassifier.class}, defaultValue = "PROPERTY_", documentation = "Sets the prefix of any constant to be generated for the given class") - String TAG_CONSTANT_PREFIX = "constantPrefix"; + public static final String TAG_CONSTANT_PREFIX = "constantPrefix"; /** * Tag value to specify the i18n prefix to use whene generating i18n keys. * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaGeneratorUtil#getI18nPrefixTagValue(ObjectModelElement, ObjectModel) + * @see #getI18nPrefixTagValue(ObjectModelElement, ObjectModel) * @since 2.3 */ @TagValueDefinition(target = {ObjectModel.class, ObjectModelClassifier.class}, documentation = "Sets the i18n prefix to use on I18n keys generated") - String TAG_I18N_PREFIX = "i18n"; + public static final String TAG_I18N_PREFIX = "i18n"; /** * Tag value to specify to not generate only the {@code isXXX} methods for * a boolean property. * - * @see JavaGeneratorUtil#isDoNotGenerateBooleanGetMethods(ObjectModel, ObjectModelClassifier) + * @see #isDoNotGenerateBooleanGetMethods(ObjectModelClassifier, ObjectModel) * @since 2.4.1 */ @TagValueDefinition(target = {ObjectModel.class, ObjectModelClassifier.class}, defaultValue = "true", documentation = "To specify to NOT generate getXXX methods for boolean properties") - String TAG_DO_NOT_GENERATE_BOOLEAN_GET_METHODS = "doNotGenerateBooleanGetMethods"; + public static final String TAG_DO_NOT_GENERATE_BOOLEAN_GET_METHODS = "doNotGenerateBooleanGetMethods"; + + + /** + * Obtain the value of the {@link #TAG_DOCUMENTATION} tag value on the given model. + * + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_DOCUMENTATION + * @since 2.3 + */ + public static String getDocumentationTagValue(ObjectModel model) { + String value = TagValues.findTagValue(EugeneTagValues.TAG_DOCUMENTATION, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_DOCUMENTATION} tag value on the given element. + * + * @param element element to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_DOCUMENTATION + * @since 2.3 + */ + public static String getDocumentationTagValue(ObjectModelElement element) { + String value = TagValues.findTagValue(EugeneTagValues.TAG_DOCUMENTATION, element); + return value; + } + + /** + * Cherche et renvoie le prefixe i18n à utiliser sur cet element, sinon sur + * le model. + * + * @param element l'élément à tester + * @param model le modele utilisé + * @return le prefix i18n ou <code>null</code> si non spécifié + * @since 2.3 + */ + public static String getI18nPrefixTagValue(ObjectModelElement element, + ObjectModel model) { + return TagValues.findTagValue(EugeneTagValues.TAG_I18N_PREFIX, element, model); + } + + /** + * Obtain the value of the {@link #TAG_DO_NOT_GENERATE_BOOLEAN_GET_METHODS} + * tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_DO_NOT_GENERATE_BOOLEAN_GET_METHODS + * @since 2.4.1 + */ + public static boolean isDoNotGenerateBooleanGetMethods(ObjectModelClassifier classifier, ObjectModel model) { + boolean value = TagValues.findBooleanTagValue(EugeneTagValues.TAG_DO_NOT_GENERATE_BOOLEAN_GET_METHODS, classifier, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_CONSTANT_PREFIX} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_CONSTANT_PREFIX + * @since 2.3 + */ + public static String getConstantPrefixTagValue(ObjectModelClassifier classifier, ObjectModel model) { + String value = TagValues.findTagValue(EugeneTagValues.TAG_CONSTANT_PREFIX, classifier, model); + return value; + } } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -8,15 +8,15 @@ * Copyright (C) 2004 - 2010 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 + * 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>. @@ -27,8 +27,6 @@ package org.nuiton.eugene; import org.apache.commons.lang3.StringUtils; -import org.nuiton.eugene.metas.TagValueAble; -import org.nuiton.eugene.metas.TagValues; import org.nuiton.eugene.models.Model; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; @@ -38,6 +36,8 @@ import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelParameter; import org.nuiton.eugene.models.object.SerialVersionUIDBuilder; +import org.nuiton.eugene.models.tagvalue.TagValueAble; +import org.nuiton.eugene.models.tagvalue.TagValues; import org.nuiton.util.StringUtil; import java.io.File; @@ -80,8 +80,8 @@ /** * @param qualifiedName the fully qualified name to test * @return class name fr given fully qualified name (return given name if it is not fully qualified) - * eg : org.nuiton.eugene.models.ObjectClass -> ObjectClass - * eg : ObjectClass-> ObjectClass + * eg : org.nuiton.eugene.models.ObjectClass -> ObjectClass + * eg : ObjectClass-> ObjectClass */ public static String getClassNameFromQualifiedName(String qualifiedName) { String className = qualifiedName; @@ -262,7 +262,7 @@ /** * @param attribute the attribute to test * @return vrai si la cardinalite de l'attribut est superieur a 1, c-a-d - * si MaxMultiplicity == -1 ou > 1 + * si MaxMultiplicity == -1 ou > 1 */ public static boolean isNMultiplicity(ObjectModelAttribute attribute) { return isNMultiplicity(attribute.getMaxMultiplicity()); @@ -313,7 +313,7 @@ String type = attribute.getType(); return "boolean".equals(type); } - + public static String getParsingExpression(String type, String attributeStringName) { if ("byte".equals(type)) { @@ -405,7 +405,7 @@ * * @param operation to treate * @return the string corresponding to the list of operation parameter - * names separated by a ', '. + * names separated by a ', '. */ public static String getOperationParametersListName( ObjectModelOperation operation) { @@ -628,7 +628,7 @@ // no generics definition, no treatment to do return str; } - result = result.substring(0,result.indexOf('<')); + result = result.substring(0, result.indexOf('<')); return result; } @@ -763,7 +763,7 @@ */ @Deprecated public static boolean hasIndexedStereotype(ObjectModelAttribute attribute) { - return attribute.hasStereotype(EugeneStereoTypes.STEREOTYPE_INDEXED); + return EugeneStereoTypes.hasIndexedStereotype(attribute); } /** @@ -774,9 +774,11 @@ * @return {@code true} if stereotype was found, {@code false otherwise} * @see EugeneStereoTypes#STEREOTYPE_ORDERED * @since 2.3 + * @deprecated since 2.9, use now {@link EugeneStereoTypes#hasOrderedStereotype(ObjectModelAttribute)} */ + @Deprecated public static boolean hasOrderedStereotype(ObjectModelAttribute attribute) { - return attribute.hasStereotype(EugeneStereoTypes.STEREOTYPE_ORDERED); + return EugeneStereoTypes.hasOrderedStereotype(attribute); } /** @@ -787,9 +789,11 @@ * @return {@code true} if stereotype was found, {@code false otherwise} * @see EugeneStereoTypes#STEREOTYPE_UNIQUE * @since 2.8 + * @deprecated since 2.9, use now {@link EugeneStereoTypes#hasUniqueStereotype(ObjectModelAttribute)} (ObjectModelAttribute)} */ + @Deprecated public static boolean hasUniqueStereotype(ObjectModelAttribute attribute) { - return attribute.hasStereotype(EugeneStereoTypes.STEREOTYPE_UNIQUE); + return EugeneStereoTypes.hasUniqueStereotype(attribute); } /** @@ -800,10 +804,12 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see EugeneTagValues#TAG_DOCUMENTATION * @since 2.3 + * @deprecated since 2.9, use now {@link EugeneTagValues#getDocumentationTagValue(ObjectModel)} */ + @Deprecated public static String getDocumentationTagValue(ObjectModel model) { // String value = findTagValue(EugeneTagValues.TAG_DOCUMENTATION, null, model); - String value = TagValues.findTagValue(EugeneTagValues.TAG_DOCUMENTATION, model); + String value = EugeneTagValues.getDocumentationTagValue(model); return value; } @@ -815,10 +821,12 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see EugeneTagValues#TAG_DOCUMENTATION * @since 2.3 + * @deprecated since 2.9, use now {@link EugeneTagValues#getDocumentationTagValue(ObjectModelElement)} */ + @Deprecated public static String getDocumentationTagValue(ObjectModelElement element) { // String value = findTagValue(EugeneTagValues.TAG_DOCUMENTATION, element, null); - String value = TagValues.findTagValue(EugeneTagValues.TAG_DOCUMENTATION, element); + String value = EugeneTagValues.getDocumentationTagValue(element); return value; } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/ModelPropertiesUtil.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/ModelPropertiesUtil.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/java/org/nuiton/eugene/ModelPropertiesUtil.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -26,6 +26,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProviders; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProviders; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -45,7 +47,7 @@ * * @author tchemit <chemit@codelutin.com> * @since 2.3 - * @deprecated since 2.9, will be removed in version 3.0, use now classes inside {@link org.nuiton.eugene.metas} package. + * @deprecated since 2.9, will be removed in version 3.0, use now {@link StereotypeDefinitionProviders} and {@link TagValueDefinitionProviders}. */ @Deprecated public class ModelPropertiesUtil { Modified: trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -27,8 +27,9 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.metas.ModelPropertiesProvider; import org.nuiton.eugene.models.Model; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; import java.io.File; import java.io.IOException; @@ -70,9 +71,23 @@ * * @since 2.3 */ - protected ModelPropertiesProvider modelPropertiesProvider; + private ModelPropertiesUtil.ModelPropertiesProvider modelPropertiesProvider; /** + * Provider of tag values. + * + * @since 2.9 + */ + protected TagValueDefinitionProvider tagValueDefinitionProvider; + + /** + * Provider of stereotypes. + * + * @since 2.9 + */ + protected StereotypeDefinitionProvider stereotypeDefinitionProvider; + + /** * Gets the type of model. * * @return the type of model. @@ -136,8 +151,10 @@ /** * @return the provider of controled tagvalues and stereotypes. * @since 2.3 + * @deprecated since 2.9, no more used. */ - public ModelPropertiesProvider getModelPropertiesProvider() { + @Deprecated + public ModelPropertiesUtil.ModelPropertiesProvider getModelPropertiesProvider() { return modelPropertiesProvider; } @@ -146,8 +163,39 @@ * * @param modelPropertiesProvider the provider to use * @since 2.3 + * @deprecated since 2.9, no more used */ - public void setModelPropertiesProvider(ModelPropertiesProvider modelPropertiesProvider) { + @Deprecated + public void setModelPropertiesProvider(ModelPropertiesUtil.ModelPropertiesProvider modelPropertiesProvider) { this.modelPropertiesProvider = modelPropertiesProvider; } + + + public TagValueDefinitionProvider getTagValueDefinitionProvider() { + return tagValueDefinitionProvider; + } + + /** + * Sets the provider of available tag values. + * + * @param tagValueDefinitionProvider the provider to use + * @since 2.9 + */ + public void setTagValueDefinitionProvider(TagValueDefinitionProvider tagValueDefinitionProvider) { + this.tagValueDefinitionProvider = tagValueDefinitionProvider; + } + + public StereotypeDefinitionProvider getStereotypeDefinitionProvider() { + return stereotypeDefinitionProvider; + } + + /** + * Sets the provider of available stereotypes. + * + * @param stereotypeDefinitionProvider the provider to use + * @since 2.9 + */ + public void setStereotypeDefinitionProvider(StereotypeDefinitionProvider stereotypeDefinitionProvider) { + this.stereotypeDefinitionProvider = stereotypeDefinitionProvider; + } } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -28,7 +28,6 @@ import org.nuiton.eugene.EugeneStereoTypes; import org.nuiton.eugene.EugeneTagValues; import org.nuiton.eugene.GeneratorUtil; -import org.nuiton.eugene.metas.TagValues; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; @@ -137,9 +136,11 @@ * @return {@code true} if stereotype was found, {@code false otherwise} * @see EugeneStereoTypes#STEREOTYPE_SKIP * @since 2.5 + * @deprecated since 2.9, use now {@link EugeneStereoTypes#hasSkipStereotype(ObjectModelClassifier)} */ + @Deprecated public static boolean hasSkipStereotype(ObjectModelClassifier classifier) { - return classifier.hasStereotype(EugeneStereoTypes.STEREOTYPE_SKIP); + return EugeneStereoTypes.hasSkipStereotype(classifier); } /** @@ -150,11 +151,13 @@ * @param model le modele utilisé * @return le prefix i18n ou <code>null</code> si non spécifié * @since 2.3 + * @deprecated since 2.9, use now {@link EugeneTagValues#getI18nPrefixTagValue(ObjectModelElement, ObjectModel)} */ + @Deprecated public static String getI18nPrefixTagValue(ObjectModelElement element, ObjectModel model) { // return findTagValue(EugeneTagValues.TAG_I18N_PREFIX, element, model); - return TagValues.findTagValue(EugeneTagValues.TAG_I18N_PREFIX, element, model); + return EugeneTagValues.getI18nPrefixTagValue(element, model); } /** @@ -168,12 +171,14 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see EugeneTagValues#TAG_DO_NOT_GENERATE_BOOLEAN_GET_METHODS * @since 2.4.1 + * @deprecated since 2.9, use now {@link EugeneTagValues#isDoNotGenerateBooleanGetMethods(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static boolean isDoNotGenerateBooleanGetMethods(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(EugeneTagValues.TAG_DO_NOT_GENERATE_BOOLEAN_GET_METHODS, classifier, model); // return value!=null && "true".equals(value); - boolean value = TagValues.findBooleanTagValue(EugeneTagValues.TAG_DO_NOT_GENERATE_BOOLEAN_GET_METHODS, classifier, model); + boolean value = EugeneTagValues.isDoNotGenerateBooleanGetMethods(classifier, model); return value; } @@ -188,11 +193,13 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see EugeneTagValues#TAG_CONSTANT_PREFIX * @since 2.3 + * @deprecated since 2.9, use now {@link EugeneTagValues#getConstantPrefixTagValue(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static String getConstantPrefixTagValue(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(EugeneTagValues.TAG_CONSTANT_PREFIX, classifier, model); - String value = TagValues.findTagValue(EugeneTagValues.TAG_CONSTANT_PREFIX, classifier, model); + String value = EugeneTagValues.getConstantPrefixTagValue(classifier, model); return value; } @@ -425,13 +432,13 @@ } public static boolean isOrdered(ObjectModelAttribute attr) { - return attr.isOrdered() || hasOrderedStereotype(attr) || hasIndexedStereotype(attr); + return attr.isOrdered() || EugeneStereoTypes.hasOrderedStereotype(attr) || EugeneStereoTypes.hasIndexedStereotype(attr); } public static Class<?> getCollectionType(ObjectModelAttribute attr) { boolean ordered = isOrdered(attr); - boolean unique = hasUniqueStereotype(attr); + boolean unique = EugeneStereoTypes.hasUniqueStereotype(attr); // Change type for Multiple attribute Class<?> result; @@ -455,7 +462,7 @@ public static Class<?> getCollectionInstanceType(ObjectModelAttribute attr) { boolean ordered = isOrdered(attr); - boolean unique = hasUniqueStereotype(attr); + boolean unique = EugeneStereoTypes.hasUniqueStereotype(attr); // Change type for Multiple attribute Class<?> result; Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -225,10 +225,7 @@ String defaultPrefix) { // look if there is a constant_prefix tag value - String prefix = JavaGeneratorUtil.getConstantPrefixTagValue( - getModel(), - input - ); + String prefix = EugeneTagValues.getConstantPrefixTagValue(input, getModel()); if (StringUtils.isEmpty(prefix)) { Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/Model.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/Model.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/Model.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -26,7 +26,7 @@ package org.nuiton.eugene.models; -import org.nuiton.eugene.metas.TagValueAble; +import org.nuiton.eugene.models.tagvalue.TagValueAble; /** * Model. @@ -63,31 +63,4 @@ */ String getModelType(); -// /** -// * Returns the tagValues associated with this element. -// * For each entry, the key is the name of the tagValue, the value is the value of the tagValue :-) -// * -// * @return a Map containing all tagValues associated with this element -// */ -// Map<String, String> getTagValues(); -// -// /** -// * Returns the tagValue corresponding to the given name, or null if the element has no associated tagValue for this name. -// * -// * @param tagValue tag value key -// * @return the value of the found tagValue, or null if the element has no associated tagValue for this name. -// */ -// String getTagValue(String tagValue); -// -// /** -// * Adds the given {@code value} associated to the {@code tagValue}. -// * -// * Note: If a previous tag value was definied, then it will be replaced. -// * -// * @param tagValue the name of the tag value -// * @param value the value to associate -// * @since 2.1.2 -// */ -// void addTagValue(String tagValue, String value); - } //Model Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelElement.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelElement.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelElement.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -25,8 +25,8 @@ package org.nuiton.eugene.models.object; -import org.nuiton.eugene.metas.StereotypeAble; -import org.nuiton.eugene.metas.TagValueAble; +import org.nuiton.eugene.models.stereotype.StereotypeAble; +import org.nuiton.eugene.models.tagvalue.TagValueAble; import java.util.List; @@ -83,45 +83,6 @@ */ String getSourceDocumentation(); -// /** -// * Returns the stereotypes names associated with this element. -// * -// * @return a Collection containing all stereotypes names associated with this element as String. -// */ -// Collection<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); - -// /** -// * Returns the tagValues associated with this element. -// * For each entry, the key is the name of the tagValue, the value is the value of the tagValue :-) -// * -// * @return a Map containing all tagValues associated with this element -// */ -// Map<String, String> getTagValues(); -// -// /** -// * Returns the tagValue corresponding to the given name, or null if the element has no associated tagValue for this name. -// * -// * @param tagValue tag value name -// * @return the value of the found tagValue, or null if the element has no associated tagValue for this name. -// */ -// String getTagValue(String tagValue); -// -// /** -// * Returns whether this element has a tagValue corresponding to the given name, or not. -// * -// * @param tagValue tag value name -// * @return a boolean indicating whether this element has a tagValue corresponding to the given name, or not. -// */ -// boolean hasTagValue(String tagValue); - /** * Return if this element has static declaration, only valid when * getDeclaringElement is classifier. Not possible for the moment Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -31,10 +31,8 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.EugeneTagValues; import org.nuiton.eugene.ModelHelper; +import org.nuiton.eugene.ModelPropertiesUtil; import org.nuiton.eugene.ModelReader; -import org.nuiton.eugene.metas.MismatchTagValueTargetException; -import org.nuiton.eugene.metas.ModelPropertiesProviders; -import org.nuiton.eugene.metas.TagValueNotFoundException; import org.nuiton.eugene.models.object.reader.XmlObjectModelReader; import org.nuiton.eugene.models.object.xml.DigesterObjectModelRuleSet; import org.nuiton.eugene.models.object.xml.ObjectModelAssociationClassImpl; @@ -42,6 +40,12 @@ import org.nuiton.eugene.models.object.xml.ObjectModelElementImpl; import org.nuiton.eugene.models.object.xml.ObjectModelImpl; import org.nuiton.eugene.models.object.xml.ObjectModelImplRef; +import org.nuiton.eugene.models.stereotype.MismatchStereotypeTargetException; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProviders; +import org.nuiton.eugene.models.stereotype.StereotypeNotFoundException; +import org.nuiton.eugene.models.tagvalue.MismatchTagValueTargetException; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProviders; +import org.nuiton.eugene.models.tagvalue.TagValueNotFoundException; import org.nuiton.util.FileUtil; import org.nuiton.util.RecursiveProperties; import org.nuiton.util.StringUtil; @@ -137,12 +141,24 @@ " for files " + Arrays.toString(files)); } - if (modelPropertiesProvider == null) { - if (log.isWarnEnabled()) { - log.warn("No properties provider filled, will instanciate a new default one"); + if (tagValueDefinitionProvider == null) { + if (log.isDebugEnabled()) { + log.debug("No tag value provider filled, will instanciate a new default one"); } - setModelPropertiesProvider(ModelPropertiesProviders.newStore(getClass().getClassLoader(), false)); + setTagValueDefinitionProvider(TagValueDefinitionProviders.newProvider(getClass().getClassLoader(), false)); } + if (stereotypeDefinitionProvider == null) { + if (log.isDebugEnabled()) { + log.debug("No stereotype provider filled, will instanciate a new default one"); + } + setStereotypeDefinitionProvider(StereotypeDefinitionProviders.newProvider(getClass().getClassLoader(), false)); + } +// if (modelPropertiesProvider == null) { +// if (log.isWarnEnabled()) { +// log.warn("No properties provider filled, will instanciate a new default one"); +// } +// setModelPropertiesProvider(ModelPropertiesUtil.newStore(getClass().getClassLoader(), false)); +// } ObjectModel model = new ObjectModelImpl(); @@ -153,7 +169,7 @@ for (File file : files) { try { digester.push(model); - model = (ObjectModel) digester.parse(file); + model = digester.parse(file); } catch (SAXException e) { throw new IOException("Unable to parse ObjectModel input file : " + file, e); // if (log.isWarnEnabled()) { @@ -308,7 +324,7 @@ boolean safe = false; try { - modelPropertiesProvider.acceptTagValue(tag, ObjectModel.class); + tagValueDefinitionProvider.validate(tag, ObjectModel.class); safe = true; } catch (TagValueNotFoundException e) { if (log.isWarnEnabled()) { @@ -361,24 +377,18 @@ // target real type Class<?> targetType = getTargetType(target); - boolean safe = modelPropertiesProvider.containsStereotype(value); + boolean safe = false; - if (!safe) { - - // stereotype unknown + try { + stereotypeDefinitionProvider.validate(value, targetType); + safe = true; + } catch (StereotypeNotFoundException e) { if (log.isWarnEnabled()) { - log.warn("Invalid stereotype [" + key + "] : this stereotype '" + value + "' is unknown."); + log.warn("Invalid model stereotype [" + key + "] : the stereotype '" + value + "' is unknown."); } - } else { - - safe = modelPropertiesProvider.acceptStereotype(value, targetType); - - if (!safe) { - - // the stereotype can not be apply of the given target - if (log.isWarnEnabled()) { - log.warn("Invalid stereotype [" + key + "] : this stereotype '" + value + "' can not be apply on " + target + "."); - } + } catch (MismatchStereotypeTargetException e) { + if (log.isWarnEnabled()) { + log.warn("Invalid model stereotype [" + key + "] : this stereotype '" + value + "' can not be apply on '" + targetType + "'."); } } @@ -468,7 +478,7 @@ boolean safe = false; try { - modelPropertiesProvider.acceptTagValue(tag, targetType); + tagValueDefinitionProvider.validate(tag, targetType); safe = true; } catch (TagValueNotFoundException e) { if (log.isWarnEnabled()) { Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -30,9 +30,6 @@ import org.nuiton.eugene.EugeneTagValues; import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.ModelReader; -import org.nuiton.eugene.metas.MismatchTagValueTargetException; -import org.nuiton.eugene.metas.ModelPropertiesProviders; -import org.nuiton.eugene.metas.TagValueNotFoundException; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAssociationClass; import org.nuiton.eugene.models.object.ObjectModelAttribute; @@ -45,6 +42,12 @@ import org.nuiton.eugene.models.object.xml.ObjectModelElementImpl; import org.nuiton.eugene.models.object.xml.ObjectModelImpl; import org.nuiton.eugene.models.object.xml.ObjectModelImplRef; +import org.nuiton.eugene.models.stereotype.MismatchStereotypeTargetException; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProviders; +import org.nuiton.eugene.models.stereotype.StereotypeNotFoundException; +import org.nuiton.eugene.models.tagvalue.MismatchTagValueTargetException; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProviders; +import org.nuiton.eugene.models.tagvalue.TagValueNotFoundException; import org.nuiton.util.FileUtil; import org.nuiton.util.RecursiveProperties; import org.nuiton.util.StringUtil; @@ -123,12 +126,25 @@ " for file " + Arrays.toString(files)); } - if (modelPropertiesProvider == null) { + if (tagValueDefinitionProvider == null) { if (log.isDebugEnabled()) { - log.debug("No properties provider filled, will instanciate a new default one"); + log.debug("No tag value provider filled, will instanciate a new default one"); } - setModelPropertiesProvider(ModelPropertiesProviders.newStore(getClass().getClassLoader(), false)); + setTagValueDefinitionProvider(TagValueDefinitionProviders.newProvider(getClass().getClassLoader(), false)); } + if (stereotypeDefinitionProvider == null) { + if (log.isDebugEnabled()) { + log.debug("No stereotype provider filled, will instanciate a new default one"); + } + setStereotypeDefinitionProvider(StereotypeDefinitionProviders.newProvider(getClass().getClassLoader(), false)); + } + +// if (modelPropertiesProvider == null) { +// if (log.isDebugEnabled()) { +// log.debug("No properties provider filled, will instanciate a new default one"); +// } +// setModelPropertiesProvider(ModelPropertiesUtil.newStore(getClass().getClassLoader(), false)); +// } } @Override @@ -292,7 +308,7 @@ boolean safe = false; try { - modelPropertiesProvider.acceptTagValue(tag, ObjectModel.class); + tagValueDefinitionProvider.validate(tag, ObjectModel.class); safe = true; } catch (TagValueNotFoundException e) { if (log.isWarnEnabled()) { @@ -313,7 +329,7 @@ if (safe) { // test if tagValue is deprecated - boolean deprecated = modelPropertiesProvider.isDeprecatedTagValue(tag); + boolean deprecated = tagValueDefinitionProvider.isDeprecated(tag); if (deprecated) { if (log.isWarnEnabled()) { log.warn("Deprecated tagValue usage [" + key + "] : " + value); @@ -356,24 +372,18 @@ // target real type Class<?> targetType = getTargetType(target); - boolean safe = modelPropertiesProvider.containsStereotype(value); + boolean safe = false; - if (!safe) { - - // stereotype unknown + try { + stereotypeDefinitionProvider.validate(value, targetType); + safe = true; + } catch (StereotypeNotFoundException e) { if (log.isWarnEnabled()) { - log.warn("Invalid stereotype [" + key + "] : this stereotype '" + value + "' is unknown."); + log.warn("Invalid model stereotype [" + key + "] : the stereotype '" + value + "' is unknown."); } - } else { - - safe = modelPropertiesProvider.acceptStereotype(value, targetType); - - if (!safe) { - - // the stereotype can not be apply of the given target - if (log.isWarnEnabled()) { - log.warn("Invalid stereotype [" + key + "] : this stereotype '" + value + "' can not be apply on " + target + "."); - } + } catch (MismatchStereotypeTargetException e) { + if (log.isWarnEnabled()) { + log.warn("Invalid model stereotype [" + key + "] : this stereotype '" + value + "' can not be apply on '" + targetType + "'."); } } @@ -386,7 +396,7 @@ if (safe) { // test if tagValue is deprecated - boolean deprecated = modelPropertiesProvider.isDeprecatedStereotype(value); + boolean deprecated = stereotypeDefinitionProvider.isDeprecated(value); if (deprecated) { if (log.isWarnEnabled()) { log.warn("Deprecated stereotype usage [" + key + "] : " + value); @@ -473,7 +483,7 @@ boolean safe = false; try { - modelPropertiesProvider.acceptTagValue(tag, targetType); + tagValueDefinitionProvider.validate(tag, targetType); safe = true; } catch (TagValueNotFoundException e) { if (log.isWarnEnabled()) { @@ -494,7 +504,7 @@ if (safe) { // test if tagValue is deprecated - boolean deprecated = modelPropertiesProvider.isDeprecatedTagValue(tag); + boolean deprecated = tagValueDefinitionProvider.isDeprecated(tag); if (deprecated) { if (log.isWarnEnabled()) { log.warn("Deprecated tagValue usage [" + key + "] : " + value); Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelElementImpl.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelElementImpl.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelElementImpl.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -29,7 +29,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.EugeneTagValues; import org.nuiton.eugene.models.object.ObjectModelElement; import org.nuiton.eugene.models.object.ObjectModelJavaModifier; import org.nuiton.eugene.models.object.ObjectModelModifier; @@ -186,7 +186,7 @@ public String getDocumentation() { // if (documentation == null && hasTagValue("documentation")) { if (documentation == null) { - String doc = GeneratorUtil.getDocumentationTagValue(this); + String doc = EugeneTagValues.getDocumentationTagValue(this); if (StringUtils.isNotEmpty(doc)) { documentation = doc; } Added: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/AggregateStereotypeDefinitionProvider.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/AggregateStereotypeDefinitionProvider.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/AggregateStereotypeDefinitionProvider.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,71 @@ +package org.nuiton.eugene.models.stereotype; + +/* + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2014 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.ServiceLoader; + +/** + * Created on 4/27/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public class AggregateStereotypeDefinitionProvider extends StereotypeDefinitionProvider { + + /** Logger. */ + private static final Log log = LogFactory.getLog(AggregateStereotypeDefinitionProvider.class); + + protected ClassLoader loader; + + private Iterable<StereotypeDefinitionProvider> stereotypeDefinitionFactories; + + public AggregateStereotypeDefinitionProvider(ClassLoader loader) { + this.loader = loader; + } + + public AggregateStereotypeDefinitionProvider(Iterable<StereotypeDefinitionProvider> stereotypeDefinitionFactories) { + this.stereotypeDefinitionFactories = stereotypeDefinitionFactories; + } + + @Override + public void initDefinition() { + + if (stereotypeDefinitionFactories == null) { + + stereotypeDefinitionFactories = ServiceLoader.load(StereotypeDefinitionProvider.class, loader); + } + + for (StereotypeDefinitionProvider tagValueDefinitionFactory : stereotypeDefinitionFactories) { + if (isVerbose()) { + log.info("Will init tag value definition factory " + tagValueDefinitionFactory); + } + tagValueDefinitionFactory.setVerbose(isVerbose()); + tagValueDefinitionFactory.init(); + addAllDefinition(tagValueDefinitionFactory); + addAllDeprecated(tagValueDefinitionFactory); + } + } +} Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/AggregateStereotypeDefinitionProvider.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/MismatchStereotypeTargetException.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/MismatchStereotypeTargetException.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/MismatchStereotypeTargetException.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,33 @@ +package org.nuiton.eugene.models.stereotype; + +/* + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2014 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +/** + * Created on 4/27/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public class MismatchStereotypeTargetException extends Exception { + private static final long serialVersionUID = 1L; +} Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/MismatchStereotypeTargetException.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/MyStereotypeDefinitionProvider.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/MyStereotypeDefinitionProvider.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/MyStereotypeDefinitionProvider.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,16 @@ +package org.nuiton.eugene.models.stereotype; + +import org.nuiton.eugene.models.object.ObjectModelAttribute; + +/** + * Created on 4/27/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since XXX + */ +public class MyStereotypeDefinitionProvider extends StereotypeDefinitionProvider { + + @StereotypeDefinition(target = ObjectModelAttribute.class, + documentation = "doc of your stereotype") + public static final String MY_STEREOTYPE = "mystereotype"; +} Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/MyStereotypeDefinitionProvider.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Copied: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeAble.java (from rev 1344, trunk/eugene/src/main/java/org/nuiton/eugene/metas/StereotypeAble.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeAble.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeAble.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,49 @@ +package org.nuiton.eugene.models.stereotype; + +/* + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2014 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import java.util.Collection; + +/** + * Created on 4/26/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public interface StereotypeAble { + + /** + * Returns the stereotypes names associated with this element. + * + * @return a Collection containing all stereotypes names associated with this element as String. + */ + Collection<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); +} Copied: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinition.java (from rev 1342, trunk/eugene/src/main/java/org/nuiton/eugene/metas/StereotypeDefinition.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinition.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinition.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,66 @@ +package org.nuiton.eugene.models.stereotype; + +/* + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2014 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import org.nuiton.eugene.EugeneTagValues; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * To define a stereotype. + * <p/> + * Place this annotation on the constant defining your stereotype. + * <p/> + * <br/> + * Example for stereotype named mystereotype which can be only put on a attribute : + * <pre> + * String STEREOTYPE_MYSTEREOTYPE = "mystereotype"; + * \@StereotypeDefinition(target = ObjectModelAttribute.class) + * </pre + * + * @author tchemit <chemit@codelutin.com> + * @see EugeneTagValues + * @since 2.3 + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface StereotypeDefinition { + + /** + * Define the types of object model api which can use this tag value. + * + * @return the array of target object model element which can accept the tag value. + */ + Class<?>[] target(); + + /** + * Obtain the english documentation of the stereotype. + * + * @return the documentation of the stereotype. + * @since 2.3.1 + */ + String documentation(); +} Added: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProvider.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProvider.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProvider.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,177 @@ +package org.nuiton.eugene.models.stereotype; + +/* + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2014 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.ImmutableMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.EugeneStereoTypes; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Map; +import java.util.ServiceLoader; +import java.util.Set; +import java.util.TreeMap; + +/** + * To describe stereotype definitions you can use on your model. Using a such class permits to validate + * the stereotypes before generation. + * <p/> + * Created on 4/27/14. + * <h3>Howto</h3> + * Overrides this class adding constants with {@link StereotypeDefinition} annotations: + * <pre> + * package org.nuiton.mymodel; + * + * public class MyStereotypeDefinitionProvider extends StereotypeDefinitionProvider { + * + * \@StereotypeDefinition(target = ObjectModelAttribute.class, + * documentation = "doc of your stereotype") + * public static final String MY_STEREOTYPE = "mystereotype"; + * } + * </pre> + * Register you provider via the {@link ServiceLoader} mecanism, create the file in your class-path + * {@code META-INF/services/org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider}, and + * add a line + * <pre>org.nuiton.mymodel.MyStereotypeDefinitionProvider</pre> + * + * @author Tony Chemit <chemit@codelutin.com> + * @see EugeneStereoTypes + * @since 2.9 + */ +public class StereotypeDefinitionProvider { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(StereotypeDefinitionProvider.class); + + protected Map<String, StereotypeDefinition> definition; + + protected Set<String> deprecated; + + protected boolean verbose; + + protected StereotypeDefinitionProvider() { + definition = new TreeMap<String, StereotypeDefinition>(); + deprecated = new HashSet<String>(); + } + + public boolean isVerbose() { + return verbose; + } + + public void setVerbose(boolean verbose) { + this.verbose = verbose; + } + + public void init() { + initDefinition(); + } + + public void validate(String stereotypeName, Class<?> type) throws StereotypeNotFoundException, MismatchStereotypeTargetException { + + StereotypeDefinition def = getDefinition(stereotypeName); + + if (def == null) { + throw new StereotypeNotFoundException(); + } + + boolean valid = false; + + for (Class<?> target : def.target()) { + if (target.equals(type) || target.isAssignableFrom(type)) { + + // found one accepting target + valid = true; + break; + } + } + if (!valid) { + throw new MismatchStereotypeTargetException(); + } + } + + public boolean isDeprecated(String stereotypeName) { + boolean result = deprecated.contains(stereotypeName); + return result; + } + + public Map<String, StereotypeDefinition> getDefinition() { + return ImmutableMap.<String, StereotypeDefinition>builder().putAll(definition).build(); + } + + protected void initDefinition() { + try { + scanClass(getClass()); + } catch (IllegalAccessException e) { + throw new RuntimeException("Could not init stereotype provider", e); + } + } + + protected StereotypeDefinition getDefinition(String stereotypeName) { + StereotypeDefinition result = definition.get(stereotypeName); + return result; + } + + protected void scanClass(Class<?> holder) throws IllegalAccessException { + if (isVerbose()) { + log.info("Will scan " + holder.getName() + " to search some stereotype definitions..."); + } + Field[] fields = holder.getDeclaredFields(); + for (Field field : fields) { + + StereotypeDefinition stereotypeDefinition = + field.getAnnotation(StereotypeDefinition.class); + + if (stereotypeDefinition != null) { + String fieldName = field.getName(); + String stereotypeName = (String) field.get(null); + if (isVerbose()) { + log.info("Detected stereotype definition [" + fieldName + ":" + stereotypeName + "] : " + Arrays.toString(stereotypeDefinition.target())); + } + addDefinition(stereotypeName, stereotypeDefinition); + if (field.isAnnotationPresent(Deprecated.class)) { + addDeprecated(stereotypeName); + } + } + } + } + + protected void addDefinition(String name, StereotypeDefinition def) { + definition.put(name, def); + } + + protected void addAllDefinition(StereotypeDefinitionProvider tagValueDefinitionFactory) { + definition.putAll(tagValueDefinitionFactory.definition); + } + + protected void addDeprecated(String name) { + deprecated.add(name); + } + + protected void addAllDeprecated(StereotypeDefinitionProvider tagValueDefinitionFactory) { + deprecated.addAll(tagValueDefinitionFactory.deprecated); + } +} Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProvider.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProviders.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProviders.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProviders.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,82 @@ +package org.nuiton.eugene.models.stereotype; + +/* + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2014 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Created on 4/27/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public class StereotypeDefinitionProviders { + + /** Logger. */ + private static final Log log = LogFactory.getLog(StereotypeDefinitionProviders.class); + + /** + * Obtain a new provider of stereotype definitions. + * + * @param loader the classloader to use (if none given will use the one of the current thread) + * @param verbose verbose flag + * @return the aggregate provider of stereotype definitions detected in the class-path + */ + public static StereotypeDefinitionProvider newProvider(ClassLoader loader, boolean verbose) { + + if (loader == null) { + + // use the current thread loader + loader = Thread.currentThread().getContextClassLoader(); + } + + StereotypeDefinitionProvider store = new AggregateStereotypeDefinitionProvider(loader); + store.setVerbose(verbose || log.isDebugEnabled()); + try { + store.init(); + } catch (Exception e) { + throw new RuntimeException("Could not init stereotype definition provider", e); + } + return store; + } + + /** + * Obtain a new provider of stereotype definitions. + * + * @param providers the list of providers to use in the factory + * @param verbose verbose flag + * @return the aggregate provider of stereotype definitions detected in the class-path + */ + public static StereotypeDefinitionProvider newProvider(Iterable<StereotypeDefinitionProvider> providers, boolean verbose) { + + StereotypeDefinitionProvider store = new AggregateStereotypeDefinitionProvider(providers); + store.setVerbose(verbose || log.isDebugEnabled()); + try { + store.init(); + } catch (Exception e) { + throw new RuntimeException("Could not init stereotype definition provider", e); + } + return store; + } +} Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProviders.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeNotFoundException.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeNotFoundException.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeNotFoundException.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,33 @@ +package org.nuiton.eugene.models.stereotype; + +/* + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2014 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +/** + * Created on 4/27/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public class StereotypeNotFoundException extends Exception { + private static final long serialVersionUID = 1L; +} Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/StereotypeNotFoundException.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/package-info.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/package-info.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/package-info.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,34 @@ +/* + * #%L + * EUGene :: EUGene + * * + * $Id$ + * $HeadURL: https://nuiton.org/svn/eugene/trunk/eugene/src/main/java/org/nuiton/eugene/p... $ + * %% + * Copyright (C) 2004 - 2010 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% + */ + +/** + * This package contains stereotype API. + * + * <strong>Note:</strong> Replace the deprecated class {@link org.nuiton.eugene.ModelPropertiesUtil}. + * + * @since 2.9 + */ +package org.nuiton.eugene.models.stereotype; + Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/models/stereotype/package-info.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/AggregateTagValueDefinitionProvider.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/AggregateTagValueDefinitionProvider.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/AggregateTagValueDefinitionProvider.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,71 @@ +package org.nuiton.eugene.models.tagvalue; + +/* + * #%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 org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.ServiceLoader; + +/** + * Created on 4/27/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public class AggregateTagValueDefinitionProvider extends TagValueDefinitionProvider { + + /** Logger. */ + private static final Log log = LogFactory.getLog(AggregateTagValueDefinitionProvider.class); + + protected ClassLoader loader; + + private Iterable<TagValueDefinitionProvider> tagValueDefinitionFactories; + + public AggregateTagValueDefinitionProvider(ClassLoader loader) { + this.loader = loader; + } + + public AggregateTagValueDefinitionProvider(Iterable<TagValueDefinitionProvider> tagValueDefinitionFactories) { + this.tagValueDefinitionFactories = tagValueDefinitionFactories; + } + + @Override + public void initDefinition() { + + if (tagValueDefinitionFactories == null) { + + tagValueDefinitionFactories = ServiceLoader.load(TagValueDefinitionProvider.class, loader); + } + + for (TagValueDefinitionProvider tagValueDefinitionProvider : tagValueDefinitionFactories) { + if (isVerbose()) { + log.info("Will init tag value definition factory " + tagValueDefinitionProvider); + } + tagValueDefinitionProvider.setVerbose(isVerbose()); + tagValueDefinitionProvider.init(); + addAllDefinition(tagValueDefinitionProvider); + addAllDeprecated(tagValueDefinitionProvider); + } + } +} Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/AggregateTagValueDefinitionProvider.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Copied: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/MismatchTagValueTargetException.java (from rev 1345, trunk/eugene/src/main/java/org/nuiton/eugene/metas/MismatchTagValueTargetException.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/MismatchTagValueTargetException.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/MismatchTagValueTargetException.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,33 @@ +package org.nuiton.eugene.models.tagvalue; + +/* + * #%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/26/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public class MismatchTagValueTargetException extends Exception { + private static final long serialVersionUID = 1L; +} Copied: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueAble.java (from rev 1342, trunk/eugene/src/main/java/org/nuiton/eugene/metas/TagValueAble.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueAble.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueAble.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,69 @@ +package org.nuiton.eugene.models.tagvalue; + +/* + * #%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.Map; + +/** + * Created on 4/26/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public interface TagValueAble { + + /** + * Returns the tagValues associated with this element. + * For each entry, the key is the name of the tagValue, the value is the value of the tagValue :-) + * + * @return a Map containing all tagValues associated with this element + */ + Map<String, String> getTagValues(); + + /** + * Returns the tagValue corresponding to the given name, or null if the element has no associated tagValue for this name. + * + * @param tagValue tag value key + * @return the value of the found tagValue, or null if the element has no associated tagValue for this name. + */ + String getTagValue(String tagValue); + + /** + * Adds the given {@code value} associated to the {@code tagValue}. + * <p/> + * Note: If a previous tag value was definied, then it will be replaced. + * + * @param tagValue the name of the tag value + * @param value the value to associate + * @since 2.1.2 + */ + void addTagValue(String tagValue, String value); + + /** + * Returns whether this element has a tagValue corresponding to the given name, or not. + * + * @param tagValue tag value name + * @return a boolean indicating whether this element has a tagValue corresponding to the given name, or not. + */ + boolean hasTagValue(String tagValue); +} Copied: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinition.java (from rev 1345, trunk/eugene/src/main/java/org/nuiton/eugene/metas/TagValueDefinition.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinition.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinition.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,78 @@ +package org.nuiton.eugene.models.tagvalue; + +/* + * #%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 org.nuiton.eugene.models.tagvalue.matcher.EqualsTagValueNameMatcher; +import org.nuiton.eugene.models.tagvalue.matcher.TagValueDefinitionMatcher; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * To define a tag value. + * <p/> + * Place this annotation on the constant defining your tag-value. + * <p/> + * Example for tag value named mytagvalut which can be only put on a attribute : + * <pre> + * String TAG_VALUE_MYTAGVALUE = "mytagvalue"; + * \@TagValueDefinition(target = ObjectModelAttribute.class) + * </pre + * + * @author tchemit <chemit@codelutin.com> + * @see org.nuiton.eugene.EugeneTagValues + * @since 2.3 + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface TagValueDefinition { + + /** + * Define the types of object model api which can use this tag value. + * + * @return the array of target object model element which can accept the tag value. + */ + Class<?>[] target(); + + /** + * Obtain the english documentation of the tag value. + * + * @return the documentation of the tag value. + * @since 2.3.1 + */ + String documentation(); + + /** + * @return the matcher used to find out back a tagValue definition from his name. + * @since 2.9 + */ + Class<? extends TagValueDefinitionMatcher> matcherClass() default EqualsTagValueNameMatcher.class; + + /** + * @return the default value to use, if not setted then do NOT use the default value. + * @since 2.9 + */ + String defaultValue() default ""; +} Added: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinitionProvider.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinitionProvider.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinitionProvider.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,227 @@ +package org.nuiton.eugene.models.tagvalue; + +/* + * #%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.collect.ImmutableMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.EugeneTagValues; +import org.nuiton.eugene.models.tagvalue.matcher.EqualsTagValueNameMatcher; +import org.nuiton.eugene.models.tagvalue.matcher.StartsWithTagNameMatcher; +import org.nuiton.eugene.models.tagvalue.matcher.TagValueDefinitionMatcher; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.ServiceLoader; +import java.util.Set; +import java.util.TreeMap; + +/** + * To describe tag value definitions you can use on your model. Using a such class permits to validate + * the tag values before generation. + * <p/> + * Created on 4/27/14. + * <h3>Howto</h3> + * Overrides this class adding constants with {@link TagValueDefinition} annotations: + * <pre> + * package org.nuiton.mymodel; + * + * public class MyTagValueDefinitionProvider extends TagValueDefinitionProvider { + * + * \@TagvalueDefinition(target = ObjectModelAttribute.class, + * documentation = "doc of your tagValue") + * public static final String MY_TAG_VALUE = "mytagvalue"; + * } + * </pre> + * Register you provider via the {@link ServiceLoader} mecanism, create the file in your class-path + * {@code META-INF/services/org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider}, and + * add a line + * <pre>org.nuiton.mymodel.MyTagValueDefinitionProvider</pre> + * + * @author Tony Chemit <chemit@codelutin.com> + * @see EugeneTagValues + * @since 2.9 + */ +public class TagValueDefinitionProvider { + + /** Logger. */ + private static final Log log = LogFactory.getLog(TagValueDefinitionProvider.class); + + protected Map<String, TagValueDefinition> definition; + + protected Set<String> deprecated; + + protected Set<TagValueDefinitionMatcher> matcher; + + protected boolean verbose; + + public TagValueDefinitionProvider() { + definition = new HashMap<String, TagValueDefinition>(); + deprecated = new HashSet<String>(); + matcher = new HashSet<TagValueDefinitionMatcher>(); + } + + public boolean isVerbose() { + return verbose; + } + + public void setVerbose(boolean verbose) { + this.verbose = verbose; + } + + public void init() { + initDefinition(); + initMatcher(); + } + + public boolean isDeprecated(String tagValueName) { + boolean result = this.deprecated.contains(tagValueName); + return result; + } + + public void validate(String tagValueName, Class<?> type) throws TagValueNotFoundException, MismatchTagValueTargetException { + + TagValueDefinition def = getDefinition(tagValueName); + + if (def == null) { + throw new TagValueNotFoundException(); + } + + boolean valid = false; + + for (Class<?> target : def.target()) { + if (target.equals(type) || target.isAssignableFrom(type)) { + + // found one accepting target + valid = true; + break; + } + } + + if (!valid) { + throw new MismatchTagValueTargetException(); + } + } + + public String getDefaultValue(String tagValueName) { + TagValueDefinition tagValueDefinition = getDefinition(tagValueName); + String defaultValue = null; + if (tagValueDefinition != null) { + defaultValue = tagValueDefinition.defaultValue(); + } + return defaultValue; + } + + public Map<String, TagValueDefinition> getDefinition() { + return ImmutableMap.<String, TagValueDefinition>builder().putAll(definition).build(); + } + + protected void initDefinition() { + try { + scanClass(getClass()); + } catch (IllegalAccessException e) { + throw new RuntimeException("Could not init definition provider", e); + } + } + + protected TagValueDefinition getDefinition(String tagValueName) { + TagValueDefinition def = null; + + for (TagValueDefinitionMatcher tagValueDefinitionMatcher : matcher) { + def = tagValueDefinitionMatcher.match(tagValueName); + if (def != null) { + break; + } + } + return def; + } + + protected void addDefinition(String name, TagValueDefinition def) { + definition.put(name, def); + } + + protected void addAllDefinition(TagValueDefinitionProvider provider) { + definition.putAll(provider.definition); + } + + protected void addDeprecated(String name) { + deprecated.add(name); + } + + protected void addAllDeprecated(TagValueDefinitionProvider provider) { + deprecated.addAll(provider.deprecated); + } + + protected void addMatcher(TagValueDefinitionMatcher matcher) { + this.matcher.add(matcher); + } + + protected void scanClass(Class<?> holder) throws IllegalAccessException { + if (isVerbose()) { + log.info("Will scan " + holder.getName() + " to search some tag value definitions..."); + } + Field[] fields = holder.getDeclaredFields(); + for (Field field : fields) { + + TagValueDefinition tagValueDefinition = + field.getAnnotation(TagValueDefinition.class); + if (tagValueDefinition != null) { + String fieldName = field.getName(); + String tagValueName = (String) field.get(null); + if (isVerbose()) { + log.info("Detected tag value definition [" + fieldName + ":" + tagValueName + "] : " + Arrays.toString(tagValueDefinition.target())); + } + addDefinition(tagValueName, tagValueDefinition); + if (field.isAnnotationPresent(Deprecated.class)) { + addDeprecated(tagValueName); + } + } + } + } + + protected void initMatcher() { + + { + Map<String, TagValueDefinition> tagValueDefinitionForMatcher = getDefinitionForMatcher(EqualsTagValueNameMatcher.class); + addMatcher(new EqualsTagValueNameMatcher(tagValueDefinitionForMatcher)); + } + + { + Map<String, TagValueDefinition> tagValueDefinitionForMatcher = getDefinitionForMatcher(StartsWithTagNameMatcher.class); + addMatcher(new StartsWithTagNameMatcher(tagValueDefinitionForMatcher)); + } + } + + protected <M extends TagValueDefinitionMatcher> Map<String, TagValueDefinition> getDefinitionForMatcher(Class<M> matcherType) { + Map<String, TagValueDefinition> result = new TreeMap<String, TagValueDefinition>(); + for (Map.Entry<String, TagValueDefinition> entry : definition.entrySet()) { + if (matcherType.equals(entry.getValue().matcherClass())) { + result.put(entry.getKey(), entry.getValue()); + } + } + return result; + } +} Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinitionProvider.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinitionProviders.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinitionProviders.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinitionProviders.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,82 @@ +package org.nuiton.eugene.models.tagvalue; + +/* + * #%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 org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Created on 4/27/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public class TagValueDefinitionProviders { + + /** Logger. */ + private static final Log log = LogFactory.getLog(TagValueDefinitionProviders.class); + + /** + * Obtain a new provider of tag value definitions. + * + * @param loader the classloader to use (if none given will use the one of the current thread) + * @param verbose verbose flag + * @return the aggregate provider of tag value definitions detected in the class-path + */ + public static TagValueDefinitionProvider newProvider(ClassLoader loader, boolean verbose) { + + if (loader == null) { + + // use the current thread loader + loader = Thread.currentThread().getContextClassLoader(); + } + + TagValueDefinitionProvider store = new AggregateTagValueDefinitionProvider(loader); + store.setVerbose(verbose || log.isDebugEnabled()); + try { + store.init(); + } catch (Exception e) { + throw new RuntimeException("Could not init tag value definition provider", e); + } + return store; + } + + /** + * Obtain a new provider of tag value definitions. + * + * @param providers the list of providers to use in the factory + * @param verbose verbose flag + * @return the aggregate provider of tag value definitions detected in the class-path + */ + public static TagValueDefinitionProvider newProvider(Iterable<TagValueDefinitionProvider> providers, boolean verbose) { + + TagValueDefinitionProvider store = new AggregateTagValueDefinitionProvider(providers); + store.setVerbose(verbose || log.isDebugEnabled()); + try { + store.init(); + } catch (Exception e) { + throw new RuntimeException("Could not init tag value definition provider", e); + } + return store; + } +} Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueDefinitionProviders.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Copied: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueNotFoundException.java (from rev 1344, trunk/eugene/src/main/java/org/nuiton/eugene/metas/TagValueNotFoundException.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueNotFoundException.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValueNotFoundException.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,33 @@ +package org.nuiton.eugene.models.tagvalue; + +/* + * #%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/26/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public class TagValueNotFoundException extends Exception { + private static final long serialVersionUID = 1L; +} Copied: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValues.java (from rev 1342, trunk/eugene/src/main/java/org/nuiton/eugene/metas/TagValues.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValues.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/TagValues.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,113 @@ +package org.nuiton.eugene.models.tagvalue; + +/* + * #%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 org.apache.commons.lang3.StringUtils; +import org.nuiton.eugene.models.object.ObjectModelElement; + +/** + * Created on 4/26/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public class TagValues { + + /** + * Seek for a boolean tag value. + * <p/> + * Will first the tag value using the method {@link #findTagValue(String, TagValueAble...)}. + * <p/> + * If found, return {@code true}, if the value is not null and is {@code "true"} String value. + * <p/> + * <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 tagName tag name to find + * @param elements not null elements to test + * @return found boolean tag value or {@code false} if tag value is not found, nor having + * exactly {@code "true"} value. + * @since 2.9 + */ + public static boolean findBooleanTagValue(String tagName, TagValueAble... elements) { + + String value = findTagValue(tagName, elements); + return value != null && "true".equals(value); + + } + + /** + * Seek for a tag value amoung elements given using these rules: + * <ul> + * <li>Look into {@code elements} and return the first not empty tag value 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 + * value found.</li> + * <li>If not found return {@code null}</li> + * </ul> + * <p/> + * <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 tagName tag name to find + * @param elements not null elements to test + * @return found tag value or {@code null} if not found + * @since 2.9 + */ + public static String findTagValue(String tagName, TagValueAble... elements) { + + for (TagValueAble element : elements) { + String value = findNotEmptyTagValue(tagName, element); + if (value != null) { + return value; + } + } + + for (TagValueAble element : elements) { + if (element instanceof ObjectModelElement) { + // try in declaring element + ObjectModelElement declaringElement = ((ObjectModelElement) element).getDeclaringElement(); + if (declaringElement != null) { + String value = findNotEmptyTagValue(tagName, declaringElement); + if (value != null) { + return value; + } + } + } + } + return null; + + } + + public static String findNotEmptyTagValue(String tagName, TagValueAble element) { + String value = element.getTagValue(tagName); + if (StringUtils.isEmpty(value)) { + value = null; + } + return value; + + } + +} Copied: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher/EqualsTagValueNameMatcher.java (from rev 1345, trunk/eugene/src/main/java/org/nuiton/eugene/metas/matcher/DefaultTagValueMatcher.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher/EqualsTagValueNameMatcher.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher/EqualsTagValueNameMatcher.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,45 @@ +package org.nuiton.eugene.models.tagvalue.matcher; + +/* + * #%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 org.nuiton.eugene.models.tagvalue.TagValueDefinition; + +import java.util.Map; + +/** + * Created on 4/26/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public class EqualsTagValueNameMatcher extends TagValueDefinitionMatcher { + + public EqualsTagValueNameMatcher(Map<String, TagValueDefinition> tagValueDefinitionMap) { + super(tagValueDefinitionMap); + } + + @Override + protected boolean accept(String tagValueName, Map.Entry<String, TagValueDefinition> entry) { + return entry.getKey().equals(tagValueName); + } +} Copied: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher/StartsWithTagNameMatcher.java (from rev 1345, trunk/eugene/src/main/java/org/nuiton/eugene/metas/matcher/PrefixTagNameMatchTagValueMatcher.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher/StartsWithTagNameMatcher.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher/StartsWithTagNameMatcher.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,46 @@ +package org.nuiton.eugene.models.tagvalue.matcher; + +/* + * #%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 org.nuiton.eugene.models.tagvalue.TagValueDefinition; + +import java.util.Map; + +/** + * Created on 4/26/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public class StartsWithTagNameMatcher extends TagValueDefinitionMatcher { + + public StartsWithTagNameMatcher(Map<String, TagValueDefinition> tagValueDefinitionMap) { + super(tagValueDefinitionMap); + } + + @Override + protected boolean accept(String tagValueName, Map.Entry<String, TagValueDefinition> entry) { + return tagValueName.startsWith(entry.getKey()); + } + +} Copied: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher/TagValueDefinitionMatcher.java (from rev 1345, trunk/eugene/src/main/java/org/nuiton/eugene/metas/matcher/TagValueMatcher.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher/TagValueDefinitionMatcher.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/matcher/TagValueDefinitionMatcher.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,60 @@ +package org.nuiton.eugene.models.tagvalue.matcher; + +/* + * #%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.collect.ImmutableMap; +import org.nuiton.eugene.models.tagvalue.TagValueDefinition; + +import java.util.Map; + +/** + * To match a Tag value name. + * <p/> + * Created on 4/26/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public abstract class TagValueDefinitionMatcher { + + protected Map<String, TagValueDefinition> tagValueDefinitionMap; + + public TagValueDefinitionMatcher(Map<String, TagValueDefinition> tagValueDefinitionMap) { + this.tagValueDefinitionMap = ImmutableMap.<String, TagValueDefinition>builder().putAll(tagValueDefinitionMap).build(); + } + + public TagValueDefinition match(String tagValueName) { + TagValueDefinition tagValueDefinition = null; + for (Map.Entry<String, TagValueDefinition> entry : tagValueDefinitionMap.entrySet()) { + if (accept(tagValueName, entry)) { + // found tag value definition + tagValueDefinition = entry.getValue(); + break; + } + } + return tagValueDefinition; + } + + protected abstract boolean accept(String tagValueName, Map.Entry<String, TagValueDefinition> entry); + +} Added: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/package-info.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/package-info.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/package-info.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,34 @@ +/* + * #%L + * EUGene :: EUGene + * * + * $Id$ + * $HeadURL: https://nuiton.org/svn/eugene/trunk/eugene/src/main/java/org/nuiton/eugene/p... $ + * %% + * Copyright (C) 2004 - 2010 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% + */ + +/** + * This package contains tag value API. + * + * <strong>Note:</strong> Replace the deprecated class {@link org.nuiton.eugene.ModelPropertiesUtil}. + * + * @since 2.9 + */ +package org.nuiton.eugene.models.tagvalue; + Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/models/tagvalue/package-info.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Deleted: trunk/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.metas.ModelPropertiesProvider =================================================================== --- trunk/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.metas.ModelPropertiesProvider 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.metas.ModelPropertiesProvider 2014-04-27 12:17:19 UTC (rev 1346) @@ -1 +0,0 @@ -org.nuiton.eugene.EugeneModelPropertiesProvider \ No newline at end of file Added: trunk/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider =================================================================== --- trunk/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider (rev 0) +++ trunk/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1 @@ +org.nuiton.eugene.EugeneStereoTypes \ No newline at end of file Added: trunk/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider =================================================================== --- trunk/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider (rev 0) +++ trunk/eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1 @@ +org.nuiton.eugene.EugeneTagValues \ No newline at end of file Deleted: trunk/eugene/src/test/java/org/nuiton/eugene/EugeneModelPropertiesProviderTest.java =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/EugeneModelPropertiesProviderTest.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/test/java/org/nuiton/eugene/EugeneModelPropertiesProviderTest.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -1,168 +0,0 @@ -/* - * #%L - * EUGene :: EUGene - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2010 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% - */ -package org.nuiton.eugene; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.nuiton.eugene.metas.MismatchTagValueTargetException; -import org.nuiton.eugene.metas.ModelPropertiesProvider; -import org.nuiton.eugene.metas.TagValueNotFoundException; -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; - -/** - * To test {@link EugeneModelPropertiesProvider}. - * - * @author tchemit <chemit@codelutin.com> - * @since 2.3 - */ -public class EugeneModelPropertiesProviderTest { - - protected ModelPropertiesProvider provider; - - @Before - public void setUp() throws Exception { - provider = new EugeneModelPropertiesProvider(); - provider.init(); - } - - @Test - public void getTagValueTarget() throws Exception { - getTagValueTarget(EugeneTagValues.TAG_CONSTANT_PREFIX, ObjectModel.class, ObjectModelClassifier.class); - getTagValueTarget(EugeneTagValues.TAG_I18N_PREFIX, ObjectModel.class, ObjectModelClassifier.class); - getTagValueTarget(EugeneTagValues.TAG_VERSION, ObjectModel.class); - } - - @Test - public void containsTagValue() throws Exception { - containsTagValue(EugeneTagValues.TAG_CONSTANT_PREFIX, true); - containsTagValue(EugeneTagValues.TAG_I18N_PREFIX, true); - containsTagValue(EugeneTagValues.TAG_VERSION, true); - - long l = System.nanoTime(); - containsTagValue(EugeneTagValues.TAG_CONSTANT_PREFIX + l, false); - containsTagValue(EugeneTagValues.TAG_I18N_PREFIX + l, false); - containsTagValue(EugeneTagValues.TAG_VERSION + l, false); - } - - @Test - public void acceptTagValue() throws Exception { - acceptTagValue(EugeneTagValues.TAG_CONSTANT_PREFIX, true, ObjectModel.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); - acceptTagValue(EugeneTagValues.TAG_I18N_PREFIX, true, ObjectModel.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); - acceptTagValue(EugeneTagValues.TAG_VERSION, true, ObjectModel.class); - - acceptTagValue(EugeneTagValues.TAG_CONSTANT_PREFIX, false, ObjectModelOperation.class, ObjectModelAttribute.class); - acceptTagValue(EugeneTagValues.TAG_I18N_PREFIX, false, ObjectModelOperation.class, ObjectModelAttribute.class); - acceptTagValue(EugeneTagValues.TAG_VERSION, false, ObjectModelClassifier.class, ObjectModelOperation.class, ObjectModelAttribute.class); - - long l = System.nanoTime(); - acceptTagValue(EugeneTagValues.TAG_CONSTANT_PREFIX + l, false, ObjectModelOperation.class, ObjectModelAttribute.class); - acceptTagValue(EugeneTagValues.TAG_I18N_PREFIX + l, false, ObjectModelOperation.class, ObjectModelAttribute.class); - acceptTagValue(EugeneTagValues.TAG_VERSION + l, false, ObjectModelClassifier.class, ObjectModelOperation.class, ObjectModelAttribute.class); - } - - @Test - public void getStereotypeTarget() throws Exception { - - getStereotypeTarget(EugeneStereoTypes.STEREOTYPE_INDEXED, ObjectModelAttribute.class); - } - - @Test - public void containsStereotype() throws Exception { - containsStereotype(EugeneStereoTypes.STEREOTYPE_INDEXED, true); - - long l = System.nanoTime(); - containsStereotype(EugeneStereoTypes.STEREOTYPE_INDEXED + l, false); - } - - @Test - public void acceptStereotype() throws Exception { - - acceptStereotype(EugeneStereoTypes.STEREOTYPE_INDEXED, true, ObjectModelAttribute.class); - - acceptStereotype(EugeneStereoTypes.STEREOTYPE_INDEXED, false, ObjectModel.class, ObjectModelOperation.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class, ObjectModelInterface.class); - - long l = System.nanoTime(); - acceptStereotype(EugeneStereoTypes.STEREOTYPE_INDEXED + l, false, ObjectModel.class, ObjectModelOperation.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class, ObjectModelInterface.class); - - } - - protected void getTagValueTarget(String name, Class<?>... expected) { - Class<?>[] classes = provider.getTagValueTarget(name); - Assert.assertNotNull("Could not find target for " + name, classes); - Assert.assertEquals("Should have " + expected.length + " targets for " + name + " but had " + classes.length, classes.length, expected.length); - Assert.assertArrayEquals(expected, classes); - } - - protected void containsTagValue(String name, boolean expected) { - try { - provider.acceptTagValue(name, Object.class); - Assert.assertTrue(expected); - } catch (TagValueNotFoundException e) { - Assert.assertFalse(expected); - } catch (MismatchTagValueTargetException e) { - // dont care - } - - } - - protected void acceptTagValue(String name, boolean expected, Class<?>... types) { - for (Class<?> type : types) { - try { - provider.acceptTagValue(name, type); - Assert.assertTrue(expected); - } catch (TagValueNotFoundException e) { - Assert.assertFalse(expected); - } catch (MismatchTagValueTargetException e) { - Assert.assertFalse(expected); - } - } - } - - protected void getStereotypeTarget(String name, Class<?>... expected) { - Class<?>[] classes = provider.getStereotypeTarget(name); - Assert.assertNotNull("Could not find target for " + name, classes); - Assert.assertEquals("Should have " + expected.length + " targets for " + name + " but had " + classes.length, classes.length, expected.length); - Assert.assertArrayEquals(expected, classes); - } - - protected void containsStereotype(String name, boolean expected) { - boolean classes = provider.containsStereotype(name); - Assert.assertEquals(expected, classes); - } - - protected void acceptStereotype(String name, boolean expected, Class<?>... types) { - for (Class<?> type : types) { - boolean actual = provider.acceptStereotype(name, type); - Assert.assertEquals(expected, actual); - } - } -} Added: trunk/eugene/src/test/java/org/nuiton/eugene/EugeneStereotypesTest.java =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/EugeneStereotypesTest.java (rev 0) +++ trunk/eugene/src/test/java/org/nuiton/eugene/EugeneStereotypesTest.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,73 @@ +package org.nuiton.eugene; + +/* + * #%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 org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelEnumeration; +import org.nuiton.eugene.models.object.ObjectModelInterface; +import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.eugene.models.stereotype.MismatchStereotypeTargetException; +import org.nuiton.eugene.models.stereotype.StereotypeNotFoundException; + +public class EugeneStereotypesTest { + + protected EugeneStereoTypes provider; + + @Before + public void setUp() throws Exception { + provider = new EugeneStereoTypes(); + provider.init(); + } + + @Test + public void validate() throws Exception { + + validate(EugeneStereoTypes.STEREOTYPE_INDEXED, true, ObjectModelAttribute.class); + + validate(EugeneStereoTypes.STEREOTYPE_INDEXED, false, ObjectModel.class, ObjectModelOperation.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class, ObjectModelInterface.class); + + long l = System.nanoTime(); + validate(EugeneStereoTypes.STEREOTYPE_INDEXED + 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 e) { + Assert.assertFalse(expected); + } catch (MismatchStereotypeTargetException e) { + Assert.assertFalse(expected); + } + } + } + +} \ No newline at end of file Property changes on: trunk/eugene/src/test/java/org/nuiton/eugene/EugeneStereotypesTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/eugene/src/test/java/org/nuiton/eugene/EugeneTagValuesTest.java =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/EugeneTagValuesTest.java (rev 0) +++ trunk/eugene/src/test/java/org/nuiton/eugene/EugeneTagValuesTest.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,76 @@ +package org.nuiton.eugene; + +/* + * #%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 org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelEnumeration; +import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.eugene.models.tagvalue.MismatchTagValueTargetException; +import org.nuiton.eugene.models.tagvalue.TagValueNotFoundException; + +public class EugeneTagValuesTest { + + protected EugeneTagValues provider; + + @Before + public void setUp() throws Exception { + provider = new EugeneTagValues(); + provider.init(); + } + + @Test + public void validate() throws Exception { + validate(EugeneTagValues.TAG_CONSTANT_PREFIX, true, ObjectModel.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); + validate(EugeneTagValues.TAG_I18N_PREFIX, true, ObjectModel.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); + validate(EugeneTagValues.TAG_VERSION, true, ObjectModel.class); + + validate(EugeneTagValues.TAG_CONSTANT_PREFIX, false, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(EugeneTagValues.TAG_I18N_PREFIX, false, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(EugeneTagValues.TAG_VERSION, false, ObjectModelClassifier.class, ObjectModelOperation.class, ObjectModelAttribute.class); + + long l = System.nanoTime(); + validate(EugeneTagValues.TAG_CONSTANT_PREFIX + l, false, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(EugeneTagValues.TAG_I18N_PREFIX + l, false, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(EugeneTagValues.TAG_VERSION + l, false, ObjectModelClassifier.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 (TagValueNotFoundException e) { + Assert.assertFalse(expected); + } catch (MismatchTagValueTargetException e) { + Assert.assertFalse(expected); + } + } + } +} \ No newline at end of file Property changes on: trunk/eugene/src/test/java/org/nuiton/eugene/EugeneTagValuesTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI21ToObjectModelTest.java =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI21ToObjectModelTest.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI21ToObjectModelTest.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -28,7 +28,7 @@ import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; -import org.nuiton.eugene.GeneratorUtil; +import org.nuiton.eugene.EugeneTagValues; import org.nuiton.eugene.TestHelper; import org.nuiton.eugene.models.object.reader.XmlObjectModelReader; import org.nuiton.util.FileUtil; @@ -98,7 +98,7 @@ File result = new File(destinationDirectory, outModel); Transformer transformer = factory.newTransformer(new StreamSource(xsl - .openStream())); + .openStream())); String basePath = xmiFile.getParent(); transformer.setURIResolver(new ResourceResolver(basePath)); @@ -142,7 +142,7 @@ */ protected ObjectModel xmiToObjectModel(String modelName) throws URISyntaxException, IOException, TransformerException { File xmiFile = new File(Resource.getURL("xmi/2.1/" + modelName + ".uml") - .toURI()); + .toURI()); File objectModelFile = transformXMI(xmiFile, modelName + ".objectmodel"); @@ -555,7 +555,7 @@ assertNotNull(model); assertEquals("XMITest21", model.getName()); - assertEquals("model doc!", GeneratorUtil.getDocumentationTagValue(model)); + assertEquals("model doc!", EugeneTagValues.getDocumentationTagValue(model)); // ClassC ObjectModelClass clazzC = model.getClass("org.nuiton.eugene.test21.ClassC"); Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java =================================================================== --- trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -29,6 +29,7 @@ /*{generator option: writeString = +}*/ import org.apache.commons.lang3.StringUtils; +import org.nuiton.eugene.EugeneTagValues; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelClassifier; @@ -690,7 +691,7 @@ protected void generateI18nBlockAndConstants(ObjectModelClass input, ObjectModelClassifier output) { - String i18nPrefix = JavaGeneratorUtil.getI18nPrefixTagValue(input, model); + String i18nPrefix = EugeneTagValues.getI18nPrefixTagValue(input, model); if (!StringUtils.isEmpty(i18nPrefix)) { generateI18nBlock(input, output, i18nPrefix); } Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java =================================================================== --- trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -25,9 +25,9 @@ package org.nuiton.eugene.java; import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.EugeneTagValues; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelJavaModifier; @@ -48,7 +48,7 @@ * Since version 2.2.1, it is possible to * <ul> * <li>generate a simple POJO (says with no PCS support) by using the tag value {@link JavaTemplatesTagValues#TAG_NO_PCS}.</li> - * <li>generate i18n keys using the tag value {@link JavaTemplatesTagValues#TAG_I18N_PREFIX}.</li> + * <li>generate i18n keys using the tag value {@link EugeneTagValues#TAG_I18N_PREFIX}.</li> * </ul> * * @author tchemit <chemit@codelutin.com> @@ -62,7 +62,7 @@ @Override public void transformFromClass(ObjectModelClass input) { - if (!JavaTemplatesGeneratorUtil.hasBeanStereotype(input)) { + if (!JavaTemplatesStereoTypes.hasBeanStereotype(input)) { // not a bean return; @@ -145,7 +145,7 @@ Collection<ObjectModelClass> superclasses = input.getSuperclasses(); if (CollectionUtils.isNotEmpty(superclasses)) { for (ObjectModelClass superclass : superclasses) { - if (JavaTemplatesGeneratorUtil.hasBeanStereotype(superclass)) { + if (JavaTemplatesStereoTypes.hasBeanStereotype(superclass)) { superClassIsBean = true; break; } @@ -158,8 +158,8 @@ // try to find a super class by tag-value superClass = - JavaTemplatesGeneratorUtil.getBeanSuperClassTagValue( - model, input); + JavaTemplatesTagValues.getBeanSuperClassTagValue( + input, model); if (superClass != null) { // will act as if super class is a bean @@ -189,10 +189,10 @@ generateI18nBlockAndConstants(input, output); - boolean usePCS = !JavaTemplatesGeneratorUtil.isNoPCS(model, input); + boolean usePCS = !JavaTemplatesTagValues.isNoPCS(input, model); boolean generateBooleanGetMethods = ! - JavaTemplatesGeneratorUtil.isDoNotGenerateBooleanGetMethods(model, input); + EugeneTagValues.isDoNotGenerateBooleanGetMethods(input, model); // boolean generateBooleanGetMethods = // StringUtils.isEmpty(noGenerateBooleanGetMethods) || // !"true".equals(noGenerateBooleanGetMethods.trim()); Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaEnumerationTransformer.java =================================================================== --- trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaEnumerationTransformer.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaEnumerationTransformer.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -30,6 +30,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.EugeneStereoTypes; import org.nuiton.eugene.models.object.ObjectModelEnumeration; import java.util.Collection; @@ -72,7 +73,7 @@ } protected boolean canGenerate(ObjectModelEnumeration input) { - boolean b = !JavaTemplatesGeneratorUtil.hasSkipStereotype(input); + boolean b = !EugeneStereoTypes.hasSkipStereotype(input); if (b) { // check if not found in class-path Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesGeneratorUtil.java =================================================================== --- trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesGeneratorUtil.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesGeneratorUtil.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -24,8 +24,6 @@ * #L% */ -import org.apache.commons.lang3.StringUtils; -import org.nuiton.eugene.metas.TagValues; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelClassifier; @@ -44,9 +42,11 @@ * @param classifier classifier to test * @return {@code true} if stereotype was found, {@code false otherwise} * @see JavaTemplatesStereoTypes#STEREOTYPE_BEAN + * @deprecated since 2.9, use now {@link JavaTemplatesStereoTypes#hasBeanStereotype(ObjectModelClassifier)} */ + @Deprecated public static boolean hasBeanStereotype(ObjectModelClassifier classifier) { - return classifier.hasStereotype(JavaTemplatesStereoTypes.STEREOTYPE_BEAN); + return JavaTemplatesStereoTypes.hasBeanStereotype(classifier); } /** @@ -60,11 +60,12 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_NO_PCS * @since 2.3 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#isNoPCS(ObjectModelClassifier, ObjectModel)} */ public static boolean isNoPCS(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(JavaTemplatesTagValues.TAG_NO_PCS, classifier, model); // return value != null && "true".equals(value); - boolean value = TagValues.findBooleanTagValue(JavaTemplatesTagValues.TAG_NO_PCS, classifier, model); + boolean value = JavaTemplatesTagValues.isNoPCS(classifier, model); return value; } @@ -79,10 +80,12 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_BEAN_SUPER_CLASS * @since 2.3 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#getBeanSuperClassTagValue(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static String getBeanSuperClassTagValue(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, classifier, model); - String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, classifier, model); + String value = JavaTemplatesTagValues.getBeanSuperClassTagValue(classifier, model); return value; } @@ -97,10 +100,12 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_SIMPLE_BEAN_SUPER_CLASS * @since 2.6.2 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#getSimpleBeanSuperClassTagValue(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static String getSimpleBeanSuperClassTagValue(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_SUPER_CLASS, classifier, model); - String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_SUPER_CLASS, classifier, model); + String value = JavaTemplatesTagValues.getSimpleBeanSuperClassTagValue(classifier, model); return value; } @@ -115,12 +120,14 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_SIMPLE_BEAN_GENERATE_INTERFACE * @since 2.3 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#isSimpleBeanGenerateInterface(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static boolean isSimpleBeanGenerateInterface(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_GENERATE_INTERFACE, classifier, model); // return value != null && "true".equals(value); - boolean value = TagValues.findBooleanTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_GENERATE_INTERFACE, classifier, model); - return value ; + boolean value = JavaTemplatesTagValues.isSimpleBeanGenerateInterface(classifier, model); + return value; } /** @@ -131,11 +138,13 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_SIMPLE_BEAN_GENERATE_FACTORY * @since 2.7.2 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#isSimpleBeanGenerateFactory(ObjectModel)} */ + @Deprecated public static boolean isSimpleBeanGenerateFactory(ObjectModel model) { // String value = findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_GENERATE_FACTORY, null, model); // return value != null && "true".equals(value); - boolean value = TagValues.findBooleanTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_GENERATE_FACTORY, model); + boolean value = JavaTemplatesTagValues.isSimpleBeanGenerateFactory(model); return value; } @@ -150,10 +159,12 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_SIMPLE_BEAN_INTERFACE_SUPER_CLASS * @since 2.6.2 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#getSimpleBeanInterfaceSuperClassTagValue(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static String getSimpleBeanInterfaceSuperClassTagValue(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_INTERFACE_SUPER_CLASS, classifier, model); - String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_INTERFACE_SUPER_CLASS, classifier, model); + String value = JavaTemplatesTagValues.getSimpleBeanInterfaceSuperClassTagValue(classifier, model); return value; } @@ -168,10 +179,12 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_SIMPLE_BEAN_CLASS_NAME_PREFIX * @since 2.6.2 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static String getSimpleBeanClassNamePrefixTagValue(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_CLASS_NAME_PREFIX, classifier, model); - String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_CLASS_NAME_PREFIX, classifier, model); + String value = JavaTemplatesTagValues.getSimpleBeanClassNamePrefixTagValue(classifier, model); return value; } @@ -186,10 +199,12 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_SIMPLE_BEAN_CLASS_NAME_SUFFIX * @since 2.6.2 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static String getSimpleBeanClassNameSuffixTagValue(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_CLASS_NAME_SUFFIX, classifier, model); - String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_CLASS_NAME_SUFFIX, classifier, model); + String value = JavaTemplatesTagValues.getSimpleBeanClassNameSuffixTagValue(classifier, model); return value; } @@ -204,10 +219,12 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_SIMPLE_BEAN_INTERFACE_NAME_PREFIX * @since 2.6.2 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#getSimpleBeanInterfaceNamePrefixTagValue(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static String getSimpleBeanInterfaceNamePrefixTagValue(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_INTERFACE_NAME_PREFIX, classifier, model); - String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_INTERFACE_NAME_PREFIX, classifier, model); + String value = JavaTemplatesTagValues.getSimpleBeanInterfaceNamePrefixTagValue(classifier, model); return value; } @@ -222,10 +239,12 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_SIMPLE_BEAN_INTERFACE_NAME_SUFFIX * @since 2.6.2 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#getSimpleBeanInterfaceNameSuffixTagValue(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static String getSimpleBeanInterfaceNameSuffixTagValue(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_INTERFACE_NAME_SUFFIX, classifier, model); - String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_INTERFACE_NAME_SUFFIX, classifier, model); + String value = JavaTemplatesTagValues.getSimpleBeanInterfaceNameSuffixTagValue(classifier, model); return value; } @@ -240,11 +259,13 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_SIMPLE_BEAN_GENERATE_DEFAULTS * @since 2.7.2 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#isSimpleBeanGenerateDefaults(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static boolean isSimpleBeanGenerateDefaults(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_GENERATE_DEFAULTS, classifier, model); // return value != null && "true".equals(value); - boolean value = TagValues.findBooleanTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_GENERATE_DEFAULTS, classifier, model); + boolean value = JavaTemplatesTagValues.isSimpleBeanGenerateDefaults(classifier, model); return value; } @@ -259,10 +280,12 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_SIMPLE_BEAN_DEFAULTS_SUPER_CLASS * @since 2.7.2 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#getSimpleBeanDefaultsSuperClassTagValue(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static String getSimpleBeanDefaultsSuperClassTagValue(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_DEFAULTS_SUPER_CLASS, classifier, model); - String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_DEFAULTS_SUPER_CLASS, classifier, model); + String value = JavaTemplatesTagValues.getSimpleBeanDefaultsSuperClassTagValue(classifier, model); return value; } @@ -277,10 +300,12 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_PREFIX * @since 2.7.2 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static String getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_PREFIX, classifier, model); - String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_PREFIX, classifier, model); + String value = JavaTemplatesTagValues.getSimpleBeanDefaultsClassNamePrefixTagValue(classifier, model); return value; } @@ -297,13 +322,12 @@ * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see JavaTemplatesTagValues#TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_SUFFIX * @since 2.6.2 + * @deprecated since 2.9, use now {@link JavaTemplatesTagValues#getSimpleBeanDefaultsClassNameSuffixTagValue(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static String getSimpleBeanDefaultsClassNameSuffixTagValue(ObjectModel model, ObjectModelClassifier classifier) { // String value = findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_SUFFIX, classifier, model); - String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_SUFFIX, classifier, model); - if (StringUtils.isBlank(value)) { - value = "s"; - } + String value = JavaTemplatesTagValues.getSimpleBeanDefaultsClassNameSuffixTagValue(classifier, model); return value; } } Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesModelPropertiesProvider.java =================================================================== --- trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesModelPropertiesProvider.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesModelPropertiesProvider.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -24,7 +24,7 @@ * #L% */ -import org.nuiton.eugene.metas.ModelPropertiesProvider; +import org.nuiton.eugene.ModelPropertiesUtil; /** * The Java templates provider of tag values and stereotypes. @@ -32,11 +32,13 @@ * @author tchemit <chemit@codelutin.com> * @plexus.component role="org.nuiton.eugene.metas.ModelPropertiesProvider" role-hint="java" * @since 2.5.6 + * @deprecated since 2.9, no more used (will be removed in version 3.0). Use now {@link JavaTemplatesStereoTypes} and {@link JavaTemplatesTagValues}. */ -public class JavaTemplatesModelPropertiesProvider extends ModelPropertiesProvider { +@Deprecated +public class JavaTemplatesModelPropertiesProvider extends ModelPropertiesUtil.ModelPropertiesProvider { @Override - public void initStores() throws IllegalAccessException { + public void init() throws IllegalAccessException { scanStereotypeClass(JavaTemplatesStereoTypes.class); scanTagValueClass(JavaTemplatesTagValues.class); } Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesStereoTypes.java =================================================================== --- trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesStereoTypes.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesStereoTypes.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -24,26 +24,39 @@ * #L% */ -import org.nuiton.eugene.EugeneStereoTypes; -import org.nuiton.eugene.metas.StereotypeDefinition; import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.stereotype.StereotypeDefinition; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; /** * Defines all stereotypes managed by Java templates. * * @author tchemit <chemit@codelutin.com> + * @plexus.component role="org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider" role-hint="javaTemplates" * @since 2.5.6 */ -public interface JavaTemplatesStereoTypes extends EugeneStereoTypes { +public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { /** * Stereotype for JavaBean objects to place on a classifier. * - * @see JavaTemplatesGeneratorUtil#hasBeanStereotype(ObjectModelClassifier) + * @see #hasBeanStereotype(ObjectModelClassifier) * @since 2.5.6 */ @StereotypeDefinition( target = ObjectModelClassifier.class, documentation = "To specify that a class is a JavaBean") - String STEREOTYPE_BEAN = "bean"; + public static final String STEREOTYPE_BEAN = "bean"; + + /** + * Check if the given classifier has the {@link #STEREOTYPE_BEAN} stereotype. + * + * @param classifier classifier to test + * @return {@code true} if stereotype was found, {@code false otherwise} + * @see #STEREOTYPE_BEAN + */ + public static boolean hasBeanStereotype(ObjectModelClassifier classifier) { + return classifier.hasStereotype(JavaTemplatesStereoTypes.STEREOTYPE_BEAN); + } + } Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java =================================================================== --- trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -24,25 +24,28 @@ * #L% */ -import org.nuiton.eugene.EugeneTagValues; -import org.nuiton.eugene.metas.TagValueDefinition; +import org.apache.commons.lang3.StringUtils; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.tagvalue.TagValueDefinition; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; +import org.nuiton.eugene.models.tagvalue.TagValues; /** * Defines all tag values managed by Java templates. * * @author tchemit <chemit@codelutin.com> + * @plexus.component role="org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider" role-hint="javaTemplates" * @since 2.5.6 */ -public interface JavaTemplatesTagValues extends EugeneTagValues { +public class JavaTemplatesTagValues extends TagValueDefinitionProvider { /** * Tag value to set if do not want any pcs (says PropertyChangeSupport in a generated bean). * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaTemplatesGeneratorUtil#isNoPCS(ObjectModel, ObjectModelClassifier) + * @see #isNoPCS(ObjectModelClassifier, ObjectModel) * @since 2.5.6 */ @TagValueDefinition( @@ -50,7 +53,7 @@ defaultValue = "true", documentation = "To specify to not generate any propertyChange " + "code for a class or any class of a model") - String TAG_NO_PCS = "noPCS"; + public static final String TAG_NO_PCS = "noPCS"; /** * Tag value to use a super class for generated bean. @@ -106,7 +109,7 @@ * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaTemplatesGeneratorUtil#getBeanSuperClassTagValue(ObjectModel, ObjectModelClassifier) + * @see #getBeanSuperClassTagValue(ObjectModelClassifier, ObjectModel) * @since 2.5.6 */ @TagValueDefinition( @@ -114,7 +117,7 @@ documentation = "To specify a super-class to used on generated bean " + "for a class or any class of a model.\n" + "(only effective with bean generator)") - String TAG_BEAN_SUPER_CLASS = "beanSuperClass"; + public static final String TAG_BEAN_SUPER_CLASS = "beanSuperClass"; /** * Tag value to use a super class for generated bean. @@ -170,7 +173,7 @@ * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaTemplatesGeneratorUtil#getSimpleBeanSuperClassTagValue(ObjectModel, ObjectModelClassifier) + * @see #getSimpleBeanSuperClassTagValue(ObjectModelClassifier, ObjectModel) * @since 2.5.6 */ @TagValueDefinition( @@ -178,14 +181,14 @@ documentation = "To specify a super-class to used on generated simple bean " + "for a class or any class of a model.\n" + "(only effective with simple bean generator)") - String TAG_SIMPLE_BEAN_SUPER_CLASS = "simpleBeanSuperClass"; + public static final String TAG_SIMPLE_BEAN_SUPER_CLASS = "simpleBeanSuperClass"; /** * To add a prefix on the name of each generated bean class. * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaTemplatesGeneratorUtil#getSimpleBeanClassNamePrefixTagValue(ObjectModel, ObjectModelClassifier) + * @see #getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier, ObjectModel) * @since 2.6.2 */ @TagValueDefinition( @@ -193,14 +196,14 @@ documentation = "To add a prefix on class name of generated bean " + "for a class or any class of a model.\n" + "(only effective with simple bean generator)") - String TAG_SIMPLE_BEAN_CLASS_NAME_PREFIX = "simpleBeanClassNamePrefix"; + public static final String TAG_SIMPLE_BEAN_CLASS_NAME_PREFIX = "simpleBeanClassNamePrefix"; /** * To add a prefix on the name of each generated bean class. * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaTemplatesGeneratorUtil#getSimpleBeanClassNameSuffixTagValue(ObjectModel, ObjectModelClassifier) + * @see #getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier, ObjectModel) * @since 2.6.2 */ @TagValueDefinition( @@ -208,14 +211,14 @@ documentation = "To add a suffix on class name of generated bean " + "for a class or any class of a model.\n" + "(only effective with simple bean generator)") - String TAG_SIMPLE_BEAN_CLASS_NAME_SUFFIX = "simpleBeanClassNameSuffix"; + public static final String TAG_SIMPLE_BEAN_CLASS_NAME_SUFFIX = "simpleBeanClassNameSuffix"; /** * To generate an interface of each simple bean. * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaTemplatesGeneratorUtil#isSimpleBeanGenerateInterface(ObjectModel, ObjectModelClassifier) + * @see #isSimpleBeanGenerateInterface(ObjectModelClassifier, ObjectModel) * @since 2.6.2 */ @TagValueDefinition( @@ -223,14 +226,14 @@ documentation = "To generate an interface for each bean " + "for a class or any class of a model.\n" + "(only effective with simple bean generator)") - String TAG_SIMPLE_BEAN_GENERATE_INTERFACE = "simpleBeanGenerateInterface"; + public static final String TAG_SIMPLE_BEAN_GENERATE_INTERFACE = "simpleBeanGenerateInterface"; /** * Tag value to use a super interface for generated interfaces on simple bean. * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaTemplatesGeneratorUtil#getSimpleBeanInterfaceSuperClassTagValue(ObjectModel, ObjectModelClassifier) + * @see #getSimpleBeanInterfaceSuperClassTagValue(ObjectModelClassifier, ObjectModel) * @since 2.6.2 */ @TagValueDefinition( @@ -238,14 +241,14 @@ documentation = "To specify a super-class to used on generated interfaces " + "for a class or any class of a model.\n" + "(only effective with simple bean generator)") - String TAG_SIMPLE_BEAN_INTERFACE_SUPER_CLASS = "simpleBeanInterfaceSuperClass"; + public static final String TAG_SIMPLE_BEAN_INTERFACE_SUPER_CLASS = "simpleBeanInterfaceSuperClass"; /** * To add a prefix on the name of each generated interface of a simple bean. * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaTemplatesGeneratorUtil#getSimpleBeanInterfaceNamePrefixTagValue(ObjectModel, ObjectModelClassifier) + * @see #getSimpleBeanInterfaceNamePrefixTagValue(ObjectModelClassifier, ObjectModel) * @since 2.6.2 */ @TagValueDefinition( @@ -253,14 +256,14 @@ documentation = "To add a prefix on interface name of generated bean " + "for a class or any class of a model.\n" + "(only effective with simple bean generator)") - String TAG_SIMPLE_BEAN_INTERFACE_NAME_PREFIX = "simpleBeanInterfaceNamePrefix"; + public static final String TAG_SIMPLE_BEAN_INTERFACE_NAME_PREFIX = "simpleBeanInterfaceNamePrefix"; /** * To add a prefix on the name of each generated interface of a simple bean. * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaTemplatesGeneratorUtil#getSimpleBeanInterfaceNameSuffixTagValue(ObjectModel, ObjectModelClassifier) + * @see #getSimpleBeanInterfaceNameSuffixTagValue(ObjectModelClassifier, ObjectModel) * @since 2.6.2 */ @TagValueDefinition( @@ -268,35 +271,35 @@ documentation = "To add a suffix on interface name of generated bean " + "for a class or any class of a model.\n" + "(only effective with simple bean generator)") - String TAG_SIMPLE_BEAN_INTERFACE_NAME_SUFFIX = "simpleBeanInterfaceNameSuffix"; + public static final String TAG_SIMPLE_BEAN_INTERFACE_NAME_SUFFIX = "simpleBeanInterfaceNameSuffix"; /** * To generate a factory of generated simple beans. * <p/> * You must use it on the complete model. * - * @see JavaTemplatesGeneratorUtil#isSimpleBeanGenerateFactory(ObjectModel) + * @see #isSimpleBeanGenerateFactory(ObjectModel) * @since 2.6.2 */ @TagValueDefinition( target = {ObjectModel.class}, documentation = "To generate a factory of simple bean.\n" + "(only effective with simple bean generator)") - String TAG_SIMPLE_BEAN_GENERATE_FACTORY = "simpleBeanGenerateFactory"; + public static final String TAG_SIMPLE_BEAN_GENERATE_FACTORY = "simpleBeanGenerateFactory"; /** * To generate a factory of generated simple beans. * <p/> * You must use it on the complete model. * - * @see JavaTemplatesGeneratorUtil#isSimpleBeanGenerateDefaults(ObjectModel, ObjectModelClassifier) + * @see #isSimpleBeanGenerateDefaults(ObjectModelClassifier, ObjectModel) * @since 2.7.2 */ @TagValueDefinition( target = {ObjectModel.class, ObjectModelClassifier.class}, documentation = "To generate defaults class with simple operations on the type.\n" + "(only effective with simple bean generator)") - String TAG_SIMPLE_BEAN_GENERATE_DEFAULTS = "simpleBeanGenerateDefaults"; + public static final String TAG_SIMPLE_BEAN_GENERATE_DEFAULTS = "simpleBeanGenerateDefaults"; /** * Tag value to use a super super-class for generated defaults class of a @@ -304,7 +307,7 @@ * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaTemplatesGeneratorUtil#getSimpleBeanDefaultsSuperClassTagValue(ObjectModel, ObjectModelClassifier) + * @see #getSimpleBeanDefaultsSuperClassTagValue(ObjectModelClassifier, ObjectModel) * @since 2.7.2 */ @TagValueDefinition( @@ -312,14 +315,14 @@ documentation = "To specify a super-class to used on generated defaults classes" + "for a bean or any bean of a model.\n" + "(only effective with simple bean generator)") - String TAG_SIMPLE_BEAN_DEFAULTS_SUPER_CLASS = "simpleBeanDefaultsSuperClass"; + public static final String TAG_SIMPLE_BEAN_DEFAULTS_SUPER_CLASS = "simpleBeanDefaultsSuperClass"; /** * To add a prefix on the name of each generated bean class. * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaTemplatesGeneratorUtil#getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModel, ObjectModelClassifier) + * @see #getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModelClassifier, ObjectModel) * @since 2.7.2 */ @TagValueDefinition( @@ -327,14 +330,14 @@ documentation = "To add a prefix on class name of generated defaults bean " + "for a class or any class of a model.\n" + "(only effective with simple bean generator)") - String TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_PREFIX = "simpleBeanDefaultsClassNamePrefix"; + public static final String TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_PREFIX = "simpleBeanDefaultsClassNamePrefix"; /** * To add a suffix on the name of each generated bean class. * <p/> * You can globaly use it on the complete model or to a specific classifier. * - * @see JavaTemplatesGeneratorUtil#getSimpleBeanDefaultsClassNameSuffixTagValue(ObjectModel, ObjectModelClassifier) + * @see #getSimpleBeanDefaultsClassNameSuffixTagValue(ObjectModelClassifier, ObjectModel) * @since 2.6.2 */ @TagValueDefinition( @@ -342,7 +345,232 @@ documentation = "To add a suffix on class name of generated defaults bean " + "for a class or any class of a model.\n" + "(only effective with simple bean generator)") - String TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_SUFFIX = "simpleBeanDefaultsClassNameSuffix"; + public static final String TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_SUFFIX = "simpleBeanDefaultsClassNameSuffix"; + /** + * Obtain the value of the {@link #TAG_NO_PCS} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_NO_PCS + * @since 2.3 + */ + public static boolean isNoPCS(ObjectModelClassifier classifier, ObjectModel model) { + boolean value = TagValues.findBooleanTagValue(JavaTemplatesTagValues.TAG_NO_PCS, classifier, model); + return value; + } + /** + * Obtain the value of the {@link #TAG_BEAN_SUPER_CLASS} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_BEAN_SUPER_CLASS + * @since 2.3 + */ + public static String getBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModel model) { + String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, classifier, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_SIMPLE_BEAN_SUPER_CLASS} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_SIMPLE_BEAN_SUPER_CLASS + * @since 2.6.2 + */ + public static String getSimpleBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModel model) { + String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_SUPER_CLASS, classifier, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_SIMPLE_BEAN_GENERATE_INTERFACE} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_SIMPLE_BEAN_GENERATE_INTERFACE + * @since 2.3 + */ + public static boolean isSimpleBeanGenerateInterface(ObjectModelClassifier classifier, ObjectModel model) { + boolean value = TagValues.findBooleanTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_GENERATE_INTERFACE, classifier, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_SIMPLE_BEAN_GENERATE_FACTORY} tag value on the given model or classifier. + * + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_SIMPLE_BEAN_GENERATE_FACTORY + * @since 2.7.2 + */ + public static boolean isSimpleBeanGenerateFactory(ObjectModel model) { + boolean value = TagValues.findBooleanTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_GENERATE_FACTORY, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_SIMPLE_BEAN_INTERFACE_SUPER_CLASS} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_SIMPLE_BEAN_INTERFACE_SUPER_CLASS + * @since 2.6.2 + */ + public static String getSimpleBeanInterfaceSuperClassTagValue(ObjectModelClassifier classifier, ObjectModel model) { + String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_INTERFACE_SUPER_CLASS, classifier, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_SIMPLE_BEAN_CLASS_NAME_PREFIX} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_SIMPLE_BEAN_CLASS_NAME_PREFIX + * @since 2.6.2 + */ + public static String getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModel model) { + String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_CLASS_NAME_PREFIX, classifier, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_SIMPLE_BEAN_CLASS_NAME_SUFFIX} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_SIMPLE_BEAN_CLASS_NAME_SUFFIX + * @since 2.6.2 + */ + public static String getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModel model) { + String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_CLASS_NAME_SUFFIX, classifier, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_SIMPLE_BEAN_INTERFACE_NAME_PREFIX} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_SIMPLE_BEAN_INTERFACE_NAME_PREFIX + * @since 2.6.2 + */ + public static String getSimpleBeanInterfaceNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModel model) { + String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_INTERFACE_NAME_PREFIX, classifier, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_SIMPLE_BEAN_INTERFACE_NAME_SUFFIX} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_SIMPLE_BEAN_INTERFACE_NAME_SUFFIX + * @since 2.6.2 + */ + public static String getSimpleBeanInterfaceNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModel model) { + String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_INTERFACE_NAME_SUFFIX, classifier, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_SIMPLE_BEAN_GENERATE_DEFAULTS} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_SIMPLE_BEAN_GENERATE_DEFAULTS + * @since 2.7.2 + */ + public static boolean isSimpleBeanGenerateDefaults(ObjectModelClassifier classifier, ObjectModel model) { + boolean value = TagValues.findBooleanTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_GENERATE_DEFAULTS, classifier, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_SIMPLE_BEAN_DEFAULTS_SUPER_CLASS} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_SIMPLE_BEAN_DEFAULTS_SUPER_CLASS + * @since 2.7.2 + */ + public static String getSimpleBeanDefaultsSuperClassTagValue(ObjectModelClassifier classifier, ObjectModel model) { + String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_DEFAULTS_SUPER_CLASS, classifier, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_PREFIX} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_PREFIX + * @since 2.7.2 + */ + public static String getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModel model) { + String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_PREFIX, classifier, model); + return value; + } + + /** + * Obtain the value of the {@link #TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_SUFFIX} tag value on the given model or classifier. + * <p/> + * It will first look on the model, and then in the given classifier. + * <p/> + * <strong>If not filled, then use default {@code s} value.</strong> + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see #TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_SUFFIX + * @since 2.6.2 + */ + public static String getSimpleBeanDefaultsClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModel model) { + String value = TagValues.findTagValue(JavaTemplatesTagValues.TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_SUFFIX, classifier, model); + if (StringUtils.isBlank(value)) { + value = "s"; + } + return value; + } + } Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformer.java =================================================================== --- trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformer.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformer.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -31,6 +31,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.EugeneTagValues; import org.nuiton.eugene.GeneratorException; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; @@ -77,7 +78,7 @@ @Override public void transformFromClass(ObjectModelClass input) { - if (!JavaTemplatesGeneratorUtil.hasBeanStereotype(input)) { + if (!JavaTemplatesStereoTypes.hasBeanStereotype(input)) { // not a bean return; @@ -131,7 +132,7 @@ protected boolean canGenerateFactory(ObjectModel model, String className) { boolean generateFactory = - JavaTemplatesGeneratorUtil.isSimpleBeanGenerateFactory(model); + JavaTemplatesTagValues.isSimpleBeanGenerateFactory(model); String defaultPackage = getDefaultPackageName(); @@ -146,7 +147,7 @@ String className) { boolean generateInterface = - JavaTemplatesGeneratorUtil.isSimpleBeanGenerateInterface(model, input); + JavaTemplatesTagValues.isSimpleBeanGenerateInterface(input, model); // boolean generateInterface = generateTagValue != null && // Boolean.valueOf(generateTagValue); @@ -194,8 +195,8 @@ boolean withInput = input != null; boolean canGenerate = - JavaTemplatesGeneratorUtil.isSimpleBeanGenerateDefaults( - model, input); + JavaTemplatesTagValues.isSimpleBeanGenerateDefaults( + input, model); if (canGenerate) { @@ -205,7 +206,7 @@ // class is a bean canGenerate = !input.isAbstract() && - JavaTemplatesGeneratorUtil.hasBeanStereotype(input); + JavaTemplatesStereoTypes.hasBeanStereotype(input); } } @@ -232,7 +233,7 @@ for (ObjectModelClass aClass : model.getClasses()) { if (!aClass.isAbstract() && - JavaTemplatesGeneratorUtil.hasBeanStereotype(aClass)) { + JavaTemplatesStereoTypes.hasBeanStereotype(aClass)) { String packageName = aClass.getPackageName(); String typeName = getBeanInterfaceName(aClass); String typeBeanName = getBeanClassName(aClass); @@ -286,7 +287,7 @@ Collection<ObjectModelClass> superclasses = input.getSuperclasses(); if (CollectionUtils.isNotEmpty(superclasses)) { for (ObjectModelClass superclass : superclasses) { - if (JavaTemplatesGeneratorUtil.hasBeanStereotype(superclass)) { + if (JavaTemplatesStereoTypes.hasBeanStereotype(superclass)) { superClassIsBean = true; superClass = superclass.getPackageName() + "." + getBeanInterfaceName(superclass); @@ -300,8 +301,8 @@ // try to find a super class by tag-value superClass = - JavaTemplatesGeneratorUtil.getSimpleBeanInterfaceSuperClassTagValue( - model, input); + JavaTemplatesTagValues.getSimpleBeanInterfaceSuperClassTagValue( + input, model); } boolean serializableFound = addInterfaces(input, output, superClass); @@ -332,7 +333,7 @@ Collection<ObjectModelClass> superclasses = input.getSuperclasses(); if (CollectionUtils.isNotEmpty(superclasses)) { for (ObjectModelClass superclass : superclasses) { - if (JavaTemplatesGeneratorUtil.hasBeanStereotype(superclass)) { + if (JavaTemplatesStereoTypes.hasBeanStereotype(superclass)) { superClassIsBean = true; superClass = getBeanClassName(superclass); break; @@ -346,8 +347,8 @@ // try to find a super class by tag-value superClass = - JavaTemplatesGeneratorUtil.getSimpleBeanSuperClassTagValue( - model, input); + JavaTemplatesTagValues.getSimpleBeanSuperClassTagValue( + input, model); if (superClass != null) { // will act as if super class is a bean @@ -389,13 +390,12 @@ // Get available properties List<ObjectModelAttribute> properties = getProperties(input); - boolean usePCS = !JavaTemplatesGeneratorUtil.isNoPCS(model, input); + boolean usePCS = !JavaTemplatesTagValues.isNoPCS(input, model); // boolean usePCS = StringUtils.isEmpty(noPCSTagValue) || // !"true".equals(noPCSTagValue.trim()); boolean generateBooleanGetMethods = - !JavaGeneratorUtil.isDoNotGenerateBooleanGetMethods(model, - input); + !EugeneTagValues.isDoNotGenerateBooleanGetMethods(input, model); // boolean generateBooleanGetMethods = // StringUtils.isEmpty(noGenerateBooleanGetMethods) || // !"true".equals(noGenerateBooleanGetMethods.trim()); @@ -448,8 +448,8 @@ // try to find a super class by tag-value String superClassName = - JavaTemplatesGeneratorUtil.getSimpleBeanDefaultsSuperClassTagValue( - model, aClass); + JavaTemplatesTagValues.getSimpleBeanDefaultsSuperClassTagValue( + aClass, model); ObjectModelClass output = createAbstractClass(abstractoutclassName, packageName); if (StringUtils.isNotBlank(superClassName)) { @@ -539,8 +539,8 @@ } protected String getBeanInterfaceName(ObjectModelClass input) { - String interfaceNamePrefix = JavaTemplatesGeneratorUtil.getSimpleBeanInterfaceNamePrefixTagValue(model, input); - String interfaceNameSuffix = JavaTemplatesGeneratorUtil.getSimpleBeanInterfaceNameSuffixTagValue(model, input); + String interfaceNamePrefix = JavaTemplatesTagValues.getSimpleBeanInterfaceNamePrefixTagValue(input, model); + String interfaceNameSuffix = JavaTemplatesTagValues.getSimpleBeanInterfaceNameSuffixTagValue(input, model); return generateName( interfaceNamePrefix, @@ -550,8 +550,8 @@ } protected String getBeanClassName(ObjectModelClass input) { - String classNamePrefix = JavaTemplatesGeneratorUtil.getSimpleBeanClassNamePrefixTagValue(model, input); - String classNameSuffix = JavaTemplatesGeneratorUtil.getSimpleBeanClassNameSuffixTagValue(model, input); + String classNamePrefix = JavaTemplatesTagValues.getSimpleBeanClassNamePrefixTagValue(input, model); + String classNameSuffix = JavaTemplatesTagValues.getSimpleBeanClassNameSuffixTagValue(input, model); return generateName( classNamePrefix, @@ -561,8 +561,8 @@ } protected String getBeanDefaultsClassName(ObjectModelClass input) { - String classNamePrefix = JavaTemplatesGeneratorUtil.getSimpleBeanDefaultsClassNamePrefixTagValue(model, input); - String classNameSuffix = JavaTemplatesGeneratorUtil.getSimpleBeanDefaultsClassNameSuffixTagValue(model, input); + String classNamePrefix = JavaTemplatesTagValues.getSimpleBeanDefaultsClassNamePrefixTagValue(input, model); + String classNameSuffix = JavaTemplatesTagValues.getSimpleBeanDefaultsClassNameSuffixTagValue(input, model); return generateName( classNamePrefix, input.getName(), Modified: trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/package-info.java =================================================================== --- trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/package-info.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-java-templates/src/main/java/org/nuiton/eugene/java/package-info.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -1,10 +1,10 @@ /** * Eugene java package : Java generators. * <pre> - * - Generator : {@link JavaBeanTransformer } to generate a bean (with abstract and impl class). - * - Generator : {@link JavaEnumerationTransformer } to generate a enumeration. - * - Generator : {@link JavaInterfaceTransformer } to generate a interface. - * - Generator : {@link SimpleJavaBeanTransformer} to generate a bean (one class and interface if required). + * - Generator : {@link org.nuiton.eugene.java.JavaBeanTransformer } to generate a bean (with abstract and impl class). + * - Generator : {@link org.nuiton.eugene.java.JavaEnumerationTransformer } to generate a enumeration. + * - Generator : {@link org.nuiton.eugene.java.JavaInterfaceTransformer } to generate a interface. + * - Generator : {@link org.nuiton.eugene.java.SimpleJavaBeanTransformer} to generate a bean (one class and interface if required). * </pre> */ package org.nuiton.eugene.java; Deleted: trunk/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.metas.ModelPropertiesProvider =================================================================== --- trunk/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.metas.ModelPropertiesProvider 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.metas.ModelPropertiesProvider 2014-04-27 12:17:19 UTC (rev 1346) @@ -1 +0,0 @@ -org.nuiton.eugene.java.JavaTemplatesModelPropertiesProvider \ No newline at end of file Added: trunk/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider =================================================================== --- trunk/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider (rev 0) +++ trunk/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1 @@ +org.nuiton.eugene.java.JavaTemplatesStereoTypes \ No newline at end of file Added: trunk/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider =================================================================== --- trunk/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider (rev 0) +++ trunk/eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1 @@ +org.nuiton.eugene.java.JavaTemplatesTagValues \ No newline at end of file Deleted: trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesModelPropertiesProviderTest.java =================================================================== --- trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesModelPropertiesProviderTest.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesModelPropertiesProviderTest.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -1,160 +0,0 @@ -package org.nuiton.eugene.java; - -/* - * #%L - * EUGene :: Java templates - * $Id$ - * $HeadURL$ - * %% - * 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 org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.nuiton.eugene.metas.MismatchTagValueTargetException; -import org.nuiton.eugene.metas.ModelPropertiesProvider; -import org.nuiton.eugene.metas.TagValueNotFoundException; -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; - -/** - * To test stereotypes and tag values of this module. - * - * @author tchemit <chemit@codelutin.com> - * @since 2.5.6 - */ -public class JavaTemplatesModelPropertiesProviderTest { - - protected ModelPropertiesProvider provider; - - @Before - public void setUp() throws Exception { - provider = new JavaTemplatesModelPropertiesProvider(); - provider.init(); - } - - @Test - public void getTagValueTarget() throws Exception { - getTagValueTarget(JavaTemplatesTagValues.TAG_NO_PCS, ObjectModel.class, ObjectModelClassifier.class); - } - - @Test - public void containsTagValue() throws Exception { - containsTagValue(JavaTemplatesTagValues.TAG_NO_PCS, true); - containsTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, true); - - long l = System.nanoTime(); - containsTagValue(JavaTemplatesTagValues.TAG_NO_PCS + l, false); - containsTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS + l, false); - } - - @Test - public void acceptTagValue() throws Exception { - acceptTagValue(JavaTemplatesTagValues.TAG_NO_PCS, true, ObjectModel.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); - acceptTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, true, ObjectModel.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); - - acceptTagValue(JavaTemplatesTagValues.TAG_NO_PCS, false, ObjectModelOperation.class, ObjectModelAttribute.class); - acceptTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, false, ObjectModelOperation.class, ObjectModelAttribute.class); - - long l = System.nanoTime(); - acceptTagValue(JavaTemplatesTagValues.TAG_NO_PCS + l, false, ObjectModelOperation.class, ObjectModelAttribute.class); - acceptTagValue(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS + l, false, ObjectModelOperation.class, ObjectModelAttribute.class); - } - - @Test - public void getStereotypeTarget() throws Exception { - - getStereotypeTarget(JavaTemplatesStereoTypes.STEREOTYPE_BEAN, ObjectModelClassifier.class); - } - - @Test - public void containsStereotype() throws Exception { - containsStereotype(JavaTemplatesStereoTypes.STEREOTYPE_BEAN, true); - - long l = System.nanoTime(); - containsStereotype(JavaTemplatesStereoTypes.STEREOTYPE_BEAN + l, false); - } - - @Test - public void acceptStereotype() throws Exception { - - acceptStereotype(JavaTemplatesStereoTypes.STEREOTYPE_BEAN, true, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class, ObjectModelInterface.class); - - acceptStereotype(JavaTemplatesStereoTypes.STEREOTYPE_BEAN, false, ObjectModel.class, ObjectModelOperation.class); - - long l = System.nanoTime(); - acceptStereotype(JavaTemplatesStereoTypes.STEREOTYPE_BEAN + l, false, ObjectModel.class, ObjectModelOperation.class); - - } - - protected void getTagValueTarget(String name, Class<?>... expected) { - Class<?>[] classes = provider.getTagValueTarget(name); - Assert.assertNotNull("Could not find target for " + name, classes); - Assert.assertEquals("Should have " + expected.length + " targets for " + name + " but had " + classes.length, classes.length, expected.length); - Assert.assertArrayEquals(expected, classes); - } - - protected void containsTagValue(String name, boolean expected) { - try { - provider.acceptTagValue(name, Object.class); - Assert.assertTrue(expected); - } catch (TagValueNotFoundException e) { - Assert.assertFalse(expected); - } catch (MismatchTagValueTargetException e) { - // don't care here - } - } - - protected void acceptTagValue(String name, boolean expected, Class<?>... types) { - for (Class<?> type : types) { - try { - provider.acceptTagValue(name, type); - Assert.assertTrue(expected); - } catch (TagValueNotFoundException e) { - Assert.assertFalse(expected); - } catch (MismatchTagValueTargetException e) { - Assert.assertFalse(expected); - } - } - } - - protected void getStereotypeTarget(String name, Class<?>... expected) { - Class<?>[] classes = provider.getStereotypeTarget(name); - Assert.assertNotNull("Could not find target for " + name, classes); - Assert.assertEquals("Should have " + expected.length + " targets for " + name + " but had " + classes.length, classes.length, expected.length); - Assert.assertArrayEquals(expected, classes); - } - - protected void containsStereotype(String name, boolean expected) { - boolean classes = provider.containsStereotype(name); - Assert.assertEquals(expected, classes); - } - - protected void acceptStereotype(String name, boolean expected, Class<?>... types) { - for (Class<?> type : types) { - boolean actual = provider.acceptStereotype(name, type); - Assert.assertEquals(expected, actual); - } - } -} Added: trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesStereoTypesTest.java =================================================================== --- trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesStereoTypesTest.java (rev 0) +++ trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesStereoTypesTest.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,73 @@ +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.object.ObjectModel; +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.stereotype.MismatchStereotypeTargetException; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; +import org.nuiton.eugene.models.stereotype.StereotypeNotFoundException; + +public class JavaTemplatesStereoTypesTest { + + protected StereotypeDefinitionProvider provider; + + @Before + public void setUp() throws Exception { + provider = new JavaTemplatesStereoTypes(); + provider.init(); + } + + @Test + public void validate() throws Exception { + + validate(JavaTemplatesStereoTypes.STEREOTYPE_BEAN, true, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class, ObjectModelInterface.class); + + validate(JavaTemplatesStereoTypes.STEREOTYPE_BEAN, false, ObjectModel.class, ObjectModelOperation.class); + + long l = System.nanoTime(); + validate(JavaTemplatesStereoTypes.STEREOTYPE_BEAN + l, false, ObjectModel.class, ObjectModelOperation.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); + } + } + } + +} \ No newline at end of file Property changes on: trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesStereoTypesTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesTagValuesTest.java =================================================================== --- trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesTagValuesTest.java (rev 0) +++ trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesTagValuesTest.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -0,0 +1,75 @@ +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.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.ObjectModelOperation; +import org.nuiton.eugene.models.tagvalue.MismatchTagValueTargetException; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; +import org.nuiton.eugene.models.tagvalue.TagValueNotFoundException; + +public class JavaTemplatesTagValuesTest { + + protected TagValueDefinitionProvider provider; + + @Before + public void setUp() throws Exception { + provider = new JavaTemplatesTagValues(); + provider.init(); + } + + @Test + public void validate() throws Exception { + validate(JavaTemplatesTagValues.TAG_NO_PCS, true, ObjectModel.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); + validate(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, true, ObjectModel.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); + + validate(JavaTemplatesTagValues.TAG_NO_PCS, false, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS, false, ObjectModelOperation.class, ObjectModelAttribute.class); + + long l = System.nanoTime(); + validate(JavaTemplatesTagValues.TAG_NO_PCS + l, false, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(JavaTemplatesTagValues.TAG_BEAN_SUPER_CLASS + l, false, 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 (TagValueNotFoundException e) { + Assert.assertFalse(expected); + } catch (MismatchTagValueTargetException e) { + Assert.assertFalse(expected); + } + } + } + +} \ No newline at end of file Property changes on: trunk/eugene-java-templates/src/test/java/org/nuiton/eugene/java/JavaTemplatesTagValuesTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/eugene-maven-plugin/pom.xml =================================================================== --- trunk/eugene-maven-plugin/pom.xml 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-maven-plugin/pom.xml 2014-04-27 12:17:19 UTC (rev 1346) @@ -210,7 +210,7 @@ <id>run-its</id> <activation> <property> - <name>skipIts</name> + <name>maven.test.skip</name> <value>!true</value> </property> </activation> Modified: trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java =================================================================== --- trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -35,12 +35,14 @@ import org.apache.maven.plugins.annotations.ResolutionScope; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.Template; -import org.nuiton.eugene.metas.ModelPropertiesProvider; -import org.nuiton.eugene.metas.ModelPropertiesProviders; -import org.nuiton.eugene.metas.StereotypeDefinition; -import org.nuiton.eugene.metas.TagValueDefinition; import org.nuiton.eugene.models.Model; import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.stereotype.StereotypeDefinition; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProviders; +import org.nuiton.eugene.models.tagvalue.TagValueDefinition; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProviders; import org.nuiton.eugene.writer.ChainedFileWriter; import java.util.Arrays; @@ -106,17 +108,29 @@ protected Map<String, ChainedFileWriter> writers; /** - * All available model properties providers introspects via plexus. + * All available stereotype providers introspects via plexus. * - * @since 2.3.1 + * @since 2.9 */ - @Component(role = ModelPropertiesProvider.class) - protected Map<String, ModelPropertiesProvider> modelPropertiesProviders; + @Component(role = StereotypeDefinitionProvider.class) + protected Map<String, StereotypeDefinitionProvider> stereotypeDefinitionProviders; - protected Map<String, ModelPropertiesProvider> loadedProviders; + /** + * All available tag value providers introspects via plexus. + * + * @since 2.9 + */ + @Component(role = TagValueDefinitionProvider.class) + protected Map<String, TagValueDefinitionProvider> tagValueDefinitionProviders; - protected ModelPropertiesProvider currentPropertiesProvider; + protected Map<String, TagValueDefinitionProvider> loadedTagValueDefinitionProviders; + protected Map<String, StereotypeDefinitionProvider> loadedStereotypeDefinitionProviders; + + protected TagValueDefinitionProvider currentTagValueDefinitionProvider; + + protected StereotypeDefinitionProvider currentStereotypeDefinitionProvider; + @Override public void execute() throws MojoExecutionException, MojoFailureException { StringBuilder buffer = new StringBuilder(); @@ -152,19 +166,31 @@ } } - if (safeDataTypes.contains(AvailableData.stereotype) || - safeDataTypes.contains(AvailableData.tagvalue)) { + if (safeDataTypes.contains(AvailableData.stereotype)) { - loadedProviders = new LinkedHashMap<String, ModelPropertiesProvider>(); + loadedStereotypeDefinitionProviders = new LinkedHashMap<String, StereotypeDefinitionProvider>(); // init stores - for (Map.Entry<String, ModelPropertiesProvider> e : modelPropertiesProviders.entrySet()) { - ModelPropertiesProvider provider = ModelPropertiesProviders.newStore( + for (Map.Entry<String, StereotypeDefinitionProvider> e : stereotypeDefinitionProviders.entrySet()) { + StereotypeDefinitionProvider provider = StereotypeDefinitionProviders.newProvider( Arrays.asList(e.getValue()), false ); - loadedProviders.put(e.getKey(), provider); + loadedStereotypeDefinitionProviders.put(e.getKey(), provider); } } + + if (safeDataTypes.contains(AvailableData.tagvalue)) { + + loadedTagValueDefinitionProviders = new LinkedHashMap<String, TagValueDefinitionProvider>(); + // init stores + for (Map.Entry<String, TagValueDefinitionProvider> e : tagValueDefinitionProviders.entrySet()) { + TagValueDefinitionProvider provider = TagValueDefinitionProviders.newProvider( + Arrays.asList(e.getValue()), + false + ); + loadedTagValueDefinitionProviders.put(e.getKey(), provider); + } + } for (AvailableData data : safeDataTypes) { buffer.append("\n"); appendData(data, buffer); @@ -178,28 +204,28 @@ String dataType = data.name(); - if (data == AvailableData.tagvalue || data == AvailableData.stereotype) { + if (data == AvailableData.tagvalue) { int nbData = 0; - for (ModelPropertiesProvider provider : loadedProviders.values()) { - currentPropertiesProvider = provider; + for (TagValueDefinitionProvider provider : loadedTagValueDefinitionProviders.values()) { + currentTagValueDefinitionProvider = provider; nbData += data.getData(this).size(); } - currentPropertiesProvider = null; + currentTagValueDefinitionProvider = null; String format = "\nFound %s %ss in %s provider(s) : %s\n"; buffer.append(String.format(format, nbData, dataType, - loadedProviders.size(), - loadedProviders.keySet()) + loadedTagValueDefinitionProviders.size(), + loadedTagValueDefinitionProviders.keySet()) ); - for (Map.Entry<String, ModelPropertiesProvider> e : loadedProviders.entrySet()) { + for (Map.Entry<String, TagValueDefinitionProvider> e : loadedTagValueDefinitionProviders.entrySet()) { String providerName = e.getKey(); - ModelPropertiesProvider provider = e.getValue(); - currentPropertiesProvider = provider; + TagValueDefinitionProvider provider = e.getValue(); + currentTagValueDefinitionProvider = provider; Map<String, ?> map = data.getData(this); int size = map.size(); @@ -219,6 +245,47 @@ data.toString(buffer, e2); } } + } else if (data == AvailableData.stereotype) { + + int nbData = 0; + for (StereotypeDefinitionProvider provider : loadedStereotypeDefinitionProviders.values()) { + currentStereotypeDefinitionProvider = provider; + nbData += data.getData(this).size(); + } + currentStereotypeDefinitionProvider = null; + + String format = "\nFound %s %ss in %s provider(s) : %s\n"; + + buffer.append(String.format(format, + nbData, + dataType, + loadedStereotypeDefinitionProviders.size(), + loadedStereotypeDefinitionProviders.keySet()) + ); + + for (Map.Entry<String, StereotypeDefinitionProvider> e : loadedStereotypeDefinitionProviders.entrySet()) { + String providerName = e.getKey(); + StereotypeDefinitionProvider provider = e.getValue(); + currentStereotypeDefinitionProvider = provider; + 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); @@ -287,7 +354,7 @@ tagvalue { @Override public Map<String, ?> getData(AvailableDataMojo mojo) { - return mojo.getCurrentPropertiesProvider().getTagValueStore(); + return mojo.getCurrentTagValueDefinitionProvider().getDefinition(); } @Override @@ -320,7 +387,7 @@ stereotype { @Override public Map<String, ?> getData(AvailableDataMojo mojo) { - return mojo.getCurrentPropertiesProvider().getStereotypeStore(); + return mojo.getCurrentStereotypeDefinitionProvider().getDefinition(); } @Override @@ -368,31 +435,45 @@ } } - protected ModelPropertiesProvider getCurrentPropertiesProvider() { - return currentPropertiesProvider; + public TagValueDefinitionProvider getCurrentTagValueDefinitionProvider() { + return currentTagValueDefinitionProvider; } - protected ModelPropertiesProvider getModelPropertiesProvider() { + public StereotypeDefinitionProvider getCurrentStereotypeDefinitionProvider() { + return currentStereotypeDefinitionProvider; + } - ModelPropertiesProvider provider; + protected TagValueDefinitionProvider getTagValueDefinitionProvider() throws MojoExecutionException { - if (modelPropertiesProviders == null || - modelPropertiesProviders.isEmpty()) { + TagValueDefinitionProvider provider; + if (tagValueDefinitionProviders == null || tagValueDefinitionProviders.isEmpty()) { + // could not find any model properties via plexus // try to obtain them by ServiceLoader - provider = ModelPropertiesProviders.newStore( - getClass().getClassLoader(), - false - ); + provider = TagValueDefinitionProviders.newProvider(getClass().getClassLoader(), false); } else { - provider = ModelPropertiesProviders.newStore( - modelPropertiesProviders.values(), - false - ); + provider = TagValueDefinitionProviders.newProvider(tagValueDefinitionProviders.values(), false); } return provider; } + + protected StereotypeDefinitionProvider getStereotypeDefinitionProvider() throws MojoExecutionException { + + StereotypeDefinitionProvider provider; + + if (stereotypeDefinitionProviders == null || stereotypeDefinitionProviders.isEmpty()) { + + // could not find any model properties via plexus + // try to obtain them by ServiceLoader + + provider = StereotypeDefinitionProviders.newProvider(getClass().getClassLoader(), false); + } else { + provider = StereotypeDefinitionProviders.newProvider(stereotypeDefinitionProviders.values(), false); + } + return provider; + } + } Modified: trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java =================================================================== --- trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -39,9 +39,11 @@ import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.Template; -import org.nuiton.eugene.metas.ModelPropertiesProvider; -import org.nuiton.eugene.metas.ModelPropertiesProviders; import org.nuiton.eugene.models.Model; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProviders; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProviders; import org.nuiton.eugene.plugin.writer.BaseChainedFileWriter; import org.nuiton.eugene.plugin.writer.XmiChainedFileWriter; import org.nuiton.eugene.plugin.writer.XmlModelChainedFileWriter; @@ -317,13 +319,21 @@ protected Map<String, Template<?>> modelTemplates; /** - * All available model properties providers introspects via plexus. + * All available stereotype providers introspects via plexus. * - * @since 2.3 + * @since 2.9 */ - @Component(role = ModelPropertiesProvider.class) - protected Map<String, ModelPropertiesProvider> modelPropertiesProviders; + @Component(role = StereotypeDefinitionProvider.class) + protected Map<String, StereotypeDefinitionProvider> stereotypeDefinitionProviders; + /** + * All available tag value providers introspects via plexus. + * + * @since 2.9 + */ + @Component(role = TagValueDefinitionProvider.class) + protected Map<String, TagValueDefinitionProvider> tagValueDefinitionProviders; + /** The engine to compute {@link ChainedFileWriter} from inputs entries. */ @Component(role = ChainedWriterEngine.class) protected ChainedWriterEngine engine; @@ -430,16 +440,22 @@ // add xml model writer support - properties.put(XmlModelChainedFileWriter.PROP_MODEL_PROPERTIES_PROVIDER, - getModelPropertiesProvider()); + properties.put(XmlModelChainedFileWriter.PROP_TAG_VALUE_DEFINITION_PROVIDER, + getTagValueDefinitionProvider()); + + properties.put(XmlModelChainedFileWriter.PROP_STEREOTYPE_DEFINITION_PROVIDER, + getStereotypeDefinitionProvider()); } if (engine.containsWriter("yamlmodel")) { // add yaml model writer support - properties.put(YamlModelChainedFileWriter.PROP_MODEL_PROPERTIES_PROVIDER, - getModelPropertiesProvider()); + properties.put(YamlModelChainedFileWriter.PROP_TAG_VALUE_DEFINITION_PROVIDER, + getTagValueDefinitionProvider()); + + properties.put(YamlModelChainedFileWriter.PROP_STEREOTYPE_DEFINITION_PROVIDER, + getStereotypeDefinitionProvider()); } // init templates @@ -512,37 +528,44 @@ ChainedFileWriterToMemoryModel writerToMemoryModel = (ChainedFileWriterToMemoryModel) writer; models.add(writerToMemoryModel); + } else { + + // print phase generation result + String message = reportGeneratedFiles(writer.getWriterReport(), t0); + getLog().info(message); } - String message = reportGeneratedFiles(writer.getWriterReport(), t0); - getLog().info(message); } - // merge all models in a unique one ? or apply templates on each model ? + if (!models.isEmpty()) { - long t0 = System.nanoTime(); + // apply templates - WriterReport writerReport = newWriterReport(); + //TODO merge all models in a unique one ? or apply templates on each model ? + long t0 = System.nanoTime(); - getLog().info("Process phase [generator]"); + WriterReport writerReport = newWriterReport(); - for (ChainedFileWriterToMemoryModel entry : models) { - Model model = entry.getModel(); - Long lastModified = entry.getLastModifiedSource(); - File outputDir = entry.getOutputDirectory(); + getLog().info("Process phase [generator]"); - applyTemplates(model, - lastModified, - outputDir, - templateList, - writerReport); + for (ChainedFileWriterToMemoryModel entry : models) { + Model model = entry.getModel(); + Long lastModified = entry.getLastModifiedSource(); + File outputDir = entry.getOutputDirectory(); - // must fix source compile roots - fixCompileSourceRoots(outputDir); + applyTemplates(model, + lastModified, + outputDir, + templateList, + writerReport); + + // must fix source compile roots + fixCompileSourceRoots(outputDir); + } + + String message = reportGeneratedFiles(writerReport, t0); + getLog().info(message); } - String message = reportGeneratedFiles(writerReport, t0); - getLog().info(message); - } finally { // always clear everything to avoid side-effects in goal is // invoked more than once @@ -892,30 +915,55 @@ } } - protected ModelPropertiesProvider getModelPropertiesProvider() throws MojoExecutionException { + protected TagValueDefinitionProvider getTagValueDefinitionProvider() throws MojoExecutionException { - ModelPropertiesProvider provider; + TagValueDefinitionProvider provider; - if (modelPropertiesProviders == null || - modelPropertiesProviders.isEmpty() || + if (tagValueDefinitionProviders == null || + tagValueDefinitionProviders.isEmpty() || isTestPhase()) { // could not find any model properties via plexus // try to obtain them by ServiceLoader - provider = ModelPropertiesProviders.newStore( + provider = TagValueDefinitionProviders.newProvider( getFixedClassLoader(), verbose ); } else { - provider = ModelPropertiesProviders.newStore( - modelPropertiesProviders.values(), + provider = TagValueDefinitionProviders.newProvider( + tagValueDefinitionProviders.values(), verbose ); } return provider; } + + protected StereotypeDefinitionProvider getStereotypeDefinitionProvider() throws MojoExecutionException { + + StereotypeDefinitionProvider provider; + + if (stereotypeDefinitionProviders == null || + stereotypeDefinitionProviders.isEmpty() || + isTestPhase()) { + + // could not find any model properties via plexus + // try to obtain them by ServiceLoader + + provider = StereotypeDefinitionProviders.newProvider( + getFixedClassLoader(), + verbose + ); + } else { + provider = StereotypeDefinitionProviders.newProvider( + stereotypeDefinitionProviders.values(), + verbose + ); + } + return provider; + } + protected List<Template<Model>> initTemplates() { ClassLoader loader = getClassLoader(); Modified: trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java =================================================================== --- trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -24,9 +24,11 @@ * #L% */ +import org.nuiton.eugene.ModelPropertiesUtil; import org.nuiton.eugene.ModelReader; -import org.nuiton.eugene.metas.ModelPropertiesProvider; import org.nuiton.eugene.models.Model; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; import org.nuiton.eugene.writer.ChainedFileWriterConfiguration; import org.nuiton.eugene.writer.ChainedFileWriterToMemoryModel; @@ -47,6 +49,11 @@ public static final String PROP_MODEL_READER = "modelReader"; + public static final String PROP_TAG_VALUE_DEFINITION_PROVIDER = "tagValueDefinitionProvider"; + + public static final String PROP_STEREOTYPE_DEFINITION_PROVIDER = "stereotypeDefinitionProvider"; + + @Deprecated public static final String PROP_MODEL_PROPERTIES_PROVIDER = "modelPropertiesProvider"; public static final String PROP_READER = "reader"; @@ -61,6 +68,8 @@ super( PROP_READER, "reader", PROP_MODEL_READER, "xmlModelReader", + PROP_TAG_VALUE_DEFINITION_PROVIDER, "tagValueDefinitionProvider", + PROP_STEREOTYPE_DEFINITION_PROVIDER, "stereotypeDefinitionProvider", PROP_MODEL_PROPERTIES_PROVIDER, "modelPropertiesProvider" ); } @@ -102,10 +111,22 @@ return getProperty(PROP_READER, String.class); } - protected ModelPropertiesProvider getModelPropertiesProvider() { - return getProperty(PROP_MODEL_PROPERTIES_PROVIDER, ModelPropertiesProvider.class); + /** + * @deprecated since 2.9, no more used, use now {@link #getStereotypeDefinitionProvider()} and {@link #getTagValueDefinitionProvider()} + */ + @Deprecated + protected ModelPropertiesUtil.ModelPropertiesProvider getModelPropertiesProvider() { + return getProperty(PROP_MODEL_PROPERTIES_PROVIDER, ModelPropertiesUtil.ModelPropertiesProvider.class); } + protected TagValueDefinitionProvider getTagValueDefinitionProvider() { + return getProperty(PROP_TAG_VALUE_DEFINITION_PROVIDER, TagValueDefinitionProvider.class); + } + + protected StereotypeDefinitionProvider getStereotypeDefinitionProvider() { + return getProperty(PROP_STEREOTYPE_DEFINITION_PROVIDER, StereotypeDefinitionProvider.class); + } + @Override protected void initWriter(ChainedFileWriterConfiguration configuration) { super.initWriter(configuration); @@ -153,12 +174,15 @@ boolean verbose = configuration.isVerbose(); - // gets the provider of safe tag values and stereotypes - ModelPropertiesProvider propertiesProvider = - getModelPropertiesProvider(); + getModelReader().setStereotypeDefinitionProvider(getStereotypeDefinitionProvider()); + getModelReader().setTagValueDefinitionProvider(getTagValueDefinitionProvider()); - // affect it to the model reader - getModelReader().setModelPropertiesProvider(propertiesProvider); +// // gets the provider of safe tag values and stereotypes +// ModelPropertiesUtil.ModelPropertiesProvider propertiesProvider = +// getModelPropertiesProvider(); +// +// // affect it to the model reader +// getModelReader().setModelPropertiesProvider(propertiesProvider); // set the verbose level of the model reader getModelReader().setVerbose(verbose); Modified: trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java =================================================================== --- trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2014-04-27 12:17:19 UTC (rev 1346) @@ -27,11 +27,13 @@ import org.apache.commons.lang3.StringUtils; import org.nuiton.eugene.DefaultTemplateConfiguration; +import org.nuiton.eugene.ModelPropertiesUtil; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.Template; import org.nuiton.eugene.TemplateConfiguration; -import org.nuiton.eugene.metas.ModelPropertiesProvider; import org.nuiton.eugene.models.Model; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; import org.nuiton.eugene.writer.ChainedFileWriterConfiguration; import java.io.File; @@ -63,6 +65,11 @@ public static final String PROP_MODEL_READER = "modelReader"; + public static final String PROP_TAG_VALUE_DEFINITION_PROVIDER = "tagValueDefinitionProvider"; + + public static final String PROP_STEREOTYPE_DEFINITION_PROVIDER = "stereotypeDefinitionProvider"; + + @Deprecated public static final String PROP_MODEL_PROPERTIES_PROVIDER = "modelPropertiesProvider"; public static final String PROP_READER = "reader"; @@ -79,6 +86,8 @@ PROP_GENERATED_PACKAGES, "generatedPackages", PROP_DEFAULT_PACKAGE, "defaultPackage", PROP_TEMPLATE_CONFIGURATION, "templateConfiguration", + PROP_TAG_VALUE_DEFINITION_PROVIDER, "tagValueDefinitionProvider", + PROP_STEREOTYPE_DEFINITION_PROVIDER, "stereotypeDefinitionProvider", PROP_MODEL_PROPERTIES_PROVIDER, "modelPropertiesProvider" ); } @@ -165,10 +174,22 @@ return getProperty(PROP_READER, String.class); } - protected ModelPropertiesProvider getModelPropertiesProvider() { - return getProperty(PROP_MODEL_PROPERTIES_PROVIDER, ModelPropertiesProvider.class); + /** + * @deprecated since 2.9, no more used, use now {@link #getStereotypeDefinitionProvider()} and {@link #getTagValueDefinitionProvider()} + */ + @Deprecated + protected ModelPropertiesUtil.ModelPropertiesProvider getModelPropertiesProvider() { + return getProperty(PROP_MODEL_PROPERTIES_PROVIDER, ModelPropertiesUtil.ModelPropertiesProvider.class); } + protected TagValueDefinitionProvider getTagValueDefinitionProvider() { + return getProperty(PROP_TAG_VALUE_DEFINITION_PROVIDER, TagValueDefinitionProvider.class); + } + + protected StereotypeDefinitionProvider getStereotypeDefinitionProvider() { + return getProperty(PROP_STEREOTYPE_DEFINITION_PROVIDER, StereotypeDefinitionProvider.class); + } + @Override protected void initWriter(ChainedFileWriterConfiguration configuration) { super.initWriter(configuration); @@ -196,12 +217,13 @@ } else { String modelType = configuration.getModelType(); ModelReader<?> modelReader = configuration.getModelHelper().getModelReader(modelType, "xml"); - configuration.getModelHelper().getModelReaders().get(modelType); + configuration.getModelHelper().getModelReaders().get(modelType); if (modelReader == null) { throw new IllegalStateException( "could not find a model reader for modelType : " + modelType + ", availables readers : " + - configuration.getModelHelper().getModelReaders().values()); + configuration.getModelHelper().getModelReaders().values() + ); } properties.put(PROP_MODEL_READER, modelReader); } @@ -209,11 +231,14 @@ boolean verbose = configuration.isVerbose(); - // gets the provider of safe tag values and stereotypes - ModelPropertiesProvider propertiesProvider = getModelPropertiesProvider(); + getModelReader().setStereotypeDefinitionProvider(getStereotypeDefinitionProvider()); + getModelReader().setTagValueDefinitionProvider(getTagValueDefinitionProvider()); - // affect it to the model reader - getModelReader().setModelPropertiesProvider(propertiesProvider); +// // gets the provider of safe tag values and stereotypes +// ModelPropertiesProvider propertiesProvider = getModelPropertiesProvider(); +// +// // affect it to the model reader +// getModelReader().setModelPropertiesProvider(propertiesProvider); // set the verbose level of the model reader getModelReader().setVerbose(verbose); Modified: trunk/src/site/fr/rst/06-fonctionnalites-avancees.rst =================================================================== --- trunk/src/site/fr/rst/06-fonctionnalites-avancees.rst 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/src/site/fr/rst/06-fonctionnalites-avancees.rst 2014-04-27 12:17:19 UTC (rev 1346) @@ -154,6 +154,20 @@ Le calcul du nom d'une constante à partir de la proprité revient donc régulièrement et est caché grâçe à cette extension. +TagValueDefinitionProvider +-------------------------- + +Il est possible de définir les tagValues applicables sur un modèle. + +Voir `TagValueDefinitionProvider`_ + +StereotypeDefinitionProvider +---------------------------- + +Il est possible de définir les stéréotypes applicables sur un modèle. + +Voir `StereotypeDefinitionProvider`_ + ModelPropertiesProvider ----------------------- @@ -179,6 +193,9 @@ .. _ObjectModelElement: ../eugene/apidocs/org/nuiton/eugene/models/object/ObjectModelElement.html .. _ObjectModelClassifier: ../eugene/apidocs/org/nuiton/eugene/models/object/ObjectModelClassifier.html +.. _TagValueDefinitionProvider: eugene/apidocs/org/nuiton/eugene/models/tagvalue/TagValueDefinitionProvider.html +.. _StereotypeDefinitionProvider: eugene/apidocs/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProvider.html + Modified: trunk/src/site/rst/06-fonctionnalites-avancees.rst =================================================================== --- trunk/src/site/rst/06-fonctionnalites-avancees.rst 2014-04-26 19:16:12 UTC (rev 1345) +++ trunk/src/site/rst/06-fonctionnalites-avancees.rst 2014-04-27 12:17:19 UTC (rev 1346) @@ -149,13 +149,16 @@ use those constants in the generated code. So the constant's name calculation from a property come quite often and is cached by this extension. -ModelPropertiesProvider ------------------------ +TagValueDefinitionProvider +-------------------------- -It is possible to define tagValues and stereotypes via a *ModelPropertiesProvider*. +It is possible to describe tag values you can use on your models. See `TagValueDefinitionProvider`_ -Must be continued (doc will be done before version 3.0)... +StereotypeDefinitionProvider +---------------------------- +It is possible to describe stereotypes you can use on your models. See `StereotypeDefinitionProvider`_ + .. _argouml: http://argouml.tigris.org/ .. _topcased: http://www.topcased.org/ .. _Templates: ./04-templates.html @@ -175,3 +178,6 @@ .. _ObjectModelElement: eugene/apidocs/org/nuiton/eugene/models/object/ObjectModelElement.html .. _ObjectModelClassifier: eugene/apidocs/org/nuiton/eugene/models/object/ObjectModelClassifier.html +.. _TagValueDefinitionProvider: eugene/apidocs/org/nuiton/eugene/models/tagvalue/TagValueDefinitionProvider.html +.. _StereotypeDefinitionProvider: eugene/apidocs/org/nuiton/eugene/models/stereotype/StereotypeDefinitionProvider.html +
participants (1)
-
tchemit@users.nuiton.org