Repository: wicket
Updated Branches:
  refs/heads/wicket-7.x 97daad6ab -> 0fb4468d9


WICKET-6482 delegate to nested behaviors


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

Branch: refs/heads/wicket-7.x
Commit: 0fb4468d97e3c19ea0c21860b857b41b3314494a
Parents: 97daad6
Author: Sven Meier <[email protected]>
Authored: Fri Oct 13 21:57:58 2017 +0200
Committer: Sven Meier <[email protected]>
Committed: Fri Oct 13 21:58:57 2017 +0200

----------------------------------------------------------------------
 .../wicket/validation/CompoundValidator.java    | 124 +++++++++++++++++++
 .../validation/CompoundValidatorTest.java       |  72 +++++++++++
 2 files changed, 196 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/0fb4468d/wicket-core/src/main/java/org/apache/wicket/validation/CompoundValidator.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/validation/CompoundValidator.java 
b/wicket-core/src/main/java/org/apache/wicket/validation/CompoundValidator.java
index 3d9ef8f..77b2c60 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/validation/CompoundValidator.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/validation/CompoundValidator.java
@@ -21,7 +21,11 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.event.IEvent;
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.util.lang.Args;
 
 /**
@@ -83,4 +87,124 @@ public class CompoundValidator<T> extends Behavior 
implements IValidator<T>
        {
                return Collections.unmodifiableList(validators);
        }
+
+       @Override
+       public void beforeRender(Component component)
+       {
+               for (IValidator<T> validator : validators) {
+                       if (validator instanceof Behavior) {
+                               ((Behavior)validator).beforeRender(component);
+                       }
+               }
+       }
+
+       @Override
+       public void afterRender(Component component)
+       {
+               for (IValidator<T> validator : validators) {
+                       if (validator instanceof Behavior) {
+                               ((Behavior)validator).afterRender(component);
+                       }
+               }
+       }
+
+       @Override
+       public void bind(Component component)
+       {
+               for (IValidator<T> validator : validators) {
+                       if (validator instanceof Behavior) {
+                               ((Behavior)validator).bind(component);
+                       }
+               }
+       }
+
+       @Override
+       public void unbind(Component component)
+       {
+               for (IValidator<T> validator : validators) {
+                       if (validator instanceof Behavior) {
+                               ((Behavior)validator).unbind(component);
+                       }
+               }
+       }
+       
+       @Override
+       public void detach(Component component)
+       {
+               for (IValidator<T> validator : validators) {
+                       if (validator instanceof Behavior) {
+                               ((Behavior)validator).detach(component);
+                       }
+               }
+       }
+
+       @Override
+       public void onException(Component component, RuntimeException exception)
+       {
+               for (IValidator<T> validator : validators) {
+                       if (validator instanceof Behavior) {
+                               ((Behavior)validator).onException(component, 
exception);
+                       }
+               }
+       }
+
+       public boolean getStatelessHint(Component component)
+       {
+               for (IValidator<T> validator : validators) {
+                       if (validator instanceof Behavior && 
((Behavior)validator).getStatelessHint(component) == false) {
+                               return false;
+                       }
+               }
+               return super.getStatelessHint(component);
+       }
+
+       @Override
+       public void onComponentTag(Component component, ComponentTag tag)
+       {
+               for (IValidator<T> validator : validators) {
+                       if (validator instanceof Behavior) {
+                               ((Behavior)validator).onComponentTag(component, 
tag);
+                       }
+               }
+       }
+
+       @Override
+       public void renderHead(Component component, IHeaderResponse response)
+       {
+               for (IValidator<T> validator : validators) {
+                       if (validator instanceof Behavior) {
+                               ((Behavior)validator).renderHead(component, 
response);
+                       }
+               }
+       }
+
+       @Override
+       public void onConfigure(Component component)
+       {
+               for (IValidator<T> validator : validators) {
+                       if (validator instanceof Behavior) {
+                               ((Behavior)validator).onConfigure(component);
+                       }
+               }
+       }
+
+       @Override
+       public void onEvent(Component component, IEvent<?> event)
+       {
+               for (IValidator<T> validator : validators) {
+                       if (validator instanceof Behavior) {
+                               ((Behavior)validator).onEvent(component, event);
+                       }
+               }
+       }
+
+       @Override
+       public void onRemove(Component component)
+       {
+               for (IValidator<T> validator : validators) {
+                       if (validator instanceof Behavior) {
+                               ((Behavior)validator).onRemove(component);
+                       }
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/0fb4468d/wicket-core/src/test/java/org/apache/wicket/validation/CompoundValidatorTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/validation/CompoundValidatorTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/validation/CompoundValidatorTest.java
new file mode 100644
index 0000000..22091e5
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/validation/CompoundValidatorTest.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.validation;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.validation.validator.RangeValidator;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+/**
+ * Test for {@link CompoundValidator}.
+ */
+public class CompoundValidatorTest
+{
+       /**
+        * WICKET-6482 delegate to nested behaviors
+        */
+       @SuppressWarnings("unchecked")
+       @Test
+       public void delegate() {
+               CompoundValidator<String> compound = new CompoundValidator<>();
+               
+               compound.add(new IValidator<String>()
+               {
+                       @Override
+                       public void validate(IValidatable<String> validatable)
+                       {
+                       }
+               });
+               
+               RangeValidator<String> validator = 
Mockito.mock(RangeValidator.class);
+               compound.add(validator);
+
+               Component component = null;
+
+               compound.bind(component);
+               compound.onConfigure(component);
+               compound.renderHead(component, null);
+               compound.beforeRender(component);
+               compound.onComponentTag(component, null);
+               compound.afterRender(component);
+               compound.onEvent(component, null);
+               compound.onException(component, null);
+               compound.onRemove(component);
+               compound.detach(component);
+               
+               Mockito.verify(validator).bind(component);
+               Mockito.verify(validator).onConfigure(component);
+               Mockito.verify(validator).renderHead(component, null);
+               Mockito.verify(validator).beforeRender(component);
+               Mockito.verify(validator).onComponentTag(component, null);
+               Mockito.verify(validator).afterRender(component);
+               Mockito.verify(validator).onEvent(component, null);
+               Mockito.verify(validator).onException(component, null);
+               Mockito.verify(validator).onRemove(component);
+               Mockito.verify(validator).detach(component);
+       }
+}
\ No newline at end of file

Reply via email to