Index: topia2/src/java/org/codelutin/topia/framework/TopiaFiresSupport.java diff -u topia2/src/java/org/codelutin/topia/framework/TopiaFiresSupport.java:1.6 topia2/src/java/org/codelutin/topia/framework/TopiaFiresSupport.java:1.7 --- topia2/src/java/org/codelutin/topia/framework/TopiaFiresSupport.java:1.6 Thu Nov 23 13:41:40 2006 +++ topia2/src/java/org/codelutin/topia/framework/TopiaFiresSupport.java Fri Nov 16 11:26:16 2007 @@ -22,18 +22,19 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.beans.VetoableChangeSupport; -import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.collections.map.IdentityMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.topia.TopiaContext; import org.codelutin.topia.TopiaException; import org.codelutin.topia.TopiaVetoException; +import org.codelutin.topia.event.TopiaContextEvent; +import org.codelutin.topia.event.TopiaContextListener; import org.codelutin.topia.event.TopiaEntityEvent; import org.codelutin.topia.event.TopiaEntityListener; import org.codelutin.topia.event.TopiaEntityVetoable; @@ -87,6 +88,9 @@ /* Pour les entités */ protected CategorisedListenerSet entityListeners = new CategorisedListenerSet(); protected CategorisedListenerSet entityVetoables = new CategorisedListenerSet(); + + /* Pour les actions du topia context */ + protected ListenerSet topiaContextListeners = new ListenerSet(); /** * used to register objects loaded during transaction. @@ -584,6 +588,78 @@ // } } } + + /** + * Notify topia context listeners for create schema pre operation + * @param context topia context + */ + public void firePreCreateSchema(TopiaContext context) { + if (log.isDebugEnabled()) { + log.debug("firePreCreateSchema"); + } + TopiaContextEvent event = new TopiaContextEvent(context); + for(Iterator l=topiaContextListeners.iterator(); l.hasNext();) { + try { + l.next().preCreateSchema(event); + } catch (Exception eee) { + throw new TopiaVetoException(eee); + } + } + } + + /** + * Notify topia context listeners for create schema post operation + * @param context topia context + */ + public void firePostCreateSchema(TopiaContext context) { + if (log.isDebugEnabled()) { + log.debug("firePostCreateSchema"); + } + TopiaContextEvent event = new TopiaContextEvent(context); + for(Iterator l=topiaContextListeners.iterator(); l.hasNext();) { + try { + l.next().postCreateSchema(event); + } catch (Exception eee) { + throw new TopiaVetoException(eee); + } + } + } + + /** + * Notify topia context listeners for create schema post operation + * @param context topia context + */ + public void firePreUpdateSchema(TopiaContext context) { + if (log.isDebugEnabled()) { + log.debug("firePostCreateSchema"); + } + TopiaContextEvent event = new TopiaContextEvent(context); + for(Iterator l=topiaContextListeners.iterator(); l.hasNext();) { + try { + l.next().preUpdateSchema(event); + } catch (Exception eee) { + throw new TopiaVetoException(eee); + } + } + } + + /** + * Notify topia context listeners for create schema post operation + * @param context topia context + */ + public void firePostUpdateSchema(TopiaContext context) { + if (log.isDebugEnabled()) { + log.debug("firePostCreateSchema"); + } + TopiaContextEvent event = new TopiaContextEvent(context); + for(Iterator l=topiaContextListeners.iterator(); l.hasNext();) { + try { + l.next().postUpdateSchema(event); + } catch (Exception eee) { + throw new TopiaVetoException(eee); + } + } + } /* Getters */ public CategorisedListenerSet getEntityListeners() { @@ -602,6 +678,10 @@ return transactionVetoables; } + public ListenerSet getTopiaContextListeners() { + return topiaContextListeners; + } + /* Adders */ public void addTopiaEntityListener(TopiaEntityListener listener) { addTopiaEntityListener(TopiaEntity.class, listener); @@ -630,7 +710,11 @@ public void addPropertyChangeListener(PropertyChangeListener listener) { propertyChangeListeners.add(listener); } - + + public void addTopiaContextListener(TopiaContextListener listener) { + topiaContextListeners.add(listener); + } + /* Removers */ public void removeTopiaEntityListener(TopiaEntityListener listener) { removeTopiaEntityListener(TopiaEntity.class, listener); @@ -660,4 +744,9 @@ propertyChangeListeners.remove(listener); } + public void removeTopiaContextListener(TopiaContextListener listener) { + topiaContextListeners.remove(listener); + } + + } Index: topia2/src/java/org/codelutin/topia/framework/TopiaContextImplementor.java diff -u topia2/src/java/org/codelutin/topia/framework/TopiaContextImplementor.java:1.16 topia2/src/java/org/codelutin/topia/framework/TopiaContextImplementor.java:1.17 --- topia2/src/java/org/codelutin/topia/framework/TopiaContextImplementor.java:1.16 Mon Apr 2 10:49:52 2007 +++ topia2/src/java/org/codelutin/topia/framework/TopiaContextImplementor.java Fri Nov 16 11:26:16 2007 @@ -23,10 +23,10 @@ * Created: 3 janv. 2006 21:27:24 * * @author poussin - * @version $Revision: 1.16 $ + * @version $Revision: 1.17 $ * - * Last update: $Date: 2007-04-02 10:49:52 $ - * by : $Author: bpoussin $ + * Last update: $Date: 2007-11-16 11:26:16 $ + * by : $Author: chatellier $ */ package org.codelutin.topia.framework; @@ -41,8 +41,6 @@ import org.codelutin.topia.TopiaNotFoundException; import org.codelutin.topia.persistence.TopiaDAO; import org.codelutin.topia.persistence.TopiaEntity; -import org.codelutin.util.CategorisedListenerSet; -import org.codelutin.util.ListenerSet; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; Index: topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java diff -u topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java:1.54 topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java:1.55 --- topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java:1.54 Wed Nov 14 17:34:04 2007 +++ topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java Fri Nov 16 11:26:16 2007 @@ -23,9 +23,9 @@ * * @author poussin * - * @version $Revision: 1.54 $ + * @version $Revision: 1.55 $ * - * Last update: $Date: 2007-11-14 17:34:04 $ by : $Author: chatellier $ + * Last update: $Date: 2007-11-16 11:26:16 $ by : $Author: chatellier $ */ package org.codelutin.topia.framework; @@ -60,6 +60,7 @@ import org.codelutin.topia.TopiaContextFactory; import org.codelutin.topia.TopiaException; import org.codelutin.topia.TopiaNotFoundException; +import org.codelutin.topia.event.TopiaContextListener; import org.codelutin.topia.event.TopiaEntityListener; import org.codelutin.topia.event.TopiaEntityVetoable; import org.codelutin.topia.event.TopiaTransactionListener; @@ -379,7 +380,9 @@ if (log.isDebugEnabled()) { showSchema = true; } + getFiresSupport().firePreCreateSchema(this); new SchemaExport(getHibernateConfiguration()).create(showSchema, true); + getFiresSupport().firePostCreateSchema(this); } catch (HibernateException eee) { throw new TopiaException("Can't create database schema", eee); } @@ -394,7 +397,9 @@ if (log.isDebugEnabled()) { showSchema = true; } + getFiresSupport().firePreUpdateSchema(this); new SchemaUpdate(getHibernateConfiguration()).execute(showSchema, true); + getFiresSupport().firePostUpdateSchema(this); } catch (HibernateException eee) { throw new TopiaException("Can't create database schema", eee); } @@ -1144,6 +1149,10 @@ public void addPropertyChangeListener(PropertyChangeListener listener) { getFiresSupport().addPropertyChangeListener(listener); } + + public void addTopiaContextListener(TopiaContextListener listener) { + getFiresSupport().addTopiaContextListener(listener); + } /* Removers */ public void removeTopiaEntityListener(TopiaEntityListener listener) { @@ -1173,5 +1182,9 @@ public void removePropertyChangeListener(PropertyChangeListener listener) { getFiresSupport().removePropertyChangeListener(listener); } + + public void removeTopiaContextListener(TopiaContextListener listener) { + getFiresSupport().removeTopiaContextListener(listener); + } } //TopiaContextImpl