Index: topia2/src/java/org/codelutin/topia/persistence/TopiaEntityAbstract.java diff -u topia2/src/java/org/codelutin/topia/persistence/TopiaEntityAbstract.java:1.9 topia2/src/java/org/codelutin/topia/persistence/TopiaEntityAbstract.java:1.10 --- topia2/src/java/org/codelutin/topia/persistence/TopiaEntityAbstract.java:1.9 Wed Aug 30 14:59:04 2006 +++ topia2/src/java/org/codelutin/topia/persistence/TopiaEntityAbstract.java Mon Sep 25 13:20:57 2006 @@ -23,19 +23,26 @@ * * @author poussin * - * @version $Revision: 1.9 $ + * @version $Revision: 1.10 $ * - * Last update: $Date: 2006/08/30 14:59:04 $ by : $Author: bpoussin $ + * Last update: $Date: 2006/09/25 13:20:57 $ by : $Author: ruchaud $ */ package org.codelutin.topia.persistence; +import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; +import java.beans.PropertyVetoException; +import java.beans.VetoableChangeListener; +import java.beans.VetoableChangeSupport; import java.util.Date; +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.event.PropertyReadEvent; import org.codelutin.topia.framework.TopiaContextImplementor; /** @@ -48,6 +55,9 @@ */ public abstract class TopiaEntityAbstract implements TopiaEntity { + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(TopiaEntityAbstract.class); + protected String topiaId; protected long topiaVersion; @@ -56,7 +66,13 @@ transient protected TopiaContext topiaContext = null; - transient protected PropertyChangeSupport propertyChangeSupport = + transient protected VetoableChangeSupport vetoableChangeSupport = + new VetoableChangeSupport(this); + + transient protected VetoableChangeSupport vetoableReadSupport = + new VetoableChangeSupport(this); + + transient protected PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this); transient private boolean inPreloaded = false; @@ -237,6 +253,51 @@ //FIXME vérifier que this.getClass() renvoie bien la bonne class et corriger sinon } } + + protected void fireOnModifyVetoable(String propertyName, Object oldValue, Object newValue) { + PropertyChangeEvent event = new PropertyChangeEvent(this, propertyName, oldValue, newValue); + try { + vetoableChangeSupport.fireVetoableChange(event); + } catch (PropertyVetoException eee) { + if (log.isWarnEnabled()) { + log.warn("Can't call fireOnModifyVetoable for this entity : " + this, eee); + } + } + } + + protected T fireOnReadVetoable(String propertyName, T value) { + T result = value; + PropertyReadEvent event = new PropertyReadEvent(this, propertyName, value); + try { + vetoableReadSupport.fireVetoableChange(event); + if (event.getNewValue() != PropertyReadEvent.NOT_CHANGE) { + result = (T)event.getNewValue(); + } + } catch (PropertyVetoException eee) { + if (log.isWarnEnabled()) { + log.warn("Can't call fireOnReadVetoable for this entity : " + this, eee); + } + } + return result; + } + + public void addVetoableChangeListener(String propertyName, + VetoableChangeListener listener) { + vetoableChangeSupport.addVetoableChangeListener(propertyName, listener); + } + + public void addVetoableChangeListener(VetoableChangeListener listener) { + vetoableChangeSupport.addVetoableChangeListener(listener); + } + + public void addVetoableReadListener(String propertyName, + VetoableChangeListener listener) { + vetoableReadSupport.addVetoableChangeListener(propertyName, listener); + } + + public void addVetoableReadListener(VetoableChangeListener listener) { + vetoableReadSupport.addVetoableChangeListener(listener); + } public void addPropertyListener(String propertyName, PropertyChangeListener listener) { @@ -247,6 +308,26 @@ propertyChangeSupport.addPropertyChangeListener(listener); } + public void removeVetoableReadListener(String propertyName, + VetoableChangeListener listener) { + vetoableReadSupport.removeVetoableChangeListener(propertyName, + listener); + } + + public void removeVetoableReadListener(VetoableChangeListener listener) { + vetoableReadSupport.removeVetoableChangeListener(listener); + } + + public void removeVetoableChangeListener(String propertyName, + VetoableChangeListener listener) { + vetoableChangeSupport.removeVetoableChangeListener(propertyName, + listener); + } + + public void removeVetoableChangeListener(VetoableChangeListener listener) { + vetoableChangeSupport.removeVetoableChangeListener(listener); + } + public void removePropertyListener(String propertyName, PropertyChangeListener listener) { propertyChangeSupport.removePropertyChangeListener(propertyName,