ah, i see. next time leave some space around the inline comment so it
doesnt blend in :)

i thought about isEnabled() being called twice, i dont think it will
be a huge problem. if it is expensive the user can always cache it and
clear the cache in detach().

-igor

On Fri, Oct 21, 2011 at 8:14 AM, Igor Vaynberg <[email protected]> wrote:
> was there any particular reason you forwarded this....
>
> -igor
>
> On Fri, Oct 21, 2011 at 12:55 AM, Martin Grigorov <[email protected]> 
> wrote:
>> On Fri, Oct 21, 2011 at 8:33 AM,  <[email protected]> wrote:
>>> Author: ivaynberg
>>> Date: Fri Oct 21 05:33:34 2011
>>> New Revision: 1187184
>>>
>>> URL: http://svn.apache.org/viewvc?rev=1187184&view=rev
>>> Log:
>>>
>>> Issue: WICKET-4149
>>>
>>> Modified:
>>>    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java
>>>    
>>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
>>>    
>>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
>>>    
>>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
>>>
>>> Modified: 
>>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java
>>> URL: 
>>> http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java?rev=1187184&r1=1187183&r2=1187184&view=diff
>>> ==============================================================================
>>> --- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java 
>>> (original)
>>> +++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java 
>>> Fri Oct 21 05:33:34 2011
>>> @@ -17,6 +17,7 @@
>>>  package org.apache.wicket;
>>>
>>>  import java.io.Serializable;
>>> +import java.lang.reflect.Method;
>>>  import java.util.ArrayList;
>>>  import java.util.Iterator;
>>>  import java.util.List;
>>> @@ -4336,9 +4337,30 @@ public abstract class Component
>>>        }
>>>
>>>
>>> -       /** TODO WICKET-NG javadoc */
>>> +       /**
>>> +        * TODO WICKET-NG javadoc
>>> +        *
>>> +        * @deprecated use {@link #canCallListenerInterface(Method)} instead
>>> +        */
>>> +       @Deprecated
>>>        public final boolean canCallListenerInterface()
>>>        {
>>> +               return true;
>>> +       }
>>> +
>>> +       /**
>>> +        * Checks whether or not a listener method can be invoked on this 
>>> component. Usually components deny these invocations if they are either 
>>> invisible or disabled in hierarchy. Components can examine which listener 
>>> interface is being invoked by examining the declaring class of the passed 
>>> in {@literal method} parameter.
>>> +        * <p>
>>> +        * WARNING: be careful when overriding this method because it may 
>>> open security holes - such as allowing a user to click on a link that 
>>> should be disabled.
>>> +        * </p>
>>> +        * <p>
>>> +        * Example usecase for overriding: Suppose you are building an 
>>> component that displays images. The component generates a callback to 
>>> itself using {@link IRequestListener} interface and uses this callback to 
>>> stream image data. If such a component is placed inside a disable 
>>> webmarkupcontainer we still want to allow the invocation of the request 
>>> listener callback method so that image data can be streamed. Such a 
>>> component would override this method and return {@literal true} if the 
>>> listener method belongs to {@link IRequestListener}.
>>> +        * </p>
>>> +        * @param method listener method about to be invoked on this 
>>> component
>>> +        *
>>> +        * @return {@literal true} iff the listener method can be invoked 
>>> on this component
>>> +        */
>>> +       public boolean canCallListenerInterface(Method method) {
>>>                return isEnabledInHierarchy() && isVisibleInHierarchy();
>>>        }
>>>
>>>
>>> Modified: 
>>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
>>> URL: 
>>> http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java?rev=1187184&r1=1187183&r2=1187184&view=diff
>>> ==============================================================================
>>> --- 
>>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
>>>  (original)
>>> +++ 
>>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
>>>  Fri Oct 21 05:33:34 2011
>>> @@ -204,7 +204,7 @@ public class RequestListenerInterface
>>>                // we are in Wicket core land
>>>                final Component component = (Component)rcomponent;
>>>
>>> -               if (!component.canCallListenerInterface())
>>> +               if (!component.canCallListenerInterface(method))
>>>                {
>>>                        // just return so that we have a silent fail and 
>>> just re-render the
>>>                        // page
>>> @@ -230,7 +230,7 @@ public class RequestListenerInterface
>>>                // we are in Wicket core land
>>>                final Component component = (Component)rcomponent;
>>>
>>> -               if (!behavior.canCallListenerInterface(component))
>>> +               if (!behavior.canCallListenerInterface(component, method))
>>>                {
>>>                        log.warn("behavior not enabled; ignore call. 
>>> Behavior {} at component {}", behavior,
>>>                                component);
>>>
>>> Modified: 
>>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
>>> URL: 
>>> http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java?rev=1187184&r1=1187183&r2=1187184&view=diff
>>> ==============================================================================
>>> --- 
>>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
>>>  (original)
>>> +++ 
>>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
>>>  Fri Oct 21 05:33:34 2011
>>> @@ -16,6 +16,8 @@
>>>  */
>>>  package org.apache.wicket.behavior;
>>>
>>> +import java.lang.reflect.Method;
>>> +
>>>  import org.apache.wicket.Application;
>>>  import org.apache.wicket.Component;
>>>  import org.apache.wicket.IClusterable;
>>> @@ -199,13 +201,37 @@ public abstract class Behavior
>>>         *
>>>         * @param component
>>>         * @return true if a listener interface can be invoked on this 
>>> behavior
>>> +        *
>>> +        * @deprecated use {@link #canCallListenerInterface(Component, 
>>> Method)}
>>>         */
>>> +       @Deprecated
>>>        public boolean canCallListenerInterface(Component component)
>>>        {
>>>                return isEnabled(component) && 
>>> component.canCallListenerInterface();
>>>        }
>>>
>>>        /**
>>> +        * Checks whether or not a listener interface can be invoked on 
>>> this behavior. For further
>>> +        * information please read the javadoc on {@link 
>>> Component#canCallListenerInterface(Method)},
>>> +        * this method has the same semantics.
>>> +        *
>>> +        * WARNING: Read the javadoc of {@link 
>>> Component#canCallListenerInterface(Method)} for important
>>> +        * security-related information.
>>> +        *
>>> +        * @param component
>>> +        *            component this behavior is attached to
>>> +        * @param method
>>> +        *            listener method being invoked
>>> +        * @return {@literal true} iff the listener method can be invoked
>>> +        */
>>> +       public boolean canCallListenerInterface(Component component, Method 
>>> method)
>>> +       {
>>> +               return canCallListenerInterface(component) && 
>>> isEnabled(component) &&
>>> +                       component.canCallListenerInterface(method);
>> I guess the reason to call the deprecated
>> "canCallListenerInterface(component)" is backward compatibility, but
>> this way "isEnabled(component)" is called twice. Maybe we should
>> replace "canCallListenerInterface(component)" with
>> "component.canCallListenerInterface()" instead ?
>>> +       }
>>> +
>>> +
>>> +       /**
>>>         * Render to the web response whatever the component wants to 
>>> contribute to the head section.
>>>         *
>>>         * @param component
>>>
>>> Modified: 
>>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
>>> URL: 
>>> http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java?rev=1187184&r1=1187183&r2=1187184&view=diff
>>> ==============================================================================
>>> --- 
>>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
>>>  (original)
>>> +++ 
>>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
>>>  Fri Oct 21 05:33:34 2011
>>> @@ -16,6 +16,8 @@
>>>  */
>>>  package org.apache.wicket.markup.html.image;
>>>
>>> +import java.lang.reflect.Method;
>>> +
>>>  import org.apache.wicket.Component;
>>>  import org.apache.wicket.IResourceListener;
>>>  import org.apache.wicket.ajax.AjaxRequestTarget;
>>> @@ -290,4 +292,20 @@ public class Image extends WebComponent
>>>        public void onComponentTagBody(final MarkupStream markupStream, 
>>> final ComponentTag openTag)
>>>        {
>>>        }
>>> +
>>> +       @Override
>>> +       public boolean canCallListenerInterface(Method method)
>>> +       {
>>> +               boolean isResource = 
>>> IResourceListener.class.isAssignableFrom(method.getDeclaringClass());
>>> +               if (isResource && isVisibleInHierarchy())
>>> +               {
>>> +                       // when the image data is requested we do not care 
>>> if this component is enabled in
>>> +                       // hierarchy or not, only that it is visible
>>> +                       return true;
>>> +               }
>>> +               else
>>> +               {
>>> +                       return super.canCallListenerInterface(method);
>>> +               }
>>> +       }
>>>  }
>>>
>>>
>>>
>>
>>
>>
>> --
>> Martin Grigorov
>> jWeekend
>> Training, Consulting, Development
>> http://jWeekend.com
>>
>

Reply via email to