You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gr...@apache.org on 2008/03/31 18:15:45 UTC

svn commit: r643044 - in /myfaces/tomahawk/trunk/sandbox: core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/ core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ examples/src/main/java/org/apache/myfaces/examples/graphi...

Author: grantsmith
Date: Mon Mar 31 09:15:42 2008
New Revision: 643044

URL: http://svn.apache.org/viewvc?rev=643044&view=rev
Log:
https://issues.apache.org/jira/browse/TOMAHAWK-1220
Refactorings

Added:
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/GraphicImageDynamicConstants.java
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/GraphicsImageDynamicHelper.java
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageContext.java
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageRenderer.java
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageResponseStream.java
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/SimpleImageContext.java
Modified:
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamic.java
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamicRenderer.java
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamicTag.java
    myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/graphicImageDynamic/GraphicImageDynamicTextBean.java
    myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/graphicImageDynamic/UploadedImageRenderer.java

Modified: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamic.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamic.java?rev=643044&r1=643043&r2=643044&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamic.java (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamic.java Mon Mar 31 09:15:42 2008
@@ -16,9 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+
 package org.apache.myfaces.custom.graphicimagedynamic;
 
 import org.apache.myfaces.component.html.ext.HtmlGraphicImage;
+import org.apache.myfaces.custom.graphicimagedynamic.util.ImageRenderer;
 import org.apache.myfaces.shared_tomahawk.util.ClassUtils;
 
 import javax.faces.context.FacesContext;
@@ -41,7 +43,12 @@
 {
     public static final String COMPONENT_TYPE = "org.apache.myfaces.GraphicImageDynamic";
     public static final String COMPONENT_FAMILY = "javax.faces.Graphic";
-    private static final String DEFAULT_RENDERER_TYPE = GraphicImageDynamicRenderer.RENDERER_TYPE;
+    public static final String RENDERER_PARAM = "_renderer";
+	public static final String VALUE_PARAM = "_value";
+	public static final String WIDTH_PARAM = "_width";
+	public static final String HEIGHT_PARAM = "_height";    
+    private static final String DEFAULT_RENDERER_TYPE = GraphicImageDynamicRenderer.RENDERER_TYPE;	
+    
 
     public GraphicImageDynamic()
     {

Modified: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamicRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamicRenderer.java?rev=643044&r1=643043&r2=643044&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamicRenderer.java (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamicRenderer.java Mon Mar 31 09:15:42 2008
@@ -19,23 +19,12 @@
 
 package org.apache.myfaces.custom.graphicimagedynamic;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.myfaces.component.html.util.ParameterResourceHandler;
-import org.apache.myfaces.renderkit.html.ext.HtmlImageRenderer;
-import org.apache.myfaces.renderkit.html.util.AddResource;
-import org.apache.myfaces.renderkit.html.util.AddResourceFactory;
-import org.apache.myfaces.renderkit.html.util.ResourceLoader;
-import org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils;
-import org.apache.myfaces.shared_tomahawk.renderkit.html.HTML;
-import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils;
-import org.apache.myfaces.shared_tomahawk.util.ClassUtils;
+import java.io.IOException;
+import java.util.Map;
 
 import javax.faces.FacesException;
 import javax.faces.FactoryFinder;
 import javax.faces.component.UIComponent;
-import javax.faces.component.UIParameter;
-import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
 import javax.faces.context.FacesContextFactory;
 import javax.faces.context.ResponseStream;
@@ -43,332 +32,183 @@
 import javax.faces.el.ValueBinding;
 import javax.faces.lifecycle.Lifecycle;
 import javax.faces.lifecycle.LifecycleFactory;
-import javax.faces.webapp.FacesServlet;
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.component.html.util.ParameterResourceHandler;
+import org.apache.myfaces.custom.graphicimagedynamic.util.GraphicImageDynamicConstants;
+import org.apache.myfaces.custom.graphicimagedynamic.util.GraphicsImageDynamicHelper;
+import org.apache.myfaces.custom.graphicimagedynamic.util.ImageContext;
+import org.apache.myfaces.custom.graphicimagedynamic.util.ImageRenderer;
+import org.apache.myfaces.custom.graphicimagedynamic.util.ImageResponseStream;
+import org.apache.myfaces.custom.util.ComponentUtils;
+import org.apache.myfaces.renderkit.html.ext.HtmlImageRenderer;
+import org.apache.myfaces.renderkit.html.util.AddResource;
+import org.apache.myfaces.renderkit.html.util.AddResourceFactory;
+import org.apache.myfaces.renderkit.html.util.ResourceLoader;
+import org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils;
+import org.apache.myfaces.shared_tomahawk.renderkit.html.HTML;
+import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils;
 
 /**
  * @author Sylvain Vieujot
- * @version $Revision$ $Date: 2005-05-23 19:39:37 +0200 (Mon, 23 May 2005) $
  */
-public class GraphicImageDynamicRenderer extends HtmlImageRenderer implements ResourceLoader
-{
-    protected static class SimpleImageContext implements ImageContext
-    {
-        private final Map _params;
-        private final Integer _width;
-        private final Integer _height;
-
-        public SimpleImageContext(Map params, Integer width, Integer height)
-        {
-            _params = params;
-            _width = width;
-            _height = height;
-        }
-
-        public Map getParamters()
-        {
-            return _params;
-        }
-
-        public Integer getWidth()
-        {
-            return _width;
-        }
-
-        public Integer getHeight()
-        {
-            return _height;
-        }
-    }
-
-    private static final Log log = LogFactory.getLog(GraphicImageDynamicRenderer.class);
-
-    private static final class ImageResponseStream extends ResponseStream
-    {
-        private final OutputStream _out;
-
-        private ImageResponseStream(OutputStream out)
-        {
-            _out = out;
-        }
-
-        public void close() throws IOException
-        {
-            _out.flush();
-            _out.close();
-        }
-
-        public void flush() throws IOException
-        {
-            _out.flush();
-        }
-
-        public void write(byte[] b, int off, int len) throws IOException
-        {
-            _out.write(b, off, len);
-        }
-
-        public void write(byte[] b) throws IOException
-        {
-            _out.write(b);
-        }
-
-        public void write(int b) throws IOException
-        {
-            _out.write(b);
-        }
-    }
-
-    private static final String RENDERER_PARAM = "_renderer";
-	private static final String VALUE_PARAM = "_value";
-    private static final String WIDTH_PARAM = "_width";
-    private static final String HEIGHT_PARAM = "_height";
-
+public class GraphicImageDynamicRenderer extends HtmlImageRenderer implements
+		ResourceLoader {
+	
+	private static final Log log = LogFactory
+			.getLog(GraphicImageDynamicRenderer.class);
     public static final String RENDERER_TYPE = "org.apache.myfaces.GraphicImageDynamicRenderer";
 
-    public void encodeEnd(FacesContext context, UIComponent component) throws IOException
-    {
-        RendererUtils.checkParamValidity(context, component, GraphicImageDynamic.class);
-
-        GraphicImageDynamic graphicImageDynamic = (GraphicImageDynamic) component;
-        ResponseWriter writer = context.getResponseWriter();
-
-        writer.startElement(HTML.IMG_ELEM, graphicImageDynamic);
-        HtmlRendererUtils.writeIdIfNecessary(writer, graphicImageDynamic, context);
-        HtmlRendererUtils.renderHTMLAttributes(writer, graphicImageDynamic,
-                                               HTML.IMG_PASSTHROUGH_ATTRIBUTES);
-
-        Map params = getParameterMap(context, component);
-        String width = graphicImageDynamic.getWidth();
-        if (width != null)
-        {
-            params.put(WIDTH_PARAM, width);
-        }
-        String height = graphicImageDynamic.getHeight();
-        if (height != null)
-        {
-            params.put(HEIGHT_PARAM, height);
-        }
-
-        Class imageRendererClass = graphicImageDynamic.getImageRendererClass();
-        if (imageRendererClass != null)
-        {
-			params.put(RENDERER_PARAM, imageRendererClass.getName());
-        }
-
-		ValueBinding imageRendererValueBinding = graphicImageDynamic.getValueBinding("value");
-		if (imageRendererValueBinding != null)
-		{
-			params.put(VALUE_PARAM, imageRendererValueBinding.getExpressionString());
+    public void encodeEnd(FacesContext context, UIComponent component)
+			throws IOException {
+
+		GraphicImageDynamic graphicImageDynamic = (GraphicImageDynamic) component;
+		String width = graphicImageDynamic.getWidth();
+		String height = graphicImageDynamic.getHeight();
+		ResponseWriter writer = context.getResponseWriter();
+		Map params = ComponentUtils.getParameterMap(component);
+		Class imageRendererClass = graphicImageDynamic.getImageRendererClass();
+		ValueBinding imageRendererValueBinding = graphicImageDynamic
+				.getValueBinding("value");
+		AddResource addResource;
+		String url;
+
+		// render the img HTML element.
+		RendererUtils.checkParamValidity(context, component,
+				GraphicImageDynamic.class);
+
+		writer.startElement(HTML.IMG_ELEM, graphicImageDynamic);
+
+		HtmlRendererUtils.writeIdIfNecessary(writer, graphicImageDynamic,
+				context);
+		HtmlRendererUtils.renderHTMLAttributes(writer, graphicImageDynamic,
+				HTML.IMG_PASSTHROUGH_ATTRIBUTES);
+
+		if (width != null) {
+			params.put(GraphicImageDynamic.WIDTH_PARAM, width);
 		}
 
-		AddResource addResource = AddResourceFactory.getInstance(context);
-        String url =
-			context.getExternalContext().encodeResourceURL(
-				addResource.getResourceUri(context, new ParameterResourceHandler(this
-					.getClass(), params)));
-        writer.writeAttribute(HTML.SRC_ATTR, url, null);
-
-        writer.endElement(HTML.IMG_ELEM);
-    }
-
-    protected Map getParameterMap(FacesContext context, UIComponent component)
-    {
-        Map result = new HashMap();
-        for (Iterator iter = component.getChildren().iterator(); iter.hasNext();)
-        {
-            UIComponent child = (UIComponent) iter.next();
-            if (child instanceof UIParameter)
-            {
-                UIParameter uiparam = (UIParameter) child;
-                Object value = uiparam.getValue();
-                if (value != null)
-                {
-                    result.put(uiparam.getName(), value);
-                }
-            }
-        }
-        return result;
-    }
-
-    public void decode(FacesContext facesContext, UIComponent component)
-    {
-        super.decode(facesContext, component);
-    }
+		if (height != null) {
+			params.put(GraphicImageDynamic.HEIGHT_PARAM, height);
+		}
 
-    /**
-     * @throws IOException
-     * @see org.apache.myfaces.renderkit.html.util.ResourceLoader#serveResource(javax.servlet.ServletContext, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String)
-     */
-    public void serveResource(ServletContext context, HttpServletRequest request,
-                              HttpServletResponse response, String resourceUri) throws IOException
-    {
-        FacesContextFactory facesContextFactory = (FacesContextFactory) FactoryFinder
-                .getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
-        LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder
-                .getFactory(FactoryFinder.LIFECYCLE_FACTORY);
-        Lifecycle lifecycle = lifecycleFactory.getLifecycle(getLifecycleId(context));
-        FacesContext facesContext = facesContextFactory.getFacesContext(context, request, response,
-                                                                        lifecycle);
-        facesContext.setResponseStream(new ImageResponseStream(response.getOutputStream()));
-        try
-        {
-			ImageRenderer imageRenderer = null;
+		if (imageRendererClass != null) {
+			params.put(GraphicImageDynamic.RENDERER_PARAM, imageRendererClass
+					.getName());
+		}
 
-			Map requestMap = facesContext.getExternalContext().getRequestParameterMap();
-            Object rendererValue = requestMap.get(RENDERER_PARAM);
-			if (rendererValue != null)
-			{
-				imageRenderer = getImageRendererFromClassName(rendererValue.toString());
-			}
-			else
-			{
-				Object rendererValueBinding = requestMap.get(VALUE_PARAM);
-				if (rendererValueBinding != null)
-				{
-					imageRenderer = getImageRendererFromValueBinding(facesContext, rendererValueBinding.toString());
+		if (imageRendererValueBinding != null) {
+			params.put(GraphicImageDynamic.VALUE_PARAM,
+					imageRendererValueBinding.getExpressionString());
+		}
+
+		addResource = AddResourceFactory.getInstance(context);
+		url = context.getExternalContext().encodeResourceURL(
+				addResource.getResourceUri(context,
+						new ParameterResourceHandler(this.getClass(), params)));
+		writer.writeAttribute(HTML.SRC_ATTR, url, null);
+
+		writer.endElement(HTML.IMG_ELEM);
+	}
+
+    public void decode(FacesContext facesContext, UIComponent component) {
+		super.decode(facesContext, component);
+	}
+
+    public void serveResource(ServletContext servletContext,
+			HttpServletRequest request, HttpServletResponse response,
+			String resourceUri) throws IOException {
+
+		// get the facesContext from the servletContext.
+		FacesContextFactory facesContextFactory = (FacesContextFactory) FactoryFinder
+				.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
+		LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder
+				.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
+		Lifecycle lifecycle = lifecycleFactory.getLifecycle(ComponentUtils
+				.getLifecycleId(servletContext));
+		FacesContext facesContext = facesContextFactory.getFacesContext(
+				servletContext, request, response, lifecycle);
+
+		facesContext.setResponseStream(new ImageResponseStream(response
+				.getOutputStream()));
+
+		// render the image.
+		try {
+
+			ImageRenderer imageRenderer = null;
+			Map requestMap = facesContext.getExternalContext()
+					.getRequestParameterMap();
+			Object rendererValue = requestMap
+					.get(GraphicImageDynamic.RENDERER_PARAM);
+
+			if (rendererValue != null) {
+				imageRenderer = GraphicsImageDynamicHelper
+						.getImageRendererFromClassName(rendererValue.toString());
+			} else {
+				Object rendererValueBinding = requestMap
+						.get(GraphicImageDynamic.VALUE_PARAM);
+				
+				if (rendererValueBinding != null) {
+					imageRenderer = GraphicsImageDynamicHelper
+							.getImageRendererFromValueBinding(facesContext,
+									rendererValueBinding.toString());
 				}
 			}
 
-
-			if (imageRenderer == null)
-			{
-				throw new FacesException("no image renderer defined.");
+			if (imageRenderer == null) {
+				throw new FacesException(
+						GraphicImageDynamicConstants.NO_IMAGE_RENDERER_DEFINED);
 			}
 
-			try
-			{
+			try {
 				renderImage(imageRenderer, facesContext);
+			} catch (Exception e) {
+				throw new FacesException(
+						GraphicImageDynamicConstants.MSG_COULDNOT_RENDER_IMAGE
+								+ rendererValue + " : " + e.getMessage(), e);
 			}
-			catch (Exception e)
-			{
-				throw new FacesException("could not renderer image "
-										 + rendererValue + " : " + e.getMessage(), e);
-			}
+
 			facesContext.getResponseStream().close();
-        }
-        finally
-        {
-            facesContext.release();
-        }
-    }
-
-	protected ImageRenderer getImageRendererFromValueBinding(FacesContext facesContext, String rendererValueBinding)
-	{
-		return (ImageRenderer) facesContext.getApplication().createValueBinding(rendererValueBinding.toString()).getValue(facesContext);
+		} finally {
+			facesContext.release();
+		}
 	}
 
-	protected ImageRenderer getImageRendererFromClassName(String imageRendererClassName)
-	{
-		ImageRenderer imageRenderer;
-		try
-				{
-					Class rendererClass = ClassUtils.classForName(imageRendererClassName.toString());
-			if (!ImageRenderer.class.isAssignableFrom(rendererClass))
-			{
-				throw new FacesException("Image renderer class [" + imageRendererClassName
-										 + "] does not implement " + ImageRenderer.class.getName());
-			}
-			try
-			{
-				imageRenderer = (ImageRenderer) rendererClass.newInstance();
-			}
-			catch (InstantiationException e)
-			{
-				throw new FacesException("could not instantiate image renderer class "
-										 + imageRendererClassName + " : " + e.getMessage(), e);
-			}
-			catch (IllegalAccessException e)
-			{
-				throw new FacesException("could not instantiate image renderer class "
-										 + imageRendererClassName + " : " + e.getMessage(), e);
-			}
+    /**
+     * This method is used for rendering the image.
+     * @param imageRenderer
+     * @param facesContext
+     * @throws Exception
+     */
+	protected void renderImage(ImageRenderer imageRenderer,
+			FacesContext facesContext) throws Exception {
+
+		ImageContext imageContext = GraphicsImageDynamicHelper
+				.createImageContext(facesContext, log);
+		imageRenderer.setContext(facesContext, imageContext);
+		HttpServletResponse response = (HttpServletResponse) facesContext
+				.getExternalContext().getResponse();
+		int contentLength = imageRenderer.getContentLength();
+		String contentType = imageRenderer.getContentType();
+		ResponseStream out = facesContext.getResponseStream();
+
+		if (contentLength > 0) {
+			response.setContentLength(contentLength);
 		}
-		catch (ClassNotFoundException e)
-		{
-			throw new FacesException("image renderer class not found: " + e.getMessage(), e);
+
+		if (contentType != null && contentType.length() > 0) {
+			response.setContentType(contentType);
 		}
-		return imageRenderer;
-	}
 
-	protected void renderImage(ImageRenderer imageRenderer, FacesContext facesContext)
-            throws Exception
-    {
-            ImageContext imageContext = createImageContext(facesContext);
-
-        imageRenderer.setContext(facesContext, imageContext);
-
-        HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext()
-                .getResponse();
-
-
-        int contentLength = imageRenderer.getContentLength();
-        if( contentLength >0 )
-        {
-            response.setContentLength(contentLength);
-        }
-
-        String contentType = imageRenderer.getContentType();
-        if (contentType != null && contentType.length() > 0 )
-        {
-            response.setContentType(contentType);
-        }
-
-        ResponseStream out = facesContext.getResponseStream();
-        try
-        {
-                imageRenderer.renderResource( out );
-        }
-        finally
-        {
-            out.close();
-            facesContext.responseComplete();
-        }
-    }
-
-    protected ImageContext createImageContext(FacesContext facesContext)
-    {
-        ExternalContext externalContext = facesContext.getExternalContext();
-        final Map requestMap = externalContext.getRequestParameterMap();
-        Object value = requestMap.get(WIDTH_PARAM);
-        Integer width = null;
-        if (value != null)
-        {
-            try
-            {
-                width = Integer.valueOf(value.toString());
-            }
-            catch (NumberFormatException e)
-            {
-                log.error("Invalid value for image width : " + value + ", " + e.getMessage(), e);
-            }
-        }
-        Integer height = null;
-        value = requestMap.get(HEIGHT_PARAM);
-        if (value != null)
-        {
-            try
-            {
-                height = Integer.valueOf(value.toString());
-            }
-            catch (NumberFormatException e)
-            {
-                log.error("Invalid value for image height : " + value + ", " + e.getMessage(), e);
-            }
-        }
-        return new SimpleImageContext(requestMap, width, height);
-    }
-
-    private String getLifecycleId(ServletContext context)
-    {
-        String lifecycleId = context.getInitParameter(FacesServlet.LIFECYCLE_ID_ATTR);
-        return lifecycleId != null ? lifecycleId : LifecycleFactory.DEFAULT_LIFECYCLE;
-    }
+		try {
+			imageRenderer.renderResource(out);
+		} finally {
+			out.close();
+			facesContext.responseComplete();
+		}
+	}
 }

Modified: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamicTag.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamicTag.java?rev=643044&r1=643043&r2=643044&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamicTag.java (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/GraphicImageDynamicTag.java Mon Mar 31 09:15:42 2008
@@ -16,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+
 package org.apache.myfaces.custom.graphicimagedynamic;
 
 import org.apache.myfaces.taglib.html.ext.HtmlGraphicImageTag;
@@ -58,4 +59,4 @@
     {
         _imageRendererClass = imageRendererClass;
     }
-}
\ No newline at end of file
+}

Added: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/GraphicImageDynamicConstants.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/GraphicImageDynamicConstants.java?rev=643044&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/GraphicImageDynamicConstants.java (added)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/GraphicImageDynamicConstants.java Mon Mar 31 09:15:42 2008
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.custom.graphicimagedynamic.util;
+
+public interface GraphicImageDynamicConstants {
+	String NO_IMAGE_RENDERER_DEFINED = "no image renderer defined.";
+	String MSG_COULDNOT_RENDER_IMAGE = "could not render image ";
+}

Added: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/GraphicsImageDynamicHelper.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/GraphicsImageDynamicHelper.java?rev=643044&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/GraphicsImageDynamicHelper.java (added)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/GraphicsImageDynamicHelper.java Mon Mar 31 09:15:42 2008
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.custom.graphicimagedynamic.util;
+
+import java.util.Map;
+
+import javax.faces.FacesException;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+
+import org.apache.commons.logging.Log;
+import org.apache.myfaces.custom.graphicimagedynamic.GraphicImageDynamic;
+import org.apache.myfaces.shared_tomahawk.util.ClassUtils;
+
+/**
+ * This class is a utility class used by the 
+ * GraphicsImageDynamic component.
+ */
+public class GraphicsImageDynamicHelper {
+	
+	/**
+	 * This method is used for getting the ImageRenderer
+	 * from the image render class.
+	 * @param imageRendererClassName
+	 * @return the image renderer
+	 */
+	public static ImageRenderer getImageRendererFromClassName(
+			String imageRendererClassName) {
+		ImageRenderer imageRenderer;
+		try {
+			Class rendererClass = ClassUtils
+					.classForName(imageRendererClassName);
+			if (!ImageRenderer.class.isAssignableFrom(rendererClass)) {
+				throw new FacesException("Image renderer class ["
+						+ imageRendererClassName + "] does not implement "
+						+ ImageRenderer.class.getName());
+			}
+			try {
+				imageRenderer = (ImageRenderer) rendererClass.newInstance();
+			} catch (InstantiationException e) {
+				throw new FacesException(
+						"could not instantiate image renderer class "
+								+ imageRendererClassName + " : "
+								+ e.getMessage(), e);
+			} catch (IllegalAccessException e) {
+				throw new FacesException(
+						"could not instantiate image renderer class "
+								+ imageRendererClassName + " : "
+								+ e.getMessage(), e);
+			}
+		} catch (ClassNotFoundException e) {
+			throw new FacesException("image renderer class not found: "
+					+ e.getMessage(), e);
+		}
+		return imageRenderer;
+	}
+
+	/**
+	 * This method gets the image renderer from the ValueBinding.
+	 * @param facesContext
+	 * @param rendererValueBinding
+	 * @return the ImageRenderer.
+	 */
+	public static ImageRenderer getImageRendererFromValueBinding(
+			FacesContext facesContext, String rendererValueBinding) {
+		return (ImageRenderer) facesContext.getApplication()
+				.createValueBinding(rendererValueBinding).getValue(
+						facesContext);
+	}	
+	
+	
+	/**
+	 * This method is used for creating the image context.
+	 * @param facesContext
+	 * @return the imageContext.
+	 */
+    public static ImageContext createImageContext(FacesContext facesContext,
+			Log log) {
+
+		ExternalContext externalContext = facesContext.getExternalContext();
+		final Map requestMap = externalContext.getRequestParameterMap();
+		Object value = requestMap.get(GraphicImageDynamic.WIDTH_PARAM);
+		Integer height = null;
+		Integer width = null;
+
+		if (value != null) {
+			try {
+				width = Integer.valueOf(value.toString());
+			} catch (NumberFormatException e) {
+				log.error("Invalid value for image width : " + value + ", "
+						+ e.getMessage(), e);
+			}
+		}
+
+		value = requestMap.get(GraphicImageDynamic.HEIGHT_PARAM);
+		if (value != null) {
+			try {
+				height = Integer.valueOf(value.toString());
+			} catch (NumberFormatException e) {
+				log.error("Invalid value for image height : " + value + ", "
+						+ e.getMessage(), e);
+			}
+		}
+
+		return new SimpleImageContext(requestMap, width, height);
+	}
+}

Added: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageContext.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageContext.java?rev=643044&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageContext.java (added)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageContext.java Mon Mar 31 09:15:42 2008
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.custom.graphicimagedynamic.util;
+
+import org.apache.myfaces.custom.dynamicResources.ResourceContext;
+
+
+/**
+ * The ImageContext class holds additional objects and values which can be used 
+ * to determine which or how an image should be rendered. 
+ * 
+ * @author Mathias Broekelmann
+ * @version $Revision: 472727 $ $Date: 2006-11-09 03:08:46 +0200 (Thu, 09 Nov 2006) $
+ *
+ */
+public interface ImageContext extends ResourceContext
+{
+    
+    /**
+     * Returns the desired width of the image
+     * 
+     * @return null if no width is defined
+     */
+    Integer getWidth();
+
+    /**
+     * Returns the desired height of the image
+     * 
+     * @return null if no height is defined
+     */
+    Integer getHeight();
+}

Added: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageRenderer.java?rev=643044&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageRenderer.java (added)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageRenderer.java Mon Mar 31 09:15:42 2008
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.custom.graphicimagedynamic.util;
+
+import org.apache.myfaces.custom.dynamicResources.ResourceRenderer;
+
+/**
+ * The ImageRenderer is used to render the binary data for a html img tag
+ * Implementions must have a default constructor
+ * 
+ * @author Mathias Broekelmann
+ * @version $Revision: 472727 $ $Date: 2006-11-09 03:08:46 +0200 (Thu, 09 Nov 2006) $
+ */
+public interface ImageRenderer extends ResourceRenderer
+{
+	/**
+	 * This method will be called first, to set the contexts.
+	 * 
+     * @param facesContext the faces context
+     * @param imageContext the image context width aditional image parameters
+	 *
+	void setContext(FacesContext facesContext, ImageContext imageContext) throws Exception;
+	*/
+    /**
+     * Called to render the image to the given outputstream.
+     * 
+     * @param out the outputstream which is used to write the binary data of the image
+     *  
+     * @throws IOException
+     *
+    void renderImage(ResponseStream out) throws IOException;
+    */
+}

Added: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageResponseStream.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageResponseStream.java?rev=643044&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageResponseStream.java (added)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/ImageResponseStream.java Mon Mar 31 09:15:42 2008
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.custom.graphicimagedynamic.util;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import javax.faces.context.ResponseStream;
+
+/**
+ * This class is responsible for wrapping the
+ * ImageResponseStream.
+ */
+public class ImageResponseStream extends ResponseStream {
+
+	private final OutputStream _out;
+
+	public ImageResponseStream(OutputStream out) {
+		_out = out;
+	}
+
+	public void close() throws IOException {
+		_out.flush();
+		_out.close();
+	}
+
+	public void flush() throws IOException {
+		_out.flush();
+	}
+
+	public void write(byte[] b, int off, int len) throws IOException {
+		_out.write(b, off, len);
+	}
+
+	public void write(byte[] b) throws IOException {
+		_out.write(b);
+	}
+
+	public void write(int b) throws IOException {
+		_out.write(b);
+	}
+}

Added: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/SimpleImageContext.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/SimpleImageContext.java?rev=643044&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/SimpleImageContext.java (added)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/graphicimagedynamic/util/SimpleImageContext.java Mon Mar 31 09:15:42 2008
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.custom.graphicimagedynamic.util;
+
+import java.util.Map;
+
+public class SimpleImageContext implements ImageContext {
+	
+	private final Map _params;
+	private final Integer _width;
+	private final Integer _height;
+
+	public SimpleImageContext(Map params, Integer width, Integer height) {
+		_params = params;
+		_width = width;
+		_height = height;
+	}
+
+	public Map getParamters() {
+		return _params;
+	}
+
+	public Integer getWidth() {
+		return _width;
+	}
+
+	public Integer getHeight() {
+		return _height;
+	}
+}
+

Modified: myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/graphicImageDynamic/GraphicImageDynamicTextBean.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/graphicImageDynamic/GraphicImageDynamicTextBean.java?rev=643044&r1=643043&r2=643044&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/graphicImageDynamic/GraphicImageDynamicTextBean.java (original)
+++ myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/graphicImageDynamic/GraphicImageDynamicTextBean.java Mon Mar 31 09:15:42 2008
@@ -28,8 +28,8 @@
 import javax.faces.context.ResponseStream;
 
 import org.apache.myfaces.custom.dynamicResources.ResourceContext;
-import org.apache.myfaces.custom.graphicimagedynamic.ImageContext;
-import org.apache.myfaces.custom.graphicimagedynamic.ImageRenderer;
+import org.apache.myfaces.custom.graphicimagedynamic.util.ImageContext;
+import org.apache.myfaces.custom.graphicimagedynamic.util.ImageRenderer;
 
 import com.sun.image.codec.jpeg.JPEGCodec;
 import com.sun.image.codec.jpeg.JPEGImageEncoder;
@@ -115,7 +115,7 @@
     }
 
     /**
-     * @see org.apache.myfaces.custom.graphicimagedynamic.ImageRenderer#renderImage(javax.faces.context.FacesContext, org.apache.myfaces.custom.graphicimagedynamic.ImageContext, java.io.OutputStream)
+     * @see org.apache.myfaces.custom.graphicimagedynamic.ImageRenderer#renderResource(javax.faces.context.ResponseStream) 
      */
     public void renderResource(ResponseStream out)
             throws IOException

Modified: myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/graphicImageDynamic/UploadedImageRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/graphicImageDynamic/UploadedImageRenderer.java?rev=643044&r1=643043&r2=643044&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/graphicImageDynamic/UploadedImageRenderer.java (original)
+++ myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/graphicImageDynamic/UploadedImageRenderer.java Mon Mar 31 09:15:42 2008
@@ -26,7 +26,7 @@
 import javax.faces.el.ValueBinding;
 
 import org.apache.myfaces.custom.dynamicResources.ResourceContext;
-import org.apache.myfaces.custom.graphicimagedynamic.ImageRenderer;
+import org.apache.myfaces.custom.graphicimagedynamic.util.ImageRenderer;
 
 /**
  * @author Mathias Broekelmann
@@ -65,7 +65,7 @@
     }
 
     /**
-     * @see org.apache.myfaces.custom.graphicimagedynamic.ImageRenderer#renderImage(javax.faces.context.FacesContext, org.apache.myfaces.custom.graphicimagedynamic.ImageContext, java.io.OutputStream)
+     * @see org.apache.myfaces.custom.graphicimagedynamic.ImageRenderer#renderResource(javax.faces.context.ResponseStream) 
      */
     public void renderResource(ResponseStream out)
             throws IOException