You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2012/03/29 13:21:32 UTC
git commit: WICKET-4483 Component#setDefaultModel() should call
#modelChanging()
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 <mg...@apache.org>
Authored: Thu Mar 29 13:21:03 2012 +0200
Committer: Martin Tzvetanov Grigorov <mg...@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());
+ }
}