You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@click.apache.org by sa...@apache.org on 2009/08/21 08:36:15 UTC

svn commit: r806429 - /incubator/click/trunk/click/framework/src/org/apache/click/service/ClickResourceService.java

Author: sabob
Date: Fri Aug 21 06:36:15 2009
New Revision: 806429

URL: http://svn.apache.org/viewvc?rev=806429&view=rev
Log:
fixed file system resources not being cached

Modified:
    incubator/click/trunk/click/framework/src/org/apache/click/service/ClickResourceService.java

Modified: incubator/click/trunk/click/framework/src/org/apache/click/service/ClickResourceService.java
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/framework/src/org/apache/click/service/ClickResourceService.java?rev=806429&r1=806428&r2=806429&view=diff
==============================================================================
--- incubator/click/trunk/click/framework/src/org/apache/click/service/ClickResourceService.java (original)
+++ incubator/click/trunk/click/framework/src/org/apache/click/service/ClickResourceService.java Fri Aug 21 06:36:15 2009
@@ -24,9 +24,11 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.jar.JarEntry;
@@ -79,8 +81,12 @@
         // Load all JAR resources
         loadAllJarResources();
 
-        // Load all file system resources
-        loadClickDirResources(servletContext);
+        // Load file system resources. File system resources override JAR
+        // resources
+        List<String> cacheables = getCacheableDirs();
+        for (String cacheable : cacheables) {
+            loadClickDirResources(servletContext, cacheable);
+        }
     }
 
     /**
@@ -130,6 +136,22 @@
         renderResource(response, resourceData);
     }
 
+    // ------------------------------------------------ Package Private Methods
+
+    /**
+     * Return the list of directories that contains cacheable resources.
+     * <p/>
+     * By default only resource under the "<tt>/click</tt>" directory will be
+     * cached.
+     *
+     * @return list of directories that should be cached
+     */
+    List<String> getCacheableDirs() {
+       List list = new ArrayList();
+       list.add("/click");
+       return list;
+    }
+
     // Private Methods --------------------------------------------------------
 
     private void loadAllJarResources() throws IOException {
@@ -279,7 +301,7 @@
             int pathIndex = fileName.indexOf(resourceDirectory);
             if (pathIndex != -1) {
                 if (logFeedback && logService.isTraceEnabled()) {
-                    logService.trace("load files from folder -> "
+                    logService.trace("loaded files from folder -> "
                         + dir.getAbsolutePath());
 
                     // Only provide feedback once per dir
@@ -311,24 +333,31 @@
     }
 
     @SuppressWarnings("unchecked")
-    private void loadClickDirResources(ServletContext servletContext)
+    private void loadClickDirResources(ServletContext servletContext, String dir)
         throws IOException {
 
-        Set resources = servletContext.getResourcePaths("/");
+        Set resources = servletContext.getResourcePaths(dir);
 
         if (resources != null) {
             // Add all resources withtin web application
             for (Iterator i = resources.iterator(); i.hasNext();) {
                 String resource = (String) i.next();
 
-                if (!configService.isTemplate(resource)
-                    && !resource.endsWith("/")) {
+                // If resource is a folder and a valid cacheable resource,
+                // recursively look for resources in that folder
+                if (resource.endsWith("/")) {
+
+                    loadClickDirResources(servletContext, resource);
+                } else {
+
+                    if (!configService.isTemplate(resource)) {
 
-                    byte[] resourceData =
-                        getServletResourceData(servletContext, resource);
+                        byte[] resourceData =
+                            getServletResourceData(servletContext, resource);
 
-                    if (resourceData != null) {
-                        resourceCache.put(resource, resourceData);
+                        if (resourceData != null) {
+                            resourceCache.put(resource, resourceData);
+                        }
                     }
                 }
             }