Updated Branches: refs/heads/master 5fa70b1e8 -> 53442bb4a
WICKET-4483 Component#setDefaultModel() should call #modelChanging() Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/53442bb4 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/53442bb4 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/53442bb4 Branch: refs/heads/master Commit: 53442bb4a821c538a19a0d0b0b1f2a8dc954ada0 Parents: 5fa70b1 Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org> Authored: Thu Mar 29 13:21:03 2012 +0200 Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org> Committed: Thu Mar 29 13:21:03 2012 +0200 ---------------------------------------------------------------------- .../src/main/java/org/apache/wicket/Component.java | 8 +-- .../test/java/org/apache/wicket/ComponentTest.java | 46 +++++++++++++++ 2 files changed, 48 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/53442bb4/wicket-core/src/main/java/org/apache/wicket/Component.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/Component.java b/wicket-core/src/main/java/org/apache/wicket/Component.java index fb56254..342f107 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Component.java +++ b/wicket-core/src/main/java/org/apache/wicket/Component.java @@ -2985,15 +2985,11 @@ public abstract class Component // Change model if (wrappedModel != model) { - if (wrappedModel != null) - { - addStateChange(); - } - + modelChanging(); setModelImpl(wrap(model)); + modelChanged(); } - modelChanged(); return this; } http://git-wip-us.apache.org/repos/asf/wicket/blob/53442bb4/wicket-core/src/test/java/org/apache/wicket/ComponentTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/ComponentTest.java b/wicket-core/src/test/java/org/apache/wicket/ComponentTest.java index f0961ef..c0c6041 100644 --- a/wicket-core/src/test/java/org/apache/wicket/ComponentTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/ComponentTest.java @@ -17,11 +17,14 @@ package org.apache.wicket; import java.lang.reflect.Method; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.wicket.ajax.AjaxEventBehavior; import org.apache.wicket.behavior.Behavior; import org.apache.wicket.markup.html.WebComponent; import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; import org.junit.Test; /** @@ -148,4 +151,47 @@ public class ComponentTest extends WicketTestCase component.setVisible(false); assertFalse(component.isStateless()); } + + /** + * https://issues.apache.org/jira/browse/WICKET-4483 + * + * setDefaultModel() should call modelChanging/modelChanged only if the new model + * is different that the old one. The same as setDefaultModelObject(). + */ + @Test + public void modelChange() + { + final AtomicBoolean modelChanging = new AtomicBoolean(false); + final AtomicBoolean modelChanged = new AtomicBoolean(false); + + WebComponent component = new WebComponent("someId") + { + @Override + protected void onModelChanging() + { + super.onModelChanging(); + modelChanging.set(true); + } + + @Override + protected void onModelChanged() + { + super.onModelChanged(); + modelChanged.set(true); + } + }; + + assertNull(component.getDefaultModel()); + IModel<Integer> model = Model.of(1); + + // set a model which is different that the old one (old = null, new = non-null) + component.setDefaultModel(model); + assertTrue(modelChanging.getAndSet(false)); + assertTrue(modelChanged.getAndSet(false)); + + // set the same instance - no change notifications should happen + component.setDefaultModel(model); + assertFalse(modelChanging.get()); + assertFalse(modelChanged.get()); + } }