From 44773644177a6bf16f3274ef0f879b42775ded54 Mon Sep 17 00:00:00 2001 From: Jeremy Grelle Date: Mon, 31 Mar 2008 19:15:24 +0000 Subject: [PATCH] Performance-related enhancements.. --- .../faces/ui/DojoStyleRenderer.java | 6 +- .../faces/ui/ResourceGroupRenderer.java | 27 ++ .../faces/ui/ResourceRenderer.java | 27 ++ .../faces/ui/resource/ResourceHelper.java | 52 ++++ .../faces/ui/resource/ResourceServlet.java | 250 ++++++++++++++---- .../main/resources/META-INF/faces-config.xml | 22 ++ .../resources/META-INF/springfaces.taglib.xml | 14 + .../ui/resource/ResourceServletTests.java | 17 ++ 8 files changed, 365 insertions(+), 50 deletions(-) create mode 100644 spring-faces/src/main/java/org/springframework/faces/ui/ResourceGroupRenderer.java create mode 100644 spring-faces/src/main/java/org/springframework/faces/ui/ResourceRenderer.java diff --git a/spring-faces/src/main/java/org/springframework/faces/ui/DojoStyleRenderer.java b/spring-faces/src/main/java/org/springframework/faces/ui/DojoStyleRenderer.java index e4c9b460..528ccad1 100644 --- a/spring-faces/src/main/java/org/springframework/faces/ui/DojoStyleRenderer.java +++ b/spring-faces/src/main/java/org/springframework/faces/ui/DojoStyleRenderer.java @@ -10,11 +10,11 @@ import org.springframework.faces.ui.resource.ResourceHelper; public class DojoStyleRenderer extends Renderer { - private String dijitThemePath = "/dijit/themes/"; + private static final String dijitThemePath = "/dijit/themes/"; - private String dijitTheme = "tundra"; + private static final String dijitTheme = "tundra"; - private ResourceHelper resourceHelper = new ResourceHelper(); + private static final ResourceHelper resourceHelper = new ResourceHelper(); public void encodeBegin(FacesContext context, UIComponent component) throws IOException { diff --git a/spring-faces/src/main/java/org/springframework/faces/ui/ResourceGroupRenderer.java b/spring-faces/src/main/java/org/springframework/faces/ui/ResourceGroupRenderer.java new file mode 100644 index 00000000..61297b0d --- /dev/null +++ b/spring-faces/src/main/java/org/springframework/faces/ui/ResourceGroupRenderer.java @@ -0,0 +1,27 @@ +package org.springframework.faces.ui; + +import java.io.IOException; + +import javax.faces.component.UIComponent; +import javax.faces.context.FacesContext; +import javax.faces.render.Renderer; + +import org.springframework.faces.ui.resource.ResourceHelper; + +public class ResourceGroupRenderer extends Renderer { + + private static final ResourceHelper resourceHelper = new ResourceHelper(); + + public void encodeBegin(FacesContext context, UIComponent component) throws IOException { + + if (component.getChildCount() > 0) { + resourceHelper.beginCombineStyles(context); + } + } + + public void encodeEnd(FacesContext context, UIComponent component) throws IOException { + if (component.getChildCount() > 0) { + resourceHelper.endCombineStyles(context); + } + } +} diff --git a/spring-faces/src/main/java/org/springframework/faces/ui/ResourceRenderer.java b/spring-faces/src/main/java/org/springframework/faces/ui/ResourceRenderer.java new file mode 100644 index 00000000..f9a294a1 --- /dev/null +++ b/spring-faces/src/main/java/org/springframework/faces/ui/ResourceRenderer.java @@ -0,0 +1,27 @@ +package org.springframework.faces.ui; + +import java.io.IOException; + +import javax.faces.component.UIComponent; +import javax.faces.context.FacesContext; +import javax.faces.render.Renderer; + +import org.springframework.faces.ui.resource.ResourceHelper; +import org.springframework.util.Assert; + +public class ResourceRenderer extends Renderer { + + private static final ResourceHelper resourceHelper = new ResourceHelper(); + + public void encodeEnd(FacesContext context, UIComponent component) throws IOException { + String resourcePath = (String) component.getAttributes().get("resourcePath"); + Assert.hasText(resourcePath, "Resource component " + component.getClientId(context) + + " is missing a resourcePath."); + if (!resourcePath.startsWith("/")) { + resourcePath = "/" + resourcePath; + component.getAttributes().put("resourcePath", resourcePath); + } + resourceHelper.renderResource(context, resourcePath); + } + +} diff --git a/spring-faces/src/main/java/org/springframework/faces/ui/resource/ResourceHelper.java b/spring-faces/src/main/java/org/springframework/faces/ui/resource/ResourceHelper.java index 56d297ed..bc0f9bf9 100644 --- a/spring-faces/src/main/java/org/springframework/faces/ui/resource/ResourceHelper.java +++ b/spring-faces/src/main/java/org/springframework/faces/ui/resource/ResourceHelper.java @@ -16,9 +16,11 @@ package org.springframework.faces.ui.resource; import java.io.IOException; +import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Set; @@ -37,6 +39,22 @@ public class ResourceHelper { private static final String RENDERED_RESOURCES_KEY = "org.springframework.faces.RenderedResources"; + private static final String COMBINED_RESOURCES_KEY = "org.springframework.faces.CombinedResources"; + + /** + * Renders either a script or style resource depending on the resourcePath + * @param facesContext + * @param resourcePath + * @throws IOException + */ + public void renderResource(FacesContext facesContext, String resourcePath) throws IOException { + if (resourcePath.endsWith(".js")) { + renderScriptLink(facesContext, resourcePath); + } else if (resourcePath.endsWith(".css")) { + renderStyleLink(facesContext, resourcePath); + } + } + /** * Render a