I never said it's not doable. It just doesn't feel right to me.
I like IVisitor the way it works now.
-Matej
Eelco Hillenius wrote:
> Well, like my patch shows, it *is* doable. Just very messy and it
> feels like misusing generics. I currently thing that what is currently
> in trunk (no parameterization) is good. Parameterizing IVisitor only
> makes things messier if we still require some class parameter in
> either the visitor (btw, IVisitor is an interface, so providing that
> Form class parameter won't work) or visit method.
>
> Eelco
>
> On 5/28/06, Igor Vaynberg <[EMAIL PROTECTED]> wrote:
>> new Component.IVisitor<Form>(Form.class)
>>
>> thats the only way to do it right now i think
>>
>> -Igor
>>
>>
>>
>> On 5/28/06, Matej Knopp <[EMAIL PROTECTED]> wrote:
>> > You are right. It feels like misusing generics. I think generics were
>> > not meant to be used at runtime (type erasure is not there for fun
>> :) ).
>> >
>> > -Matej
>> >
>> > Eelco Hillenius wrote:
>> > > Hi,
>> > >
>> > > I've got a start for a generified IVisitor implementation. Basically,
>> > > it would be used like this:
>> > >
>> > > // Visit all Forms contained in the page
>> > > visitChildren(new Component.IVisitor<Form>()
>> > > {
>> > > // For each FormComponent found on the Page (not Form)
>> > > public Object component(final Form form)
>> > > {
>> > >
>> form.loadPersistentFormComponentValues();
>> > > return CONTINUE_TRAVERSAL;
>> > > }
>> > > });
>> > >
>> > >
>> > > However, I'm kind of stuck at the dirty details of introspecting
>> > > parameterized types. It's probably doable, but pretty messy and
>> > > inefficient at times (to catch all cases, you'd have to implement a
>> > > recursive alg that searches for the proper type, with a lot of
>> 'ifs').
>> > > I'm not sure it's worth it, also as it seems a bit like misusing
>> > > generics.
>> > >
>> > > Anyway, if anyone likes to take a look: here's a patch. A couple of
>> > > unit test fail, and that's where the real fun begins :)
>> > >
>> > > Eelco
>> > >
>> > >
>> > >
>> > > Index:
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/Component.java
>>
>> > >
>> > >
>> ===================================================================
>> > > ---
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/Component.java
>>
>> > > (revision
>> > > 5923)
>> > > +++
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/Component.java
>>
>> > > (working
>> > > copy)
>> > > @@ -271,11 +271,9 @@
>> > >
>> > > /**
>> > > * Generic component visitor interface for component traversals.
>> > > - *
>> > > - * @param <T>
>> > > - * The type of the component where a visitor walks
>> over.
>> > > + * @param <E> The type of the component where a visitor walks
>> over.
>> > > */
>> > > - public static interface IVisitor
>> > > + public static interface IVisitor<E>
>> > > {
>> > > /**
>> > > * Value to return to continue a traversal.
>> > > @@ -303,7 +301,7 @@
>> > > * should stop. If no return value is useful, the
>> generic
>> > > * non-null value STOP_TRAVERSAL can be used.
>> > > */
>> > > - public Object component(Component component);
>> > > + public Object component(E component);
>> > > }
>> > >
>> > > /**
>> > > @@ -1717,12 +1715,12 @@
>> > > // to
>> > > // collect their messages before components like
>> > > ListViews
>> > > // remove any child components
>> > > - container.visitChildren(IFeedback.class, new
>> > > IVisitor()
>> > > + container.visitChildren(new
>> IVisitor<IFeedback>()
>> > > {
>> > > - public Object component(Component component)
>> > > + public Object component(IFeedback feedback)
>> > > {
>> > > -
>> ((IFeedback)component).updateFeedback();
>> > > - component.internalAttach();
>> > > + feedback.updateFeedback();
>> > > +
>> ((Component)feedback).internalAttach();
>> > > return IVisitor.CONTINUE_TRAVERSAL;
>> > > }
>> > > });
>> > > Index:
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/MarkupContainer.java
>>
>> > >
>> > >
>> ===================================================================
>> > > ---
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/MarkupContainer.java
>>
>> > > (revision
>> > > 5923)
>> > > +++
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/MarkupContainer.java
>>
>> > > (working
>> > > copy)
>> > > @@ -18,6 +18,8 @@
>> > > */
>> > > package wicket;
>> > >
>> > > +import java.lang.reflect.ParameterizedType;
>> > > +import java.lang.reflect.Type;
>> > > import java.util.ArrayList ;
>> > > import java.util.Arrays;
>> > > import java.util.Collections;
>> > > @@ -644,9 +646,9 @@
>> > > super.setModel(model);
>> > > if (previous instanceof ICompoundModel)
>> > > {
>> > > - visitChildren(new IVisitor()
>> > > + visitChildren(new IVisitor<Component<?>>()
>> > > {
>> > > - public Object component(Component component)
>> > > + public Object component(Component<?> component)
>> > > {
>> > > IModel compModel = component.getModel();
>> > > if (compModel == previous)
>> > > @@ -725,11 +727,9 @@
>> > > }
>> > >
>> > > /**
>> > > - * Traverses all child components of the given class in this
>> > > container,
>> > > + * Traverses all child components of the visitor's type in this
>> > > container,
>> > > * calling the visitor's visit method at each one.
>> > > *
>> > > - * @param clazz
>> > > - * The class of child to visit, or null to visit all
>> > > children
>> > > * @param visitor
>> > > * The visitor to call back to
>> > > * @return The return value from a visitor which halted the
>> > > traversal, or
>> > > @@ -735,7 +735,8 @@
>> > > * @return The return value from a visitor which halted the
>> > > traversal, or
>> > > * null if the entire traversal occurred
>> > > */
>> > > - public final Object visitChildren(final Class clazz, final
>> IVisitor
>> > > visitor)
>> > > + @SuppressWarnings("unchecked")
>> > > + public final Object visitChildren(final IVisitor visitor)
>> > > {
>> > > if (visitor == null)
>> > > {
>> > > @@ -742,6 +743,25 @@
>> > > throw new
>> IllegalArgumentException("argument visitor may not
>> > > be null");
>> > > }
>> > >
>> > > + final Class c = visitor.getClass();
>> > > +
>> > > + final Type type = c.getGenericInterfaces()[0];
>> > > + final Class clazz;
>> > > + if (type instanceof ParameterizedType)
>> > > + {
>> > > + Type typeArg =
>> > > ((ParameterizedType)type).getActualTypeArguments()[0];
>> > > + if (!(typeArg instanceof Class))
>> > > + {
>> > > + clazz =
>> (Class)((ParameterizedType)typeArg).getRawType();
>> > > + }
>> > > + else
>> > > + {
>> > > + clazz = (Class)typeArg;
>> > > + }
>> > > + } else {
>> > > + clazz = Component.class;
>> > > + }
>> > > +
>> > > // Iterate through children of this container
>> > > for (int i = 0; i < children_size(); i++)
>> > > {
>> > > @@ -750,7 +770,7 @@
>> > > Object value = null;
>> > >
>> > > // Is the child of the correct class (or was no class
>> > > specified)?
>> > > - if (clazz == null || clazz.isInstance(child))
>> > > + if (clazz.isInstance(child))
>> > > {
>> > > // Call visitor
>> > > value = visitor.component(child);
>> > > @@ -768,7 +788,7 @@
>> > > && (value !=
>> > > IVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER))
>> > > {
>> > > // visit the children in the container
>> > > - value =
>> > > ((MarkupContainer<?>)child).visitChildren(clazz,
>> visitor);
>> > > + value =
>> > > ((MarkupContainer<?>)child).visitChildren(visitor);
>> > >
>> > > // If visitor returns a non-null value, it halts the
>> > > traversal
>> > > if ((value != IVisitor.CONTINUE_TRAVERSAL)
>> > > @@ -783,20 +803,6 @@
>> > > }
>> > >
>> > > /**
>> > > - * Traverses all child components in this container, calling the
>> > > visitor's
>> > > - * visit method at each one.
>> > > - *
>> > > - * @param visitor
>> > > - * The visitor to call back to
>> > > - * @return The return value from a visitor which halted the
>> > > traversal, or
>> > > - * null if the entire traversal occurred
>> > > - */
>> > > - public final Object visitChildren(final IVisitor visitor)
>> > > - {
>> > > - return visitChildren(null, visitor);
>> > > - }
>> > > -
>> > > - /**
>> > > * Get the markup stream for this component.
>> > > *
>> > > * @return The markup stream for this component, or if it doesn't
>> > > have one,
>> > > @@ -1295,7 +1301,7 @@
>> > > // detach children models
>> > > if (component instanceof MarkupContainer)
>> > > {
>> > > -
>> ((MarkupContainer<?>)component).visitChildren(new
>> IVisitor()
>> > > +
>> ((MarkupContainer<?>)component).visitChildren(new
>> > > IVisitor<Component<?>>()
>> > > {
>> > > public Object component(Component component)
>> > > {
>> > > Index:
>> > >
>> /Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/Page.java
>>
>> > >
>> ===================================================================
>> > > ---
>> > >
>> /Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/Page.java
>>
>> > > (revision
>> > > 5923)
>> > > +++
>> > >
>> /Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/Page.java
>>
>> > > (working
>> > > copy)
>> > > @@ -1,6 +1,6 @@
>> > > /*
>> > > - * $Id$ $Revision$ $Date:
>> > > - * 2006-05-26 00:32:40 +0200 (vr, 26 mei 2006) $
>> > > + * $Id$
>> > > + * $Revision$ $Date$
>> > > *
>> > > *
>> > >
>>
==============================================================================
>>
>> > >
>> > > * Licensed under the Apache License, Version 2.0 (the "License");
>> you
>> > > may not
>> > > @@ -326,7 +326,7 @@
>> > > public void detachModels()
>> > > {
>> > > // visit all this page's children to detach the models
>> > > - visitChildren(new IVisitor()
>> > > + visitChildren(new IVisitor<Component>()
>> > > {
>> > > public Object component(Component component)
>> > > {
>> > > @@ -381,12 +381,12 @@
>> > > // First, give priority to IFeedback instances, as they
>> have to
>> > > // collect their messages before components like ListViews
>> > > // remove any child components
>> > > - visitChildren(IFeedback.class, new IVisitor()
>> > > + visitChildren(new IVisitor<IFeedback>()
>> > > {
>> > > - public Object component(Component component)
>> > > + public Object component(IFeedback feedback)
>> > > {
>> > > -
>> ((IFeedback)component).updateFeedback();
>> > > - component.internalAttach();
>> > > + feedback.updateFeedback();
>> > > +
>> ((Component)feedback).internalAttach();
>> > > return IVisitor.CONTINUE_TRAVERSAL;
>> > > }
>> > > });
>> > > @@ -404,7 +404,7 @@
>> > > // or negative as a temporary boolean in the components, and
>> when a
>> > > // authorization exception is thrown it will block the
>> rendering
>> > > of this
>> > > // page
>> > > - visitChildren(new IVisitor()
>> > > + visitChildren(new IVisitor<Component>()
>> > > {
>> > > public Object component(final Component component)
>> > > {
>> > > @@ -643,7 +643,7 @@
>> > > {
>> > > final StringBuffer buffer = new StringBuffer();
>> > > buffer.append("Page " + getId() + " (version " +
>> > > getCurrentVersionNumber() + ")");
>> > > - visitChildren(new IVisitor()
>> > > + visitChildren(new IVisitor<Component>()
>> > > {
>> > > public Object component(Component component)
>> > > {
>> > > @@ -705,16 +705,16 @@
>> > > }
>> > >
>> > > // Visit all children which are an instance of formClass
>> > > - visitChildren(formClass, new IVisitor()
>> > > + visitChildren(new IVisitor<Form>()
>> > > {
>> > > - public Object component(final Component component)
>> > > + public Object component(final Form form)
>> > > {
>> > > // They must be of type Form as well
>> > > - if (component instanceof Form)
>> > > + if (form.getClass().equals(formClass))
>> > > {
>> > > // Delete persistet FormComponent data and
>> disable
>> > > // persistence
>> > > -
>> > >
>> ((Form)component).removePersistentFormComponentValues(disablePersistence);
>>
>> > > +
>> > >
>> form.removePersistentFormComponentValues(disablePersistence);
>> > > }
>> > > return CONTINUE_TRAVERSAL;
>> > > }
>> > > @@ -841,7 +841,7 @@
>> > > @Override
>> > > protected final void internalOnModelChanged()
>> > > {
>> > > - visitChildren(new Component.IVisitor()
>> > > + visitChildren(new Component.IVisitor<Component>()
>> > > {
>> > > public Object component(final Component component)
>> > > {
>> > > @@ -991,7 +991,7 @@
>> > > {
>> > > if (stateless == null)
>> > > {
>> > > - Object returnValue = visitChildren(Component.class, new
>> > > IVisitor()
>> > > + Object returnValue = visitChildren(new
>> IVisitor<Component>()
>> > > {
>> > > public Object component(Component component)
>> > > {
>> > > @@ -1026,12 +1026,12 @@
>> > > final void setFormComponentValuesFromCookies()
>> > > {
>> > > // Visit all Forms contained in the page
>> > > - visitChildren(Form.class, new Component.IVisitor()
>> > > + visitChildren(new Component.IVisitor<Form>()
>> > > {
>> > > // For each FormComponent found on the Page (not Form)
>> > > - public Object component(final Component component)
>> > > + public Object component(final Form form)
>> > > {
>> > > -
>> ((Form)component).loadPersistentFormComponentValues();
>> > > +
>> form.loadPersistentFormComponentValues();
>> > > return CONTINUE_TRAVERSAL;
>> > > }
>> > > });
>> > > @@ -1103,7 +1103,7 @@
>> > > final Count unrenderedComponents = new Count();
>> > > final List<Component> unrenderedAutoComponents = new
>> > > ArrayList<Component>();
>> > > final StringBuffer buffer = new StringBuffer();
>> > > - renderedContainer.visitChildren(new IVisitor()
>> > > + renderedContainer.visitChildren(new
>> IVisitor<Component>()
>> > > {
>> > > public Object component(final Component component)
>> > > {
>> > > Index:
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/ajax/form/AjaxFormValidatingBehavior.java
>>
>> > >
>> > >
>> ===================================================================
>> > > ---
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/ajax/form/AjaxFormValidatingBehavior.java
>>
>> > > (revision
>> > > 5922)
>> > > +++
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/ajax/form/AjaxFormValidatingBehavior.java
>>
>> > > (working
>> > > copy)
>> > > @@ -56,11 +56,11 @@
>> > > @Override
>> > > protected void onSubmit(final AjaxRequestTarget target)
>> > > {
>> > > -
>> getComponent().getPage().visitChildren(IFeedback.class ,
>> new
>> > > IVisitor()
>> > > + getComponent().getPage().visitChildren(new
>> IVisitor<IFeedback>()
>> > > {
>> > > - public Object component(Component component)
>> > > + public Object component(IFeedback feedback)
>> > > {
>> > > - target.addComponent(component);
>> > > + target.addComponent((Component)feedback);
>> > > return IVisitor.CONTINUE_TRAVERSAL;
>> > > }
>> > >
>> > > @@ -88,9 +88,9 @@
>> > > public static void addToAllFormComponents(final Form form, final
>> > > String event,
>> > > final Duration throttleDelay)
>> > > {
>> > > - form.visitChildren(FormComponent.class, new IVisitor()
>> > > + form.visitChildren(new IVisitor<FormComponent>()
>> > > {
>> > > - public Object component(Component component)
>> > > + public Object component(FormComponent component)
>> > > {
>> > > AjaxFormValidatingBehavior behavior = new
>> > > AjaxFormValidatingBehavior(form, event);
>> > > if (throttleDelay != null)
>> > > Index:
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/markup/html/debug/PageView.java
>>
>> > >
>> > >
>> ===================================================================
>> > > ---
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/markup/html/debug/PageView.java
>>
>> > > (revision
>> > > 5923)
>> > > +++
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/markup/html/debug/PageView.java
>>
>> > > (working
>> > > copy)
>> > > @@ -123,7 +123,7 @@
>> > > {
>> > > final List<ComponentData> data = new
>> ArrayList<ComponentData>();
>> > >
>> > > - page.visitChildren(new IVisitor()
>> > > + page.visitChildren(new IVisitor<Component>()
>> > > {
>> > > public Object component(final Component component)
>> > > {
>> > > Index:
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/markup/html/form/Form.java
>>
>> > >
>> > >
>> ===================================================================
>> > > ---
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/markup/html/form/Form.java
>>
>> > > (revision
>> > > 5918)
>> > > +++
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/markup/html/form/Form.java
>>
>> > > (working
>> > > copy)
>> > > @@ -479,11 +479,11 @@
>> > > */
>> > > public final void visitFormComponents(final
>> FormComponent.IVisitor
>> > > visitor)
>> > > {
>> > > - visitChildren(FormComponent.class , new IVisitor()
>> > > + visitChildren(new IVisitor<FormComponent>()
>> > > {
>> > > - public Object component(final Component component)
>> > > + public Object component(final FormComponent component)
>> > > {
>> > > - visitor.formComponent((FormComponent)component);
>> > > + visitor.formComponent(component);
>> > > return CONTINUE_TRAVERSAL;
>> > > }
>> > > });
>> > > @@ -607,13 +607,10 @@
>> > > */
>> > > protected final Button findSubmittingButton()
>> > > {
>> > > - Button button = (Button)visitChildren(Button.class, new
>> IVisitor()
>> > > + Button button = (Button)visitChildren(new IVisitor<Button>()
>> > > {
>> > > - public Object component(final Component component)
>> > > + public Object component(final Button button)
>> > > {
>> > > - // Get button
>> > > - final Button button = (Button)component;
>> > > -
>> > > // Check for button-name or button-name.x request
>> string
>> > > if
>> (getRequest().getParameter(button.getInputName()) !=
>> > > null
>> > > ||
>> > > getRequest().getParameter(button.getInputName() + ".x") != null)
>> > > @@ -630,13 +627,10 @@
>> > >
>> > > if (button == null)
>> > > {
>> > > - button = (Button)getPage().visitChildren(
>> SubmitLink.class,
>> > > new IVisitor()
>> > > + button =
>> (Button)getPage().visitChildren(new
>> > > IVisitor<SubmitLink>()
>> > > {
>> > > - public Object component(final Component component)
>> > > + public Object component(final SubmitLink button)
>> > > {
>> > > - // Get button
>> > > - final SubmitLink button = (SubmitLink)component;
>> > > -
>> > > // Check for button-name or button-name.x request
>> > > string
>> > > if (button.getForm() == Form.this
>> > > &&
>> > > (getRequest().getParameter(button.getInputName()) != null
>> > > || getRequest()
>> > > @@ -1126,7 +1120,7 @@
>> > > */
>> > > private boolean anyFormComponentError()
>> > > {
>> > > - final Object value = visitChildren(new IVisitor()
>> > > + final Object value = visitChildren(new IVisitor<Component>()
>> > > {
>> > > public Object component(final Component component)
>> > > {
>> > > Index:
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/markup/html/internal/HtmlHeaderContainer.java
>>
>> > >
>> > >
>> ===================================================================
>> > > ---
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/markup/html/internal/HtmlHeaderContainer.java
>>
>> > > (revision
>> > > 5918)
>> > > +++
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/markup/html/internal/HtmlHeaderContainer.java
>>
>> > > (working
>> > > copy)
>> > > @@ -211,7 +211,7 @@
>> > > {
>> > > // Make sure all Components interested in contributing to the
>> > > header
>> > > // and there attached behaviors are asked.
>> > > - page.visitChildren(new IVisitor()
>> > > + page.visitChildren (new IVisitor<Component>()
>> > > {
>> > > /**
>> > > * @see
>> wicket.Component.IVisitor#component(wicket.Component)
>> > > Index:
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/protocol/http/ClientPageSavingSessionStore.java
>>
>> > >
>> > >
>> ===================================================================
>> > > ---
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/protocol/http/ClientPageSavingSessionStore.java
>>
>> > > (revision
>> > > 5922)
>> > > +++
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/protocol/http/ClientPageSavingSessionStore.java
>>
>> > > (working
>> > > copy)
>> > > @@ -295,12 +295,11 @@
>> > >
>> > > final AppendingStringBuffer forms = new
>> > > AppendingStringBuffer(64);
>> > > forms.append(JavascriptUtils.SCRIPT_OPEN_TAG);
>> > > - page.visitChildren(Form.class, new IVisitor()
>> > > + page.visitChildren(new IVisitor<Form>()
>> > > {
>> > > - public Object component(Component component)
>> > > + public Object component(Form form)
>> > > {
>> > > forms.append("document.getElementById('");
>> > > - Form form = (Form)component;
>> > >
>> > > forms.append(form.getHiddenFieldId(Form.HIDDEN_FIELD_WICKET_STATE));
>> > > forms.append("').value=wicketState;\n");
>> > > return null;
>> > > Index:
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/protocol/http/MockHttpServletRequest.java
>>
>> > >
>> > >
>> ===================================================================
>> > > ---
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/protocol/http/MockHttpServletRequest.java
>>
>> > > (revision
>> > > 5918)
>> > > +++
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/protocol/http/MockHttpServletRequest.java
>>
>> > > (working
>> > > copy)
>> > > @@ -1056,7 +1056,7 @@
>> > > setRequestToComponent(form);
>> > >
>> > > final Map<String, Component> valuesApplied = new
>> HashMap<String,
>> > > Component>();
>> > > - form.visitChildren(new Component.IVisitor()
>> > > + form.visitChildren(new Component.IVisitor<Component>()
>> > > {
>> > > public Object component(final Component component)
>> > > {
>> > > Index:
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/util/tester/FormTester.java
>>
>> > >
>> > >
>> ===================================================================
>> > > ---
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/util/tester/FormTester.java
>>
>> > > (revision
>> > > 5923)
>> > > +++
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/util/tester/FormTester.java
>>
>> > > (working
>> > > copy)
>> > > @@ -58,9 +58,9 @@
>> > > protected abstract class ChoiceSelector
>> > > {
>> > > /**
>> > > - * ???
>> > > + * @param <E> Visitor type
>> > > */
>> > > - private final class SearchOptionByIndexVisitor implements
>> IVisitor
>> > > + private final class SearchOptionByIndexVisitor<E> implements
>> > > IVisitor<E>
>> > > {
>> > > int count = 0;
>> > >
>> > > @@ -68,7 +68,6 @@
>> > >
>> > > private SearchOptionByIndexVisitor(int index)
>> > > {
>> > > - super();
>> > > this.index = index;
>> > > }
>> > >
>> > > @@ -75,7 +74,7 @@
>> > > /**
>> > > * @see
>> wicket.Component.IVisitor#component(wicket.Component)
>> > > */
>> > > - public Object component(Component component)
>> > > + public Object component(E component)
>> > > {
>> > > if (count == index)
>> > > {
>> > > @@ -117,8 +116,8 @@
>> > > {
>> > > if (formComponent instanceof RadioGroup)
>> > > {
>> > > - Radio foundRadio =
>> > > (Radio)formComponent.visitChildren(Radio.class,
>> > > - new
>> SearchOptionByIndexVisitor(index));
>> > > + Radio foundRadio =
>> (Radio)formComponent.visitChildren(
>> > > + new
>> SearchOptionByIndexVisitor<Radio>(index));
>> > > if (foundRadio == null)
>> > > {
>> > > Assert.fail("RadioGroup " +
>> formComponent.getPath()
>> > > + " does not
>> > > has index:"
>> > > @@ -131,8 +130,8 @@
>> > > }
>> > > else if (formComponent instanceof CheckGroup)
>> > > {
>> > > - Check foundCheck =
>> > > (Check)formComponent.visitChildren(Check.class,
>> > > - new
>> SearchOptionByIndexVisitor(index));
>> > > + Check foundCheck =
>> (Check)formComponent.visitChildren(
>> > > + new
>> SearchOptionByIndexVisitor<Check>(index));
>> > > if (foundCheck == null)
>> > > {
>> > > Assert.fail("CheckGroup " +
>> formComponent.getPath()
>> > > + " does not
>> > > has index:"
>> > > Index:
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/util/tester/WicketTesterHelper.java
>>
>> > >
>> > >
>> ===================================================================
>> > > ---
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/util/tester/WicketTesterHelper.java
>>
>> > > (revision
>> > > 5923)
>> > > +++
>> > >
>>
/Users/eelcohillenius/Documents/workspace/wicket/src/java/wicket/util/tester/WicketTesterHelper.java
>>
>> > > (working
>> > > copy)
>> > > @@ -65,7 +65,7 @@
>> > > {
>> > > final List<ComponentData> data = new
>> ArrayList<ComponentData>();
>> > >
>> > > - page.visitChildren(new IVisitor()
>> > > + page.visitChildren(new IVisitor<Component>()
>> > > {
>> > > public Object component(final Component component)
>> > > {
>> > > @@ -106,8 +106,7 @@
>> > > * @param expects
>> > > * @param actuals
>> > > */
>> > > - public static void assertEquals(final Collection<?> expects,
>> > > - final Collection<?> actuals)
>> > > + public static void assertEquals(final Collection<?> expects,
>> final
>> > > Collection<?> actuals)
>> > > {
>> > > if (!expects.containsAll(actuals) ||
>> !actuals.containsAll(expects))
>> > > {
>> > >
>> > >
>> > > -------------------------------------------------------
>> > > All the advantages of Linux Managed Hosting--Without the Cost and
>> Risk!
>> > > Fully trained technicians. The highest number of Red Hat
>> certifications
>> in
>> > > the hosting industry. Fanatical Support. Click to learn more
>> > >
>> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642
>> > > _______________________________________________
>> > > Wicket-develop mailing list
>> > > Wicket-develop@lists.sourceforge.net
>> > >
>> https://lists.sourceforge.net/lists/listinfo/wicket-develop
>> > >
>> >
>> >
>> >
>> > -------------------------------------------------------
>> > All the advantages of Linux Managed Hosting--Without the Cost and Risk!
>> > Fully trained technicians. The highest number of Red Hat
>> certifications in
>> > the hosting industry. Fanatical Support. Click to learn more
>> >
>> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642
>> > _______________________________________________
>> > Wicket-develop mailing list
>> > Wicket-develop@lists.sourceforge.net
>> >
>> https://lists.sourceforge.net/lists/listinfo/wicket-develop
>> >
>>
>>
>
>
> -------------------------------------------------------
> All the advantages of Linux Managed Hosting--Without the Cost and Risk!
> Fully trained technicians. The highest number of Red Hat certifications in
> the hosting industry. Fanatical Support. Click to learn more
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642
> _______________________________________________
> Wicket-develop mailing list
> Wicket-develop@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wicket-develop
>
-------------------------------------------------------
All the advantages of Linux Managed Hosting--Without the Cost and Risk!
Fully trained technicians. The highest number of Red Hat certifications in
the hosting industry. Fanatical Support. Click to learn more
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642
_______________________________________________
Wicket-develop mailing list
Wicket-develop@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-develop