r1803 - in trunk/topia-persistence: . src/main/java/org/nuiton/topia/generator src/test/java/org/nuiton/topia/persistence src/test/java/org/nuiton/topiatest src/test/resources src/test/xmi
Author: fdesbois Date: 2010-02-18 19:10:23 +0100 (Thu, 18 Feb 2010) New Revision: 1803 Added: trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/NaturalIdTest.java trunk/topia-persistence/src/test/java/org/nuiton/topiatest/TestUtils.java Modified: trunk/topia-persistence/ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java trunk/topia-persistence/src/test/resources/TopiaContextImpl.properties trunk/topia-persistence/src/test/xmi/topiatest.properties trunk/topia-persistence/src/test/xmi/topiatest.zargo Log: Evo #323 : add methods for naturalId managment + tests Property changes on: trunk/topia-persistence ___________________________________________________________________ Modified: svn:ignore - target .settings .classpath .project *.iml *.ipr *.iws + target .settings .classpath .project *.iml *.ipr *.iws nbproject Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanGenerator.java 2010-02-18 13:04:14 UTC (rev 1802) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanGenerator.java 2010-02-18 18:10:23 UTC (rev 1803) @@ -52,7 +52,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.models.object.ObjectModelGenerator; import org.nuiton.eugene.GeneratorUtil; -import org.nuiton.eugene.ImportsManager; +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; 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 2010-02-18 13:04:14 UTC (rev 1802) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java 2010-02-18 18:10:23 UTC (rev 1803) @@ -226,6 +226,7 @@ ); setOperationBody(op,body.toString()); + generateNaturalId(result, clazz); for (ObjectModelAttribute attr : clazz.getAttributes()) { if (!attr.isNavigable()) { @@ -590,4 +591,61 @@ } return results; } + + private void generateNaturalId(ObjectModelClass result, + ObjectModelClass clazz) { + List<ObjectModelAttribute> props = + TopiaGeneratorUtil.getNaturalIdAttributes(clazz); + + if (log.isInfoEnabled()) { + log.info("generateNaturalId for " + clazz.getName()); + } + + if (!props.isEmpty()) { + + if (log.isInfoEnabled()) { + log.info("props " + props); + } + ObjectModelOperation findByNaturalId = addOperation(result, + "findByNaturalId", "E", ObjectModelModifier.PUBLIC); + addException(findByNaturalId, TopiaException.class); + + ObjectModelOperation existNaturalId = addOperation(result, + "existNaturalId", "boolean", ObjectModelModifier.PUBLIC); + addException(existNaturalId, TopiaException.class); + + // used for calling findByProperties in findByNaturalId + String searchProperties = ""; + // used for calling findByNaturalId in existNaturalId + String params = ""; + String clazzName = clazz.getName(); + for (ObjectModelAttribute attr : props) { + String propName = attr.getName(); + // add property as param in both methods + addParameter(findByNaturalId, attr.getType(), propName); + addParameter(existNaturalId, attr.getType(), propName); + + searchProperties += + ", " + clazzName + "." + getConstantName(propName) + + ", " + propName; + params += ", " + propName; + } + searchProperties = searchProperties.substring(2); + params = params.substring(2); + + setOperationBody(findByNaturalId, "" +/*{ + return findByProperties(<%=searchProperties%>); + }*/ + ); + + setOperationBody(existNaturalId, "" +/*{ + return findByNaturalId(<%=params%>) != null; + }*/ + ); + } + + + } } 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 2010-02-18 13:04:14 UTC (rev 1802) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2010-02-18 18:10:23 UTC (rev 1803) @@ -350,7 +350,11 @@ * * @param clazz la classe à tester * @return la liste des attributs de la clef métier ou null si pas de clef métier. + * @deprecated use {@link #getNaturalIdAttributes(ObjectModelClass) } instead + * this usage is not allowed, prefer put tagvalue.naturalId on each + * entity attribute needed */ + @Deprecated public static List<String> getNaturalId(ObjectModelClass clazz) { String value = clazz.getTagValue(TAG_NATURAL_ID); if (value == null || value.trim().isEmpty()) { @@ -367,6 +371,22 @@ * Cherche et renvoie la liste des attributs constituant la clef metier d'une classe. * * @param clazz la classe à tester + * @return la liste des attributs de la clef métier + */ + public static List<ObjectModelAttribute> getNaturalIdAttributes(ObjectModelClass clazz) { + List<ObjectModelAttribute> results = new ArrayList<ObjectModelAttribute>(); + for (ObjectModelAttribute attr : clazz.getAttributes()) { + if (isNaturalId(attr)) { + results.add(attr); + } + } + return results; + } + + /** + * Cherche et renvoie la liste des attributs constituant la clef metier d'une classe. + * + * @param clazz la classe à tester * @param model le modele * @return la liste des attributs de la clef métier ou null si pas de clef métier. */ Added: trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/NaturalIdTest.java =================================================================== --- trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/NaturalIdTest.java (rev 0) +++ trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/NaturalIdTest.java 2010-02-18 18:10:23 UTC (rev 1803) @@ -0,0 +1,171 @@ + +package org.nuiton.topia.persistence; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hibernate.PropertyValueException; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.TopiaTestDAOHelper; +import org.nuiton.topiatest.NaturalizedEntity; +import org.nuiton.topiatest.NaturalizedEntityDAO; +import org.nuiton.topiatest.TestUtils; + +/** + * NaturalIdTest + * + * Created: 18 févr. 2010 + * + * @author fdesbois + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + */ +public class NaturalIdTest { + + private static final Log log = LogFactory.getLog(NaturalIdTest.class); + + @BeforeClass + public static void setUpClass() throws Exception { + } + + @AfterClass + public static void tearDownClass() throws Exception { + } + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testCreateSucessfull() throws Exception { + log.info("Test naturalId : create succesfull"); + TopiaContext root = TestUtils.start("naturalIdTest/createSucessfull"); + TopiaContext transaction = root.beginTransaction(); + + NaturalizedEntityDAO dao = + TopiaTestDAOHelper.getNaturalizedEntityDAO(transaction); + + // No exception will be thrown with the two properties + dao.create(NaturalizedEntity.NATURAL_ID_NOT_NULL, 5, + NaturalizedEntity.NATURAL_ID_NULL, "str"); + transaction.commitTransaction(); + + // No exception will only the need property + dao.create(NaturalizedEntity.NATURAL_ID_NOT_NULL, 3); + transaction.commitTransaction(); + + transaction.closeContext(); + root.closeContext(); + } + + @Test + public void testCreateFailed() throws Exception { + log.info("Test naturalId : create failed"); + TopiaContext root = TestUtils.start("naturalIdTest/createFailed"); + TopiaContext transaction = root.beginTransaction(); + + NaturalizedEntityDAO dao = + TopiaTestDAOHelper.getNaturalizedEntityDAO(transaction); + + // Exception will be throw + try { + dao.create(); + transaction.commitTransaction(); + + // Note : this is possible to create an empty entity if the type + // is primitive like 'int' which have a default value of '0' + } catch (PropertyValueException eee) { + Assert.assertEquals("naturalIdNotNull", eee.getPropertyName()); + } + + transaction.closeContext(); + root.closeContext(); + } + + @Test + public void testUpdateFailed() throws Exception { + log.info("Test naturalId : update failed"); + TopiaContext root = TestUtils.start("naturalIdTest/updateFailed"); + + TopiaContext transaction = root.beginTransaction(); + + NaturalizedEntityDAO dao = + TopiaTestDAOHelper.getNaturalizedEntityDAO(transaction); + + NaturalizedEntity entity = + dao.create(NaturalizedEntity.NATURAL_ID_NOT_NULL, 5, + NaturalizedEntity.NATURAL_ID_NULL, "str"); + transaction.commitTransaction(); + + // Exception will be throw : not allowed to modify a naturalId property + try { + entity.setNaturalIdNotNull(8); + transaction.commitTransaction(); + } catch(TopiaException eee) { + Assert.assertEquals("org.hibernate.HibernateException", + eee.getCause().getClass().getName()); + } finally { + transaction.closeContext(); + root.closeContext(); + } + } + + @Test + public void testFindByNaturalId() throws Exception { + log.info("Test naturalId : findByNaturalId"); + TopiaContext root = TestUtils.start("naturalIdTest/findByNaturalId"); + TopiaContext transaction = root.beginTransaction(); + + NaturalizedEntityDAO dao = + TopiaTestDAOHelper.getNaturalizedEntityDAO(transaction); + + NaturalizedEntity entity = + dao.create(NaturalizedEntity.NATURAL_ID_NOT_NULL, 5, + NaturalizedEntity.NATURAL_ID_NULL, "str"); + transaction.commitTransaction(); + + NaturalizedEntity result = dao.findByNaturalId(5, "str"); + + Assert.assertEquals(entity, result); + + transaction.closeContext(); + root.closeContext(); + } + + @Test + public void testExistNaturalId() throws Exception { + log.info("Test naturalId : existNaturalId"); + TopiaContext root = TestUtils.start("naturalIdTest/existNaturalId"); + TopiaContext transaction = root.beginTransaction(); + + NaturalizedEntityDAO dao = TopiaTestDAOHelper.getNaturalizedEntityDAO(transaction); + + dao.create(NaturalizedEntity.NATURAL_ID_NOT_NULL, 5, + NaturalizedEntity.NATURAL_ID_NULL, "str"); + transaction.commitTransaction(); + + boolean result = dao.existNaturalId(5, "str"); + + Assert.assertTrue(result); + + // not find with only one correct property + result = dao.existNaturalId(8, "str"); + + Assert.assertFalse(result); + + transaction.closeContext(); + root.closeContext(); + } +} Property changes on: trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/NaturalIdTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Added: trunk/topia-persistence/src/test/java/org/nuiton/topiatest/TestUtils.java =================================================================== --- trunk/topia-persistence/src/test/java/org/nuiton/topiatest/TestUtils.java (rev 0) +++ trunk/topia-persistence/src/test/java/org/nuiton/topiatest/TestUtils.java 2010-02-18 18:10:23 UTC (rev 1803) @@ -0,0 +1,41 @@ + +package org.nuiton.topiatest; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; +import org.hibernate.cfg.Environment; +import org.junit.Ignore; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaContextFactory; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.TopiaNotFoundException; +import org.nuiton.topia.TopiaTestDAOHelper; + +/** + * TestUtils + * + * Created: 18 févr. 2010 + * + * @author fdesbois + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + */ +@Ignore +public class TestUtils { + + public static TopiaContext start(String dbname) throws IOException, TopiaNotFoundException { + InputStream stream = TestUtils.class.getResourceAsStream("/TopiaContextImpl.properties"); + + Properties configuration = new Properties(); + + configuration.load(stream); + configuration.setProperty("topia.persistence.classes", + TopiaTestDAOHelper.getImplementationClassesAsString()); + + configuration.setProperty("hibernate.connection.url", "jdbc:h2:file:target/surefire-data/" + dbname); + return TopiaContextFactory.getContext(configuration); + } +} Property changes on: trunk/topia-persistence/src/test/java/org/nuiton/topiatest/TestUtils.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Modified: trunk/topia-persistence/src/test/resources/TopiaContextImpl.properties =================================================================== --- trunk/topia-persistence/src/test/resources/TopiaContextImpl.properties 2010-02-18 13:04:14 UTC (rev 1802) +++ trunk/topia-persistence/src/test/resources/TopiaContextImpl.properties 2010-02-18 18:10:23 UTC (rev 1803) @@ -6,4 +6,4 @@ hibernate.connection.username=sa hibernate.connection.password= hibernate.connection.driver_class=org.h2.Driver -hibernate.connection.url=jdbc:h2:file://tmp/topiatest \ No newline at end of file +hibernate.connection.url=jdbc:h2:file:target/surefire-data/h2data \ No newline at end of file Modified: trunk/topia-persistence/src/test/xmi/topiatest.properties =================================================================== --- trunk/topia-persistence/src/test/xmi/topiatest.properties 2010-02-18 13:04:14 UTC (rev 1802) +++ trunk/topia-persistence/src/test/xmi/topiatest.properties 2010-02-18 18:10:23 UTC (rev 1803) @@ -1,2 +1,11 @@ model.tagvalue.i18n=topia.test.common. model.tagvalue.generateOperatorForDAOHelper=true + +#org.nuiton.topiatest.Company.class.tagvalue.naturalIdMutable=false +#org.nuiton.topiatest.Company.attribute.siret.tagvalue.naturalId=true +#org.nuiton.topiatest.Company.attribute.name.tagvalue.naturalId=true +#org.nuiton.topiatest.Company.attribute.name.tagvalue.notNull=false + +org.nuiton.topiatest.NaturalizedEntity.attribute.naturalIdNotNull.tagvalue.naturalId=true +org.nuiton.topiatest.NaturalizedEntity.attribute.naturalIdNull.tagvalue.naturalId=true +org.nuiton.topiatest.NaturalizedEntity.attribute.naturalIdNull.tagvalue.notNull=false \ No newline at end of file Modified: trunk/topia-persistence/src/test/xmi/topiatest.zargo =================================================================== (Binary files differ)
participants (1)
-
fdesbois@users.nuiton.org