[jboss-cvs] jboss-seam/ui/src/main/java/org/jboss/seam/ui/graphicImage ...

Peter Muir peter at bleepbleep.org.uk
Fri Jun 15 13:06:58 EDT 2007


  User: pmuir   
  Date: 07/06/15 13:06:58

  Added:       ui/src/main/java/org/jboss/seam/ui/graphicImage        
                        UITransformImageBlur.java UIGraphicImage.java
                        GraphicImageStore.java UITransformImageType.java
                        GraphicImageResource.java UITransformImageSize.java
                        GraphicImageRendererBase.java ImageTransform.java
  Log:
  Refactor cdk port
  
  Revision  Changes    Path
  1.1      date: 2007/06/15 17:06:58;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/graphicImage/UITransformImageBlur.java
  
  Index: UITransformImageBlur.java
  ===================================================================
  package org.jboss.seam.ui.graphicImage;
  
  import java.io.IOException;
  
  import javax.faces.component.UIComponentBase;
  
  import org.jboss.seam.core.Image;
  
  public abstract class UITransformImageBlur extends UIComponentBase implements ImageTransform
  {
     
     public void applyTransform(Image image) throws IOException
     {
        if (!isRendered())
        {
           return;
        }
        image.blur(new Integer(getRadius()));
     }
     
     public abstract String getRadius();
     
     public abstract void setRadius(String width);
     
    
     
  }
  
  
  
  1.1      date: 2007/06/15 17:06:58;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/graphicImage/UIGraphicImage.java
  
  Index: UIGraphicImage.java
  ===================================================================
  package org.jboss.seam.ui.graphicImage;
  
  import javax.faces.component.html.HtmlGraphicImage;
  
  public abstract class UIGraphicImage extends HtmlGraphicImage
  {
  
     public static final String FAMILY = "org.jboss.seam.ui.UIGraphicImage";
  
     public abstract String getFileName();
  
     public abstract void setFileName(String fileName);
     
     
  
  }
  
  
  
  1.1      date: 2007/06/15 17:06:58;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/graphicImage/GraphicImageStore.java
  
  Index: GraphicImageStore.java
  ===================================================================
  package org.jboss.seam.ui.graphicImage;
  
  import java.io.Serializable;
  import java.util.HashMap;
  import java.util.Map;
  
  import org.jboss.seam.Component;
  import org.jboss.seam.InterceptionType;
  import org.jboss.seam.ScopeType;
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Intercept;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.core.Image;
  import org.jboss.seam.log.Log;
  import org.jboss.seam.log.Logging;
  
  @Name("org.jboss.seam.ui.graphicImage.graphicImageStore")
  @Scope(ScopeType.SESSION)
  @Install(precedence = Install.BUILT_IN)
  @Intercept(InterceptionType.NEVER)
  public class GraphicImageStore implements Serializable
  {
     
     private Log log = Logging.getLog(GraphicImageStore.class);
  
     public static class ImageWrapper implements Serializable
     {
        
        private byte[] image;
  
        private Image.Type contentType;
  
        public ImageWrapper(byte[] image, Image.Type contentType)
        {
           this.image = image;
           this.contentType = contentType;
        }
  
        public Image.Type getContentType()
        {
           return contentType;
        }
  
        public byte[] getImage()
        {
           return image;
        }
     }
  
     private Map<String, ImageWrapper> store = new HashMap<String, ImageWrapper>();
  
     private int index = 0;
  
     /**
      * Put a image into the store
      * @param image
      * @return the key of the image
      */
     public String put(ImageWrapper image)
     {
        return put(image, null);
     }
     
     /**
      * Put an image into the store.
      * @param image
      * @param key The key to use, if null, a key will be generated
      * @return The key of the image
      */
     public String put(ImageWrapper image, String key) 
     {
        if (key == null)
        {
           key = "org.jboss.seam.ui.GraphicImageStore." + index;
           index++;
        }
        store.put(key, image);
        log.debug("Put image into to session with key #0", key);
        return key;
     }
  
     public ImageWrapper get(String key)
     {
        log.debug("Get image into to session with key #0", key);
        ImageWrapper image = store.get(key);
        return image;
     }
     
     public ImageWrapper remove(String key)
     {
        log.debug("Get image from session with key #0", key);
        return store.remove(key);
     }
     
     public boolean contains(String key) 
     {
        return store.containsKey(key);
     }
  
     public static GraphicImageStore instance()
     {
        return (GraphicImageStore) Component.getInstance(GraphicImageStore.class, true);
     }
  
  }
  
  
  1.1      date: 2007/06/15 17:06:58;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/graphicImage/UITransformImageType.java
  
  Index: UITransformImageType.java
  ===================================================================
  package org.jboss.seam.ui.graphicImage;
  
  import java.io.IOException;
  
  import javax.faces.component.UIComponentBase;
  
  import org.jboss.seam.core.Image;
  
  public abstract class UITransformImageType extends UIComponentBase implements ImageTransform
  {
     
     public void applyTransform(Image image) throws IOException
     {
        if (!isRendered())
        {
           return;
        }
        Image.Type type = Image.Type.getTypeByMimeType(getContentType());
        if (type != null)
        {
           image.setContentType(type);
        }
     }
     
     public abstract String getContentType();
     
     public abstract void setContentType(String width);
     
  }
  
  
  
  1.1      date: 2007/06/15 17:06:58;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/graphicImage/GraphicImageResource.java
  
  Index: GraphicImageResource.java
  ===================================================================
  package org.jboss.seam.ui.graphicImage;
  
  import static org.jboss.seam.InterceptionType.NEVER;
  import static org.jboss.seam.ScopeType.APPLICATION;
  import static org.jboss.seam.annotations.Install.BUILT_IN;
  
  import java.io.IOException;
  
  import javax.servlet.ServletException;
  import javax.servlet.ServletOutputStream;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Intercept;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.annotations.Startup;
  import org.jboss.seam.contexts.ContextualHttpServletRequest;
  import org.jboss.seam.servlet.AbstractResource;
  import org.jboss.seam.ui.graphicImage.GraphicImageStore.ImageWrapper;
  
  @Startup
  @Scope(APPLICATION)
  @Name("org.jboss.seam.ui.graphicImage.graphicImageResource")
  @Install(precedence = BUILT_IN)
  @Intercept(NEVER)
  public class GraphicImageResource extends AbstractResource
  {
  
   public static final String GRAPHIC_IMAGE_RESOURCE_PATH = "/seam/resource/graphicImage";
     
     private static final String RESOURCE_PATH = "/graphicImage";
     
     @Override
     protected String getResourcePath()
     {
        return RESOURCE_PATH;
     }
     
     @Override
     public void getResource(final HttpServletRequest request, final HttpServletResponse response)
        throws ServletException, IOException
     {
  
        new ContextualHttpServletRequest(request, getServletContext())
        {
           @Override
           public void process() throws IOException 
           {
              doWork(request, response);
           }
        }.run();
        
     }
     
     private void doWork(HttpServletRequest request, HttpServletResponse response)
        throws IOException
     {
        String pathInfo = request.getPathInfo().substring(getResourcePath().length() + 1,
                 request.getPathInfo().lastIndexOf("."));
        ImageWrapper image = GraphicImageStore.instance().remove(pathInfo);
        if (image != null)
        {
           response.setContentType(image.getContentType().getMimeType());
           response.setStatus(HttpServletResponse.SC_OK);
           response.setContentLength(image.getImage().length);
           ServletOutputStream os = response.getOutputStream();
           os.write(image.getImage());
           os.flush();
        }
        else
        {
           response.sendError(HttpServletResponse.SC_NOT_FOUND);
        }
     }
  
  }
  
  
  
  1.1      date: 2007/06/15 17:06:58;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/graphicImage/UITransformImageSize.java
  
  Index: UITransformImageSize.java
  ===================================================================
  package org.jboss.seam.ui.graphicImage;
  
  import java.io.IOException;
  
  import javax.faces.component.UIComponentBase;
  
  import org.jboss.seam.core.Image;
  
  public abstract class UITransformImageSize extends UIComponentBase implements ImageTransform
  {
  
     public void applyTransform(Image image) throws IOException
     {
        if (!isRendered())
        {
           return;
        }
        // TODO reduce number of decimal places
        if (isMaintainRatio())
        {
           if (getWidth() != null && getHeight() != null)
           {
              throw new UnsupportedOperationException(
                       "Cannot maintain ratio and specify height and width");
           }
           else if (getWidth() != null)
           {
              image.scaleToWidth(new Integer(getWidth()));
           }
           else if (getHeight() != null)
           {
              image.scaleToHeight(new Integer(getHeight()));
           }
        }
        else if (getFactor() != null)
        {
           if (getWidth() != null || getHeight() != null)
           {
              throw new UnsupportedOperationException(
                       "Cannot scale by a factor and specify height and width");
           }
           image.scale(getFactor());
        }
        else
        {
           image.resize(new Integer(getWidth()), new Integer(getHeight()));
        }
     }
  
     public abstract boolean isMaintainRatio();
  
     public abstract void setMaintainRatio(boolean maintainRatio);
  
     public abstract Integer getWidth();
  
     public abstract void setWidth(Integer width);
  
     public abstract Integer getHeight();
  
     public abstract void setHeight(Integer height);
  
     public abstract Double getFactor();
  
     public abstract void setFactor(Double factor);
  
  }
  
  
  
  1.1      date: 2007/06/15 17:06:58;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/graphicImage/GraphicImageRendererBase.java
  
  Index: GraphicImageRendererBase.java
  ===================================================================
  package org.jboss.seam.ui.graphicImage;
  
  import java.io.IOException;
  
  import javax.faces.component.UIComponent;
  import javax.faces.context.FacesContext;
  import javax.faces.context.ResponseWriter;
  
  import org.ajax4jsf.framework.renderer.AjaxComponentRendererBase;
  import org.ajax4jsf.framework.renderer.RendererUtils;
  import org.jboss.seam.core.Image;
  import org.jboss.seam.ui.graphicImage.GraphicImageStore.ImageWrapper;
  
  public class GraphicImageRendererBase extends AjaxComponentRendererBase
  {
     
     private static final String IMG_ELEM = "img";
     private static final String SRC_ATTR = "src";
     private static final String HSPACE_ATTR = "hspace";
     private static final String ISMAP_ATTR = "ismap";
     public static final String VSPACE_ATTR = "vspace";
     
     private static final String[] IMG_PASSTHROUGH_ATTRIBUTES =
     {
        RendererUtils.HTML.align_ATTRIBUTE,
        RendererUtils.HTML.alt_ATTRIBUTE,
        RendererUtils.HTML.border_ATTRIBUTE,
        RendererUtils.HTML.height_ATTRIBUTE,
        HSPACE_ATTR,
        ISMAP_ATTR,
        RendererUtils.HTML.longdesc_ATTRIBUTE,
        RendererUtils.HTML.usemap_ATTRIBUTE,
        VSPACE_ATTR,
        RendererUtils.HTML.width_ATTRIBUTE,
        RendererUtils.HTML.ondblclick_ATTRIBUTE,
        RendererUtils.HTML.onmousedown_ATTRIBUTE,
        RendererUtils.HTML.onmouseup_ATTRIBUTE,
        RendererUtils.HTML.onmouseover_ATTRIBUTE,
        RendererUtils.HTML.onmousemove_ATTRIBUTE,
        RendererUtils.HTML.onmouseout_ATTRIBUTE,
        RendererUtils.HTML.onkeypress_ATTRIBUTE,
        RendererUtils.HTML.onkeydown_ATTRIBUTE,
        RendererUtils.HTML.onkeyup_ATTRIBUTE,
        RendererUtils.HTML.dir_ATTRIBUTE,
        RendererUtils.HTML.lang_ATTRIBUTE,
        RendererUtils.HTML.title_ATTRIBUTE,
        RendererUtils.HTML.style_ATTRIBUTE,
        RendererUtils.HTML.STYLE_CLASS_ATTR
     };
     
     @Override
     protected Class getComponentClass()
     {
        return UIGraphicImage.class;
     }
     
     @Override
     protected void doEncodeBegin(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException
     {
        UIGraphicImage graphicImage = (UIGraphicImage) component;
        
        String key = graphicImage.getFileName();
        String extension = null;
  
        Image image = Image.instance();
        image.setInput(graphicImage.getValue());
        
        // Do transforms
        
        for (UIComponent cmp : graphicImage.getChildren()) 
        {
           if (cmp instanceof ImageTransform)
           {
              ImageTransform imageTransform = (ImageTransform) cmp;
              imageTransform.applyTransform(image);
           }
        }
  
        key = GraphicImageStore.instance().put(new ImageWrapper(image.getImage(), image.getContentType()),
                 key);
        extension = image.getContentType().getExtension();
  
        writer.startElement(IMG_ELEM, graphicImage);
        String url = context.getExternalContext().getRequestContextPath()
                 + GraphicImageResource.GRAPHIC_IMAGE_RESOURCE_PATH + "/" + key + extension;
        writer.writeAttribute(SRC_ATTR, url, SRC_ATTR);
        
        new RendererUtils().encodeAttributesFromArray(context, component, IMG_PASSTHROUGH_ATTRIBUTES);
        writer.endElement(IMG_ELEM);
     }
     
     @Override
     public boolean getRendersChildren()
     {
        return true;
     }
  
  }
  
  
  
  1.1      date: 2007/06/15 17:06:58;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/graphicImage/ImageTransform.java
  
  Index: ImageTransform.java
  ===================================================================
  package org.jboss.seam.ui.graphicImage;
  
  import java.io.IOException;
  
  import org.jboss.seam.core.Image;
  
  public interface ImageTransform
  {
     public static final String FAMILY = "org.jboss.seam.ui.UIImageTransform";
     
     public abstract void applyTransform(Image image) throws IOException;
  }
  
  
  



More information about the jboss-cvs-commits mailing list