This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository topia-2.x. See https://gitlab.nuiton.org/nuiton/topia-2.x.git commit 4e25168242af16fbbff7e5d97c19369bd64efaad Author: Eric Chatellier <chatellier@codelutin.com> Date: Thu Aug 4 10:57:04 2016 +0200 fixes #4000: Add oldState informations in case of updateEvent for TopiaEntityListener --- .../org/nuiton/topia/event/TopiaEntityEvent.java | 23 ++++++++++++++++++++++ .../nuiton/topia/framework/TopiaContextImpl.java | 1 - .../nuiton/topia/framework/TopiaFiresSupport.java | 12 +++++------ 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/topia-persistence/src/main/java/org/nuiton/topia/event/TopiaEntityEvent.java b/topia-persistence/src/main/java/org/nuiton/topia/event/TopiaEntityEvent.java index a6a1a16..d02edcc 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/event/TopiaEntityEvent.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/event/TopiaEntityEvent.java @@ -43,12 +43,28 @@ public class TopiaEntityEvent extends EventObject { private Object[] state; + /** Old state in case of update event. */ + private Object[] oldState; + + /** Dirty properties in case of update event. */ + private int[] dirtyProperties; + public TopiaEntityEvent(Object source, TopiaEntity entity, Object[] state) { super(source); this.entity = entity; this.state = state; } + public TopiaEntityEvent(Object source, TopiaEntity entity, Object[] state, Object[] oldState) { + this(source, entity, state); + this.oldState = oldState; + } + + public TopiaEntityEvent(Object source, TopiaEntity entity, Object[] state, Object[] oldState, int[] dirtyProperties) { + this(source, entity, state, oldState); + this.dirtyProperties = dirtyProperties; + } + public TopiaEntity getEntity() { return entity; } @@ -62,4 +78,11 @@ public class TopiaEntityEvent extends EventObject { return state; } + public Object[] getOldState() { + return oldState; + } + + public int[] getDirtyProperties() { + return dirtyProperties; + } } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java b/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java index 1f1d587..191fbf1 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java @@ -64,7 +64,6 @@ import org.hibernate.boot.Metadata; import org.hibernate.boot.MetadataBuilder; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; -import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider; import org.hibernate.event.service.spi.EventListenerRegistry; import org.hibernate.event.spi.EventType; diff --git a/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java b/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java index ea4a604..472ad7e 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java @@ -359,12 +359,12 @@ public class TopiaFiresSupport { } public void fireOnPreUpdate(TopiaContextImplementor context, - TopiaEntity entity, Object[] state) { + TopiaEntity entity, Object[] state, Object[] oldState) { if (log.isDebugEnabled()) { log.debug("fireOnPreUpdate"); } if (isNotEmpty(entityVetoables, entity.getClass())) { - TopiaEntityEvent event = new TopiaEntityEvent(context, entity, state); + TopiaEntityEvent event = new TopiaEntityEvent(context, entity, state, oldState); for (Iterator<TopiaEntityVetoable> l = entityVetoables.iterator(entity .getClass()); l.hasNext(); ) { try { @@ -377,13 +377,13 @@ public class TopiaFiresSupport { } public void fireOnPostUpdate(TopiaContextImplementor context, - TopiaEntity entity, Object[] state) { + TopiaEntity entity, Object[] state, Object[] oldState, int[] dirtyProperties) { if (log.isDebugEnabled()) { log.debug("fireOnPostUpdate"); } warnOnUpdateEntity(entity); if (isNotEmpty(entityListeners, entity.getClass())) { - TopiaEntityEvent event = new TopiaEntityEvent(context, entity, state); + TopiaEntityEvent event = new TopiaEntityEvent(context, entity, state, oldState, dirtyProperties); for (Iterator<TopiaEntityListener> l = entityListeners.iterator(entity .getClass()); l.hasNext(); ) { try { @@ -711,7 +711,7 @@ public class TopiaFiresSupport { .getSession()); if (context != null && event.getEntity() instanceof TopiaEntity) { context.getFiresSupport().fireOnPreUpdate(context, - (TopiaEntity) event.getEntity(), event.getOldState()); + (TopiaEntity) event.getEntity(), event.getOldState(), event.getOldState()); } return false; } @@ -722,7 +722,7 @@ public class TopiaFiresSupport { .getSession()); if (context != null && event.getEntity() instanceof TopiaEntity) { context.getFiresSupport().fireOnPostUpdate(context, - (TopiaEntity) event.getEntity(), event.getState()); + (TopiaEntity) event.getEntity(), event.getState(), event.getOldState(), event.getDirtyProperties()); } // FIXME indexation // if (!(entity instanceof NotIndexable) && context.isIndexEnabled()) { -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.