Author: gseitz
Date: Sat Nov  3 12:57:45 2007
New Revision: 591670

URL: http://svn.apache.org/viewvc?rev=591670&view=rev
Log:
WICKET-975: Update ImageButton to handle ResourceReference

Modified:
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/ImageButton.java

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/ImageButton.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/ImageButton.java?rev=591670&r1=591669&r2=591670&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/ImageButton.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/ImageButton.java
 Sat Nov  3 12:57:45 2007
@@ -16,12 +16,16 @@
  */
 package org.apache.wicket.markup.html.form;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.IResourceListener;
+import org.apache.wicket.Resource;
 import org.apache.wicket.ResourceReference;
 import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.html.WebResource;
-import org.apache.wicket.markup.html.image.resource.DefaultButtonImageResource;
 import org.apache.wicket.markup.html.image.resource.LocalizedImageResource;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.value.ValueMap;
+
 
 /**
  * <input type="image"> component - like [EMAIL PROTECTED] Button} only 
with an image.
@@ -39,55 +43,102 @@
        private final LocalizedImageResource localizedImageResource = new 
LocalizedImageResource(this);
 
        /**
+        * This constructor can be used if you have an <code>img</code> tag 
that has a
+        * <code>src</code> that points to a <code>PackageResource</code> 
(which will be created and
+        * bind to the shared resources) or if you have a <code>value</code> 
attribute in your tag for
+        * which the image factory can make an image.
+        * 
         * @see org.apache.wicket.Component#Component(String)
         */
-       public ImageButton(String id)
+       public ImageButton(final String id)
        {
                super(id);
        }
 
        /**
-        * Constructs an image button directly from an image resource.
+        * Constructs an image button from an image 
<code>ResourceReference</code>. That resource
+        * reference will bind its resource to the current SharedResources.
+        * 
+        * If you are using non sticky session clustering and the resource 
reference is pointing to a
+        * <code>Resource</code> that isn't guaranteed to be on every server, 
for example a dynamic
+        * image or resources that aren't added with a 
<code>IInitializer</code> at application
+        * startup. Then if only that resource is requested from another 
server, without the rendering
+        * of the page, the image won't be there and will result in a broken 
link.
         * 
         * @param id
         *            See Component
-        * 
-        * @param imageResource
-        *            The image resource
+        * @param resourceReference
+        *            The shared image resource
         */
-       public ImageButton(final String id, final WebResource imageResource)
+       public ImageButton(final String id, final ResourceReference 
resourceReference)
        {
-               super(id);
-               this.localizedImageResource.setResource(imageResource);
+               this(id, resourceReference, null);
        }
 
        /**
-        * Constructs an image directly from an image resource.
+        * Constructs an image button from an image 
<code>ResourceReference</code>. That resource
+        * reference will bind its resource to the current SharedResources.
+        * 
+        * If you are using non sticky session clustering and the resource 
reference is pointing to a
+        * <code>Resource</code> that isn't guaranteed to be on every server, 
for example a dynamic
+        * image or resources that aren't added with a 
<code>IInitializer</code> at application
+        * startup. Then if only that resource is requested from another 
server, without the rendering
+        * of the page, the image won't be there and will result in a broken 
link.
         * 
         * @param id
         *            See Component
         * @param resourceReference
         *            The shared image resource
+        * @param resourceParameters
+        *            The resource parameters
         */
-       public ImageButton(final String id, final ResourceReference 
resourceReference)
+       public ImageButton(final String id, final ResourceReference 
resourceReference,
+                       ValueMap resourceParameters)
        {
                super(id);
-               localizedImageResource.setResourceReference(resourceReference);
+               setImageResourceReference(resourceReference, 
resourceParameters);
        }
 
        /**
-        * Constructor
+        * Constructs an image directly from an image resource.
+        * 
+        * This one doesn't have the 'non sticky session clustering' problem 
that the
+        * <code>ResourceReference</code> constructor has. But this will result 
in a non 'stable' url
+        * and the url will have request parameters.
+        * 
+        * @param id
+        *            See Component
         * 
+        * @param imageResource
+        *            The image resource
+        */
+       public ImageButton(final String id, final Resource imageResource)
+       {
+               super(id);
+               setImageResource(imageResource);
+       }
+
+       /**
+        * @see org.apache.wicket.Component#Component(String, IModel)
+        */
+       public ImageButton(final String id, final IModel model)
+       {
+               super(id, model);
+       }
+
+       /**
         * @param id
         *            See Component
-        * @param label
-        *            The button label
+        * @param string
+        *            Name of image
+        * @see org.apache.wicket.Component#Component(String, IModel)
         */
-       public ImageButton(final String id, final String label)
+       public ImageButton(final String id, final String string)
        {
-               this(id, new DefaultButtonImageResource(label));
+               this(id, new Model(string));
        }
 
+
        /**
         * @see org.apache.wicket.IResourceListener#onResourceRequested()
         */
@@ -97,6 +148,64 @@
        }
 
        /**
+        * @param imageResource
+        *            The new ImageResource to set.
+        */
+       public void setImageResource(final Resource imageResource)
+       {
+               localizedImageResource.setResource(imageResource);
+       }
+
+       /**
+        * @param resourceReference
+        *            The shared ImageResource to set.
+        */
+       public void setImageResourceReference(final ResourceReference 
resourceReference)
+       {
+               localizedImageResource.setResourceReference(resourceReference);
+       }
+
+       /**
+        * @param resourceReference
+        *            The shared ImageResource to set.
+        * @param parameters
+        *            Set the resource parameters for the resource.
+        */
+       public void setImageResourceReference(final ResourceReference 
resourceReference,
+                       final ValueMap parameters)
+       {
+               localizedImageResource.setResourceReference(resourceReference, 
parameters);
+       }
+
+       /**
+        * @see 
org.apache.wicket.Component#setModel(org.apache.wicket.model.IModel)
+        */
+       public Component setModel(IModel model)
+       {
+               // Null out the image resource, so we reload it (otherwise 
we'll be
+               // stuck with the old model.
+               localizedImageResource.setResourceReference(null);
+               localizedImageResource.setResource(null);
+               return super.setModel(model);
+       }
+
+       /**
+        * @return Resource returned from subclass
+        */
+       protected Resource getImageResource()
+       {
+               return localizedImageResource.getResource();
+       }
+
+       /**
+        * @return ResourceReference returned from subclass
+        */
+       protected ResourceReference getImageResourceReference()
+       {
+               return localizedImageResource.getResourceReference();
+       }
+
+       /**
         * Processes the component tag.
         * 
         * @param tag
@@ -108,6 +217,17 @@
                checkComponentTag(tag, "input");
                checkComponentTagAttribute(tag, "type", "image");
                super.onComponentTag(tag);
+
+               final Resource resource = getImageResource();
+               if (resource != null)
+               {
+                       localizedImageResource.setResource(resource);
+               }
+               final ResourceReference resourceReference = 
getImageResourceReference();
+               if (resourceReference != null)
+               {
+                       
localizedImageResource.setResourceReference(resourceReference);
+               }
                localizedImageResource.setSrcAttribute(tag);
        }
 
@@ -116,6 +236,6 @@
         */
        protected boolean getStatelessHint()
        {
-               return localizedImageResource.isStateless();
+               return getImageResource() == null && 
localizedImageResource.isStateless();
        }
 }


Reply via email to