From: Pekka Enberg <[EMAIL PROTECTED]>

Change IFormComponent.IVisitor.formComponent() to control traversal similar
to Component.IVisitor.  This is needed so that a component can by-pass form
processing if we are not interested in its children.

Cc: Igor Vaynberg <[EMAIL PROTECTED]>
Cc: Janne Hietamäki <[EMAIL PROTECTED]>
Cc: Joni Freeman <[EMAIL PROTECTED]>
Signed-off-by: Pekka Enberg <[EMAIL PROTECTED]>
---

 src/java/wicket/markup/html/form/Form.java          |   65 +++++++++++---------
 src/java/wicket/markup/html/form/FormComponent.java |   17 ++++-
 src/java/wicket/util/tester/FormTester.java         |    5 -
 src/java/wicket/util/tester/WicketTester.java       |    5 -
 4 files changed, 60 insertions(+), 32 deletions(-)

Index: wicket/src/java/wicket/markup/html/form/Form.java
===================================================================
--- wicket.orig/src/java/wicket/markup/html/form/Form.java
+++ wicket/src/java/wicket/markup/html/form/Form.java
@@ -144,12 +144,13 @@ public class Form<T> extends WebMarkupCo
         * 
         * @author Igor Vaynberg (ivaynberg)
         */
-       private static abstract class ValidationVisitor implements 
FormComponent.IVisitor
+       private static abstract class ValidationVisitor extends 
FormComponent.AbstractVisitor
        {
                /**
-                * @see 
wicket.markup.html.form.FormComponent.IVisitor#formComponent(wicket.markup.html.form.FormComponent)
+                * @see 
wicket.markup.html.form.FormComponent.AbstractVisitor#onFormComponent(wicket.markup.html.form.FormComponent)
                 */
-               public void formComponent(FormComponent formComponent)
+               @Override
+               public void onFormComponent(FormComponent formComponent)
                {
                        if (formComponent.isVisibleInHierarchy() && 
formComponent.isValid()
                                        && formComponent.isEnabled() && 
formComponent.isEnableAllowed())
@@ -268,9 +269,10 @@ public class Form<T> extends WebMarkupCo
         */
        public final void loadPersistentFormComponentValues()
        {
-               visitFormComponents(new FormComponent.IVisitor()
+               visitFormComponents(new FormComponent.AbstractVisitor()
                {
-                       public void formComponent(final FormComponent 
formComponent)
+                       @Override
+                       public void onFormComponent(final FormComponent 
formComponent)
                        {
                                // Component must implement persister interface 
and
                                // persistence for that component must be 
enabled.
@@ -375,9 +377,10 @@ public class Form<T> extends WebMarkupCo
                final IValuePersister persister = getValuePersister();
 
                // Search for FormComponents like TextField etc.
-               visitFormComponents(new FormComponent.IVisitor()
+               visitFormComponents(new FormComponent.AbstractVisitor()
                {
-                       public void formComponent(final FormComponent 
formComponent)
+                       @Override
+                       public void onFormComponent(final FormComponent 
formComponent)
                        {
                                if (formComponent.isVisibleInHierarchy())
                                {
@@ -446,9 +449,10 @@ public class Form<T> extends WebMarkupCo
                super.setVersioned(isVersioned);
 
                // Search for FormComponents like TextField etc.
-               visitFormComponents(new FormComponent.IVisitor()
+               visitFormComponents(new FormComponent.AbstractVisitor()
                {
-                       public void formComponent(final FormComponent 
formComponent)
+                       @Override
+                       public void onFormComponent(final FormComponent 
formComponent)
                        {
                                formComponent.setVersioned(isVersioned);
                        }
@@ -479,8 +483,7 @@ public class Form<T> extends WebMarkupCo
                {
                        public Object component(final Component component)
                        {
-                               visitor.formComponent((FormComponent)component);
-                               return CONTINUE_TRAVERSAL;
+                               return 
visitor.formComponent((FormComponent)component);
                        }
                });
 
@@ -663,9 +666,10 @@ public class Form<T> extends WebMarkupCo
        protected void internalOnModelChanged()
        {
                // Visit all the form components and validate each
-               visitFormComponents(new FormComponent.IVisitor()
+               visitFormComponents(new FormComponent.AbstractVisitor()
                {
-                       public void formComponent(final FormComponent 
formComponent)
+                       @Override
+                       public void onFormComponent(final FormComponent 
formComponent)
                        {
                                // If form component is using form model
                                if (formComponent.sameRootModel(Form.this))
@@ -682,9 +686,10 @@ public class Form<T> extends WebMarkupCo
        protected final void markFormComponentsInvalid()
        {
                // call invalidate methods of all nested form components
-               visitFormComponents(new FormComponent.IVisitor()
+               visitFormComponents(new FormComponent.AbstractVisitor()
                {
-                       public void formComponent(final FormComponent 
formComponent)
+                       @Override
+                       public void onFormComponent(final FormComponent 
formComponent)
                        {
                                if (formComponent.isVisibleInHierarchy())
                                {
@@ -700,9 +705,10 @@ public class Form<T> extends WebMarkupCo
        protected final void markFormComponentsValid()
        {
                // call invalidate methods of all nested form components
-               visitFormComponents(new FormComponent.IVisitor()
+               visitFormComponents(new FormComponent.AbstractVisitor()
                {
-                       public void formComponent(final FormComponent 
formComponent)
+                       @Override
+                       public void onFormComponent(final FormComponent 
formComponent)
                        {
                                if (formComponent.isVisibleInHierarchy())
                                {
@@ -808,9 +814,10 @@ public class Form<T> extends WebMarkupCo
        protected void onRender(final MarkupStream markupStream)
        {
                // Force multi-part on if any child form component is multi-part
-               visitFormComponents(new FormComponent.IVisitor()
+               visitFormComponents(new FormComponent.AbstractVisitor()
                {
-                       public void formComponent(FormComponent formComponent)
+                       @Override
+                       public void onFormComponent(FormComponent formComponent)
                        {
                                if (formComponent.isVisible() && 
formComponent.isMultiPart())
                                {
@@ -882,9 +889,10 @@ public class Form<T> extends WebMarkupCo
         */
        protected final void updateFormComponentModels()
        {
-               visitFormComponents(new FormComponent.IVisitor()
+               visitFormComponents(new FormComponent.AbstractVisitor()
                {
-                       public void formComponent(final FormComponent 
formComponent)
+                       @Override
+                       public void onFormComponent(final FormComponent 
formComponent)
                        {
                                // Only update the component when it is visible 
and valid
                                if (formComponent.isVisibleInHierarchy() && 
formComponent.isEnabled()
@@ -905,9 +913,10 @@ public class Form<T> extends WebMarkupCo
        public final void clearInput()
        {
                // Visit all the (visible) form components and clear the input 
on each.
-               visitFormComponents(new FormComponent.IVisitor()
+               visitFormComponents(new FormComponent.AbstractVisitor()
                {
-                       public void formComponent(final FormComponent 
formComponent)
+                       @Override
+                       public void onFormComponent(final FormComponent 
formComponent)
                        {
                                if (formComponent.isVisibleInHierarchy())
                                {
@@ -1132,9 +1141,10 @@ public class Form<T> extends WebMarkupCo
                        final IValuePersister persister = getValuePersister();
 
                        // Search for FormComponent children. Ignore all other
-                       visitFormComponents(new FormComponent.IVisitor()
+                       visitFormComponents(new FormComponent.AbstractVisitor()
                        {
-                               public void formComponent(final FormComponent 
formComponent)
+                               @Override
+                               public void onFormComponent(final FormComponent 
formComponent)
                                {
                                        if 
(formComponent.isVisibleInHierarchy())
                                        {
@@ -1193,9 +1203,10 @@ public class Form<T> extends WebMarkupCo
         */
        private void inputChanged()
        {
-               visitFormComponents(new FormComponent.IVisitor()
+               visitFormComponents(new FormComponent.AbstractVisitor()
                {
-                       public void formComponent(final FormComponent 
formComponent)
+                       @Override
+                       public void onFormComponent(final FormComponent 
formComponent)
                        {
                                if (formComponent.isVisibleInHierarchy())
                                {
Index: wicket/src/java/wicket/util/tester/FormTester.java
===================================================================
--- wicket.orig/src/java/wicket/util/tester/FormTester.java
+++ wicket/src/java/wicket/util/tester/FormTester.java
@@ -357,9 +357,10 @@ public class FormTester
                this.wicketTester.setupRequestAndResponse();
 
                // fill blank String for Text Component.
-               workingForm.visitFormComponents(new FormComponent.IVisitor()
+               workingForm.visitFormComponents(new 
FormComponent.AbstractVisitor()
                {
-                       public void formComponent(FormComponent formComponent)
+                       @Override
+                       public void onFormComponent(FormComponent formComponent)
                        {
                                // do nothing for invisible component
                                if (!formComponent.isVisibleInHierarchy())
Index: wicket/src/java/wicket/util/tester/WicketTester.java
===================================================================
--- wicket.orig/src/java/wicket/util/tester/WicketTester.java
+++ wicket/src/java/wicket/util/tester/WicketTester.java
@@ -701,9 +701,10 @@ public class WicketTester extends MockWe
                        RequestCycle requestCycle = createRequestCycle();
 
                        // "Submit" the form
-                       form.visitFormComponents(new FormComponent.IVisitor()
+                       form.visitFormComponents(new 
FormComponent.AbstractVisitor()
                        {
-                               public void formComponent(FormComponent 
formComponent)
+                               @Override
+                               public void onFormComponent(FormComponent 
formComponent)
                                {
                                        if (!(formComponent instanceof Button)
                                                        && !(formComponent 
instanceof RadioGroup))
Index: wicket/src/java/wicket/markup/html/form/FormComponent.java
===================================================================
--- wicket.orig/src/java/wicket/markup/html/form/FormComponent.java
+++ wicket/src/java/wicket/markup/html/form/FormComponent.java
@@ -33,6 +33,7 @@ import wicket.Localizer;
 import wicket.MarkupContainer;
 import wicket.Page;
 import wicket.WicketRuntimeException;
+import wicket.Component.IVisitor;
 import wicket.markup.ComponentTag;
 import wicket.markup.html.WebMarkupContainer;
 import wicket.model.IAssignmentAware;
@@ -121,7 +122,21 @@ public abstract class FormComponent<T> e
                 * @param formComponent
                 *            The form component
                 */
-               public void formComponent(FormComponent formComponent);
+               public Object formComponent(FormComponent formComponent);
+       }
+
+       public static abstract class AbstractVisitor implements IVisitor
+       {
+               /**
+                * @see 
wicket.markup.html.form.FormComponent.IVisitor#formComponent(wicket.markup.html.form.FormComponent)
+                */
+               public Object formComponent(FormComponent formComponent)
+               {
+                       onFormComponent(formComponent);
+                       return Component.IVisitor.CONTINUE_TRAVERSAL;
+               }
+
+               protected abstract void onFormComponent(FormComponent 
formComponent);
        }
 
        /**


Reply via email to