You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by nb...@apache.org on 2008/08/20 23:16:21 UTC

svn commit: r687469 - in /velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource: ResourceManagerImpl.java loader/FileResourceLoader.java loader/ResourceLoader.java loader/StringResourceLoader.java

Author: nbubna
Date: Wed Aug 20 14:16:21 2008
New Revision: 687469

URL: http://svn.apache.org/viewvc?rev=687469&view=rev
Log:
VELOCITY-439 improve resource existence checking

Modified:
    velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/ResourceManagerImpl.java
    velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/FileResourceLoader.java
    velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/ResourceLoader.java
    velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/StringResourceLoader.java

Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/ResourceManagerImpl.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/ResourceManagerImpl.java?rev=687469&r1=687468&r2=687469&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/ResourceManagerImpl.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/ResourceManagerImpl.java Wed Aug 20 14:16:21 2008
@@ -602,48 +602,11 @@
         for (Iterator it = resourceLoaders.iterator(); it.hasNext(); )
         {
             ResourceLoader resourceLoader = (ResourceLoader) it.next();
-
-            InputStream is = null;
-
-            /*
-             *  if we find one that can provide the resource,
-             *  return the name of the loaders's Class
-             */
-            try
+            if (resourceLoader.resourceExists(resourceName))
             {
-                is = resourceLoader.getResourceStream(resourceName);
-
-                if (is != null)
-                {
-                    return resourceLoader.getClass().toString();
-                }
-            }
-            catch (ResourceNotFoundException rnfe)
-            {
-                /*
-                 * this isn't a problem.  keep going
-                 */
-            }
-            finally
-            {
-
-                /*
-                 *  if we did find one, clean up because we were
-                 *  returned an open stream
-                 */
-                if (is != null)
-                {
-
-                    try
-                    {
-                        is.close();
-                    }
-                    catch (IOException supressed)
-                    { }
-                }
+                return resourceLoader.getClass().toString();
             }
         }
-
         return null;
     }
 }

Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/FileResourceLoader.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/FileResourceLoader.java?rev=687469&r1=687468&r2=687469&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/FileResourceLoader.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/FileResourceLoader.java Wed Aug 20 14:16:21 2008
@@ -179,6 +179,39 @@
     }
 
     /**
+     * Overrides superclass for better performance.
+     */
+    public boolean resourceExists(String name)
+    {
+        if (name == null)
+        {
+            return false;
+        }
+        name = StringUtils.normalizePath(name);
+        if (name == null || name.length() == 0)
+        {
+            return false;
+        }
+
+        int size = paths.size();
+        for (int i = 0; i < size; i++)
+        {
+            String path = (String)paths.get(i);
+            try
+            {
+                File file = getFile(path, name);
+                return file.canRead();
+            }
+            catch (Exception ioe)
+            {
+                String msg = "Exception while checking for template " + name;
+                log.debug(msg, ioe);
+            }
+        }
+        return false;
+    }
+
+    /**
      * Try to find a template given a normalized path.
      *
      * @param path a normalized path

Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/ResourceLoader.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/ResourceLoader.java?rev=687469&r1=687468&r2=687469&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/ResourceLoader.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/ResourceLoader.java Wed Aug 20 14:16:21 2008
@@ -206,4 +206,51 @@
     {
         return modificationCheckInterval;
     }
+
+    /**
+     * Check whether any given resource exists. This is not really
+     * a very efficient test and it can and should be overridden in the
+     * subclasses extending ResourceLoader. 
+     *
+     * @param resourceName The name of a resource.
+     * @return true if a resource exists and can be accessed.
+     */
+    public boolean resourceExists(final String resourceName)
+    {
+        InputStream is = null;
+        try
+        {
+            is = getResourceStream(resourceName);
+        }
+        catch (ResourceNotFoundException e)
+        {
+            if (log.isDebugEnabled())
+            {
+                log.debug("Could not load resource '" + resourceName 
+                        + "' from ResourceLoader " + this.getClass().getName() 
+                        + ": ", e);
+            }
+        }
+        finally
+        {
+            try
+            {
+                if (is != null)
+                {
+                    is.close();
+                }
+            }
+            catch (Exception e)
+            {
+                if (log.isErrorEnabled())
+                {
+                    String msg = "While closing InputStream for resource '" + resourceName
+                        + "' from ResourceLoader "+this.getClass().getName();
+                    log.error(msg, e);
+                    throw new VelocityException(msg, e);
+                }
+            }
+        }
+        return (is != null);
+    }
 }

Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/StringResourceLoader.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/StringResourceLoader.java?rev=687469&r1=687468&r2=687469&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/StringResourceLoader.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/resource/loader/StringResourceLoader.java Wed Aug 20 14:16:21 2008
@@ -323,6 +323,17 @@
         return repo;
     }
 
+    /**
+     * Overrides superclass for better performance.
+     */
+    public boolean resourceExists(final String name)
+    {
+        if (name == null)
+        {
+            return false;
+        }
+        return (this.repository.getStringResource(name) != null);
+    }
 
     /**
      * Get an InputStream so that the Runtime can build a