Index: topia2/src/test/org/codelutin/topia/Person.hbm.xml diff -u topia2/src/test/org/codelutin/topia/Person.hbm.xml:1.1.1.1 topia2/src/test/org/codelutin/topia/Person.hbm.xml:1.2 --- topia2/src/test/org/codelutin/topia/Person.hbm.xml:1.1.1.1 Mon Jan 2 13:54:35 2006 +++ topia2/src/test/org/codelutin/topia/Person.hbm.xml Fri Jan 6 12:15:20 2006 @@ -9,7 +9,7 @@ - + Index: topia2/src/test/org/codelutin/topia/TopiaContextTest.java diff -u topia2/src/test/org/codelutin/topia/TopiaContextTest.java:1.2 topia2/src/test/org/codelutin/topia/TopiaContextTest.java:1.3 --- topia2/src/test/org/codelutin/topia/TopiaContextTest.java:1.2 Wed Jan 4 13:21:51 2006 +++ topia2/src/test/org/codelutin/topia/TopiaContextTest.java Fri Jan 6 12:15:20 2006 @@ -23,9 +23,9 @@ * * @author poussin * - * @version $Revision: 1.2 $ + * @version $Revision: 1.3 $ * - * Last update: $Date: 2006/01/04 13:21:51 $ by : $Author: bpoussin $ + * Last update: $Date: 2006/01/06 12:15:20 $ by : $Author: bpoussin $ */ package org.codelutin.topia; @@ -36,6 +36,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.topia.event.TopiaEntityEvent; +import org.codelutin.topia.event.TopiaEntityListener; +import org.codelutin.topia.event.TopiaVetoableEntityEvent; +import org.codelutin.topia.event.TopiaVetoableEntityListener; import org.codelutin.topia.framework.TopiaContextImplementor; import org.codelutin.topia.persistence.TopiaDAO; @@ -48,7 +52,7 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(TopiaContextTest.class); - public void testGetParentContext() throws Exception { + protected Properties getPostgreSQLProperties() { Properties config = new Properties(); config.setProperty("hibernate.show_sql", "true"); config.setProperty("hibernate.hbm2ddl.auto", "create"); @@ -64,6 +68,46 @@ config.setProperty("hibernate.connection.username", "dbuser"); config.setProperty("hibernate.connection.password", "xxxxxxxx"); + return config; + } + + protected Properties getDerbyProperties() { + Properties config = new Properties(); + config.setProperty("hibernate.show_sql", "true"); + config.setProperty("hibernate.hbm2ddl.auto", "create"); + + config.setProperty("topia.dao.flatfile.directory", "/tmp/topiadb"); + config.setProperty("topia.dao.flatfile.mapping.key", "firstname"); + + config.setProperty("topia.persistence.classes", + "org.codelutin.topia.Person"); + config.setProperty("hibernate.dialect", + "org.hibernate.dialect.DerbyDialect"); + config.setProperty("hibernate.connection.driver_class", + "org.apache.derby.jdbc.EmbeddedDriver"); + config.setProperty("hibernate.connection.url", + "jdbc:derby:/tmp/topiaderby;create=true"); + config.setProperty("hibernate.connection.username", "dbuser"); + config.setProperty("hibernate.connection.password", "xxxxxxxx"); + + return config; + } + + protected Properties getProperties() { + return getDerbyProperties(); + } + + /* + * #hibernate.dialect org.hibernate.dialect.DerbyDialect + * #hibernate.connection.driver_class org.apache.derby.jdbc.EmbeddedDriver + * #hibernate.connection.url jdbc:derby:/test;create=true + * #hibernate.connection.username + * #hibernate.connection.password + */ + + public void testGetParentContext() throws Exception { + Properties config = getProperties(); + TopiaContextImplementor topiaContext = (TopiaContextImplementor) TopiaContextFactory .getContext(config); @@ -82,31 +126,9 @@ } public void testHibernate() throws Exception { - log.info("Debut du test"); - log.debug("(debug mode)"); + System.out.println("Debut du test Hibernate"); - Properties config = new Properties(); - config.setProperty("hibernate.show_sql", "true"); - config.setProperty("hibernate.hbm2ddl.auto", "create"); - - config.setProperty("topia.persistence.classes", - "org.codelutin.topia.Person"); - config.setProperty("hibernate.dialect", - "org.hibernate.dialect.PostgreSQLDialect"); - config.setProperty("hibernate.connection.driver_class", - "org.postgresql.Driver"); - config.setProperty("hibernate.connection.url", - "jdbc:postgresql:database"); - config.setProperty("hibernate.connection.username", "dbuser"); - config.setProperty("hibernate.connection.password", "xxxxxxxx"); - - /* - * #hibernate.dialect org.hibernate.dialect.DerbyDialect - * #hibernate.connection.driver_class - * org.apache.derby.jdbc.EmbeddedDriver #hibernate.connection.username - * #hibernate.connection.password #hibernate.connection.url - * jdbc:derby:/test;create=true - */ + Properties config = getProperties(); TopiaContext context = TopiaContextFactory.getContext(config); @@ -118,6 +140,8 @@ p.setFirstname("benjamin"); persons.update(p); childContext.commitTransaction(); + + Object id = p.getTopiaId(); Person p1 = persons.create(); p1.setName("poussin"); @@ -134,32 +158,29 @@ p.setFirstname("berengere"); persons.update(p); childContext.commitTransaction(); - + + p.setFirstname("toto"); + persons.update(p); + assertEquals("toto", p.getFirstname()); + childContext.rollbackTransaction(); + + p = persons.findByTopiaId(id); + assertEquals("berengere", p.getFirstname()); + + TopiaContextImplementor childContext2 = (TopiaContextImplementor) context + .beginTransaction(); + TopiaDAO persons2 = childContext2.getDAO(Person.class); + + Person pp = persons2.findByTopiaId(id); + assertEquals("berengere", pp.getFirstname()); + } public void testFlatFile() throws Exception { - log.info("Debut du test"); - log.debug("(debug mode)"); - - Properties config = new Properties(); - config.setProperty("topia.persistence.classes", - "org.codelutin.topia.Person"); + System.out.println("Debut du test FlatFile"); + Properties config = getProperties(); config.setProperty("topia.dao.default.class", "flatfile"); - config.setProperty("topia.dao.flatfile.directory", "/tmp/topiadb"); - config.setProperty("topia.dao.flatfile.mapping.key", "firstname"); - - config.setProperty("hibernate.show_sql", "true"); - config.setProperty("hibernate.hbm2ddl.auto", "create"); - - config.setProperty("hibernate.dialect", - "org.hibernate.dialect.PostgreSQLDialect"); - config.setProperty("hibernate.connection.driver_class", - "org.postgresql.Driver"); - config.setProperty("hibernate.connection.url", - "jdbc:postgresql:database"); - config.setProperty("hibernate.connection.username", "dbuser"); - config.setProperty("hibernate.connection.password", "xxxxxxxx"); TopiaContext context = TopiaContextFactory.getContext(config); @@ -190,4 +211,127 @@ } + + public void testConstructor() throws Exception { + System.out.println("Debut du test constructor"); + + Properties config = getProperties(); + + TopiaContext context = TopiaContextFactory.getContext(config); + + TopiaContextImplementor childContext = (TopiaContextImplementor) context + .beginTransaction(); + + TopiaDAO persons = childContext.getDAO(Person.class); + Person p = persons.create("name", "poussin", "firstname", "toto"); + assertEquals("poussin", p.getName()); + assertEquals("toto", p.getFirstname()); + + persons.update(p); + childContext.commitTransaction(); + + p.setFirstname("titi"); + assertEquals("titi", p.getFirstname()); + + persons.update(p); + childContext.commitTransaction(); + + p.setFirstname("benjamin"); + assertEquals("benjamin", p.getFirstname()); + + persons.update(p); + childContext.commitTransaction(); + + persons.delete(p); + childContext.commitTransaction(); + } + + String state = ""; + + public void testEventHibernate() throws Exception { + System.out.println("Debut du test Event"); + + Properties config = getProperties(); + // FIXME voir pourquoi si on a pas un nouveau context ca ne marche pas :( + // On met un propriete qui ne sert a rien pour etre sur qu'il + // recre bien un Context pour ce test +// config.setProperty("test", "testEventHibernate"); + + TopiaContext context = TopiaContextFactory.getContext(config); + + TopiaContextImplementor childContext = (TopiaContextImplementor) context + .beginTransaction(); + + TopiaVetoableEntityListener v = new TopiaVetoableEntityListener() { + public void loadEntity(TopiaVetoableEntityEvent event) { + System.out.println("vetoLoad " + event.getEntityClass() + " id: " + event.getId()); + state = "vetoLoad"; + } + public void createEntity(TopiaVetoableEntityEvent event) { + System.out.println("vetoCreate " + event.getEntityClass() + " id: " + event.getId()); + state = "vetoCreate"; + } + public void updateEntity(TopiaVetoableEntityEvent event) { + System.out.println("vetoUpdate " + event.getEntityClass() + " id: " + event.getId()); + state = "vetoUpdate"; + } + public void deleteEntity(TopiaVetoableEntityEvent event) { + System.out.println("vetoDelete " + event.getEntityClass() + " id: " + event.getId()); + state = "vetoDelete"; + } + }; + + TopiaEntityListener l = new TopiaEntityListener() { + public void entityLoaded(TopiaEntityEvent event) { + System.out.println("entityLoaded " + event.getTopiaEntities()); + state = "entityLoaded"; + } + public void entityCreated(TopiaEntityEvent event) { + System.out.println("entityCreated " + event.getTopiaEntities()); + state = "entityCreated"; + } + public void entityUpdated(TopiaEntityEvent event) { + System.out.println("entityUpdated " + event.getTopiaEntities()); + state = "entityUpdated"; + } + public void entityDeleted(TopiaEntityEvent event) { + System.out.println("entityDeleted " + event.getTopiaEntities()); + state = "entityDeleted"; + } + }; + + + childContext.addVetoableListener(v); + childContext.addTopiaEntityListener(l); + + TopiaDAO persons = childContext.getDAO(Person.class); + Person p = persons.create(); + assertEquals("entityCreated", state); + p.setName("poussin"); + p.setFirstname("benjamin"); + persons.update(p); + childContext.commitTransaction(); + assertEquals("entityUpdated", state); + + p.setFirstname("toto"); + persons.update(p); + childContext.commitTransaction(); + assertEquals("entityUpdated", state); + + TopiaContextImplementor childContext2 = (TopiaContextImplementor) context + .beginTransaction(); + childContext2.addVetoableListener(v); + childContext2.addTopiaEntityListener(l); + TopiaDAO persons2 = childContext2.getDAO(Person.class); + + Person pp = persons2.findByTopiaId(p.getTopiaId()); + assertEquals(p.getFirstname(), pp.getFirstname()); + assertEquals("entityLoaded", state); + + persons.delete(p); + childContext.commitTransaction(); + assertEquals("entityDeleted", state); + + } + }