Repository: wicket
Updated Branches:
  refs/heads/lambdas-ajax 218a58e3e -> c5ee496a3


WICKET-5992 Add support for lambdas in Ajax behaviors & components


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/c5ee496a
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/c5ee496a
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/c5ee496a

Branch: refs/heads/lambdas-ajax
Commit: c5ee496a355f6f0fbdbc6cd6446ea15a2af669f2
Parents: 218a58e
Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Authored: Tue Mar 8 22:00:22 2016 +0100
Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Committed: Tue Mar 8 22:00:22 2016 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/wicket/Component.java  | 20 ++++---
 .../form/AjaxFormComponentUpdatingBehavior.java |  5 +-
 .../wicket/model/lambda/AjaxListener.java       |  3 -
 .../java/org/apache/wicket/ComponentTest.java   | 60 +++++++++++++-------
 4 files changed, 50 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/c5ee496a/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 ebd5b39..1b51695 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Component.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Component.java
@@ -4623,17 +4623,19 @@ public abstract class Component
                {
                        case "change":
                        case "blur":
-                               ajaxBehavior = new 
AjaxFormComponentUpdatingBehavior(eventName, listener);
-                               break;
-                       default:
-                               if 
(AjaxFormChoiceComponentUpdatingBehavior.appliesTo(this))
-                               {
-                                       ajaxBehavior = new 
AjaxFormChoiceComponentUpdatingBehavior(listener);
-                               }
-                               else
+                               if (this instanceof FormComponent)
                                {
-                                       ajaxBehavior = new 
AjaxEventBehavior(eventName, listener);
+                                       if 
(AjaxFormChoiceComponentUpdatingBehavior.appliesTo(this))
+                                       {
+                                               ajaxBehavior = new 
AjaxFormChoiceComponentUpdatingBehavior(listener);
+                                       } else
+                                       {
+                                               ajaxBehavior = new 
AjaxFormComponentUpdatingBehavior(eventName, listener);
+                                       }
+                                       break;
                                }
+                       default:
+                               ajaxBehavior = new AjaxEventBehavior(eventName, 
listener);
                }
 
                add(ajaxBehavior);

http://git-wip-us.apache.org/repos/asf/wicket/blob/c5ee496a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormComponentUpdatingBehavior.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormComponentUpdatingBehavior.java
 
b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormComponentUpdatingBehavior.java
index a014ddf..71a3d59 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormComponentUpdatingBehavior.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormComponentUpdatingBehavior.java
@@ -52,9 +52,6 @@ public class AjaxFormComponentUpdatingBehavior extends 
AjaxEventBehavior
        private static final Logger log = LoggerFactory
                .getLogger(AjaxFormComponentUpdatingBehavior.class);
 
-       /**
-        * 
-        */
        private static final long serialVersionUID = 1L;
 
        private final AjaxListener listener;
@@ -188,7 +185,7 @@ public class AjaxFormComponentUpdatingBehavior extends 
AjaxEventBehavior
                        }
                        else
                        {
-                               onError(target, null);
+                               onError(target, e);
                        }
                }
                formComponent.updateAutoLabels(target);

http://git-wip-us.apache.org/repos/asf/wicket/blob/c5ee496a/wicket-core/src/main/java/org/apache/wicket/model/lambda/AjaxListener.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/model/lambda/AjaxListener.java 
b/wicket-core/src/main/java/org/apache/wicket/model/lambda/AjaxListener.java
index 3537be1..f79ac00 100644
--- a/wicket-core/src/main/java/org/apache/wicket/model/lambda/AjaxListener.java
+++ b/wicket-core/src/main/java/org/apache/wicket/model/lambda/AjaxListener.java
@@ -18,9 +18,6 @@ package org.apache.wicket.model.lambda;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 
-/**
- *
- */
 @FunctionalInterface
 public interface AjaxListener extends WicketConsumer<AjaxRequestTarget>
 {

http://git-wip-us.apache.org/repos/asf/wicket/blob/c5ee496a/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 9473979..8054f0c 100644
--- a/wicket-core/src/test/java/org/apache/wicket/ComponentTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/ComponentTest.java
@@ -16,19 +16,21 @@
  */
 package org.apache.wicket;
 
+import static org.hamcrest.Matchers.emptyString;
+import static org.hamcrest.Matchers.is;
+
 import java.lang.reflect.Method;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebComponent;
 import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextArea;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
-import org.apache.wicket.model.lambda.AjaxListener;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.Test;
 
@@ -182,7 +184,7 @@ public class ComponentTest extends WicketTestCase
         
                // make the link such that it can call listener interface
                // methods no matter whether it is visible or enabled
-               link = new Link("someId") {
+               link = new Link<Void>("someId") {
 
                    @Override
                    public boolean canCallListenerInterface(Method method) {
@@ -249,7 +251,7 @@ public class ComponentTest extends WicketTestCase
        }
 
        @Test
-       public void onClick()
+       public void onComponentClick()
        {
                MockPageWithOneComponent page = new MockPageWithOneComponent();
                WebMarkupContainer component = new 
WebMarkupContainer(MockPageWithOneComponent.COMPONENT_ID);
@@ -258,29 +260,44 @@ public class ComponentTest extends WicketTestCase
 
                component.on(eventName, (target) -> executed.set(true));
 
-               // this is how AjaxFormComponentUpdatingBehavior could be used
-//             component.on("change", new AjaxListener()
-//             {
-//                     @Override
-//                     public void onEvent(AjaxRequestTarget target)
-//                     {
-//                             // use 'form' if you need with
-//                             final Form<?> form = Form.findForm(component);
-//                     }
-//
-//                     @Override
-//                     public void onError(AjaxRequestTarget target, 
RuntimeException error)
-//                     {
-//
-//                     }
-//             });
+               page.add(component);
+               tester.startPage(page);
 
+               assertFalse(executed.get());
+               tester.executeAjaxEvent(component, eventName);
+               assertTrue(executed.get());
+       }
+
+       @Test
+       public void onFormComponentChange()
+       {
+               MockPageWithOneComponent page = new MockPageWithOneComponent();
+               Model<String> model = Model.of("");
+               TextArea<String> component = new 
TextArea<String>(MockPageWithOneComponent.COMPONENT_ID, model) {
+                       @Override
+                       protected void onComponentTag(ComponentTag tag)
+                       {
+                               tag.setName("textarea");
+                               super.onComponentTag(tag);
+                       }
+               };
                page.add(component);
+               final String eventName = "change";
+               AtomicBoolean executed = new AtomicBoolean(false);
+
+               component.on(eventName, (target) -> executed.set(true));
+
                tester.startPage(page);
 
                assertFalse(executed.get());
+               assertThat(model.getObject(), is(emptyString()));
+
+               String newValue = "newValue";
+               tester.getRequest().setParameter(component.getInputName(), 
newValue);
                tester.executeAjaxEvent(component, eventName);
+
                assertTrue(executed.get());
+               assertThat(model.getObject(), is(newValue));
        }
 
        /**
@@ -288,7 +305,6 @@ public class ComponentTest extends WicketTestCase
         */
        private static class FlagReserved5Component extends Component
        {
-
                public FlagReserved5Component(final String id) {
                        super(id);
                }

Reply via email to