You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by aj...@apache.org on 2010/02/03 06:18:26 UTC
svn commit: r905888 -
/incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/TemplateManager.java
Author: ajaquith
Date: Wed Feb 3 05:18:25 2010
New Revision: 905888
URL: http://svn.apache.org/viewvc?rev=905888&view=rev
Log:
Fixed a bug in TemplateManager that was preventing resources underneath the top-level templates directory from being found.
Modified:
incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/TemplateManager.java
Modified: incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/TemplateManager.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/TemplateManager.java?rev=905888&r1=905887&r2=905888&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/TemplateManager.java (original)
+++ incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/TemplateManager.java Wed Feb 3 05:18:25 2010
@@ -602,44 +602,67 @@
return EMPTY_MODULE_LIST;
}
- @SuppressWarnings("unchecked")
+ /**
+ * Initializes the template resources resolver map so that requests
+ * for a particular resource will be found regardless of whether the
+ * template contains that resource, or the default template does.
+ * @param template the template whose resources provide the defaults
+ */
private void initTemplateResources( String template )
{
- Map<String,String> resources = new HashMap<String,String>();
- ServletContext servletContext = m_engine.getServletContext();
-
- // Iterate through all of the resources in the default map
- String templatePrefix = "/" + DIRECTORY + "/" + template + "/";
- Set<String> templateResources = servletContext.getResourcePaths( templatePrefix );
- Set<String> alreadyProcessed = new HashSet<String>();
+ Map<String,String> resolver = new HashMap<String,String>();
// Add all of the resources the template contains
- if ( templateResources != null )
- {
- for ( String resource : templateResources )
- {
- String shortResource = resource.substring( templatePrefix.length() );
- resources.put( shortResource, resource );
- alreadyProcessed.add( shortResource );
- }
- }
+ addResources( resolver, "/" + DIRECTORY + "/" + template + "/", null );
// Add resources the template does not contain, but default does
- templatePrefix = "/" + DIRECTORY + "/" + DEFAULT_TEMPLATE + "/";
- Set<String> defaultResources = servletContext.getResourcePaths( templatePrefix );
- if ( defaultResources != null )
+ addResources( resolver, "/" + DIRECTORY + "/" + DEFAULT_TEMPLATE + "/", null );
+
+ // We're done! Make the map immutable
+ m_resources = Collections.unmodifiableMap( resolver );
+ }
+
+ /**
+ * Adds all of the resources under a specified path prefix to the
+ * resource resolver map, with the "short name" of the path as the
+ * key, and the full path as the value. The short name is the portion
+ * of the path after the prefix. If a resource with that short name
+ * has already been added to the resource map, it will not be added
+ * again. Any resources ending in {@code /} (i.e., a directory path)
+ * will be processed recursively.
+ * @param resolver the resource resolver map
+ * @param prefix the path prefix that the search initiates from
+ * @param dir the directory to search relative to the path prefix. If not
+ * supplied, the path prefix directory itself will be searched
+ */
+ @SuppressWarnings("unchecked")
+ private void addResources( Map<String,String> resolver, String prefix, String dir )
+ {
+ ServletContext servletContext = m_engine.getServletContext();
+ String searchPath = dir == null ? prefix : prefix + dir;
+ Set<String> resources = servletContext.getResourcePaths( searchPath );
+ if ( resources != null )
{
- for ( String resource : defaultResources )
+ for ( String resource : resources )
{
- String shortResource = resource.substring( templatePrefix.length() );
- if ( !alreadyProcessed.contains( shortResource ) )
+ String shortName = resource.substring( prefix.length() );
+
+ // Directory: process these entries too
+ if ( shortName.endsWith( "/" ) )
{
- resources.put( shortResource, resource );
+ addResources( resolver, prefix, shortName );
+ }
+
+ // Regular resource: add it if we don't have it already
+ else
+ {
+ boolean alreadyProcessed = resolver.containsKey( shortName );
+ if ( !alreadyProcessed )
+ {
+ resolver.put( shortName, resource );
+ }
}
}
}
-
- // We're done! Make the map immutable
- m_resources = Collections.unmodifiableMap( resources );
}
}