Ernesto,

Sorry about that -- I didn't mean to imply your impl was back, that was more
directed at Francois along the lines of "that's a lot of overhead, are you
sure you need to do that?" -- but now that I understand what his use-case is
(saw his last reply about /usr/ext/img/<IMAGES HERE>) I get it. I was
thinking they were under /webapp/images.

I'll go back to sitting in my corner ;)

-R

On Wed, Jan 27, 2010 at 9:54 PM, Ernesto Reinaldo Barreiro <
[email protected]> wrote:

> Sure it is overhead but he wanted to serve images from a folder not
> under application
> context root directory... Then, you have to serve them somehow? The options
> I see are
>
> 1-A dedicated servlet?
> 2-With Wicket... and thats what the code shows... and for sure it can be
> done in a simpler way...
>
> A would try to use 1. As then Wicket would not have to serve the images.
>
> Regards,
>
> Ernesto
>
> On Wed, Jan 27, 2010 at 9:43 PM, Riyad Kalla <[email protected]> wrote:
>
> > This seems like adding a large amount of overhead to an image-heavy site
> > (e.g. image blog or something), I thought I read in Wicket in Action that
> > WicketFilter ignored HTTP requests for non-wicket resources now and
> passed
> > them through to the underlying server to handle avoiding the need to
> remap
> > your wicket URLs to something like /app/* so you could have /images and
> > other resources under root and not have them go through the filter.
> >
> > Is this not the case?
> >
> > On Wed, Jan 27, 2010 at 1:38 PM, Ernesto Reinaldo Barreiro <
> > [email protected]> wrote:
> >
> > > Hi Francois,
> > >
> > > Following example works.....
> > >
> > > 1-Create this class anywhere you want need.
> > >
> > > package com.antilia.demo.manager.img;
> > >
> > > import java.io.ByteArrayOutputStream;
> > > import java.io.File;
> > > import java.io.FileInputStream;
> > > import java.io.IOException;
> > > import java.io.InputStream;
> > > import java.io.OutputStream;
> > >
> > > import org.apache.wicket.AttributeModifier;
> > > import org.apache.wicket.markup.html.image.Image;
> > > import
> org.apache.wicket.markup.html.image.resource.DynamicImageResource;
> > > import org.apache.wicket.model.Model;
> > > import org.apache.wicket.protocol.http.WebApplication;
> > > import org.apache.wicket.protocol.http.WebRequestCycle;
> > > import org.apache.wicket.util.file.Folder;
> > >
> > > /**
> > >  *
> > >  * @author  Ernesto Reinaldo Barreiro ([email protected])
> > >  *
> > >  */
> > > public abstract class MountedImageFactory {
> > >
> > >
> > > static int BUFFER_SIZE = 10*1024;
> > >  /**
> > >     * Copies one stream into the other..
> > >  * @param is source Stream
> > >  * @param os destination Stream
> > >  * */
> > > static public void copy(InputStream is, OutputStream os) throws
> > IOException
> > > {
> > > byte[] buf = new byte[BUFFER_SIZE];
> > > while (true) {
> > > int tam = is.read(buf);
> > > if (tam == -1) {
> > > return;
> > > }
> > > os.write(buf, 0, tam);
> > > }
> > > }
> > >  public static  byte[] bytes(InputStream is) throws IOException {
> > > ByteArrayOutputStream out = new ByteArrayOutputStream();
> > > copy(is, out);
> > > return out.toByteArray();
> > > }
> > >  private static ImageFromFolderWebResource dynamicResource;
> > >  private static class ImageFromFolderWebResource extends
> > > DynamicImageResource {
> > >  private static final long serialVersionUID = 1L;
> > >
> > >  private File folder;
> > >  public ImageFromFolderWebResource(File folder, String mountPoint) {
> > > this.folder = folder;
> > > WebApplication.get().getSharedResources().add(mountPoint, this);
> > > WebApplication.get().mountSharedResource(mountPoint,
> > > "org.apache.wicket.Application/"+mountPoint);
> > > }
> > >  @Override
> > > protected byte[] getImageData() {
> > > try {
> > > String name = WebRequestCycle.get().getRequest().getParameter("name");
> > > return bytes(new FileInputStream(new File(getFolder().getAbsolutePath()
> +
> > > System.getProperty("file.separator")+(name))));
> > > } catch (Exception e) {
> > > //TODO: do this properly
> > > return null;
> > > }
> > > }
> > >
> > > public File getFolder() {
> > > return folder;
> > > }
> > > }
> > >  /**
> > >  * @return Folder from where images will be retrieved.
> > >  */
> > > protected abstract Folder getFolder();
> > >  /**
> > >  * @return the URL to mount the dynamic WEB resource.e.g.
> > >  */
> > > protected abstract String getMountPoint();
> > >  public Image createImage(String id, final String imageName) {
> > > if(dynamicResource == null)
> > > dynamicResource = new ImageFromFolderWebResource(getFolder(),
> > > getMountPoint());
> > > return new Image(id) {
> > >  private static final long serialVersionUID = 1L;
> > >
> > > @Override
> > > protected void onBeforeRender() {
> > > String path = WebRequestCycle.get().getRequest().getURL();
> > > path = path.substring(0, path.indexOf('/'));
> > > add(new AttributeModifier("src",true, new
> > > Model<String>("/"+path+"/"+getMountPoint()+"?name="+imageName)));
> > > super.onBeforeRender();
> > > }
> > > };
> > > }
> > > }
> > >
> > > 2- Create a test page.
> > >
> > > import org.apache.wicket.markup.html.WebPage;
> > > import org.apache.wicket.markup.html.image.Image;
> > > import org.apache.wicket.util.file.Folder;
> > >
> > > /**
> > >  * @author  Ernesto Reinaldo Barreiro ([email protected])
> > >  *
> > >  */
> > > public class TestPage extends WebPage {
> > >
> > > private static final MountedImageFactory IMAGE_FACTORY = new
> > > MountedImageFactory() {
> > >  @Override
> > > protected Folder getFolder() {
> > > return new Folder("C:/temp/images");
> > > }
> > >  @Override
> > > protected String getMountPoint() {
> > > return "test";
> > > }
> > >  };
> > >  /**
> > >  *
> > >  */
> > > public TestPage() {
> > > Image img = IMAGE_FACTORY.createImage("img", "test.png");
> > > add(img);
> > > }
> > > }
> > >
> > > and the HTML markup
> > >
> > > <html xmlns:wicket="org.apache.wicket">
> > > <head></head>
> > > <body>
> > >    <img wicket:id="img" alt="Test"/>
> > > </body>
> > > </html>
> > >
> > > 3- If you place a "test.png" on your "C:/temp/images" then you should
> be
> > > able to see the image when you hit the page.
> > >
> > > Hope you can adapt this to your needs?
> > >
> > > Regards,
> > >
> > > Ernesto
> > >
> > > 2010/1/27 François Meillet <[email protected]>
> > >
> > > > Thank for yours posts.
> > > > I try the solutions, but  I can't figure out how to serve images as
> > > static
> > > > images.
> > > > F.
> > > >
> > > > Le 27 janv. 2010 à 16:10, Thomas Kappler a écrit :
> > > >
> > > > > On 01/27/10 15:57, Jonas wrote:
> > > > >> Have you tried the following:
> > > > >>
> > > > >> WebComponent image = new WebComponent("someWicketId");
> > > > >> image.add(new SimpleAttributeModifier("src", "http://.....jpg";));
> > > > >> add(image);
> > > > >>
> > > > >> with markup
> > > > >>
> > > > >> <img wicket:id="someWicketId" />
> > > > >>
> > > > >>
> > > > >> that should work just fine...
> > > > >>
> > > > >> if you cannot hardcode the image url, you can use the following
> > > > >> instead of SimpleAttributeModifier
> > > > >> image.add(new AttributeModifier("src", true new
> > > > >> AbstractReadOnlyModel<String>() {
> > > > >>     public String getObject() {
> > > > >>         String url = ... (fetch the image url from anywhere else)
> > > > >>         // e.g. '/xxx/yyyy/image893748.png'
> > > > >>         return url;
> > > > >>     }
> > > > >> ));
> > > > >
> > > > > Or, maybe a bit nicer, encapsulate it into a component and let the
> > URI
> > > > come from a Model, as usual in Wicket:
> > > > >
> > > > > class ExternalImageUri
> > > > > extends WebComponent
> > > > > {
> > > > >       public ExternalImageUri(String id, IModel<String> uri)
> > > > >       {
> > > > >               super(id, uri);
> > > > >               add(new AttributeModifier("src", true, uri));
> > > > >       }
> > > > >
> > > > >       @Override
> > > > >       protected void onComponentTag(ComponentTag tag)
> > > > >       {
> > > > >               super.onComponentTag(tag);
> > > > >               checkComponentTag(tag, "img");
> > > > >       }
> > > > > }
> > > > >
> > > > >
> > > > > This in the Wiki at
> > > > http://cwiki.apache.org/WICKET/how-to-load-an-external-image.html.
> > > > >
> > > > >
> > > > > -- Thomas
> > > > >
> > > > >
> > > > >> 2010/1/27 François Meillet<[email protected]>:
> > > > >>> Hi Wicketers,
> > > > >>>
> > > > >>> I have a directory, /xxx/images with uploaded images, which is
> not
> > > > under the application context root directory.
> > > > >>> How can I serve them as static images ?
> > > > >>>
> > > > >>> I tried the StaticImage class I found in the forum (
> > > > http://old.nabble.com/Plain-IMG-src-urls-td21547371.html#a21547543 )
> > > > >>> but it doesn't work for me. It just work if the image files are
> > under
> > > > the context root directory.
> > > > >>>
> > > > >>> Thanks for your help.
> > > > >>>
> > > > >>> François
> > > > >>>
> > > > >>>
> > > > >>>
> > > > >>>
> > > > >>>
> > ---------------------------------------------------------------------
> > > > >>> To unsubscribe, e-mail: [email protected]
> > > > >>> For additional commands, e-mail: [email protected]
> > > > >>>
> > > > >>>
> > > > >>
> > > > >>
> > ---------------------------------------------------------------------
> > > > >> To unsubscribe, e-mail: [email protected]
> > > > >> For additional commands, e-mail: [email protected]
> > > > >>
> > > > >
> > > > >
> > > > > --
> > > > > -------------------------------------------------------------------
> > > > >  Thomas Kappler                        [email protected]
> > > > >  Swiss Institute of Bioinformatics         Tel: +41 22 379 51 89
> > > > >  CMU, rue Michel Servet 1
> > > > >  1211 Geneve 4
> > > > >  Switzerland                              http://www.uniprot.org
> > > > > -------------------------------------------------------------------
> > > > >
> > > > >
> ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: [email protected]
> > > > > For additional commands, e-mail: [email protected]
> > > > >
> > > >
> > > > François Meillet
> > > > [email protected]
> > > >
> > > >
> > > >
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [email protected]
> > > > For additional commands, e-mail: [email protected]
> > > >
> > > >
> > >
> >
>

Reply via email to