Author: bleny Date: 2011-06-20 18:59:45 +0200 (Mon, 20 Jun 2011) New Revision: 2300 Url: http://nuiton.org/repositories/revision/topia/2300 Log: enable use of enumeration as an attribute of an entity in model Added: trunk/topia-persistence/src/test/java/org/nuiton/topiatest/EnumTest.java trunk/topia-persistence/src/test/java/org/nuiton/topiatest/Gender.java Modified: trunk/pom.xml trunk/topia-persistence/pom.xml trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/QueryHelperTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaStereoTypes.java trunk/topia-persistence/src/test/xmi/topiatest.zargo Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-06-10 10:28:38 UTC (rev 2299) +++ trunk/pom.xml 2011-06-20 16:59:45 UTC (rev 2300) @@ -256,7 +256,7 @@ <projectId>topia</projectId> <!-- libs version --> - <eugeneVersion>2.3.4</eugeneVersion> + <eugeneVersion>2.4-SNAPSHOT</eugeneVersion> <nuitonUtilsVersion>2.2</nuitonUtilsVersion> <processorPluginVersion>1.2.1</processorPluginVersion> <nuitonI18nVersion>2.4</nuitonI18nVersion> Modified: trunk/topia-persistence/pom.xml =================================================================== --- trunk/topia-persistence/pom.xml 2011-06-10 10:28:38 UTC (rev 2299) +++ trunk/topia-persistence/pom.xml 2011-06-20 16:59:45 UTC (rev 2300) @@ -132,8 +132,6 @@ <!-- *** Build Settings ****************************************** --> <!-- ************************************************************* --> - <packaging>jar</packaging> - <build> <testResources> Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java 2011-06-10 10:28:38 UTC (rev 2299) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java 2011-06-20 16:59:45 UTC (rev 2300) @@ -155,7 +155,7 @@ } ObjectModelClassifier classifier = dependency.getSupplier(); - if (TopiaGeneratorUtil.hasEntityStereotype(classifier)) { + if (TopiaGeneratorUtil.isEntity(classifier)) { // Only direct operations will be used. No need to have more // operations. @@ -172,7 +172,7 @@ @Override public void transformFromClass(ObjectModelClass clazz) { - if (!TopiaGeneratorUtil.hasEntityStereotype(clazz)) { + if (!TopiaGeneratorUtil.isEntity(clazz)) { return; } @@ -187,7 +187,7 @@ String extendClass = ""; for (ObjectModelClass parent : clazz.getSuperclasses()) { extendClass = parent.getQualifiedName(); - if (TopiaGeneratorUtil.hasEntityStereotype(parent)) { + if (TopiaGeneratorUtil.isEntity(parent)) { extendClass += "DAOImpl<E>"; // in java no multi-inheritance break; Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java 2011-06-10 10:28:38 UTC (rev 2299) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java 2011-06-20 16:59:45 UTC (rev 2300) @@ -86,14 +86,14 @@ } ObjectModelClassifier classifier = dependency.getSupplier(); - if (TopiaGeneratorUtil.hasEntityStereotype(classifier)) { + if (TopiaGeneratorUtil.isEntity(classifier)) { noGenerationNeeded.add(classifier.getQualifiedName()); } } @Override public void transformFromClass(ObjectModelClass clazz) { - if (!TopiaGeneratorUtil.hasEntityStereotype(clazz) || hasDAOOperations(clazz)) { + if (!TopiaGeneratorUtil.isEntity(clazz) || hasDAOOperations(clazz)) { return; } String clazzName = clazz.getName(); Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOTransformer.java 2011-06-10 10:28:38 UTC (rev 2299) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOTransformer.java 2011-06-20 16:59:45 UTC (rev 2300) @@ -45,7 +45,7 @@ @Override public void transformFromClass(ObjectModelClass clazz) { - if (!TopiaGeneratorUtil.hasEntityStereotype(clazz)) { + if (!TopiaGeneratorUtil.isEntity(clazz)) { return; } String clazzName = clazz.getName(); Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOTransformer.java 2011-06-10 10:28:38 UTC (rev 2299) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOTransformer.java 2011-06-20 16:59:45 UTC (rev 2300) @@ -434,7 +434,7 @@ attrEntity = model.getClass(attr.getType()); } boolean isDTO = attrEntity != null && - TopiaGeneratorUtil.hasEntityStereotype(attrEntity); //THIMEL : STEREOTYPE ENTITY ??? + TopiaGeneratorUtil.isEntity(attrEntity); //THIMEL : STEREOTYPE ENTITY ??? ObjectModelAttribute reverse = attr.getReverseAttribute(); if (isDTO && (reverse == null || !reverse.isNavigable()) && !attr.hasAssociationClass() || !isDTO) { String attrName = attr.getName(); Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java 2011-06-10 10:28:38 UTC (rev 2299) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java 2011-06-20 16:59:45 UTC (rev 2300) @@ -168,7 +168,7 @@ ObjectModelClassifier classifier = dependency.getSupplier(); - if (!TopiaGeneratorUtil.hasEntityStereotype(classifier)) { + if (!TopiaGeneratorUtil.isEntity(classifier)) { // dependency supplier is not an entity... if (log.isWarnEnabled()) { @@ -201,7 +201,7 @@ @Override public void transformFromClass(ObjectModelClass clazz) { - if (!TopiaGeneratorUtil.hasEntityStereotype(clazz)) { + if (!TopiaGeneratorUtil.isEntity(clazz)) { return; } String clazzName = clazz.getName(); @@ -261,7 +261,7 @@ String extendClass = ""; for (ObjectModelClass parent : clazz.getSuperclasses()) { extendClass = parent.getQualifiedName(); - if (TopiaGeneratorUtil.hasEntityStereotype(parent)) { + if (TopiaGeneratorUtil.isEntity(parent)) { extendClass += "DAOImpl<E>"; // in java no multi-inheritance break; Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java 2011-06-10 10:28:38 UTC (rev 2299) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java 2011-06-20 16:59:45 UTC (rev 2300) @@ -53,12 +53,13 @@ public boolean isEntity(String type) { ObjectModelClassifier clazz = model.getClassifier(type); - return clazz != null && TopiaGeneratorUtil.hasEntityStereotype(clazz); + return clazz != null && ! clazz.isEnum() + && TopiaGeneratorUtil.isEntity(clazz); } @Override public void transformFromClass(ObjectModelClass clazz) { - if (!TopiaGeneratorUtil.hasEntityStereotype(clazz)) { + if (!TopiaGeneratorUtil.isEntity(clazz)) { return; } String clazzName = clazz.getName(); @@ -310,7 +311,7 @@ if (model.hasClass(attr.getType())) { attrEntity = model.getClass(attr.getType()); } - boolean isEntity = attrEntity != null && TopiaGeneratorUtil.hasEntityStereotype(attrEntity); + boolean isEntity = attrEntity != null && TopiaGeneratorUtil.isEntity(attrEntity); ObjectModelAttribute reverse = attr.getReverseAttribute(); if (isEntity && (reverse == null || !reverse.isNavigable()) && !attr.hasAssociationClass() || !isEntity) { String attrName = attr.getName(); Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java 2011-06-10 10:28:38 UTC (rev 2299) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java 2011-06-20 16:59:45 UTC (rev 2300) @@ -113,7 +113,7 @@ public void generateFromClass(Writer output, ObjectModelClass input) throws IOException { String persistenceType = TopiaGeneratorUtil.getPersistenceType(input); - if (!TopiaGeneratorUtil.hasEntityStereotype(input) && + if (!TopiaGeneratorUtil.isEntity(input) && TopiaGeneratorUtil.PERSISTENCE_TYPE_HIBERNATE.equals(persistenceType)) { return; } @@ -216,7 +216,7 @@ || hasUnidirectionalRelationOnAbstractType(reverse, model) || attr.hasAssociationClass()) { if (!GeneratorUtil.isNMultiplicity(attr)) { - if (attr.getClassifier() != null && TopiaGeneratorUtil.hasEntityStereotype(attr.getClassifier())) { + if (attr.getClassifier() != null && TopiaGeneratorUtil.isEntity(attr.getClassifier())) { if (GeneratorUtil.isNMultiplicity(attr.getReverseMaxMultiplicity()) && !attr.hasAssociationClass()) { generateHibernateManyToOne(output, attr, prefix); } else { @@ -226,7 +226,7 @@ generateHibernateProperty(output, attr, prefix); } } else { - if (attr.getClassifier() != null && TopiaGeneratorUtil.hasEntityStereotype(attr.getClassifier())) { + if (attr.getClassifier() != null && TopiaGeneratorUtil.isEntity(attr.getClassifier())) { if (GeneratorUtil.isNMultiplicity(attr.getReverseMaxMultiplicity()) && !attr.hasAssociationClass()) { generateHibernateManyToMany(output, attr, prefix); } else { Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java 2011-06-10 10:28:38 UTC (rev 2299) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java 2011-06-20 16:59:45 UTC (rev 2300) @@ -104,7 +104,7 @@ @Override public void transformFromClass(ObjectModelClass input) { - if (!TopiaGeneratorUtil.hasEntityStereotype(input)) { + if (!TopiaGeneratorUtil.isEntity(input)) { // not an entity, skip class. return; @@ -200,7 +200,7 @@ // Extends from inheritance boolean needTopiaEntity = true; for (ObjectModelClassifier parent : input.getSuperclasses()) { - if (TopiaGeneratorUtil.hasEntityStereotype(parent)) { + if (TopiaGeneratorUtil.isEntity(parent)) { addInterface(outputInterface, parent.getQualifiedName()); needTopiaEntity = false; break; @@ -247,7 +247,7 @@ //Si une des classes parentes définies des méthodes abstraites, son // impl ne sera pas créé boolean abstractParent = TopiaGeneratorUtil.shouldBeAbstract(parent); - if (TopiaGeneratorUtil.hasEntityStereotype(parent)) { + if (TopiaGeneratorUtil.isEntity(parent)) { if (abstractParent) { extendClass += "Abstract"; } else { @@ -1227,7 +1227,7 @@ } boolean isEntity = attrEntity != null && - TopiaGeneratorUtil.hasEntityStereotype(attrEntity); + TopiaGeneratorUtil.isEntity(attrEntity); ObjectModelAttribute reverse = attr.getReverseAttribute(); if (isEntity && (reverse == null || !reverse.isNavigable()) @@ -1271,7 +1271,7 @@ for (ObjectModelAttribute attr : input.getAttributes()) { if (attr.referenceClassifier() && - TopiaGeneratorUtil.hasEntityStereotype(attr.getClassifier())) { + TopiaGeneratorUtil.isEntity(attr.getClassifier())) { if (attr.isComposite()) { String attrName = attr.getName(); @@ -1376,7 +1376,7 @@ for (ObjectModelAttribute attr : input.getAttributes()) { if (attr.referenceClassifier() && - TopiaGeneratorUtil.hasEntityStereotype(attr.getClassifier()) && + TopiaGeneratorUtil.isEntity(attr.getClassifier()) && attr.isAggregate()) { String attrName = attr.getName(); Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/QueryHelperTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/QueryHelperTransformer.java 2011-06-10 10:28:38 UTC (rev 2299) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/QueryHelperTransformer.java 2011-06-20 16:59:45 UTC (rev 2300) @@ -300,7 +300,8 @@ /*************************** INNER PROPERTY CLASSES ***********************/ @Override - public void transformFromClass(ObjectModelClass clazz) { +// public void transformFromClass(ObjectModelClass clazz) { + public void transformFromClassifier(ObjectModelClassifier clazz) { if (!TopiaGeneratorUtil.hasEntityStereotype(clazz)) { return; } @@ -357,7 +358,7 @@ return aliasPropertyName; } - protected ObjectModelClass createInnerClass(ObjectModelClass input, String aliasConstant) { + protected ObjectModelClass createInnerClass(ObjectModelClassifier input, String aliasConstant) { String className = getPropertyClassName(input); ObjectModelClass propertyClass = (ObjectModelClass) @@ -416,7 +417,7 @@ return propertyClass; } - protected void createGetterOperations(ObjectModelClass input, ObjectModelClass propertyClass) { + protected void createGetterOperations(ObjectModelClassifier input, ObjectModelClass propertyClass) { // Generate for all attributes for (ObjectModelAttribute attr : input.getAttributes()) { @@ -539,7 +540,7 @@ ); } - protected void addExtraForSubEntity(ObjectModelClass entityClass) { + protected void addExtraForSubEntity(ObjectModelClassifier entityClass) { for (ObjectModelAttribute attr : entityClass.getAttributes()) { if (attr.isNavigable() && attr.referenceClassifier() && Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2011-06-10 10:28:38 UTC (rev 2299) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2011-06-20 16:59:45 UTC (rev 2300) @@ -521,7 +521,7 @@ return type; } ObjectModelClass clazz = model.getClass(type); - if (hasEntityStereotype(clazz)) { + if (isEntity(clazz)) { if (shouldBeAbstract(clazz)) { type += "Abstract"; } else { @@ -650,7 +650,7 @@ if (!reverse.isNavigable()) { //Il s'agit d'une entity ObjectModelClass clazz = model.getClass(attr.getType()); - if (clazz != null && hasEntityStereotype(clazz)) { + if (clazz != null && isEntity(clazz)) { //Cette classe a des sous-classes dans le modèle for (ObjectModelClass subClass : model.getClasses()) { if (subClass.getSuperclasses().contains(clazz)) { @@ -1124,7 +1124,7 @@ * {@link TopiaStereoTypes#STEREOTYPE_ENTITY} stereotype. * * @param classifier classifier to test - * @return {@code true} if stereotype was found, {@code false otherwise} + * @return {@code true} if stereotype was found, {@code false} otherwise * @see TopiaStereoTypes#STEREOTYPE_ENTITY * @since 2.5 */ @@ -1132,7 +1132,21 @@ return classifier.hasStereotype(TopiaStereoTypes.STEREOTYPE_ENTITY); } + /** + * Check if the given classifier has the + * {@link TopiaStereoTypes#STEREOTYPE_ENTITY} and is not an enumeration + * + * @param classifier classifier to test + * @return {@code true} if stereotype was found and classifier is not + * enumeration, {@code false} otherwise + * @see TopiaStereoTypes#STEREOTYPE_ENTITY + * @since 2.5 + */ + public static boolean isEntity(ObjectModelClassifier classifier) { + return hasEntityStereotype(classifier) && ! classifier.isEnum(); + } + /** * Check if the given attribute has the * {@link TopiaStereoTypes#STEREOTYPE_ENTITY} stereotype. Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaStereoTypes.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaStereoTypes.java 2011-06-10 10:28:38 UTC (rev 2299) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaStereoTypes.java 2011-06-20 16:59:45 UTC (rev 2300) @@ -61,7 +61,7 @@ /** * Stéréotype pour les objets devant être générées sous forme d'entités * - * @see TopiaGeneratorUtil#hasEntityStereotype(ObjectModelClassifier) + * @see TopiaGeneratorUtil#isEntity(ObjectModelClassifier) * @see TopiaGeneratorUtil#hasEntityStereotype(ObjectModelAttribute) */ @StereotypeDefinition(target = {ObjectModelClassifier.class, ObjectModelAttribute.class}, Added: trunk/topia-persistence/src/test/java/org/nuiton/topiatest/EnumTest.java =================================================================== --- trunk/topia-persistence/src/test/java/org/nuiton/topiatest/EnumTest.java (rev 0) +++ trunk/topia-persistence/src/test/java/org/nuiton/topiatest/EnumTest.java 2011-06-20 16:59:45 UTC (rev 2300) @@ -0,0 +1,55 @@ +package org.nuiton.topiatest; + +import junit.framework.Assert; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.BeforeClass; +import org.junit.Test; +import org.nuiton.topia.TestHelper; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaNotFoundException; +import org.nuiton.topia.TopiaTestDAOHelper; + +import java.io.File; +import java.io.IOException; + +public class EnumTest { + + private static final Log log = LogFactory.getLog(EnumTest.class); + + protected static File testBasedir; + + @BeforeClass + public static void setUpClass() throws Exception { + testBasedir = TestHelper.getTestBasedir(EnumTest.class); + } + + protected TopiaContext initTopiaContext(String testName) throws IOException, TopiaNotFoundException { + TopiaContext root = TestHelper.initTopiaContext(testBasedir, + "/TopiaContextImpl.properties", + testName); + return root; + } + + @Test + public void storeEntityWithEnumValue() throws Exception { + TopiaContext root = initTopiaContext("storeEntityWithEnumValue"); + TopiaContext transaction = root.beginTransaction(); + + PersonneDAO dao = TopiaTestDAOHelper.getPersonneDAO(transaction); + Personne personne = new PersonneImpl(); + personne.setGender(Gender.FEMALE); + dao.create(personne); + String topiaId = personne.getTopiaId(); + transaction.commitTransaction(); + transaction.closeContext(); + + transaction = root.beginTransaction(); + dao = TopiaTestDAOHelper.getPersonneDAO(transaction); + dao.findByTopiaId(topiaId); + Assert.assertEquals(Gender.FEMALE, personne.getGender()); + + Assert.assertNotNull(dao.findByGender(Gender.FEMALE)); + transaction.closeContext(); + } +} Added: trunk/topia-persistence/src/test/java/org/nuiton/topiatest/Gender.java =================================================================== --- trunk/topia-persistence/src/test/java/org/nuiton/topiatest/Gender.java (rev 0) +++ trunk/topia-persistence/src/test/java/org/nuiton/topiatest/Gender.java 2011-06-20 16:59:45 UTC (rev 2300) @@ -0,0 +1,5 @@ +package org.nuiton.topiatest; + +public enum Gender { + MALE, FEMALE; +} Modified: trunk/topia-persistence/src/test/xmi/topiatest.zargo =================================================================== (Binary files differ)