Author: tchemit Date: 2010-11-29 14:07:18 +0100 (Mon, 29 Nov 2010) New Revision: 1020 Url: http://nuiton.org/repositories/revision/eugene/1020 Log: Evolution #1119: Move all java extension to package extension Implements check on tag values and stereotypes in ObjectModelReader clean tests Added: trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/AnnotationsManager.java trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/AnnotationsManagerExtension.java trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/CodesManager.java trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/CodesManagerExtension.java trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ConstantsManager.java trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ConstantsManagerExtension.java trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ImportsManager.java trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ImportsManagerExtension.java trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/package-info.java trunk/eugene/src/test/java/org/nuiton/eugene/java/extension/ trunk/eugene/src/test/java/org/nuiton/eugene/java/extension/ImportsManagerExtensionTest.java trunk/eugene/src/test/java/org/nuiton/eugene/java/extension/ImportsManagerTest.java Removed: trunk/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerExtensionTest.java trunk/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerTest.java Modified: 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/AnnotationsManager.java trunk/eugene/src/main/java/org/nuiton/eugene/java/AnnotationsManagerExtension.java trunk/eugene/src/main/java/org/nuiton/eugene/java/CodesManager.java trunk/eugene/src/main/java/org/nuiton/eugene/java/CodesManagerExtension.java trunk/eugene/src/main/java/org/nuiton/eugene/java/ConstantsManager.java trunk/eugene/src/main/java/org/nuiton/eugene/java/ConstantsManagerExtension.java trunk/eugene/src/main/java/org/nuiton/eugene/java/ImportsManager.java trunk/eugene/src/main/java/org/nuiton/eugene/java/ImportsManagerExtension.java trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java trunk/eugene/src/main/java/org/nuiton/eugene/java/package-info.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java trunk/eugene/src/test/java/org/nuiton/eugene/EugeneModelPropertiesProviderTest.java trunk/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java trunk/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java trunk/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderTest.java trunk/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelImplTest.java trunk/eugene/src/test/java/org/nuiton/eugene/models/state/StateModelDTDTest.java trunk/maven-eugene-plugin/src/it/smart-generate/generators/src/main/java/org/nuiton/eugene/test/generator/BeanGenerator.java Modified: trunk/eugene/src/main/java/org/nuiton/eugene/ModelPropertiesUtil.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/ModelPropertiesUtil.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/ModelPropertiesUtil.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -28,7 +28,7 @@ /** * Obtain a new store of tag values and stereotypes. * - * @param loader the classloader to use (if none given will use the one of the current thread) + * @param loader the classloader to use (if none given will use the one of the current thread) * @param verbose a verbose flag * @return the aggregate store of all atomic one detected in the class-path */ @@ -256,6 +256,56 @@ return result; } + public boolean containsTagValue(String tagValueName) { + boolean b = tagValueStore.containsKey(tagValueName); + return b; + } + + public boolean containsStereotype(String stereotypeName) { + boolean b = stereotypeStore.containsKey(stereotypeName); + return b; + } + + public boolean acceptTagValue(String tagValueName, Class<?> type) { + if (!containsTagValue(tagValueName)) { + + // unknown + return false; + } + + Class<?>[] tagValueTarget = getTagValueTarget(tagValueName); + + for (Class<?> target : tagValueTarget) { + if (target.equals(type) || target.isAssignableFrom(type)) { + + // found one accepting target + return true; + } + } + + // no target found + return false; + } + + public boolean acceptStereotype(String stereotypeName, Class<?> type) { + if (!containsStereotype(stereotypeName)) { + + // unknown + return false; + } + + Class<?>[] tagValueTarget = getStereotypeTarget(stereotypeName); + for (Class<?> target : tagValueTarget) { + if (target.equals(type) || target.isAssignableFrom(type)) { + + // found one accepting target + return true; + } + } + + // no target found + return false; + } } } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -45,13 +45,30 @@ private static final Log log = LogFactory.getLog(ModelReader.class); - /** date de derniere modification de la source la plus recente */ + /** Date of the las modification of any source files. */ protected long lastModifiedSource; - /** @since 2.3 */ + /** + * A verbose flag to see more things. + * + * @since 2.3 + */ protected boolean verbose; - /** @since 2.3 */ + /** + * A flag to load only safe things. + * <p/> + * Usefull to have a safe loading of a model and his properties file. + * + * @since 2.3 + */ + protected boolean strictLoading; + + /** + * The classloader to use to obtain {@link ModelPropertiesUtil.ModelPropertiesProvider}. + * + * @since 2.3 + */ protected ClassLoader loader; public boolean isVerbose() { @@ -62,6 +79,14 @@ this.verbose = verbose; } + public boolean isStrictLoading() { + return strictLoading; + } + + public void setStrictLoading(boolean strictLoading) { + this.strictLoading = strictLoading; + } + public ClassLoader getLoader() { return loader; } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/AnnotationsManager.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/AnnotationsManager.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/AnnotationsManager.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -39,10 +39,10 @@ * * @author tchemit <chemit@codelutin.com> * @version $Revision$ - * <p/> - * Mise a jour: $Date$ par : - * * @since 2.0.0 + * @since 2.0.0 + * @deprecated since 2.3, use now the class {@link org.nuiton.eugene.java.extension.AnnotationsManager} */ +@Deprecated public class AnnotationsManager { private static final String[] EMPTY_STRING_ARRAY = new String[]{}; Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/AnnotationsManagerExtension.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/AnnotationsManagerExtension.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/AnnotationsManagerExtension.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -38,9 +38,9 @@ * * @author tchemit <chemit@codelutin.com> * @version $Revision$ - * <p/> - * Mise a jour: $Date$ par : - * */ + * @deprecated since 2.3, use now the class {@link org.nuiton.eugene.java.extension.AnnotationsManagerExtension} + */ +@Deprecated public class AnnotationsManagerExtension { private static final Log log = LogFactory.getLog(AnnotationsManagerExtension.class); Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/CodesManager.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/CodesManager.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/CodesManager.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -34,7 +34,9 @@ * * @author tchemit <chemit@codelutin.com> * @since 2.0.2 + * @deprecated since 2.3, use now the class {@link org.nuiton.eugene.java.extension.CodesManager} */ +@Deprecated public class CodesManager { private static final String EMPTY_STRING = ""; Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/CodesManagerExtension.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/CodesManagerExtension.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/CodesManagerExtension.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -38,7 +38,9 @@ * @author tchemit <chemit@codelutin.com> * @see CodesManager * @since 2.0.2 + * @deprecated since 2.3, use now the class {@link org.nuiton.eugene.java.extension.CodesManagerExtension} */ +@Deprecated public class CodesManagerExtension { private static final Log log = LogFactory.getLog(CodesManagerExtension.class); Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/ConstantsManager.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/ConstantsManager.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/ConstantsManager.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -34,8 +34,10 @@ * Manager of constant names. * * @author tchemit <chemit@codelutin.com> - * @since 2.3 + * @since ? + * @deprecated since 2.3, use now the class {@link org.nuiton.eugene.java.extension.ConstantsManager} */ +@Deprecated public class ConstantsManager { /** * cache of constant name (values) for property name (keys) Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/ConstantsManagerExtension.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/ConstantsManagerExtension.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/ConstantsManagerExtension.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -27,8 +27,10 @@ /** * @author tchemit <chemit@codelutin.com> - * @since 2.3 + * @since ? + * @deprecated since 2.3, use now the class {@link org.nuiton.eugene.java.extension.ConstantsManagerExtension} */ +@Deprecated public class ConstantsManagerExtension { /** Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/ImportsManager.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/ImportsManager.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/ImportsManager.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -41,9 +41,10 @@ * @author thimel, chemit * @version $Revision$ - * Mise a jour: $Date$ par : - * * @since 2.0.0 + * @since 2.0.0 + * @deprecated since 2.3, use now the class {@link org.nuiton.eugene.java.extension.ImportsManager} */ +@Deprecated public class ImportsManager { private static Set<String> primitiveTypes; Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/ImportsManagerExtension.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/ImportsManagerExtension.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/ImportsManagerExtension.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -43,8 +43,9 @@ * * Extension for ObjectModel to manage imports for all classifiers in the model. * - * Mise a jour: $Date$ - * par : */ + * @deprecated since 2.3, use now the class {@link org.nuiton.eugene.java.extension.ImportsManagerExtension} + * */ +@Deprecated public class ImportsManagerExtension { private static final Log log = LogFactory.getLog(ImportsManagerExtension.class); Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -28,6 +28,13 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.GeneratorUtil; +import org.nuiton.eugene.java.extension.AnnotationsManager; +import org.nuiton.eugene.java.extension.AnnotationsManagerExtension; +import org.nuiton.eugene.java.extension.CodesManager; +import org.nuiton.eugene.java.extension.CodesManagerExtension; +import org.nuiton.eugene.java.extension.ConstantsManagerExtension; +import org.nuiton.eugene.java.extension.ImportsManager; +import org.nuiton.eugene.java.extension.ImportsManagerExtension; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelBuilder; import org.nuiton.eugene.models.object.ObjectModelClass; @@ -116,7 +123,7 @@ public void addSuperclass(ObjectModelClass clazz, String superclassQualifiedName) throws UnsupportedOperationException { throw new UnsupportedOperationException("This operation can't be used" + - " to generate Java, use setSuperClass method instead"); + " to generate Java, use setSuperClass method instead"); } /** @@ -163,10 +170,10 @@ String name, String type) { return addAttribute(classifier, - name, - type, - "", - ObjectModelModifier.PROTECTED + name, + type, + "", + ObjectModelModifier.PROTECTED ); } @@ -201,7 +208,7 @@ String type, String name) { addImport((ObjectModelClassifier) operation.getDeclaringElement(), - type); + type); return super.addParameter(operation, type, name); } @@ -214,7 +221,7 @@ @Override public void addException(ObjectModelOperation operation, String exception) { addImport((ObjectModelClassifier) operation.getDeclaringElement(), - exception); + exception); super.addException(operation, exception); } @@ -277,7 +284,7 @@ manager.addImport(oneType); if (log.isDebugEnabled()) { log.debug("Add import for : " + classifier.getQualifiedName() + - " _ import: " + oneType); + " _ import: " + oneType); } } } @@ -302,7 +309,7 @@ manager.addAnnotation(element, annotation); if (log.isDebugEnabled()) { log.debug("Add annotation for <" + classifier.getQualifiedName() + - ":" + element.getName() + "> : " + annotation); + ":" + element.getName() + "> : " + annotation); } } @@ -345,16 +352,16 @@ if (!visibility.isVisibility()) { throw new IllegalArgumentException( "Illegal visibility type : " + visibility.name() + - " for " + classifier.getQualifiedName()); + " for " + classifier.getQualifiedName()); } return addAttribute(classifier, - name, - type, - value, - visibility, - ObjectModelModifier.STATIC, - ObjectModelModifier.FINAL + name, + type, + value, + visibility, + ObjectModelModifier.STATIC, + ObjectModelModifier.FINAL ); } @@ -378,7 +385,7 @@ manager.addCode(operation, code); if (log.isDebugEnabled()) { log.debug("Add code for <" + classifier.getQualifiedName() + - ":" + operation.getName() + "> : " + code); + ":" + operation.getName() + "> : " + code); } } @@ -397,7 +404,7 @@ String result = constantsManagerExtension.getConstantName(propertyName); if (log.isDebugEnabled()) { log.debug("get constant name for <" + propertyName + "> : " + - result); + result); } return result; } @@ -494,8 +501,8 @@ if (!visibility.isVisibility()) { throw new IllegalArgumentException( "Illegal visibility type : " + visibility.name() + - " for " + classifier.getQualifiedName()); + " for " + classifier.getQualifiedName()); } - return addOperation(classifier, classifier.getName(), null, visibility); + return addOperation(classifier, classifier.getName(), null, visibility); } } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -37,7 +37,8 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.models.object.*; -import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; +import org.nuiton.eugene.java.extension.ImportsManagerExtension; +import org.nuiton.eugene.java.extension.AnnotationsManagerExtension; /*{generator option: parentheses = true}*/ Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -32,6 +32,7 @@ import org.nuiton.eugene.EugeneTagValues; import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.Template; +import org.nuiton.eugene.java.extension.ImportsManager; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; Copied: trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/AnnotationsManager.java (from rev 1012, trunk/eugene/src/main/java/org/nuiton/eugene/java/AnnotationsManager.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/AnnotationsManager.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/AnnotationsManager.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -0,0 +1,88 @@ +/* + * #%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.java.extension; + +import org.nuiton.eugene.models.object.ObjectModelElement; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * To manage annotations for any {@link ObjectModelElement} of a classifier. + * <p/> + * Created: 17 déc. 2009 + * + * @author tchemit <chemit@codelutin.com> + * @version $Revision$ + * @since 2.0.0 + */ +public class AnnotationsManager { + + private static final String[] EMPTY_STRING_ARRAY = new String[]{}; + + protected Map<ObjectModelElement, List<String>> annotations; + + /** + * Add the {@code annotation} for the given {@code element} of + * the classifier. + * + * @param element the element where to register the annotation + * @param annotation the annotation to register + */ + public void addAnnotation(ObjectModelElement element, String annotation) { + Map<ObjectModelElement, List<String>> map = getAnnotations(); + List<String> list = map.get(element); + if (list == null) { + list = new ArrayList<String>(); + map.put(element, list); + } + list.add(annotation); + } + + /** + * Obtain the array of annotations registred for a given element of + * the classifier. + * + * @param element the element where to search for annotations + * @return the annotations for the element (empty arry if none found + */ + public String[] getAnnotations(ObjectModelElement element) { + Map<ObjectModelElement, List<String>> map = getAnnotations(); + List<String> list = map.get(element); + return list == null ? EMPTY_STRING_ARRAY : + list.toArray(new String[list.size()]); + } + + protected Map<ObjectModelElement, List<String>> getAnnotations() { + if (annotations == null) { + annotations = new HashMap<ObjectModelElement, List<String>>(); + } + return annotations; + } + +} Copied: trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/AnnotationsManagerExtension.java (from rev 1012, trunk/eugene/src/main/java/org/nuiton/eugene/java/AnnotationsManagerExtension.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/AnnotationsManagerExtension.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/AnnotationsManagerExtension.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -0,0 +1,109 @@ +/* + * #%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.java.extension; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelElement; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created: 17 déc. 2009 + * + * @author tchemit <chemit@codelutin.com> + * @version $Revision$ + */ +public class AnnotationsManagerExtension { + + private static final Log log = LogFactory.getLog(AnnotationsManagerExtension.class); + + /** + * Extension static used to identify AnnotationsManagerExtension in + * ObjectModel. + */ + public static final String OBJECTMODEL_EXTENSION = "annotations"; + + /** + * Map of AnotationsManager with key equals to the classifier qualified + * name associated to the AnotationsManager + */ + protected Map<String, AnnotationsManager> managers; + + private static final String[] EMPTY_STRING_ARRAY = new String[]{}; + + /** + * Get the registred annotations for the given {@code element} in the + * given {@code classifier}. + * + * <b>Note:</b> The method always returns a {@code none null} value, but + * an empty array when no annotation when no annotation found for the + * element. + * + * @param classifier the classifier where is the element + * @param element the element on which searching annotations + * @return the array of annotation registred or an empty array if none. + */ + public String[] getAnnotations(ObjectModelClassifier classifier, + ObjectModelElement element) { + AnnotationsManager annotationsManager = getManager(classifier); + String[] result = null; + if (annotationsManager != null) { + result = annotationsManager.getAnnotations(element); + } + return result == null ? EMPTY_STRING_ARRAY : result; + } + + /** + * Get the AnotationsManager associated to the classifier. If not exist, + * it will be created. + * + * @param classifier reference for the AnotationsManager + * @return the annotationsManager associated to the classifier (never null) + */ + public AnnotationsManager getManager(ObjectModelClassifier classifier) { + Map<String, AnnotationsManager> managers = getManagers(); + String fqn = classifier.getQualifiedName(); + AnnotationsManager manager = managers.get(fqn); + if (manager == null) { + manager = new AnnotationsManager(); + managers.put(fqn, manager); + if (log.isDebugEnabled()) { + log.debug("Add new annotationsManager for : " + fqn); + } + } + return manager; + } + + protected Map<String, AnnotationsManager> getManagers() { + if (managers == null) { + managers = new HashMap<String, AnnotationsManager>(); + } + return managers; + } +} Copied: trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/CodesManager.java (from rev 1010, trunk/eugene/src/main/java/org/nuiton/eugene/java/CodesManager.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/CodesManager.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/CodesManager.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -0,0 +1,81 @@ +/* + * #%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.java.extension; + +import org.nuiton.eugene.models.object.ObjectModelOperation; + +import java.util.HashMap; +import java.util.Map; + +/** + * To manage some verbatim code to inject in operations. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.0.2 + */ +public class CodesManager { + + private static final String EMPTY_STRING = ""; + + /** store of codes associated to operations */ + protected Map<ObjectModelOperation, StringBuilder> codes; + + /** + * Add the {@code annotation} for the given {@code element} of + * the classifier. + * + * @param operation the operation on which add the code + * @param code the code to add + */ + public void addCode(ObjectModelOperation operation, String code) { + Map<ObjectModelOperation, StringBuilder> map = getCodes(); + + StringBuilder buffer = map.get(operation); + if (buffer == null) { + buffer = new StringBuilder(); + map.put(operation, buffer); + } + buffer.append('\n').append(code); + } + + /** + * Obtain the codes registred for a given operation of the classifier. + * + * @param operation the operation where to search for code + * @return the code for the operation (empty if none found) + */ + public String getCode(ObjectModelOperation operation) { + Map<ObjectModelOperation, StringBuilder> map = getCodes(); + StringBuilder buffer = map.get(operation); + return buffer == null ? EMPTY_STRING : buffer.toString(); + } + + protected Map<ObjectModelOperation, StringBuilder> getCodes() { + if (codes == null) { + codes = new HashMap<ObjectModelOperation, StringBuilder>(); + } + return codes; + } +} Copied: trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/CodesManagerExtension.java (from rev 1010, trunk/eugene/src/main/java/org/nuiton/eugene/java/CodesManagerExtension.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/CodesManagerExtension.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/CodesManagerExtension.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -0,0 +1,113 @@ +/* + * #%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.java.extension; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelOperation; + +import java.util.HashMap; +import java.util.Map; + +/** + * Object model extensions to manage verbatim code to attzach to operations. + * + * @author tchemit <chemit@codelutin.com> + * @see CodesManager + * @since 2.0.2 + */ +public class CodesManagerExtension { + + private static final Log log = LogFactory.getLog(CodesManagerExtension.class); + + /** Extension static used to identify CodesManagerExtension in ObjectModel */ + public static final String OBJECTMODEL_EXTENSION = "codes"; + + /** + * Map of CodesManager with key equals to the classifier qualified name + * associated to the CodesManager + */ + protected Map<String, CodesManager> managers; + + /** + * Add the {@code code} for the given {@code operation} of the + * given {@code classifier}. + * + * @param classifier the classifier container of the operation + * @param operation the operation on which to add the code + * @param code the code to add for the operation + */ + public void addcode(ObjectModelClassifier classifier, + ObjectModelOperation operation, + String code) { + CodesManager codesManager = getManager(classifier); + codesManager.addCode(operation, code); + } + + /** + * Get body code for a operation of the given classifier. + * <p/> + * The CodesManager must be defined in the model. + * + * @param classifier reference for the codes + * @param operation the operation to seek + * @return the body code of the method + */ + public String getCode(ObjectModelClassifier classifier, + ObjectModelOperation operation) { + CodesManager manager = getManager(classifier); + return manager.getCode(operation); + } + + /** + * Get the CodesManager associated to the classifier. + * <p/> + * <b>Note:</b> If not exist, it will be created. + * + * @param classifier reference for the ImportsManager + * @return the codesManager associated to the classifier (never null) + */ + public CodesManager getManager(ObjectModelClassifier classifier) { + Map<String, CodesManager> managers = getManagers(); + String fqn = classifier.getQualifiedName(); + CodesManager manager = managers.get(fqn); + if (manager == null) { + manager = new CodesManager(); + managers.put(fqn, manager); + if (log.isDebugEnabled()) { + log.debug("Add new codesManager for : " + fqn); + } + } + return manager; + } + + protected Map<String, CodesManager> getManagers() { + if (managers == null) { + managers = new HashMap<String, CodesManager>(); + } + return managers; + } +} Copied: trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ConstantsManager.java (from rev 1012, trunk/eugene/src/main/java/org/nuiton/eugene/java/ConstantsManager.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ConstantsManager.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ConstantsManager.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -0,0 +1,70 @@ +/* + * #%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.java.extension; + +import org.nuiton.eugene.GeneratorUtil; + +import java.util.Map; +import java.util.TreeMap; + +/** + * Manager of constant names. + * + * @author tchemit <chemit@codelutin.com> + * @since ? + */ +public class ConstantsManager { + /** + * cache of constant name (values) for property name (keys) + */ + protected Map<String, String> nameToConstant; + + /** + * Obtain a constant nmae from a property name and store it in cache + * the first time it had to build it. + * + * @param propertyName the propertyName to convert + * @return the equivalent constant name + */ + public String getConstantName(String propertyName) { + Map<String, String> map = getNameToConstant(); + if (map.containsKey(propertyName)) { + return map.get(propertyName); + } + // convert propertyName to constant name + String constantName = + GeneratorUtil.convertVariableNameToConstantName(propertyName); + map.put(propertyName,constantName); + return constantName; + } + + protected Map<String, String> getNameToConstant() { + if (nameToConstant == null) { + nameToConstant = new TreeMap<String, String>(); + } + return nameToConstant; + } +} \ No newline at end of file Copied: trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ConstantsManagerExtension.java (from rev 1012, trunk/eugene/src/main/java/org/nuiton/eugene/java/ConstantsManagerExtension.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ConstantsManagerExtension.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ConstantsManagerExtension.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -0,0 +1,55 @@ +/* + * #%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.java.extension; + +/** + * @author tchemit <chemit@codelutin.com> + * @since 2.3 + */ +public class ConstantsManagerExtension { + + /** + * Extension static used to identify {@code ConstantsManagerExtension} in + * ObjectModel + */ + public static final String OBJECTMODEL_EXTENSION = "constants"; + + /** + * the unique manager to use + */ + protected ConstantsManager manager = new ConstantsManager(); + + /** + * Obtain a constant nmae from a property name and store it in cache + * the first time it had to build it. + * + * @param propertyName the propertyName to convert + * @return the equivalent constant name + */ + public String getConstantName(String propertyName) { + return manager.getConstantName(propertyName); + } +} \ No newline at end of file Copied: trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ImportsManager.java (from rev 1012, trunk/eugene/src/main/java/org/nuiton/eugene/java/ImportsManager.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ImportsManager.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ImportsManager.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -0,0 +1,186 @@ +/* + * #%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.java.extension; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Class used in generators that allows to manage easily imports. A first-pass + * allow to register imports, and in a second-pass, returns the type to use in + * generated code. + * + * @author thimel, chemit + * @version $Revision$ + * + * @since 2.0.0 + */ +public class ImportsManager { + + private static Set<String> primitiveTypes; + + static { + primitiveTypes = new HashSet<String>(); + + primitiveTypes.add("byte"); + primitiveTypes.add("Byte"); + primitiveTypes.add("short"); + primitiveTypes.add("Short"); + primitiveTypes.add("int"); + primitiveTypes.add("Integer"); + primitiveTypes.add("long"); + primitiveTypes.add("Long"); + primitiveTypes.add("float"); + primitiveTypes.add("Float"); + primitiveTypes.add("double"); + primitiveTypes.add("Double"); + + primitiveTypes.add("char"); + primitiveTypes.add("Char"); + primitiveTypes.add("String"); + + primitiveTypes.add("boolean"); + primitiveTypes.add("Boolean"); + + primitiveTypes.add("void"); + + } + private Map<String, String> imports = new HashMap<String, String>(); + private State state = State.FILLING; + + /** + * From the given class, add it to the imports list. + * @param clazz the class to import + * @return true if import add was successful + * @see ImportsManager#addImport(String) + */ + public boolean addImport(Class<?> clazz) { + return addImport(clazz.getName()); + } + + /** + * From the given fqn (fully qualified name), add it to the imports list. + * If there is a conflict adding this import, will return false. + * If reading of the imports has started, this method will return false, + * unless type does not need to be imported. + * @param fqn the fully qualified name to import + * @return true if import add was successful + */ + public boolean addImport(String fqn) { + // if no package don't include it + if (!fqn.contains(".")) { + return true; + } + + // Exclude java.lang classes + if (fqn == null || fqn.trim().isEmpty() || + fqn.startsWith("java.lang.") && fqn.lastIndexOf(".") == 9) { + return true; + } + // Exclude primitive types + if (primitiveTypes.contains(fqn)) { + return true; + } + // Reject generics + if (fqn.contains("<") || fqn.contains(">")) { + return false; + } + String name = fqn.substring(fqn.lastIndexOf(".") + 1); + String inPlaceFqn = imports.get(name); + if (inPlaceFqn == null) { + // Someone has started to read imports, impossible to add some more + if (state == State.READING) { + return false; + } else { + imports.put(name, fqn); + return true; + } + } + // if fqn is not the same, return false. Otherwise, no need to override. + return inPlaceFqn.equals(fqn); + } + + /** + * Accorging to the already added types, returns the type to write in file. + * If there is a conflict, returns the fully qualified name, otherwise + * returns the simple name + * @param fqn the fully qualified name to add + * @return the fqn or simple name according to in-place imports + */ + public String getType(String fqn) { + boolean importResult = addImport(fqn); + if (!importResult) { + // There is a conflict, do not use simple name + return fqn; + } else { + // No conflict, use simple name + int packageEndIndex = fqn.lastIndexOf("."); + if (packageEndIndex == -1) { + return fqn; + } else { + return fqn.substring(packageEndIndex + 1); + } + } + } + + /** + * List the imports. This method will remove the useless imports according + * to the given packageName (no need to import a class in the same package) + * @param packageName the current package name (to avoid useless imports) + * @return the imports alphabeticaly sorted + */ + public List<String> getImports(String packageName) { + state = State.READING; + List<String> result = new ArrayList<String>(); + for (String fqn : imports.values()) { + if (!(fqn.lastIndexOf(".") == packageName.length() && + fqn.startsWith(packageName + "."))) { + result.add(fqn); + } + } + Collections.sort(result); + return result; + } + + /** + * Method to reset imports list. If imports has been listed, it becomes back + * possible to add imports. + */ + public void clearImports() { + imports.clear(); + state = State.FILLING; + } + + private enum State { + + FILLING, READING + } +} Copied: trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ImportsManagerExtension.java (from rev 1012, trunk/eugene/src/main/java/org/nuiton/eugene/java/ImportsManagerExtension.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ImportsManagerExtension.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/ImportsManagerExtension.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -0,0 +1,98 @@ +/* + * #%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.java.extension; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.models.object.ObjectModelClassifier; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * ImportsManagerExtension + * + * Created: 2 nov. 2009 + * + * @author fdesbois + * @version $Revision$ + * + * Extension for ObjectModel to manage imports for all classifiers in the model. + */ +public class ImportsManagerExtension { + + private static final Log log = LogFactory.getLog(ImportsManagerExtension.class); + + /** + * Extension static used to identify ImportsManagerExtension in ObjectModel + */ + public static final String OBJECTMODEL_EXTENSION = "imports"; + + /** + * Map of ImportsManager with key equals to the classifier qualified name associated to + * the ImportsManager + */ + protected Map<String, ImportsManager> managers; + + /** + * Get the ImportsManager associated to the classifier. If not exist, it will be created. + * + * @param classifier reference for the ImportsManager + * @return the importsManager associated to the classifier (never null) + */ + public ImportsManager getManager(ObjectModelClassifier classifier) { + Map<String, ImportsManager> managers = getManagers(); + String fqn = classifier.getQualifiedName(); + ImportsManager manager = managers.get(fqn); + if (manager == null) { + manager = new ImportsManager(); + managers.put(fqn, manager); + if (log.isDebugEnabled()) { + log.debug("Add new importsManager for : " + fqn); + } + } + return manager; + } + + /** + * Get imports for a classifier. The ImportsManager must be defined in the model. + * + * @param classifier reference for the imports + * @return a List of String which contains all imports for the classifier + */ + public List<String> getImports(ObjectModelClassifier classifier) { + ImportsManager manager = getManager(classifier); + return manager.getImports(classifier.getPackageName()); + } + + protected Map<String, ImportsManager> getManagers() { + if (managers == null) { + managers = new HashMap<String, ImportsManager>(); + } + return managers; + } +} Copied: trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/package-info.java (from rev 1012, trunk/eugene/src/main/java/org/nuiton/eugene/java/package-info.java) =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/package-info.java (rev 0) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/extension/package-info.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -0,0 +1,40 @@ +/* + * #%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% + */ + +/** + * Eugene java extension package : all specific extension for Java generation. + * <ul> + * <li>Annotations extension : to add some annotation on elements of a object model.</li> + * <li>Imports extension : to deal smartly with imports of code to generate.</li> + * <li>Constants extension : to deal with constants in java generators.</li> + * <li>codes extension : to add smartly some codes to operations.</li> + * </ul> + * @see AnnotationsManager + * @see ImportsManager + * @see ConstantsManager + * @see CodesManager + */ +package org.nuiton.eugene.java.extension; + Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/package-info.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/package-info.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/package-info.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -26,10 +26,10 @@ /** * Eugene java package : all specific class for Java generation. * <pre> - * - ObjectModel Extensions : {@link org.nuiton.eugene.java.AnnotationsManager } and {@link org.nuiton.eugene.java.ImportsManager } - * - Builder : {@link org.nuiton.eugene.java.JavaBuilder } used to fill an ObjectModel in a Java way - * - Transformer : {@link org.nuiton.eugene.java.ObjectModelTransformerToJava } used to transform an xmi ObjectModel to a java one - * - Generator : {@link org.nuiton.eugene.java.JavaGenerator } is a template used to write java files (processed by Nuiton-processor) + * - ObjectModel Extensions : which are in package extension + * - Builder : {@link JavaBuilder } used to fill an ObjectModel in a Java way + * - Transformer : {@link ObjectModelTransformerToJava } used to transform an xmi ObjectModel to a java one + * - Generator : {@link JavaGenerator } is a template used to write java files (processed by Nuiton-processor) * </pre> */ package org.nuiton.eugene.java; 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 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -148,12 +148,12 @@ String name = FileUtil.basename(file, "." + ext); File propFile = new File(dir, name + ".properties"); if (!propFile.exists()) { - if (log.isInfoEnabled()) { + if (isVerbose()) { log.info("Pas de fichier de propriete " + propFile + " associé au model"); } } else { - if (log.isInfoEnabled()) { + if (isVerbose()) { log.info("Lecture du fichier de propriete " + propFile + " associé au model"); } @@ -288,16 +288,30 @@ } String tag = matcher.group(2); - Class<?>[] targets = propertiesProvider.getTagValueTarget(tag); - if (targets == null) { + boolean safe = propertiesProvider.containsTagValue(tag); - // unknown tag value, can not use it + if (!safe) { if (log.isWarnEnabled()) { - log.warn("Invalid model tag value [" + key + "] : the tagvalue is unkown."); + log.warn("Invalid model tag value [" + key + "] : the tagvalue '" + tag + "' is unkown."); } -// return false; + } else { + safe = propertiesProvider.acceptTagValue(tag, ObjectModel.class); + + if (!safe) { + + // the tag value can not be apply of model + if (log.isWarnEnabled()) { + log.warn("Invalid model tag value [" + key + "] : this tagvalue '" + tag + "' can not be apply on the model."); + } + } } + if (!safe && isStrictLoading()) { + + // in strict loading do not accept unsafe tags + return false; + } + ObjectModelImpl modelImpl = (ObjectModelImpl) model; if (tag.equals(EugeneTagValues.TAG_VERSION)) { @@ -306,7 +320,7 @@ modelImpl.setVersion(value); } if (isVerbose()) { - log.info("import model tag value " + key + " --> " + tag + " = " + value); + log.info("model tag value imported " + key + " --> " + tag + " = " + value); } modelImpl.addTagValue(tag, value); return true; @@ -324,15 +338,42 @@ } String fqn = matcher.group(1); - fqn = StringUtil.substring(fqn, 0, -1); // remove ended - // . + fqn = StringUtil.substring(fqn, 0, -1); // remove ended . // target is class, attribute or operation String target = matcher.group(2); String targetName = matcher.group(3); - - // type is stereotype or tagvalue + // type is stereotype String type = matcher.group(4).toLowerCase(); + // target real type + Class<?> targetType = getTargetType(target); + boolean safe = propertiesProvider.containsStereotype(value); + + if (!safe) { + + // stereotype unkown + if (log.isWarnEnabled()) { + log.warn("Invalid stereotype [" + key + "] : this stereotype '" + value + "' is unkown."); + } + } else { + + safe = propertiesProvider.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 + "."); + } + } + } + + if (!safe && isStrictLoading()) { + + // in strict loading do not accept unsafe stereotypes + return false; + } + if (log.isDebugEnabled()) { log.debug("Propriete: '" + key + "' => " + "fqn:" + fqn + " target:" + target @@ -342,22 +383,27 @@ ObjectModelClassifier omc = getClassifier(model, STEREOTYPE, key, fqn); if (omc == null) { + + // classifier not found return false; } List<ObjectModelElement> elems = getObjectElements(omc, STEREOTYPE, key, fqn, target, targetName); if (elems == null) { + + // no element to apply return false; } for (ObjectModelElement elem1 : elems) { - if (elem1 == null) { - if (log.isWarnEnabled()) { - log.warn("Invalid stereotype [" + key + "] : Element '" + targetName + "' of type '" + target + "' on classifier '" + fqn + "' is null."); - } - continue; - } + //TODO tchemit 2010-11-29 uncomment this if there is some proble, but I don't see why there would be... +// if (elem1 == null) { +// if (log.isWarnEnabled()) { +// log.warn("Invalid stereotype [" + key + "] : Element '" + targetName + "' of type '" + target + "' on classifier '" + fqn + "' is null."); +// } +// continue; +// } ObjectModelElementImpl elem = (ObjectModelElementImpl) elem1; // pour les stereotypes @@ -367,7 +413,7 @@ } if (isVerbose()) { - log.info("import stereotype " + key + " --> " + fqn + ":" + target + ":" + targetName + ":" + type + " = " + value); + log.info("stereotype imported " + key + " --> " + fqn + ":" + target + ":" + targetName + ":" + type + " = " + value); } return true; @@ -389,11 +435,14 @@ // . // target is class, attribute or operation String target = matcher.group(2); + // name of the target (can be null on class) String targetName = matcher.group(3); - // type is stereotype or tagvalue + // type is tagvalue String type = matcher.group(4).toLowerCase(); - + // name of the tag value String tag = matcher.group(5); + // target real type + Class<?> targetType = getTargetType(target); if (log.isDebugEnabled()) { log.debug("Propriete: '" + key + "' => " @@ -402,8 +451,37 @@ + " type:" + type + " tag:" + tag); } + boolean safe = propertiesProvider.containsTagValue(tag); + + if (!safe) { + + // unkown tag value + if (log.isWarnEnabled()) { + log.warn("Invalid tag value [" + key + "] : this tagvalue '" + tag + "' is unkown."); + } + } else { + + safe = propertiesProvider.acceptTagValue(tag, targetType); + + if (!safe) { + + // the tag value can not be apply of model + if (log.isWarnEnabled()) { + log.warn("Invalid tag value [" + key + "] : this tagvalue '" + tag + "' can not be apply on the given type '" + target + "'."); + } + } + } + + if (!safe && isStrictLoading()) { + + // in strict loading do not accept unsafe tags + return false; + } + ObjectModelClassifier omc = getClassifier(model, TAGVALUE, key, fqn); if (omc == null) { + + // classifier not found return false; } @@ -411,6 +489,8 @@ getObjectElements(omc, TAGVALUE, key, fqn, target, targetName); if (elements == null) { + + // no elements to apply return false; } @@ -425,11 +505,26 @@ } if (isVerbose()) { - log.info("import tag value " + key + " --> " + fqn + ":" + target + ":" + targetName + ":" + type + ":" + tag + " = " + value); + log.info("tag value imported " + key + " --> " + fqn + ":" + target + ":" + targetName + ":" + type + ":" + tag + " = " + value); } return true; } + protected Class<?> getTargetType(String target) { + Class<?> result = null; + if (ATTRIBUTE.equals(target)) { + return ObjectModelAttribute.class; + } + if (OPERATION.equals(target)) { + return ObjectModelOperation.class; + } + if (CLASS.equals(target)) { + return ObjectModelClassifier.class; + } + + return result; + } + protected ObjectModelClassifier getClassifier(ObjectModel model, String type, String key, String fqn) { ObjectModelClassifier omc = model.getClassifier(fqn); if (omc == null) { Modified: trunk/eugene/src/test/java/org/nuiton/eugene/EugeneModelPropertiesProviderTest.java =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/EugeneModelPropertiesProviderTest.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/test/java/org/nuiton/eugene/EugeneModelPropertiesProviderTest.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -5,7 +5,11 @@ 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; /** * To test {@link ModelPropertiesUtil.EugeneModelPropertiesProvider}. @@ -24,35 +28,113 @@ } @Test - public void testGetTagValueTarget() throws Exception { - testTagValue(EugeneTagValues.TAG_CONSTANT_PREFIX, ObjectModel.class, ObjectModelClassifier.class); - testTagValue(EugeneTagValues.TAG_I18N_PREFIX, ObjectModel.class, ObjectModelClassifier.class); - testTagValue(EugeneTagValues.TAG_NO_PCS, ObjectModel.class, ObjectModelClassifier.class); - testTagValue(EugeneTagValues.TAG_VERSION, ObjectModel.class); + 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_NO_PCS, ObjectModel.class, ObjectModelClassifier.class); + getTagValueTarget(EugeneTagValues.TAG_VERSION, ObjectModel.class); } @Test - public void testGetStereotypeTarget() throws Exception { + public void containsTagValue() throws Exception { + containsTagValue(EugeneTagValues.TAG_CONSTANT_PREFIX, true); + containsTagValue(EugeneTagValues.TAG_I18N_PREFIX, true); + containsTagValue(EugeneTagValues.TAG_NO_PCS, true); + containsTagValue(EugeneTagValues.TAG_VERSION, true); - testStereotype(EugeneStereoTypes.STEREOTYPE_BEAN, ObjectModelClassifier.class); - testStereotype(EugeneStereoTypes.STEREOTYPE_INDEXED, ObjectModelAttribute.class); + long l = System.nanoTime(); + containsTagValue(EugeneTagValues.TAG_CONSTANT_PREFIX + l, false); + containsTagValue(EugeneTagValues.TAG_I18N_PREFIX + l, false); + containsTagValue(EugeneTagValues.TAG_NO_PCS + l, false); + containsTagValue(EugeneTagValues.TAG_VERSION + l, false); } @Test - public void testGetStore() throws Exception { + 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_NO_PCS, 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_NO_PCS, 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_NO_PCS + l, false, ObjectModelOperation.class, ObjectModelAttribute.class); + acceptTagValue(EugeneTagValues.TAG_VERSION + l, false, ObjectModelClassifier.class, ObjectModelOperation.class, ObjectModelAttribute.class); } - protected void testStereotype(String name, Class<?>... expected) { - Class<?>[] classes = provider.getStereotypeTarget(name); + @Test + public void getStereotypeTarget() throws Exception { + + getStereotypeTarget(EugeneStereoTypes.STEREOTYPE_BEAN, ObjectModelClassifier.class); + getStereotypeTarget(EugeneStereoTypes.STEREOTYPE_INDEXED, ObjectModelAttribute.class); + } + + @Test + public void containsStereotype() throws Exception { + containsStereotype(EugeneStereoTypes.STEREOTYPE_INDEXED, true); + containsStereotype(EugeneStereoTypes.STEREOTYPE_BEAN, true); + + long l = System.nanoTime(); + containsStereotype(EugeneStereoTypes.STEREOTYPE_INDEXED + l, false); + containsStereotype(EugeneStereoTypes.STEREOTYPE_BEAN + l, false); + } + + @Test + public void acceptStereotype() throws Exception { + + acceptStereotype(EugeneStereoTypes.STEREOTYPE_BEAN, true, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class, ObjectModelInterface.class); + acceptStereotype(EugeneStereoTypes.STEREOTYPE_INDEXED, true, ObjectModelAttribute.class); + + acceptStereotype(EugeneStereoTypes.STEREOTYPE_BEAN, false, ObjectModel.class, ObjectModelOperation.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_BEAN + l, false, ObjectModel.class, ObjectModelOperation.class); + 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 testTagValue(String name, Class<?>... expected) { - Class<?>[] classes = provider.getTagValueTarget(name); + protected void containsTagValue(String name, boolean expected) { + boolean classes = provider.containsTagValue(name); + Assert.assertEquals(expected, classes); + } + + protected void acceptTagValue(String name, boolean expected, Class<?>... types) { + for (Class<?> type : types) { + boolean actual = provider.acceptTagValue(name, type); + Assert.assertEquals(expected, actual); + } + } + + 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); + } + } } Modified: trunk/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -28,14 +28,13 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.junit.Assert; import org.junit.Test; import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; import org.nuiton.eugene.models.object.xml.ObjectModelParameterImpl; import java.util.Set; -import static org.junit.Assert.assertEquals; - /** @author fdesbois */ public class GeneratorUtilTest { @@ -49,7 +48,7 @@ // Without any params String result = GeneratorUtil.getOperationParametersListName(op); - assertEquals("", result); + Assert.assertEquals("", result); // With one param ObjectModelParameterImpl param1 = new ObjectModelParameterImpl(); @@ -57,7 +56,7 @@ op.addParameter(param1); result = GeneratorUtil.getOperationParametersListName(op); - assertEquals("param1", result); + Assert.assertEquals("param1", result); // With two params ObjectModelParameterImpl param2 = new ObjectModelParameterImpl(); @@ -65,7 +64,7 @@ op.addParameter(param2); result = GeneratorUtil.getOperationParametersListName(op); - assertEquals("param1, param2", result); + Assert.assertEquals("param1, param2", result); } @Test @@ -76,7 +75,7 @@ // Without any params String result = GeneratorUtil.getOperationParametersListDeclaration(op); - assertEquals("", result); + Assert.assertEquals("", result); // With one param ObjectModelParameterImpl param1 = new ObjectModelParameterImpl(); @@ -85,7 +84,7 @@ op.addParameter(param1); result = GeneratorUtil.getOperationParametersListDeclaration(op); - assertEquals("String param1", result); + Assert.assertEquals("String param1", result); // With two params ObjectModelParameterImpl param2 = new ObjectModelParameterImpl(); @@ -94,7 +93,7 @@ op.addParameter(param2); result = GeneratorUtil.getOperationParametersListDeclaration(op); - assertEquals("String param1, Date param2", result); + Assert.assertEquals("String param1, Date param2", result); } @@ -107,92 +106,92 @@ String expResult = "List"; String result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.util.Regex"; expResult = "Regex"; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "<T> java.util.List<T>"; expResult = "<T> List<T>"; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.util.List<? extends org.chorem.bonzoms.Bonzoms>"; expResult = "List<? extends Bonzoms>"; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.util.List<org.chorem.jtimer.Jtimer>"; expResult = "List<Jtimer>"; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.util.Set<java.util.Collection<java.util.Collection<java.util.Collection" + "<java.lang.String>>>>"; expResult = "Set<Collection<Collection<Collection<String>>>>"; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.util.Map<org.chorem.jtimer.Jtimer, java.util.Collection<java.lang.String>>"; expResult = "Map<Jtimer, Collection<String>>"; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "new java.util.HashMap<org.chorem.jtimer.Jtimer, T extends java.lang.String>()"; expResult = "new HashMap<Jtimer, T extends String>()"; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "Class<O>"; expResult = "Class<O>"; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "2.0"; expResult = "2.0"; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "\"eric.chatellier\""; expResult = "\"eric.chatellier\""; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "<T extends org.nuiton.topia.TopiaEntity, D extends org.nuiton.topia.TopiaDAO<? super T>> D"; expResult = "<T extends TopiaEntity, D extends TopiaDAO<? super T>> D"; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "Object..."; expResult = "Object..."; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "Class<A>..."; expResult = "Class<A>..."; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.lang.Class<A>..."; expResult = "Class<A>..."; result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); } /** @@ -207,92 +206,92 @@ String expResult = "List"; String result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.util.Regex"; expResult = "Regex"; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "<T> java.util.List<T>"; expResult = "List<T>"; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.util.List<? extends org.chorem.bonzoms.Bonzoms>"; expResult = "List<? extends Bonzoms>"; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.util.List<org.chorem.jtimer.Jtimer>"; expResult = "List<Jtimer>"; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.util.Set<java.util.Collection<java.util.Collection<java.util.Collection" + "<java.lang.String>>>>"; expResult = "Set<Collection<Collection<Collection<String>>>>"; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.util.Map<org.chorem.jtimer.Jtimer, java.util.Collection<java.lang.String>>"; expResult = "Map<Jtimer, Collection<String>>"; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "new java.util.HashMap<org.chorem.jtimer.Jtimer, T extends java.lang.String>()"; expResult = "new HashMap<Jtimer, T extends String>()"; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "Class<O>"; expResult = "Class<O>"; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "2.0"; expResult = "2.0"; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "\"eric.chatellier\""; expResult = "\"eric.chatellier\""; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "<T extends org.nuiton.topia.TopiaEntity, D extends org.nuiton.topia.TopiaDAO<? super T>> D"; expResult = "D"; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "Object..."; expResult = "Object..."; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "Class<A>..."; expResult = "Class<A>..."; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.lang.Class<A>..."; expResult = "Class<A>..."; result = GeneratorUtil.getSimpleName(str, true); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); } @@ -305,81 +304,81 @@ String expResult = "List"; String result = GeneratorUtil.removeGenericDefinition(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.util.Regex"; expResult = "java.util.Regex"; result = GeneratorUtil.removeGenericDefinition(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "<T> java.util.List<T>"; expResult = "java.util.List<T>"; result = GeneratorUtil.removeGenericDefinition(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = " <T> java.util.List<T> "; expResult = "java.util.List<T>"; result = GeneratorUtil.removeGenericDefinition(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.util.List<? extends org.chorem.bonzoms.Bonzoms>"; expResult = "java.util.List<? extends org.chorem.bonzoms.Bonzoms>"; result = GeneratorUtil.removeGenericDefinition(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.util.List<org.chorem.jtimer.Jtimer>"; expResult = "java.util.List<org.chorem.jtimer.Jtimer>"; result = GeneratorUtil.removeGenericDefinition(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "Class<O>"; expResult = "Class<O>"; result = GeneratorUtil.removeGenericDefinition(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "2.0"; expResult = "2.0"; result = GeneratorUtil.removeGenericDefinition(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "\"eric.chatellier\""; expResult = "\"eric.chatellier\""; result = GeneratorUtil.removeGenericDefinition(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "<T extends org.nuiton.topia.TopiaEntity, D extends org.nuiton.topia.TopiaDAO<? super T>> D"; expResult = "D"; result = GeneratorUtil.removeGenericDefinition(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "Object..."; expResult = "Object..."; result = GeneratorUtil.removeGenericDefinition(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "Class<A>..."; expResult = "Class<A>..."; result = GeneratorUtil.removeGenericDefinition(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); str = "java.lang.Class<A>..."; expResult = "java.lang.Class<A>..."; result = GeneratorUtil.removeGenericDefinition(str); log.info(str + " -> " + result); - assertEquals(expResult, result); + Assert.assertEquals(expResult, result); } @Test @@ -387,58 +386,58 @@ String str = "List"; Set<String> results = GeneratorUtil.getTypesList(str); log.info(str + " -> " + results); - assertEquals(1, results.size()); + Assert.assertEquals(1, results.size()); str = "java.util.Regex"; results = GeneratorUtil.getTypesList(str); log.info(str + " -> " + results); - assertEquals(1, results.size()); + Assert.assertEquals(1, results.size()); str = "java.util.List<? extends org.chorem.bonzoms.Bonzoms>"; results = GeneratorUtil.getTypesList(str); log.info(str + " -> " + results); - assertEquals(2, results.size()); + Assert.assertEquals(2, results.size()); str = "java.util.List<org.chorem.jtimer.Jtimer>"; results = GeneratorUtil.getTypesList(str); log.info(str + " -> " + results); - assertEquals(2, results.size()); + Assert.assertEquals(2, results.size()); str = "java.util.Set<java.util.Collection<java.util.Collection<java.util.Collection" + "<java.lang.String>>>>"; results = GeneratorUtil.getTypesList(str); log.info(str + " -> " + results); - assertEquals(3, results.size()); + Assert.assertEquals(3, results.size()); str = "java.util.Map<org.chorem.jtimer.Jtimer, java.util.Collection<java.lang.String>>"; results = GeneratorUtil.getTypesList(str); log.info(str + " -> " + results); - assertEquals(4, results.size()); + Assert.assertEquals(4, results.size()); str = "new java.util.HashMap<org.chorem.jtimer.Jtimer, T extends java.lang.String>()"; results = GeneratorUtil.getTypesList(str); log.info(str + " -> " + results); - assertEquals(3, results.size()); + Assert.assertEquals(3, results.size()); str = "java.util.Map<org.chorem.jtimer.Jtimer, java.util.Collection<String>>"; results = GeneratorUtil.getTypesList(str); log.info(str + " -> " + results); - assertEquals(4, results.size()); + Assert.assertEquals(4, results.size()); str = "java.util.List<java.util.Map<java.util.Date, java.lang.Integer>>"; results = GeneratorUtil.getTypesList(str); log.info(str + " -> " + results); - assertEquals(4, results.size()); + Assert.assertEquals(4, results.size()); str = "java.util.List<java.util.Map<java.util.Date, java.lang.Integer>>"; results = GeneratorUtil.getTypesList(str); log.info(str + " -> " + results); - assertEquals(4, results.size()); + Assert.assertEquals(4, results.size()); str = "java.util.TreeMap<java.util.ArrayList<java.util.Date>, java.util.SortedSet<java.lang.Number, java.lang.Double>>"; results = GeneratorUtil.getTypesList(str); log.info(str + " -> " + results); - assertEquals(6, results.size()); + Assert.assertEquals(6, results.size()); // str = "<T extends org.nuiton.topia.TopiaEntity> T"; // results = GeneratorUtil.getTypesList(str); Deleted: trunk/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerExtensionTest.java =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerExtensionTest.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerExtensionTest.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -1,112 +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.java; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.junit.Test; -import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; -import org.nuiton.eugene.models.object.xml.ObjectModelImpl; - -import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - - -/** - * ImportsManagerExtensionTest - * <p/> - * Created: 2 nov. 2009 - * - * @author fdesbois - * @version $Revision$ - * <p/> - * Mise a jour: $Date$ - * par : - */ -public class ImportsManagerExtensionTest { - - - private static final Log log = - LogFactory.getLog(ImportsManagerExtensionTest.class); - - /** - * Test of getManager method, of class ImportsManagerExtension. - * Prerequisite : Existing ObjectModel containing a classifier - * - Get an import Manager for a classifier - * - Test unique : one ImportsManager by classifier - */ - @Test - public void testGetManager() { - log.debug("getManager"); - - ImportsManagerExtension managers = new ImportsManagerExtension(); - - ObjectModelImpl model = new ObjectModelImpl(); - model.setName("TestModel"); - - ObjectModelClassImpl clazz = new ObjectModelClassImpl(); - clazz.setName("Person"); - clazz.setPackage("org.chorem.bonzoms"); - model.addClass(clazz); - - ImportsManager manager = managers.getManager(clazz); - assertNotNull(manager); - - ImportsManager manager2 = managers.getManager(clazz); - assertEquals(manager, manager2); - } - - /** - * Test of getImports method, of class ImportsManagerExtension. - * Prerequisite : Existing ObjectModel containing a classifier, imports set for this classifier - * - Get imports for an existing classifier with its ImportsManager - */ - @Test - public void testGetImports() { - log.debug("getImports"); - - ImportsManagerExtension managers = new ImportsManagerExtension(); - - ObjectModelImpl model = new ObjectModelImpl(); - model.setName("TestModel"); - - ObjectModelClassImpl clazz = new ObjectModelClassImpl(); - clazz.setName("Person"); - clazz.setPackage("org.chorem.bonzoms"); - model.addClass(clazz); - - ImportsManager manager = managers.getManager(clazz); - manager.addImport("java.util.List"); - - List<String> imports = managers.getImports(clazz); - assertNotNull(imports); - assertEquals(imports.size(), 1); - assertEquals(imports.get(0), "java.util.List"); - } - -} Deleted: trunk/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerTest.java =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerTest.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerTest.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -1,111 +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.java; - -import junit.framework.TestCase; - -import java.io.Serializable; -import java.util.List; - -public class ImportsManagerTest extends TestCase { - - private ImportsManager mgr; - - @Override - protected void setUp() throws Exception { - mgr = new ImportsManager(); - } - - public void testAddImport() throws Exception { - assertTrue(mgr.addImport("org.nuiton.eugene.Toto")); - assertTrue(mgr.addImport("org.nuiton.eugene.Toto")); //Repeat to test acceptance - assertTrue(mgr.addImport("org.nuiton.eugene.Tutu")); - assertFalse(mgr.addImport("org.chorem.eugene.Tutu")); //Conflict, package differs - - assertTrue(mgr.addImport("void")); - assertTrue(mgr.addImport("boolean")); - assertTrue(mgr.addImport("Byte")); - assertTrue(mgr.addImport("java.lang.Toto")); - assertFalse(mgr.addImport("java.lang.sub.Toto")); - - assertTrue(mgr.addImport(Serializable.class)); - assertFalse(mgr.addImport("org.nuiton.eugene.Serializable")); - } - - public void testGetType() throws Exception { - assertEquals("Toto", mgr.getType("org.nuiton.eugene.Toto")); - assertEquals("Toto", mgr.getType("org.nuiton.eugene.Toto")); //Repeat to test acceptance - assertEquals("Tutu", mgr.getType("org.nuiton.eugene.Tutu")); - assertEquals("org.chorem.eugene.Tutu", mgr.getType("org.chorem.eugene.Tutu")); //Conflict, package differs - - assertEquals("void", mgr.getType("void")); - assertEquals("boolean", mgr.getType("boolean")); - assertEquals("Byte", mgr.getType("Byte")); - assertEquals("Toto", mgr.getType("java.lang.Toto")); - assertEquals("java.lang.sub.Toto", mgr.getType("java.lang.sub.Toto")); - } - - public void testGetImports() throws Exception { - assertTrue(mgr.addImport("org.nuiton.eugene.Toto")); - assertTrue(mgr.addImport("org.nuiton.eugene.Tutu")); - assertTrue(mgr.addImport("org.nuiton.eugene.subpackage.Tata")); - List<String> imports = mgr.getImports("org.nuiton.eugene"); - assertEquals(1, imports.size()); - assertEquals("org.nuiton.eugene.subpackage.Tata", imports.get(0)); - - imports = mgr.getImports("org.nuiton"); - assertEquals(3, imports.size()); - // Check using alphabetic sort - assertEquals("org.nuiton.eugene.Toto", imports.get(0)); - assertEquals("org.nuiton.eugene.Tutu", imports.get(1)); - assertEquals("org.nuiton.eugene.subpackage.Tata", imports.get(2)); - - imports = mgr.getImports("org.chorem"); - assertEquals(3, imports.size()); - - imports = mgr.getImports("org.nuiton.eugene.subpackage"); - assertEquals(2, imports.size()); - assertEquals("org.nuiton.eugene.Toto", imports.get(0)); - assertEquals("org.nuiton.eugene.Tutu", imports.get(1)); - - assertTrue(mgr.addImport("java.lang.String")); - imports = mgr.getImports("org.nuiton.eugene.subpackage"); - assertEquals(2, imports.size()); - assertEquals("org.nuiton.eugene.Toto", imports.get(0)); - assertEquals("org.nuiton.eugene.Tutu", imports.get(1)); - - assertTrue(mgr.addImport("void")); - assertTrue(mgr.addImport("boolean")); - assertTrue(mgr.addImport("Byte")); - assertTrue(mgr.addImport("java.lang.Toto")); - assertFalse(mgr.addImport("java.lang.sub.Titi")); // Read as started, import is refused - assertTrue(mgr.addImport("org.nuiton.eugene.Tutu")); //Already present, must not reject - imports = mgr.getImports("org.nuiton.eugene.subpackage"); - assertEquals(2, imports.size()); - - } - -} Modified: trunk/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -27,8 +27,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.junit.Assert; import org.junit.Test; import org.nuiton.eugene.GeneratorUtilTest; +import org.nuiton.eugene.java.extension.ImportsManagerExtension; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; @@ -40,13 +42,6 @@ import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNotSame; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - /** * JavaBuilderTest * <p/> @@ -75,7 +70,8 @@ JavaBuilder builder = new JavaBuilder("TestModel"); - builder.getModel(); + ObjectModel model = builder.getModel(); + Assert.assertNotNull(model); } /** @@ -102,7 +98,7 @@ String type = "java.util.List<org.chorem.cash.Category>"; // type add : 2 imports added builder.addImport(classifier, type); - assertEquals(3, importsExtension.getImports(classifier).size()); + Assert.assertEquals(3, importsExtension.getImports(classifier).size()); } /** @@ -117,7 +113,10 @@ JavaBuilder builder = new JavaBuilder("TestModel"); - builder.createClass("Person", "org.chorem.bonzoms"); + ObjectModelClass modelClass = builder.createClass("Person", "org.chorem.bonzoms"); + Assert.assertNotNull(modelClass); + Assert.assertEquals("Person",modelClass.getName()); + Assert.assertEquals("org.chorem.bonzoms",modelClass.getPackageName()); } /** @@ -131,7 +130,10 @@ JavaBuilder builder = new JavaBuilder("TestModel"); ObjectModelClass clazz = builder.createAbstractClass("Person", "org.chorem.bonzoms"); - assertTrue(clazz.isAbstract()); + Assert.assertNotNull(clazz); + Assert.assertEquals("Person",clazz.getName()); + Assert.assertEquals("org.chorem.bonzoms",clazz.getPackageName()); + Assert.assertTrue(clazz.isAbstract()); } /** @@ -154,14 +156,14 @@ superclassQualifiedName = "org.chorem.bonzoms.NamedElement"; builder.setSuperClass(clazz, superclassQualifiedName); - assertEquals(1, clazz.getSuperclasses().size()); + Assert.assertEquals(1, clazz.getSuperclasses().size()); // Check imports ImportsManagerExtension ext = builder.getModel().getExtension( ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class); List<String> imports = ext.getImports(clazz); - assertEquals(0, imports.size()); + Assert.assertEquals(0, imports.size()); } /** @@ -185,8 +187,8 @@ ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class); List<String> imports = ext.getImports(classifier); - assertEquals(1, imports.size()); - assertTrue(imports.contains("java.io.Serializable")); + Assert.assertEquals(1, imports.size()); + Assert.assertTrue(imports.contains("java.io.Serializable")); } /** @@ -204,8 +206,8 @@ ObjectModelAttribute constant = builder.addConstant(classifier, "GENDER_MALE", "boolean", "true", ObjectModelModifier.PUBLIC); - assertTrue(constant.isFinal()); - assertTrue(constant.isStatic()); + Assert.assertTrue(constant.isFinal()); + Assert.assertTrue(constant.isStatic()); } /** @@ -237,9 +239,9 @@ List<String> imports = ext.getImports(classifier); // no imports for org.chorem.bonzoms.Role and java.lang.String - assertEquals(2, imports.size()); - assertTrue(imports.contains("java.util.ArrayList")); - assertTrue(imports.contains("java.util.List")); + Assert.assertEquals(2, imports.size()); + Assert.assertTrue(imports.contains("java.util.ArrayList")); + Assert.assertTrue(imports.contains("java.util.List")); } /** @@ -264,7 +266,7 @@ ObjectModelAttribute result = builder.addAttribute(classifier, attribute); - assertNotSame(attribute, result); + Assert.assertNotSame(attribute, result); } /** @@ -281,10 +283,10 @@ ObjectModelClass clazz = builder.createClass("Person", "org.chorem.bonzoms"); ObjectModelOperation operation = builder.addConstructor(clazz, ObjectModelModifier.PUBLIC); - assertNotNull(operation); - assertEquals(operation.getName(), "Person"); - assertNull(operation.getReturnParameter()); - assertFalse(operation.isAbstract()); + Assert.assertNotNull(operation); + Assert.assertEquals(operation.getName(), "Person"); + Assert.assertNull(operation.getReturnParameter()); + Assert.assertFalse(operation.isAbstract()); } /** @@ -313,8 +315,8 @@ ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class); List<String> imports = ext.getImports(classifier); - assertEquals(1, imports.size()); - assertTrue(imports.contains("java.util.List")); + Assert.assertEquals(1, imports.size()); + Assert.assertTrue(imports.contains("java.util.List")); } /** @@ -341,7 +343,7 @@ ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class); List<String> imports = ext.getImports(classifier); - assertEquals(0, imports.size()); + Assert.assertEquals(0, imports.size()); } @@ -369,7 +371,7 @@ ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class); List<String> imports = ext.getImports(classifier); - assertEquals(0, imports.size()); + Assert.assertEquals(0, imports.size()); } /** @@ -378,7 +380,7 @@ * * @see ObjectModelBuilderTest#testSetOperationBody() */ - @Test + @Test(expected = IllegalArgumentException.class) public void testSetOperationBody() { log.debug("setOperationBody"); @@ -389,12 +391,9 @@ ObjectModelOperation operation = builder.addOperation(classifier, "setName", "java.lang.String", ObjectModelModifier.PUBLIC, ObjectModelModifier.ABSTRACT); - try { - builder.setOperationBody(operation, "this.name = name"); - } catch (Exception eee) { - assertEquals(IllegalArgumentException.class, eee.getClass()); - log.debug("expected exception : " + eee.getMessage()); - } + + builder.setOperationBody(operation, "this.name = name"); + } } Copied: trunk/eugene/src/test/java/org/nuiton/eugene/java/extension/ImportsManagerExtensionTest.java (from rev 1012, trunk/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerExtensionTest.java) =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/java/extension/ImportsManagerExtensionTest.java (rev 0) +++ trunk/eugene/src/test/java/org/nuiton/eugene/java/extension/ImportsManagerExtensionTest.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -0,0 +1,107 @@ +/* + * #%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.java.extension; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelImpl; + +import java.util.List; + + +/** + * ImportsManagerExtensionTest + * <p/> + * Created: 2 nov. 2009 + * + * @author fdesbois + * @version $Revision$ + */ +public class ImportsManagerExtensionTest { + + + private static final Log log = + LogFactory.getLog(ImportsManagerExtensionTest.class); + + /** + * Test of getManager method, of class ImportsManagerExtension. + * Prerequisite : Existing ObjectModel containing a classifier + * - Get an import Manager for a classifier + * - Test unique : one ImportsManager by classifier + */ + @Test + public void testGetManager() { + log.debug("getManager"); + + ImportsManagerExtension managers = new ImportsManagerExtension(); + + ObjectModelImpl model = new ObjectModelImpl(); + model.setName("TestModel"); + + ObjectModelClassImpl clazz = new ObjectModelClassImpl(); + clazz.setName("Person"); + clazz.setPackage("org.chorem.bonzoms"); + model.addClass(clazz); + + ImportsManager manager = managers.getManager(clazz); + Assert.assertNotNull(manager); + + ImportsManager manager2 = managers.getManager(clazz); + Assert.assertEquals(manager, manager2); + } + + /** + * Test of getImports method, of class ImportsManagerExtension. + * Prerequisite : Existing ObjectModel containing a classifier, imports set for this classifier + * - Get imports for an existing classifier with its ImportsManager + */ + @Test + public void testGetImports() { + log.debug("getImports"); + + ImportsManagerExtension managers = new ImportsManagerExtension(); + + ObjectModelImpl model = new ObjectModelImpl(); + model.setName("TestModel"); + + ObjectModelClassImpl clazz = new ObjectModelClassImpl(); + clazz.setName("Person"); + clazz.setPackage("org.chorem.bonzoms"); + model.addClass(clazz); + + ImportsManager manager = managers.getManager(clazz); + manager.addImport("java.util.List"); + + List<String> imports = managers.getImports(clazz); + Assert.assertNotNull(imports); + Assert.assertEquals(imports.size(), 1); + Assert.assertEquals(imports.get(0), "java.util.List"); + } + +} Property changes on: trunk/eugene/src/test/java/org/nuiton/eugene/java/extension/ImportsManagerExtensionTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Copied: trunk/eugene/src/test/java/org/nuiton/eugene/java/extension/ImportsManagerTest.java (from rev 1012, trunk/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerTest.java) =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/java/extension/ImportsManagerTest.java (rev 0) +++ trunk/eugene/src/test/java/org/nuiton/eugene/java/extension/ImportsManagerTest.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -0,0 +1,116 @@ +/* + * #%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.java.extension; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.io.Serializable; +import java.util.List; + +public class ImportsManagerTest { + + private ImportsManager mgr; + + @Before + public void setUp() throws Exception { + mgr = new ImportsManager(); + } + + @Test + public void testAddImport() throws Exception { + Assert.assertTrue(mgr.addImport("org.nuiton.eugene.Toto")); + Assert.assertTrue(mgr.addImport("org.nuiton.eugene.Toto")); //Repeat to test acceptance + Assert.assertTrue(mgr.addImport("org.nuiton.eugene.Tutu")); + Assert.assertFalse(mgr.addImport("org.chorem.eugene.Tutu")); //Conflict, package differs + + Assert.assertTrue(mgr.addImport("void")); + Assert.assertTrue(mgr.addImport("boolean")); + Assert.assertTrue(mgr.addImport("Byte")); + Assert.assertTrue(mgr.addImport("java.lang.Toto")); + Assert.assertFalse(mgr.addImport("java.lang.sub.Toto")); + + Assert.assertTrue(mgr.addImport(Serializable.class)); + Assert.assertFalse(mgr.addImport("org.nuiton.eugene.Serializable")); + } + + @Test + public void testGetType() throws Exception { + Assert.assertEquals("Toto", mgr.getType("org.nuiton.eugene.Toto")); + Assert.assertEquals("Toto", mgr.getType("org.nuiton.eugene.Toto")); //Repeat to test acceptance + Assert.assertEquals("Tutu", mgr.getType("org.nuiton.eugene.Tutu")); + Assert.assertEquals("org.chorem.eugene.Tutu", mgr.getType("org.chorem.eugene.Tutu")); //Conflict, package differs + + Assert.assertEquals("void", mgr.getType("void")); + Assert.assertEquals("boolean", mgr.getType("boolean")); + Assert.assertEquals("Byte", mgr.getType("Byte")); + Assert.assertEquals("Toto", mgr.getType("java.lang.Toto")); + Assert.assertEquals("java.lang.sub.Toto", mgr.getType("java.lang.sub.Toto")); + } + + @Test + public void testGetImports() throws Exception { + Assert.assertTrue(mgr.addImport("org.nuiton.eugene.Toto")); + Assert.assertTrue(mgr.addImport("org.nuiton.eugene.Tutu")); + Assert.assertTrue(mgr.addImport("org.nuiton.eugene.subpackage.Tata")); + List<String> imports = mgr.getImports("org.nuiton.eugene"); + Assert.assertEquals(1, imports.size()); + Assert.assertEquals("org.nuiton.eugene.subpackage.Tata", imports.get(0)); + + imports = mgr.getImports("org.nuiton"); + Assert.assertEquals(3, imports.size()); + // Check using alphabetic sort + Assert.assertEquals("org.nuiton.eugene.Toto", imports.get(0)); + Assert.assertEquals("org.nuiton.eugene.Tutu", imports.get(1)); + Assert.assertEquals("org.nuiton.eugene.subpackage.Tata", imports.get(2)); + + imports = mgr.getImports("org.chorem"); + Assert.assertEquals(3, imports.size()); + + imports = mgr.getImports("org.nuiton.eugene.subpackage"); + Assert.assertEquals(2, imports.size()); + Assert.assertEquals("org.nuiton.eugene.Toto", imports.get(0)); + Assert.assertEquals("org.nuiton.eugene.Tutu", imports.get(1)); + + Assert.assertTrue(mgr.addImport("java.lang.String")); + imports = mgr.getImports("org.nuiton.eugene.subpackage"); + Assert.assertEquals(2, imports.size()); + Assert.assertEquals("org.nuiton.eugene.Toto", imports.get(0)); + Assert.assertEquals("org.nuiton.eugene.Tutu", imports.get(1)); + + Assert.assertTrue(mgr.addImport("void")); + Assert.assertTrue(mgr.addImport("boolean")); + Assert.assertTrue(mgr.addImport("Byte")); + Assert.assertTrue(mgr.addImport("java.lang.Toto")); + Assert.assertFalse(mgr.addImport("java.lang.sub.Titi")); // Read as started, import is refused + Assert.assertTrue(mgr.addImport("org.nuiton.eugene.Tutu")); //Already present, must not reject + imports = mgr.getImports("org.nuiton.eugene.subpackage"); + Assert.assertEquals(2, imports.size()); + + } + +} Property changes on: trunk/eugene/src/test/java/org/nuiton/eugene/java/extension/ImportsManagerTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:mergeinfo + /branches/1.0.1-Javabuilder/eugene/src/test/java/org/nuiton/eugene/ImportsManagerTest.java:641-651 /branches/1.1.0-Javabuilder/eugene/src/test/java/org/nuiton/eugene/ImportsManagerTest.java:652-681 /branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/ImportsManagerTest.java:682-754 Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderTest.java =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderTest.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderTest.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -28,6 +28,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.junit.Assert; import org.junit.Test; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAssociationClass; @@ -43,11 +44,6 @@ import java.util.List; import java.util.Set; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - /** * ObjectModelBuilder * <p/> @@ -72,8 +68,8 @@ ObjectModelBuilder builder = new ObjectModelBuilder("TestModel"); - assertNotNull(builder.getModel()); - assertEquals("TestModel", builder.getModel().getName()); + Assert.assertNotNull(builder.getModel()); + Assert.assertEquals("TestModel", builder.getModel().getName()); } /** @@ -93,7 +89,7 @@ // model.tagvalue.fr.ifremer.isisfish.types.Month=fr.ifremer.isisfish.types.hibernate.MonthType ObjectModel model = builder.getModel(); - assertEquals("fr.ifremer.isisfish.types.hibernate.MonthType", + Assert.assertEquals("fr.ifremer.isisfish.types.hibernate.MonthType", model.getTagValue("fr.ifremer.isisfish.types.Month")); // fr.isisfish.entities.Population.attribute.name.tagvalue.pk=topiaId @@ -101,7 +97,7 @@ ObjectModelAttribute attr = builder.addAttribute(clazz, "name", "java.lang.String"); builder.addTagValue(attr, "pk", "topiaId"); - assertEquals("topiaId", attr.getTagValue("pk")); + Assert.assertEquals("topiaId", attr.getTagValue("pk")); } /** @@ -117,10 +113,10 @@ ObjectModelClass clazz = builder.createClass("Person", "org.chorem.bonzoms"); - assertNotNull(clazz); - assertEquals("Person", clazz.getName()); - assertEquals("org.chorem.bonzoms", clazz.getPackageName()); - assertEquals("org.chorem.bonzoms.Person", clazz.getQualifiedName()); + Assert.assertNotNull(clazz); + Assert.assertEquals("Person", clazz.getName()); + Assert.assertEquals("org.chorem.bonzoms", clazz.getPackageName()); + Assert.assertEquals("org.chorem.bonzoms.Person", clazz.getQualifiedName()); } /** Test of createInterface method, of class ObjectModelBuilder. */ @@ -141,7 +137,7 @@ ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms"); ObjectModelAttribute attribute = builder.addAttribute(classifier, "firstName", "java.lang.String"); - assertEquals("", attribute.getDefaultValue()); + Assert.assertEquals("", attribute.getDefaultValue()); } /** @@ -160,20 +156,20 @@ ObjectModelAttribute attribute = builder.addAttribute(classifier, "firstName", "java.lang.String", "", ObjectModelModifier.PUBLIC); - assertNotNull(attribute); - assertEquals("firstName", attribute.getName()); - assertEquals("java.lang.String", attribute.getType()); - assertEquals("public", attribute.getVisibility()); - assertEquals("", attribute.getDefaultValue()); - assertFalse(attribute.isFinal()); - assertFalse(attribute.isStatic()); + Assert.assertNotNull(attribute); + Assert.assertEquals("firstName", attribute.getName()); + Assert.assertEquals("java.lang.String", attribute.getType()); + Assert.assertEquals("public", attribute.getVisibility()); + Assert.assertEquals("", attribute.getDefaultValue()); + Assert.assertFalse(attribute.isFinal()); + Assert.assertFalse(attribute.isStatic()); attribute = builder.addAttribute(classifier, "roles", "java.lang.List<org.chorem.bonzoms.Role>", "new java.lang.ArrayList<org.chorem.bonzoms.Role>()", ObjectModelModifier.PRIVATE, ObjectModelModifier.STATIC); - assertEquals("new java.lang.ArrayList<org.chorem.bonzoms.Role>()", attribute.getDefaultValue()); - assertTrue(attribute.isStatic()); + Assert.assertEquals("new java.lang.ArrayList<org.chorem.bonzoms.Role>()", attribute.getDefaultValue()); + Assert.assertTrue(attribute.isStatic()); } /** @@ -191,15 +187,15 @@ ObjectModelOperation result = builder.addOperation(classifier, "methodName", "java.util.List<java.lang.String>", ObjectModelModifier.PUBLIC); - assertNotNull(result); - assertEquals(result.getName(), "methodName"); - assertEquals(result.getReturnType(), "java.util.List<java.lang.String>"); - assertEquals(result.getVisibility(), "public"); - assertFalse(result.isAbstract()); + Assert.assertNotNull(result); + Assert.assertEquals(result.getName(), "methodName"); + Assert.assertEquals(result.getReturnType(), "java.util.List<java.lang.String>"); + Assert.assertEquals(result.getVisibility(), "public"); + Assert.assertFalse(result.isAbstract()); result = builder.addOperation(classifier, "addPropertyChangeListener", "void", ObjectModelModifier.PUBLIC, ObjectModelModifier.ABSTRACT); - assertTrue(result.isAbstract()); + Assert.assertTrue(result.isAbstract()); } /** @@ -219,8 +215,8 @@ ObjectModelModifier.PUBLIC); builder.setOperationBody(operation, "this.name = name"); - assertNotNull(operation.getBodyCode()); - assertEquals(operation.getBodyCode(), "this.name = name"); + Assert.assertNotNull(operation.getBodyCode()); + Assert.assertEquals(operation.getBodyCode(), "this.name = name"); } /** @@ -240,8 +236,8 @@ String interfaceQualifiedName = "java.io.Serializable"; builder.addInterface(classifier, interfaceQualifiedName); - assertNotNull(classifier.getInterfaces()); - assertEquals(classifier.getInterfaces().size(), 1); + Assert.assertNotNull(classifier.getInterfaces()); + Assert.assertEquals(classifier.getInterfaces().size(), 1); } /** @@ -260,7 +256,7 @@ String superclassQualifiedName = "org.chorem.bonzoms.Party"; builder.addSuperclass(clazz, superclassQualifiedName); - assertEquals(1, clazz.getSuperclasses().size()); + Assert.assertEquals(1, clazz.getSuperclasses().size()); } /** @@ -280,13 +276,13 @@ ObjectModelModifier.PUBLIC); ObjectModelParameter param = builder.addParameter(operation, "java.lang.String", "name"); - assertNotNull(param); - assertEquals(param.getName(), "name"); - assertEquals(param.getType(), "java.lang.String"); + Assert.assertNotNull(param); + Assert.assertEquals(param.getName(), "name"); + Assert.assertEquals(param.getType(), "java.lang.String"); List<ObjectModelParameter> listParams = (List<ObjectModelParameter>) operation.getParameters(); ObjectModelParameter param1 = listParams.get(0); - assertEquals(param1, param); + Assert.assertEquals(param1, param); } /** @@ -307,11 +303,11 @@ builder.addException(operation, "java.lang.IllegalArgumentException"); Set<String> exceptions = operation.getExceptions(); - assertNotNull(exceptions); - assertEquals(exceptions.size(), 1); + Assert.assertNotNull(exceptions); + Assert.assertEquals(exceptions.size(), 1); Iterator<String> it = exceptions.iterator(); - assertNotNull(it.hasNext()); - assertEquals(it.next(), "java.lang.IllegalArgumentException"); + Assert.assertNotNull(it.hasNext()); + Assert.assertEquals(it.next(), "java.lang.IllegalArgumentException"); } /** Test of setDocumentation method, of class ObjectModelBuilder. */ @@ -338,14 +334,14 @@ ObjectModelAttribute assoc = builder.addAssociation(classA, classB, "poll", 1, 1, ObjectModelModifier.COMPOSITE, ObjectModelModifier.NAVIGABLE, ObjectModelModifier.ORDERED); - assertNotNull(assoc); - assertTrue(assoc.isNavigable()); - assertTrue(assoc.isComposite()); - assertTrue(assoc.isOrdered()); - assertEquals("poll", assoc.getName()); - assertEquals(1, assoc.getMinMultiplicity()); - assertEquals(1, assoc.getMaxMultiplicity()); - assertEquals("org.chorem.pollen.business.persistence.Vote", assoc.getType()); + Assert.assertNotNull(assoc); + Assert.assertTrue(assoc.isNavigable()); + Assert.assertTrue(assoc.isComposite()); + Assert.assertTrue(assoc.isOrdered()); + Assert.assertEquals("poll", assoc.getName()); + Assert.assertEquals(1, assoc.getMinMultiplicity()); + Assert.assertEquals(1, assoc.getMaxMultiplicity()); + Assert.assertEquals("org.chorem.pollen.business.persistence.Vote", assoc.getType()); } @@ -370,8 +366,8 @@ ObjectModelAttribute assocB = builder.addReverseAssociation(assocA, "vote", 0, -1); - assertEquals(assocA, assocB.getReverseAttribute()); - assertEquals(assocB, assocA.getReverseAttribute()); + Assert.assertEquals(assocA, assocB.getReverseAttribute()); + Assert.assertEquals(assocB, assocA.getReverseAttribute()); } /** @@ -401,9 +397,9 @@ List<ObjectModelClassifier> classifiers = assocClass.getParticipantsClassifiers(); - assertEquals(2, classifiers.size()); - assertTrue(classifiers.contains(classA)); - assertTrue(classifiers.contains(classB)); + Assert.assertEquals(2, classifiers.size()); + Assert.assertTrue(classifiers.contains(classA)); + Assert.assertTrue(classifiers.contains(classB)); } /** Test of addStereotype method, of class ObjectModelBuilder. */ @@ -415,11 +411,11 @@ ObjectModelClass classA = builder.createClass("Vote", "org.chorem.pollen.business.persistence"); - assertEquals(0, classA.getStereotypes().size()); + Assert.assertEquals(0, classA.getStereotypes().size()); builder.addStereotype(classA, "entity"); - assertEquals(1, classA.getStereotypes().size()); + Assert.assertEquals(1, classA.getStereotypes().size()); } Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelImplTest.java =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelImplTest.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelImplTest.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -27,12 +27,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.junit.Assert; import org.junit.Test; -import org.nuiton.eugene.java.ImportsManagerExtension; +import org.nuiton.eugene.java.extension.ImportsManagerExtension; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - /** @author fdesbois */ public class ObjectModelImplTest { @@ -349,12 +347,12 @@ ImportsManagerExtension result = model.getExtension(ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class); - assertNotNull(result); + Assert.assertNotNull(result); ImportsManagerExtension result2 = model.getExtension(ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class); - assertEquals(result, result2); + Assert.assertEquals(result, result2); } } Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/state/StateModelDTDTest.java =================================================================== --- trunk/eugene/src/test/java/org/nuiton/eugene/models/state/StateModelDTDTest.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/eugene/src/test/java/org/nuiton/eugene/models/state/StateModelDTDTest.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -76,31 +76,36 @@ SAXParser parser = factory.newSAXParser(); // --- Set Input source - InputSource source = new InputSource(new FileInputStream(file)); + FileInputStream stream = new FileInputStream(file); - // --- parse - XMLReader reader = parser.getXMLReader(); - reader.setContentHandler(new DefaultHandler()); - reader.setErrorHandler(new DefaultHandler()); - reader.setEntityResolver(new EntityResolver() { - @Override - public InputSource resolveEntity(String publicId, String systemId) - throws SAXException, IOException { + try { + InputSource source = new InputSource(stream); + // --- parse + XMLReader reader = parser.getXMLReader(); + reader.setContentHandler(new DefaultHandler()); + reader.setErrorHandler(new DefaultHandler()); + reader.setEntityResolver(new EntityResolver() { + @Override + public InputSource resolveEntity(String publicId, String systemId) + throws SAXException, IOException { - String dtd = systemId.substring(systemId.lastIndexOf("/")); + String dtd = systemId.substring(systemId.lastIndexOf("/")); - URL url = Resource.getURL("dtd/" + dtd); - InputSource source; - try { - source = new InputSource(new FileInputStream(new File(url.toURI()))); - } catch (URISyntaxException e) { - throw new SAXException(e); + URL url = Resource.getURL("dtd/" + dtd); + InputSource source; + try { + source = new InputSource(new FileInputStream(new File(url.toURI()))); + } catch (URISyntaxException e) { + throw new SAXException(e); + } + + return source; } - - return source; - } - }); - reader.parse(source); + }); + reader.parse(source); + } finally { + stream.close(); + } } } } Modified: trunk/maven-eugene-plugin/src/it/smart-generate/generators/src/main/java/org/nuiton/eugene/test/generator/BeanGenerator.java =================================================================== --- trunk/maven-eugene-plugin/src/it/smart-generate/generators/src/main/java/org/nuiton/eugene/test/generator/BeanGenerator.java 2010-11-29 09:24:24 UTC (rev 1019) +++ trunk/maven-eugene-plugin/src/it/smart-generate/generators/src/main/java/org/nuiton/eugene/test/generator/BeanGenerator.java 2010-11-29 13:07:18 UTC (rev 1020) @@ -75,7 +75,6 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.models.object.ObjectModelGenerator; import org.nuiton.eugene.GeneratorUtil; -import org.nuiton.eugene.java.ImportsManager; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelClassifier; @@ -83,6 +82,8 @@ import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelParameter; +import org.nuiton.eugene.java.extension.ImportsManagerExtension; +import org.nuiton.eugene.java.extension.ImportsManager; /** * DTO generator @@ -632,7 +633,7 @@ * @param attributes list of attributes for the generation (may be not empty) * @param imports the ImportsManager used to generate the header imports of the DTO * @return the same list of attributes in parameter with attributes from entities dependencies - * @see org.nuiton.eugene.java.ImportsManager + * @see org.nuiton.eugene.java.extension.ImportsManager * @see org.nuiton.eugene.models.object.ObjectModelDependency */ private List<ObjectModelAttribute> setAttributesForDTO(ObjectModelClass clazz,