diff --git a/src/main/java/io/ebean/BeanState.java b/src/main/java/io/ebean/BeanState.java index 36f7477b4..ddb76d358 100644 --- a/src/main/java/io/ebean/BeanState.java +++ b/src/main/java/io/ebean/BeanState.java @@ -1,6 +1,5 @@ package io.ebean; -import java.beans.PropertyChangeListener; import java.util.Map; import java.util.Set; @@ -99,16 +98,6 @@ public interface BeanState { */ void setReadOnly(boolean readOnly); - /** - * Add a propertyChangeListener. - */ - void addPropertyChangeListener(PropertyChangeListener listener); - - /** - * Remove a propertyChangeListener. - */ - void removePropertyChangeListener(PropertyChangeListener listener); - /** * Advanced - Used to programmatically build a partially or fully loaded * entity bean. First create an entity bean via diff --git a/src/main/java/io/ebean/bean/EntityBean.java b/src/main/java/io/ebean/bean/EntityBean.java index cbf49ef19..ded54d5b8 100644 --- a/src/main/java/io/ebean/bean/EntityBean.java +++ b/src/main/java/io/ebean/bean/EntityBean.java @@ -1,6 +1,5 @@ package io.ebean.bean; -import java.beans.PropertyChangeListener; import java.io.Serializable; /** @@ -32,16 +31,6 @@ public interface EntityBean extends Serializable { */ Object _ebean_newInstance(); - /** - * Add a PropertyChangeListener to this bean. - */ - void addPropertyChangeListener(PropertyChangeListener listener); - - /** - * Remove a PropertyChangeListener from this bean. - */ - void removePropertyChangeListener(PropertyChangeListener listener); - /** * Generated method that sets the loaded state on all the embedded beans on * this entity bean by using EntityBeanIntercept.setEmbeddedLoaded(Object o); diff --git a/src/main/java/io/ebean/bean/EntityBeanIntercept.java b/src/main/java/io/ebean/bean/EntityBeanIntercept.java index 854d780a1..cdeb21bba 100644 --- a/src/main/java/io/ebean/bean/EntityBeanIntercept.java +++ b/src/main/java/io/ebean/bean/EntityBeanIntercept.java @@ -3,15 +3,12 @@ package io.ebean.bean; import io.ebean.Ebean; import io.ebean.ValuePair; -import java.util.Arrays; import javax.persistence.EntityNotFoundException; import javax.persistence.PersistenceException; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeSupport; import java.io.Serializable; import java.math.BigDecimal; import java.net.URL; +import java.util.Arrays; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; @@ -34,8 +31,6 @@ public final class EntityBeanIntercept implements Serializable { private transient NodeUsageCollector nodeUsageCollector; - private transient PropertyChangeSupport pcs; - private transient PersistenceContext persistenceContext; private transient BeanLoader beanLoader; @@ -128,46 +123,6 @@ public final class EntityBeanIntercept implements Serializable { this.persistenceContext = persistenceContext; } - /** - * Add a property change listener for this entity bean. - */ - public void addPropertyChangeListener(PropertyChangeListener listener) { - if (pcs == null) { - pcs = new PropertyChangeSupport(owner); - } - pcs.addPropertyChangeListener(listener); - } - - /** - * Add a property change listener for this entity bean for a specific - * property. - */ - public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - if (pcs == null) { - pcs = new PropertyChangeSupport(owner); - } - pcs.addPropertyChangeListener(propertyName, listener); - } - - /** - * Remove a property change listener for this entity bean. - */ - public void removePropertyChangeListener(PropertyChangeListener listener) { - if (pcs != null) { - pcs.removePropertyChangeListener(listener); - } - } - - /** - * Remove a property change listener for this entity bean for a specific - * property. - */ - public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { - if (pcs != null) { - pcs.removePropertyChangeListener(propertyName, listener); - } - } - /** * Turn on profile collection. */ @@ -920,49 +875,17 @@ public final class EntityBeanIntercept implements Serializable { } } - /** - * Called for "enhancement" postSetter processing. This is around a PUTFIELD - * so no need to check the newValue afterwards. - */ - public void postSetter(PropertyChangeEvent event) { - if (pcs != null && event != null) { - pcs.firePropertyChange(event); - } - } - - /** - * Called for "subclassed" postSetter processing. Here the newValue has to be - * re-fetched (and passed into this method) in case there is code inside the - * setter that further mutates the value. - */ - public void postSetter(PropertyChangeEvent event, Object newValue) { - if (pcs != null && event != null) { - if (newValue != null && newValue.equals(event.getNewValue())) { - pcs.firePropertyChange(event); - } else { - pcs.firePropertyChange(event.getPropertyName(), event.getOldValue(), newValue); - } - } - } - /** * OneToMany and ManyToMany don't have any interception so just check for * PropertyChangeSupport. */ - public PropertyChangeEvent preSetterMany(boolean interceptField, int propertyIndex, Object oldValue, Object newValue) { + public void preSetterMany(boolean interceptField, int propertyIndex, Object oldValue, Object newValue) { if (readOnly) { throw new IllegalStateException("This bean is readOnly"); } setLoadedProperty(propertyIndex); - - // Bean itself not considered dirty when many changed - if (pcs != null) { - return new PropertyChangeEvent(owner, getProperty(propertyIndex), oldValue, newValue); - } else { - return null; - } } private void setChangedPropertyValue(int propertyIndex, boolean setDirtyState, Object origValue) { @@ -991,175 +914,140 @@ public final class EntityBeanIntercept implements Serializable { * Check to see if the values are not equal. If they are not equal then create * the old values for use with ConcurrencyMode.ALL. */ - public PropertyChangeEvent preSetter(boolean intercept, int propertyIndex, Object oldValue, Object newValue) { + public void preSetter(boolean intercept, int propertyIndex, Object oldValue, Object newValue) { if (state == STATE_NEW) { setLoadedProperty(propertyIndex); } else if (!areEqual(oldValue, newValue)) { setChangedPropertyValue(propertyIndex, intercept, oldValue); - } else { - return null; } - - return (pcs == null) ? null : new PropertyChangeEvent(owner, getProperty(propertyIndex), oldValue, newValue); } /** * Check for primitive boolean. */ - public PropertyChangeEvent preSetter(boolean intercept, int propertyIndex, boolean oldValue, boolean newValue) { + public void preSetter(boolean intercept, int propertyIndex, boolean oldValue, boolean newValue) { if (state == STATE_NEW) { setLoadedProperty(propertyIndex); } else if (oldValue != newValue) { setChangedPropertyValue(propertyIndex, intercept, oldValue); - } else { - return null; } - return (pcs == null) ? null : new PropertyChangeEvent(owner, getProperty(propertyIndex), oldValue, newValue); } /** * Check for primitive int. */ - public PropertyChangeEvent preSetter(boolean intercept, int propertyIndex, int oldValue, int newValue) { + public void preSetter(boolean intercept, int propertyIndex, int oldValue, int newValue) { if (state == STATE_NEW) { setLoadedProperty(propertyIndex); } else if (oldValue != newValue) { setChangedPropertyValue(propertyIndex, intercept, oldValue); - } else { - return null; } - return (pcs == null) ? null : new PropertyChangeEvent(owner, getProperty(propertyIndex), oldValue, newValue); } /** * long. */ - public PropertyChangeEvent preSetter(boolean intercept, int propertyIndex, long oldValue, long newValue) { + public void preSetter(boolean intercept, int propertyIndex, long oldValue, long newValue) { if (state == STATE_NEW) { setLoadedProperty(propertyIndex); } else if (oldValue != newValue) { setChangedPropertyValue(propertyIndex, intercept, oldValue); - } else { - return null; } - - return (pcs == null) ? null : new PropertyChangeEvent(owner, getProperty(propertyIndex), oldValue, newValue); } /** * double. */ - public PropertyChangeEvent preSetter(boolean intercept, int propertyIndex, double oldValue, double newValue) { + public void preSetter(boolean intercept, int propertyIndex, double oldValue, double newValue) { if (state == STATE_NEW) { setLoadedProperty(propertyIndex); } else if (Double.compare(oldValue, newValue) != 0) { setChangedPropertyValue(propertyIndex, intercept, oldValue); - } else { - return null; } - return (pcs == null) ? null : new PropertyChangeEvent(owner, getProperty(propertyIndex), oldValue, newValue); } /** * float. */ - public PropertyChangeEvent preSetter(boolean intercept, int propertyIndex, float oldValue, float newValue) { + public void preSetter(boolean intercept, int propertyIndex, float oldValue, float newValue) { if (state == STATE_NEW) { setLoadedProperty(propertyIndex); } else if (Float.compare(oldValue, newValue) != 0) { setChangedPropertyValue(propertyIndex, intercept, oldValue); - } else { - return null; } - return (pcs == null) ? null : new PropertyChangeEvent(owner, getProperty(propertyIndex), oldValue, newValue); } /** * short. */ - public PropertyChangeEvent preSetter(boolean intercept, int propertyIndex, short oldValue, short newValue) { + public void preSetter(boolean intercept, int propertyIndex, short oldValue, short newValue) { if (state == STATE_NEW) { setLoadedProperty(propertyIndex); } else if (oldValue != newValue) { setChangedPropertyValue(propertyIndex, intercept, oldValue); - } else { - return null; } - return (pcs == null) ? null : new PropertyChangeEvent(owner, getProperty(propertyIndex), oldValue, newValue); } /** * char. */ - public PropertyChangeEvent preSetter(boolean intercept, int propertyIndex, char oldValue, char newValue) { + public void preSetter(boolean intercept, int propertyIndex, char oldValue, char newValue) { if (state == STATE_NEW) { setLoadedProperty(propertyIndex); } else if (oldValue != newValue) { setChangedPropertyValue(propertyIndex, intercept, oldValue); - } else { - return null; } - return (pcs == null) ? null : new PropertyChangeEvent(owner, getProperty(propertyIndex), oldValue, newValue); } /** * byte. */ - public PropertyChangeEvent preSetter(boolean intercept, int propertyIndex, byte oldValue, byte newValue) { + public void preSetter(boolean intercept, int propertyIndex, byte oldValue, byte newValue) { if (state == STATE_NEW) { setLoadedProperty(propertyIndex); } else if (oldValue != newValue) { setChangedPropertyValue(propertyIndex, intercept, oldValue); - } else { - return null; } - return (pcs == null) ? null : new PropertyChangeEvent(owner, getProperty(propertyIndex), oldValue, newValue); } /** * char[]. */ - public PropertyChangeEvent preSetter(boolean intercept, int propertyIndex, char[] oldValue, char[] newValue) { + public void preSetter(boolean intercept, int propertyIndex, char[] oldValue, char[] newValue) { if (state == STATE_NEW) { setLoadedProperty(propertyIndex); } else if (!Arrays.equals(oldValue, newValue)) { setChangedPropertyValue(propertyIndex, intercept, oldValue); - } else { - return null; } - return (pcs == null) ? null : new PropertyChangeEvent(owner, getProperty(propertyIndex), oldValue, newValue); } /** * byte[]. */ - public PropertyChangeEvent preSetter(boolean intercept, int propertyIndex, byte[] oldValue, byte[] newValue) { + public void preSetter(boolean intercept, int propertyIndex, byte[] oldValue, byte[] newValue) { if (state == STATE_NEW) { setLoadedProperty(propertyIndex); } else if (!Arrays.equals(oldValue, newValue)) { setChangedPropertyValue(propertyIndex, intercept, oldValue); - } else { - return null; } - return (pcs == null) ? null : new PropertyChangeEvent(owner, getProperty(propertyIndex), oldValue, newValue); } /** * Explicitly set an old value. */ - public void setOldValue(int propertyIndex,Object oldValue) { + public void setOldValue(int propertyIndex, Object oldValue) { setChangedPropertyValue(propertyIndex, true, oldValue); } } diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultBeanState.java b/src/main/java/io/ebeaninternal/server/core/DefaultBeanState.java index 22500ff17..3b489948e 100644 --- a/src/main/java/io/ebeaninternal/server/core/DefaultBeanState.java +++ b/src/main/java/io/ebeaninternal/server/core/DefaultBeanState.java @@ -5,7 +5,6 @@ import io.ebean.ValuePair; import io.ebean.bean.EntityBean; import io.ebean.bean.EntityBeanIntercept; -import java.beans.PropertyChangeListener; import java.util.Map; import java.util.Set; @@ -14,12 +13,9 @@ import java.util.Set; */ public class DefaultBeanState implements BeanState { - private final EntityBean entityBean; - private final EntityBeanIntercept intercept; public DefaultBeanState(EntityBean entityBean) { - this.entityBean = entityBean; this.intercept = entityBean._ebean_getIntercept(); } @@ -73,16 +69,6 @@ public class DefaultBeanState implements BeanState { intercept.setReadOnly(readOnly); } - @Override - public void addPropertyChangeListener(PropertyChangeListener listener) { - entityBean.addPropertyChangeListener(listener); - } - - @Override - public void removePropertyChangeListener(PropertyChangeListener listener) { - entityBean.removePropertyChangeListener(listener); - } - @Override public void setLoaded() { intercept.setLoaded(); diff --git a/src/test/java/io/ebean/TestPropertyChangeListener.java b/src/test/java/io/ebean/TestPropertyChangeListener.java deleted file mode 100644 index 722e0f8ca..000000000 --- a/src/test/java/io/ebean/TestPropertyChangeListener.java +++ /dev/null @@ -1,49 +0,0 @@ -package io.ebean; - -import org.tests.model.basic.Customer; -import org.tests.model.basic.ResetBasicData; -import org.junit.Assert; -import org.junit.Test; - -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.ArrayList; -import java.util.List; - -public class TestPropertyChangeListener extends BaseTestCase { - - @Test - public void test() { - - ResetBasicData.reset(); - - List list = Ebean.find(Customer.class).findList(); - - Listener listener = new Listener(); - - Customer customer = list.get(0); - Ebean.getBeanState(customer).addPropertyChangeListener(listener); - - customer.setName("modName"); - customer.setSmallnote("modSmallNote"); - - Assert.assertEquals(2, listener.events.size()); - Assert.assertEquals("modName", listener.events.get(0).getNewValue()); - Assert.assertEquals("name", listener.events.get(0).getPropertyName()); - Assert.assertEquals("modSmallNote", listener.events.get(1).getNewValue()); - Assert.assertEquals("smallnote", listener.events.get(1).getPropertyName()); - - } - - class Listener implements PropertyChangeListener { - - List events = new ArrayList<>(); - - @Override - public void propertyChange(PropertyChangeEvent evt) { - events.add(evt); - } - - } - -}