Yup, this is also good example.  I don't think having to edit layout jsp's is a 
good admin experience when you're deploying a new component.

/Janne

On 2 Mar 2010, at 23:38, Dirk Frederickx wrote:

> Another example is the editor jsp, such as plain.jsp.  It uses
> jspwiki-edit.js,  (which probably would better be named as plain.js )
> 
> However, currenly, jspwiki-edit.js is injected in another jsp (a layout jsp)
> 
> 
> When you would use the FCK editor, however, another javascript (and probably
> also css) is needed.
> However, the layout jsp is not aware of every editor to add-in the correct
> resources.
> 
> 
> dirk
> 
> On Mon, Mar 1, 2010 at 7:46 PM, Janne Jalkanen 
> <[email protected]>wrote:
> 
>> 
>> Hm?  If RequestResourceTag and IncludeResourcesTag are gone, then how do
>> plugins request resources, and how do individual templates then fall back to
>> resources they don't include?  I've got a bunch of code that assumes that
>> templates can fall back to resources (e.g. images) from default template,
>> and plugins which request CSS and other components.
>> 
>> /Janne
>> 
>> On 1 Mar 2010, at 07:23, [email protected] wrote:
>> 
>>> Author: ajaquith
>>> Date: Mon Mar  1 05:23:10 2010
>>> New Revision: 917390
>>> 
>>> URL: http://svn.apache.org/viewvc?rev=917390&view=rev
>>> Log:
>>> Cleaned out all of the deadwood in TemplateManager. Deprecated
>> IncludeResourcesTag and RequestResourceTag. Resources can (and should) be
>> included directly in template JSPs.
>>> 
>>> Modified:
>>>   incubator/jspwiki/trunk/ChangeLog
>>>   incubator/jspwiki/trunk/src/java/org/apache/wiki/Release.java
>>>   incubator/jspwiki/trunk/src/java/org/apache/wiki/plugin/Note.java
>>> 
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/preferences/Preferences.java
>>> 
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/rpc/json/JSONRPCManager.java
>>>   incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/ContentTag.java
>>>   incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/EditorTag.java
>>> 
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/IncludeResourcesTag.java
>>>   incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/IncludeTag.java
>>> 
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/RequestResourceTag.java
>>>   incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/EditorManager.java
>>> 
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/TemplateManager.java
>>> 
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/stripes/TemplateResolution.java
>>> 
>>> Modified: incubator/jspwiki/trunk/ChangeLog
>>> URL:
>> http://svn.apache.org/viewvc/incubator/jspwiki/trunk/ChangeLog?rev=917390&r1=917389&r2=917390&view=diff
>>> 
>> ==============================================================================
>>> --- incubator/jspwiki/trunk/ChangeLog (original)
>>> +++ incubator/jspwiki/trunk/ChangeLog Mon Mar  1 05:23:10 2010
>>> @@ -1,3 +1,30 @@
>>> +2010-02-28 Andrew Jaquith <ajaquith AT apache DOT org>
>>> +
>>> +        * 3.0.0-svn-212
>>> +
>>> +        * Exceptions caught by WikiTagBase (and subclass tags) are now
>>> +        re-thrown so that they propagate upstream. Previously, doCatch()
>>> +        was swallowing them, which made for "interesting" JSP debugging.
>>> +
>>> +        * Edit.jsp, Wiki.jsp, and PageInfo.jsp changed to put the
>>> +        edit tab on the right. For editing, the live-preview feature was
>>> +        moved to a new "Preview" tab, also on the right. The View tab
>>> +        now simply displays the most recent save.
>>> +
>>> +        * The Error.jsp references were made consistent in all JSPs.
>>> +        Rather than use JSTL syntax (which won't evaluate when used
>>> +        with <% page errorPage %> tag), the references now all use
>>> +        /Error.jsp, which itself jsp:includes the template JSP
>>> +        Error.jsp using JSTL. This makes the error page customizable
>>> +        per-template, but still very easy to use.
>>> +
>>> +        * Cleaned out all of the deadwood in TemplateManager.
>>> +        Deprecated IncludeResourcesTag and RequestResourceTag. Resources
>>> +        can (and should) be included directly in template JSPs.
>>> +
>>> +        * Small changes to Admin/AdministerProfiles action beans as part
>>> +        of a gradual overhaul to the Admin JSPs, which are being
>> Stripesed.
>>> +
>>> 2010-02-28 Dirk Frederickx <[email protected]>
>>> 
>>>        * v3.0.0-svn-211 : line up with latest template/stripes changes
>>> @@ -35,7 +62,7 @@
>>>        * fixed a couple of Plugin unit tests (support for wiki spaces is
>>>          not yet there), only the ReferringPagesPlugin still fails.
>>> 
>>> -2010-02-23 Andrew Jaquith <ajaquith AT apache DOT org>
>>> +2010-02-27 Andrew Jaquith <ajaquith AT apache DOT org>
>>> 
>>>        * 3.0.0-svn-209
>>> 
>>> 
>>> Modified: incubator/jspwiki/trunk/src/java/org/apache/wiki/Release.java
>>> URL:
>> http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/Release.java?rev=917390&r1=917389&r2=917390&view=diff
>>> 
>> ==============================================================================
>>> --- incubator/jspwiki/trunk/src/java/org/apache/wiki/Release.java
>> (original)
>>> +++ incubator/jspwiki/trunk/src/java/org/apache/wiki/Release.java Mon Mar
>> 1 05:23:10 2010
>>> @@ -77,7 +77,7 @@
>>>     *  <p>
>>>     *  If the build identifier is empty, it is not added.
>>>     */
>>> -    public static final String     BUILD         = "211";
>>> +    public static final String     BUILD         = "212";
>>> 
>>>    /**
>>>     *  This is the generic version string you should use
>>> 
>>> Modified:
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/plugin/Note.java
>>> URL:
>> http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/plugin/Note.java?rev=917390&r1=917389&r2=917390&view=diff
>>> 
>> ==============================================================================
>>> --- incubator/jspwiki/trunk/src/java/org/apache/wiki/plugin/Note.java
>> (original)
>>> +++ incubator/jspwiki/trunk/src/java/org/apache/wiki/plugin/Note.java Mon
>> Mar  1 05:23:10 2010
>>> @@ -27,6 +27,7 @@
>>> import org.apache.wiki.WikiContext;
>>> import org.apache.wiki.WikiEngine;
>>> import org.apache.wiki.api.PluginException;
>>> +import org.apache.wiki.ui.TemplateManager;
>>> import org.apache.wiki.util.TextUtil;
>>> 
>>> 
>>> @@ -86,9 +87,7 @@
>>> 
>>>        commentImage = "images/"+commentImage;
>>> 
>>> -        String resource = engine.getTemplateManager().findResource( ctx,
>>> -
>> engine.getTemplateDir(),
>>> -
>> commentImage );
>>> +        String resource = TemplateManager.getResourceResolver(
>> engine.getServletContext() ).get( commentImage );
>>> 
>>>        return ctx.getURL( WikiContext.NONE, resource );
>>>    }
>>> 
>>> Modified:
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/preferences/Preferences.java
>>> URL:
>> http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/preferences/Preferences.java?rev=917390&r1=917389&r2=917390&view=diff
>>> 
>> ==============================================================================
>>> ---
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/preferences/Preferences.java
>> (original)
>>> +++
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/preferences/Preferences.java
>> Mon Mar  1 05:23:10 2010
>>> @@ -310,7 +310,7 @@
>>>        }
>>>        else if( "availableSkins".equals( key ) )
>>>        {
>>> -            return m_engine.getTemplateManager().listSkins(
>> m_engine.getServletContext(), m_engine.getTemplateDir() );
>>> +            return m_engine.getTemplateManager().listSkins();
>>>        }
>>>        else if( "availableTimeFormats".equals( key ) )
>>>        {
>>> 
>>> Modified:
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/rpc/json/JSONRPCManager.java
>>> URL:
>> http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/rpc/json/JSONRPCManager.java?rev=917390&r1=917389&r2=917390&view=diff
>>> 
>> ==============================================================================
>>> ---
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/rpc/json/JSONRPCManager.java
>> (original)
>>> +++
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/rpc/json/JSONRPCManager.java
>> Mon Mar  1 05:23:10 2010
>>> @@ -38,7 +38,6 @@
>>> import org.apache.wiki.log.LoggerFactory;
>>> import org.apache.wiki.rpc.RPCCallable;
>>> import org.apache.wiki.rpc.RPCManager;
>>> -import org.apache.wiki.ui.TemplateManager;
>>> import org.jabsorb.callback.InvocationCallback;
>>> import org.jabsorb.JSONRPCBridge;
>>> 
>>> @@ -149,15 +148,6 @@
>>>     */
>>>    public static void requestJSON( WikiContext context )
>>>    {
>>> -        TemplateManager.addResourceRequest(context,
>>> -
>> TemplateManager.RESOURCE_SCRIPT,
>>> -
>> context.getURL(WikiContext.NONE,"scripts/json-rpc/jsonrpc.js"));
>>> -
>>> -        String jsonurl = context.getURL( WikiContext.NONE, "JSON-RPC" );
>>> -        TemplateManager.addResourceRequest(context,
>>> -
>> TemplateManager.RESOURCE_JSFUNCTION,
>>> -                                           "jsonrpc = new
>> JSONRpcClient(\""+jsonurl+"\");");
>>> -
>>>        getBridge(context).registerCallback(new WikiJSONAccessor(),
>> HttpServletRequest.class);
>>>    }
>>> 
>>> 
>>> Modified:
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/ContentTag.java
>>> URL:
>> http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/ContentTag.java?rev=917390&r1=917389&r2=917390&view=diff
>>> 
>> ==============================================================================
>>> --- incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/ContentTag.java
>> (original)
>>> +++ incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/ContentTag.java
>> Mon Mar  1 05:23:10 2010
>>> @@ -28,6 +28,7 @@
>>> 
>>> import org.apache.wiki.*;
>>> import org.apache.wiki.providers.ProviderException;
>>> +import org.apache.wiki.ui.TemplateManager;
>>> 
>>> 
>>> /**
>>> @@ -181,9 +182,7 @@
>>>                contentTemplate = beanName + "Content.jsp";
>>>            }
>>> 
>>> -            String page =
>> m_wikiContext.getEngine().getTemplateManager().findJSP( pageContext,
>>> -
>>         m_wikiContext.getTemplate(),
>>> -
>>         contentTemplate );
>>> +            String page = TemplateManager.getResourceResolver(
>> pageContext.getServletContext() ).get( contentTemplate );
>>>            pageContext.include( page );
>>>        }
>>>        catch( ServletException e )
>>> 
>>> Modified:
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/EditorTag.java
>>> URL:
>> http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/EditorTag.java?rev=917390&r1=917389&r2=917390&view=diff
>>> 
>> ==============================================================================
>>> --- incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/EditorTag.java
>> (original)
>>> +++ incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/EditorTag.java
>> Mon Mar  1 05:23:10 2010
>>> @@ -27,6 +27,7 @@
>>> 
>>> import org.apache.wiki.WikiEngine;
>>> import org.apache.wiki.ui.EditorManager;
>>> +import org.apache.wiki.ui.TemplateManager;
>>> 
>>> 
>>> /**
>>> @@ -58,10 +59,7 @@
>>> 
>>>        try
>>>        {
>>> -            String page = engine.getTemplateManager().findJSP(
>> pageContext,
>>> -
>> m_wikiContext.getTemplate(),
>>> -
>> editorPath );
>>> -
>>> +            String page = TemplateManager.getResourceResolver(
>> pageContext.getServletContext() ).get( editorPath );
>>>            if( page == null )
>>>            {
>>>                //FIXME: should be I18N ...
>>> 
>>> Modified:
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/IncludeResourcesTag.java
>>> URL:
>> http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/IncludeResourcesTag.java?rev=917390&r1=917389&r2=917390&view=diff
>>> 
>> ==============================================================================
>>> ---
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/IncludeResourcesTag.java
>> (original)
>>> +++
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/IncludeResourcesTag.java
>> Mon Mar  1 05:23:10 2010
>>> @@ -20,41 +20,34 @@
>>> */
>>> package org.apache.wiki.tags;
>>> 
>>> -import org.apache.wiki.ui.TemplateManager;
>>> 
>>> /**
>>> - *  This tag is used to include any programmatic includes into the
>>> - *  output stream.  Actually, what it does is that it simply emits a
>>> - *  tiny marker into the stream, and then a ServletFilter will take
>>> - *  care of the actual inclusion.
>>> - *
>>> -*  @deprecated use the Stripes <code>layout-component</code> tags
>> instead
>>> + *  <p>This tag is used to include any programmatic includes into the
>>> + *  output stream. In JSPWiki 2.8 and earlier, this tag emitted a
>>> + *  tiny marker into the stream which was replaced by ServletFilter.
>>> + *  <em>This tag has been deprecated because it is unsafe.</em> The
>>> + *  Stripes layout tags should be used instead. See the default
>>> + *  template {...@code layout/DefaultLayout.jsp} for instructions on how
>>> + *  to include scripts and other resources in JSPs.</p>
>>> + *  @deprecated use the Stripes <code>layout-component</code> tags
>> instead
>>> */
>>> public class IncludeResourcesTag extends WikiTagBase
>>> {
>>>    private static final long serialVersionUID = 0L;
>>> 
>>> -    private String m_type;
>>> -
>>>    public void initTag()
>>>    {
>>>        super.initTag();
>>> -        m_type = null;
>>>    }
>>> 
>>>    public void setType( String type )
>>>    {
>>> -        m_type = type;
>>>    }
>>> 
>>>    public int doWikiStartTag() throws Exception
>>>    {
>>> -        //String marker =
>> m_wikiContext.getEngine().getTemplateManager().getMarker(m_wikiContext,
>> m_type);
>>> -        //String marker = TemplateManager.getMarker(pageContext,
>> m_type);
>>> -        String marker = TemplateManager.getMarker(m_wikiContext,
>> m_type);
>>> -
>>> -        pageContext.getOut().println( marker );
>>> -
>>> +        pageContext.getOut().println( "<!-- Please use the Stripes
>> layout tags instead " +
>>> +                     "of IncludeResourcesTag. See
>> layout/DefaultLayout.jsp for instructions. -->" );
>>>        return SKIP_BODY;
>>>    }
>>> 
>>> 
>>> Modified:
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/IncludeTag.java
>>> URL:
>> http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/IncludeTag.java?rev=917390&r1=917389&r2=917390&view=diff
>>> 
>> ==============================================================================
>>> --- incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/IncludeTag.java
>> (original)
>>> +++ incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/IncludeTag.java
>> Mon Mar  1 05:23:10 2010
>>> @@ -25,6 +25,7 @@
>>> import javax.servlet.ServletException;
>>> 
>>> import org.apache.wiki.providers.ProviderException;
>>> +import org.apache.wiki.ui.TemplateManager;
>>> import org.apache.wiki.util.TextUtil;
>>> 
>>> 
>>> @@ -72,10 +73,7 @@
>>>    {
>>>        try
>>>        {
>>> -            String page =
>> m_wikiContext.getEngine().getTemplateManager().findJSP( pageContext,
>>> -
>>         m_wikiContext.getTemplate(),
>>> -
>>         m_page );
>>> -
>>> +            String page = TemplateManager.getResourceResolver(
>> pageContext.getServletContext() ).get( m_page );
>>>            if( page == null )
>>>            {
>>>                pageContext.getOut().println("No template file called
>> '"+TextUtil.replaceEntities(m_page)+"'");
>>> 
>>> Modified:
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/RequestResourceTag.java
>>> URL:
>> http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/RequestResourceTag.java?rev=917390&r1=917389&r2=917390&view=diff
>>> 
>> ==============================================================================
>>> ---
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/RequestResourceTag.java
>> (original)
>>> +++
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/tags/RequestResourceTag.java
>> Mon Mar  1 05:23:10 2010
>>> @@ -20,21 +20,17 @@
>>> */
>>> package org.apache.wiki.tags;
>>> 
>>> -import org.apache.wiki.ui.TemplateManager;
>>> -
>>> /**
>>> - *  Provides easy access to TemplateManager.addResourceRequest().  You
>> may use
>>> - *  any of the request types defined there.
>>> - *
>>> - *  @see TemplateManager
>>> + *  <p>In JSPWiki 2.8, this tag provided a way to instruct JSPWiki to
>> insert
>>> + *  resource requests into JSPs. <em>This tag has been deprecated
>> because it
>>> + *  is unsafe.</em> The Stripes layout tags should be used instead. See
>> the default
>>> + *  template {...@code layout/DefaultLayout.jsp} for instructions on how
>>> + *  to include scripts and other resources in JSPs.</p>
>>> *  @deprecated use the Stripes <code>layout-component</code> tags
>> instead
>>> */
>>> public class RequestResourceTag extends WikiTagBase
>>> {
>>>    private static final long serialVersionUID = 0L;
>>> -
>>> -    private String m_type;
>>> -    private String m_resource;
>>> 
>>>    /**
>>>     *  {...@inheritdoc}
>>> @@ -43,7 +39,6 @@
>>>    public void initTag()
>>>    {
>>>        super.initTag();
>>> -        m_type = m_resource = null;
>>>    }
>>> 
>>>    /**
>>> @@ -52,57 +47,47 @@
>>>    @Override
>>>    public int doWikiStartTag() throws Exception
>>>    {
>>> -        if( m_type != null && m_resource != null )
>>> -        {
>>> -            TemplateManager.addResourceRequest( m_wikiContext, m_type,
>> m_resource );
>>> -        }
>>> -
>>>        return SKIP_BODY;
>>>    }
>>> 
>>>    /**
>>> -     *  Returns the resource that is to be added.
>>> +     *  Always returns the empty string.
>>>     *
>>>     *  @return The resource name.
>>>     */
>>>    public String getResource()
>>>    {
>>> -        return m_resource;
>>> +        return "";
>>>    }
>>> 
>>>    /**
>>> -     *  Sets the resource name to be added.
>>> +     *  This method does nothing.
>>>     *
>>>     *  @param r Resource identifier.
>>>     */
>>>    public void setResource(String r)
>>>    {
>>> -        m_resource = r;
>>> +        // No-op.
>>>    }
>>> 
>>>    /**
>>> -     *  Get the resource type.
>>> +     *  Always returns the empty string.
>>>     *
>>>     *  @return The type of the resource.
>>>     */
>>>    public String getType()
>>>    {
>>> -        return m_type;
>>> +        return "";
>>>    }
>>> 
>>>    /**
>>> -     *  Set the type of the resource to be included.  For example,
>> "script".  Please
>>> -     *  see the TemplateManager class for more information about the
>> different kinds
>>> -     *  of types you can use.
>>> -     *
>>> -     *  @see TemplateManager
>>> +     *  This method does nothing.
>>>     *
>>>     *  @param type The type to be set.
>>>     */
>>> 
>>>    public void setType(String type)
>>>    {
>>> -        m_type = type;
>>>    }
>>> 
>>> }
>>> 
>>> Modified:
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/EditorManager.java
>>> URL:
>> http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/EditorManager.java?rev=917390&r1=917389&r2=917390&view=diff
>>> 
>> ==============================================================================
>>> ---
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/EditorManager.java
>> (original)
>>> +++
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/EditorManager.java Mon
>> Mar  1 05:23:10 2010
>>> @@ -73,9 +73,6 @@
>>>    /** Known name for the plain wikimarkup editor. */
>>>    public static final String       EDITOR_PLAIN    = "plain";
>>> 
>>> -    /** Known name for the preview editor component. */
>>> -    public static final String       EDITOR_PREVIEW  = "preview";
>>> -
>>>    /** Known attribute name for storing the user edited text inside a
>> HTTP parameter. */
>>>    public static final String       REQ_EDITEDTEXT  = "_editedtext";
>>> 
>>> @@ -189,9 +186,6 @@
>>>     */
>>>    public String getEditorName( WikiContext context )
>>>    {
>>> -        if( context.getRequestContext().equals(WikiContext.PREVIEW) )
>>> -            return EDITOR_PREVIEW;
>>> -
>>>        String editor = null;
>>> 
>>>        // User has set an editor in preferences
>>> 
>>> 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=917390&r1=917389&r2=917390&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 Mon
>> Mar  1 05:23:10 2010
>>> @@ -20,8 +20,6 @@
>>> */
>>> package org.apache.wiki.ui;
>>> 
>>> -import java.io.IOException;
>>> -import java.io.InputStream;
>>> import java.util.*;
>>> 
>>> import javax.servlet.ServletContext;
>>> @@ -46,7 +44,7 @@
>>> */
>>> public class TemplateManager extends ModuleManager
>>> {
>>> -    private static final String SKIN_DIRECTORY = "skins";
>>> +    private static final String SKIN_DIR = "skins";
>>> 
>>>    /**
>>>     * Attribute name for the resource resolver map returned by
>>> @@ -55,61 +53,14 @@
>>>     */
>>>    private static final String RESOURCE_RESOLVER = "resourceResolver";
>>> 
>>> -    /**
>>> -     * Requests a JavaScript function to be called during window.onload.
>> Value
>>> -     * is {...@value}.
>>> -     */
>>> -    public static final String RESOURCE_JSFUNCTION = "jsfunction";
>>> -
>>> -    /**
>>> -     * Requests a JavaScript associative array with all localized
>> strings.
>>> -     */
>>> -    public static final String RESOURCE_JSLOCALIZEDSTRINGS =
>> "jslocalizedstrings";
>>> -
>>> -    /**
>>> -     * Requests a stylesheet to be inserted. Value is {...@value}.
>>> -     */
>>> -    public static final String RESOURCE_STYLESHEET = "stylesheet";
>>> -
>>> -    /**
>>> -     * Requests a script to be loaded. Value is {...@value}.
>>> -     */
>>> -    public static final String RESOURCE_SCRIPT = "script";
>>> -
>>> -    /**
>>> -     * Requests inlined CSS. Value is {...@value}.
>>> -     */
>>> -    public static final String RESOURCE_INLINECSS = "inlinecss";
>>> -
>>>    /** The default directory for template resources. Value is {...@value}.
>> */
>>> -    public static final String DIRECTORY = "templates";
>>> +    public static final String TEMPLATE_DIR = "templates";
>>> 
>>>    /** The name of the default template. Value is {...@value}. */
>>>    public static final String DEFAULT_TEMPLATE = "default";
>>> 
>>> -    /** Name of the file that contains the properties. */
>>> -    public static final String PROPERTYFILE = "template.properties";
>>> -
>>> -    /** I18N string to mark the default locale */
>>> -    public static final String I18NDEFAULT_LOCALE =
>> "prefs.user.language.default";
>>> -
>>> -    /**
>>> -     * The name under which the resource includes map is stored in the
>>> -     * WikiContext.
>>> -     */
>>> -    public static final String RESOURCE_INCLUDES =
>> "jspwiki.resourceincludes";
>>> -
>>> -    // private Cache m_propertyCache;
>>> -
>>>    protected static final Logger log = LoggerFactory.getLogger(
>> TemplateManager.class );
>>> 
>>> -    /** Requests a HTTP header. Value is {...@value}. */
>>> -    public static final String RESOURCE_HTTPHEADER = "httpheader";
>>> -
>>> -    private WikiEngine m_engine;
>>> -
>>> -    private static final List<WikiModuleInfo> EMPTY_MODULE_LIST =
>> Collections.emptyList();
>>> -
>>>    /**
>>>     * <p>Resolves requests for resources relative to the
>>>     * <code>templates/<var>template</var></code> path to the actual
>> resources,
>>> @@ -125,8 +76,8 @@
>>>     * for certain keys to return <code>null</code>. The map itself is
>>>     * immutable.
>>>     * </p>
>>> -     * <p>The resource resolver is guaranteed to initialize if the
>> ServletContext
>>> -     * is active, even if the WikiEngine cannot initialize for some
>> reason.
>>> +     * <p>The resource resolver is guaranteed to initialize,
>>> +     * even if the WikiEngine cannot initialize for some reason.
>>>     * If the WikiEngine does not initialize, the default template
>>>     * {...@link #DEFAULT_TEMPLATE} will be used for all resource
>> requests.</p>
>>>     * @param servletContext the servlet context
>>> @@ -156,10 +107,10 @@
>>> 
>>>            // Add all of the resources the template contains
>>>            resolver = new HashMap<String,String>();
>>> -            addResources( context, resolver, "/" + DIRECTORY + "/" +
>> template + "/", null );
>>> +            addResources( context, resolver, "/" + TEMPLATE_DIR + "/" +
>> template + "/", null );
>>> 
>>>            // Add resources the template does not contain, but default
>> does
>>> -            addResources( context, resolver, "/" + DIRECTORY + "/" +
>> DEFAULT_TEMPLATE + "/", null );
>>> +            addResources( context, resolver, "/" + TEMPLATE_DIR + "/" +
>> DEFAULT_TEMPLATE + "/", null );
>>>            resolver = Collections.unmodifiableMap( resolver );
>>>            context.setAttribute( RESOURCE_RESOLVER, resolver );
>>>        }
>>> @@ -167,18 +118,49 @@
>>>    }
>>> 
>>>    /**
>>> -     * Creates a new TemplateManager. There is typically one manager per
>> engine.
>>> -     *
>>> -     * @param engine The owning engine.
>>> -     * @param properties The property list used to initialize this.
>>> +     * 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 context the servlet context
>>> +     * @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
>>>     */
>>> -    public TemplateManager( WikiEngine engine, Properties properties )
>>> +    @SuppressWarnings("unchecked")
>>> +    private static void addResources( ServletContext context,
>> Map<String,String> resolver, String prefix, String dir )
>>>    {
>>> -        super( engine );
>>> -        m_engine = engine;
>>> -        getResourceResolver( engine.getServletContext() );
>>> -    }
>>> +        String searchPath = dir == null ? prefix : prefix + dir;
>>> +        Set<String> resources = context.getResourcePaths( searchPath );
>>> +        if ( resources != null )
>>> +        {
>>> +            for ( String resource : resources )
>>> +            {
>>> +                String shortName = resource.substring( prefix.length()
>> );
>>> +
>>> +                // Directory: process these entries too
>>> +                if ( shortName.endsWith( "/" ) )
>>> +                {
>>> +                    addResources( context, 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 );
>>> +                    }
>>> +                }
>>> +            }
>>> +        }
>>> +    }
>>> +
>>>    /**
>>>     * Tries to locate a given resource from the template directory,
>> relative to
>>>     * the root of the JSPWiki webapp context (for example, relative to
>>> @@ -188,63 +170,62 @@
>>>     * default template path either, <code>null</code> is returned.
>>>     *
>>>     *
>>> -     * @param sContext the servlet context
>>> +     * @param servletContext the servlet context
>>>     * @param path the path to the resource; for example,
>>> -     * <code>/templates/custom/FindContent.jsp</code>
>>> +     * {...@code /templates/custom/FindContent.jsp} or {...@code 
>>> jspwiki.css}.
>>> +     * If the path starts with a slash (/), the resource is looked up
>>> +     * relative to the webapp root
>>>     * @return The name of the resource which was found; for example,
>>>     * <code>/templates/custom/FindContent.jsp</code> (if it exists in
>> the
>>>     * <code>custom</code> template directory), or
>>>     * <code>/templates/default/FindContent.jsp</code> (if not)
>>>     */
>>> -    private static String findResource( ServletContext sContext, String
>> path )
>>> +    private static String findResource( ServletContext servletContext,
>> String path )
>>>    {
>>> -        InputStream is = sContext.getResourceAsStream( path );
>>> -
>>> -        if( is == null )
>>> +        if( path.charAt( 0 ) == '/' )
>>>        {
>>> -            String defaultPath = makeFullJSPName( DEFAULT_TEMPLATE,
>> removeTemplatePart( path ) );
>>> -            is = sContext.getResourceAsStream( defaultPath );
>>> -
>>> -            if( is != null )
>>> -                path = defaultPath;
>>> -            else
>>> -                path = null;
>>> -        }
>>> -
>>> -        if( is != null )
>>> -        {
>>> -            try
>>> -            {
>>> -                is.close();
>>> -            }
>>> -            catch( IOException e )
>>> -            {
>>> -            }
>>> +            // This is already a full path
>>> +            return findResource( servletContext, path );
>>>        }
>>> -
>>> -        return path;
>>> +        return getResourceResolver( servletContext ).get( path );
>>>    }
>>> 
>>>    /**
>>> -     * Attempts to find a resource from the given template, and if it's
>> not
>>> -     * found attempts to locate it from the default template.
>>> -     *
>>> -     * @param sContext
>>> -     * @param template
>>> -     * @param name
>>> -     * @return
>>> +     * Returns a property, as defined in the template. The evaluation is
>> lazy,
>>> +     * i.e. the properties are not loaded until the template is actually
>> used
>>> +     * for the first time.
>>> +     */
>>> +    /*
>>> +     * public String getTemplateProperty( WikiContext context, String
>> key ) {
>>> +     * String template = context.getTemplate(); try { Properties props =
>>> +     * (Properties)m_propertyCache.getFromCache( template, -1 ); if(
>> props ==
>>> +     * null ) { try { props = getTemplateProperties( template );
>>> +     * m_propertyCache.putInCache( template, props ); } catch(
>> IOException e ) {
>>> +     * log.warn("IO Exception while reading template properties",e);
>> return
>>> +     * null; } } return props.getProperty( key ); } catch(
>> NeedsRefreshException
>>> +     * ex ) { // FIXME return null; } }
>>>     */
>>> -    private static String findResource( ServletContext sContext, String
>> template, String name )
>>> +    /**
>>> +     * Returns an absolute path to a given template.
>>> +     */
>>> +    private static final String getPath( String template )
>>>    {
>>> -        if( name.charAt( 0 ) == '/' )
>>> -        {
>>> -            // This is already a full path
>>> -            return findResource( sContext, name );
>>> -        }
>>> +        return "/" + TEMPLATE_DIR + "/" + template + "/";
>>> +    }
>>> 
>>> -        String fullname = makeFullJSPName( template, name );
>>> +    private WikiEngine m_engine;
>>> 
>>> -        return findResource( sContext, fullname );
>>> +    /**
>>> +     * Creates a new TemplateManager. There is typically one manager per
>> engine.
>>> +     *
>>> +     * @param engine The owning engine.
>>> +     * @param properties The property list used to initialize this.
>>> +     */
>>> +    public TemplateManager( WikiEngine engine, Properties properties )
>>> +    {
>>> +        super( engine );
>>> +        m_engine = engine;
>>> +        getResourceResolver( engine.getServletContext() );
>>>    }
>>> 
>>>    /**
>>> @@ -252,53 +233,17 @@
>>>     * current context or by the absolute name.
>>>     *
>>>     * @param pageContext the JSP PageContext
>>> -     * @param name The name of the JSP page to look for (e.g "Wiki.jsp")
>>> +     * @param name The name of the JSP page to look for (e.g {...@code
>> Wiki.jsp})
>>>     * @return The context path to the resource
>>> +     * @deprecated use {...@link #getResourceResolver(ServletContext)}
>> instead
>>>     */
>>>    public String findJSP( PageContext pageContext, String name )
>>>    {
>>>        ServletContext sContext = pageContext.getServletContext();
>>> -
>>>        return findResource( sContext, name );
>>>    }
>>> 
>>>    /**
>>> -     * Removes the template part of a name.
>>> -     */
>>> -    private static final String removeTemplatePart( String name )
>>> -    {
>>> -        int idx = 0;
>>> -        if( name.startsWith( "/" ) )
>>> -            idx = 1;
>>> -
>>> -        idx = name.indexOf( '/', idx );
>>> -        if( idx != -1 )
>>> -        {
>>> -            idx = name.indexOf( '/', idx + 1 ); // Find second "/"
>>> -
>>> -            if( idx != -1 )
>>> -            {
>>> -                name = name.substring( idx + 1 );
>>> -            }
>>> -        }
>>> -
>>> -        log.info( "Final name = " + name );
>>> -        return name;
>>> -    }
>>> -
>>> -    /**
>>> -     * Returns the full name (/templates/foo/bar) for name=bar,
>> template=foo.
>>> -     *
>>> -     * @param template The name of the template.
>>> -     * @param name The name of the resource.
>>> -     * @return The full name for a template.
>>> -     */
>>> -    private static final String makeFullJSPName( String template, String
>> name )
>>> -    {
>>> -        return "/" + DIRECTORY + "/" + template + "/" + name;
>>> -    }
>>> -
>>> -    /**
>>>     * Attempts to locate a resource under the given template. If that
>> template
>>>     * does not exist, or the page does not exist under that template,
>> will
>>>     * attempt to locate a similarly named file under the default
>> template.
>>> @@ -310,6 +255,7 @@
>>>     * @param template From which template we should seek initially?
>>>     * @param name Which resource are we looking for (e.g.
>> "DefaultLayout.jsp")
>>>     * @return path to the JSP page; null, if it was not found.
>>> +     * @deprecated use {...@link #getResourceResolver(ServletContext)}
>> instead
>>>     */
>>>    public String findJSP( PageContext pageContext, String template,
>> String name )
>>>    {
>>> @@ -319,8 +265,7 @@
>>>                       + ((HttpServletRequest)
>> pageContext.getRequest()).getRequestURI() + "'" );
>>>            throw new InternalWikiException( "Illegal arguments to
>> findJSP(); please check logs." );
>>>        }
>>> -
>>> -        return findResource( pageContext.getServletContext(), template,
>> name );
>>> +        return findResource( pageContext.getServletContext(), name );
>>>    }
>>> 
>>>    /**
>>> @@ -337,45 +282,23 @@
>>>     * @param template the name of the template to use
>>>     * @param name the name of the resource to fine
>>>     * @return the path to the resource
>>> +     * @deprecated use {...@link #getResourceResolver(ServletContext)}
>> instead
>>>     */
>>>    public String findResource( WikiContext ctx, String template, String
>> name )
>>>    {
>>>        if( m_engine.getServletContext() != null )
>>>        {
>>> -            return findResource( m_engine.getServletContext(), template,
>> name );
>>> +            return findResource( m_engine.getServletContext(), name );
>>>        }
>>> 
>>>        return getPath( template ) + "/" + name;
>>>    }
>>> 
>>>    /**
>>> -     * Returns a property, as defined in the template. The evaluation is
>> lazy,
>>> -     * i.e. the properties are not loaded until the template is actually
>> used
>>> -     * for the first time.
>>> -     */
>>> -    /*
>>> -     * public String getTemplateProperty( WikiContext context, String
>> key ) {
>>> -     * String template = context.getTemplate(); try { Properties props =
>>> -     * (Properties)m_propertyCache.getFromCache( template, -1 ); if(
>> props ==
>>> -     * null ) { try { props = getTemplateProperties( template );
>>> -     * m_propertyCache.putInCache( template, props ); } catch(
>> IOException e ) {
>>> -     * log.warn("IO Exception while reading template properties",e);
>> return
>>> -     * null; } } return props.getProperty( key ); } catch(
>> NeedsRefreshException
>>> -     * ex ) { // FIXME return null; } }
>>> -     */
>>> -    /**
>>> -     * Returns an absolute path to a given template.
>>> -     */
>>> -    private static final String getPath( String template )
>>> -    {
>>> -        return "/" + DIRECTORY + "/" + template + "/";
>>> -    }
>>> -
>>> -    /**
>>> -     * Lists the skins available under this template. Returns an empty
>> Set, if
>>> -     * there are no extra skins available. Note that this method does
>> not check
>>> -     * whether there is anything actually in the directories, it just
>> lists
>>> -     * them. This may change in the future.
>>> +     * Lists the skins available under the current template.
>>> +     * Returns an empty Set, if there are no extra skins available.
>>> +     * Note that this method does not check whether there is anything
>>> +     * actually in the directories, it just lists them.
>>>     *
>>>     * @param servletContext the servlet context
>>>     * @param template The template to search
>>> @@ -383,14 +306,14 @@
>>>     * @since 2.3.26
>>>     */
>>>    @SuppressWarnings( "unchecked" )
>>> -    public Set<String> listSkins( ServletContext servletContext, String
>> template )
>>> +    public Set<String> listSkins()
>>>    {
>>> -        String place = makeFullJSPName( template, SKIN_DIRECTORY );
>>> -        Set<String> skinSet = servletContext.getResourcePaths( place );
>>> +        String skinPath = TEMPLATE_DIR + "/" + SKIN_DIR;
>>> +        Set<String> skinSet =
>> m_engine.getServletContext().getResourcePaths( skinPath );
>>>        TreeSet<String> resultSet = new TreeSet<String>();
>>> 
>>>        if( log.isDebugEnabled() )
>>> -            log.debug( "Listings skins from " + place );
>>> +            log.debug( "Listings skins from " + skinPath );
>>> 
>>>        if( skinSet != null )
>>>        {
>>> @@ -414,215 +337,7 @@
>>> 
>>>        return resultSet;
>>>    }
>>> -
>>> -    /**
>>> -     * Always returns a valid property map.
>>> -     */
>>> -    /*
>>> -     * private Properties getTemplateProperties( String templateName )
>> throws
>>> -     * IOException { Properties p = new Properties(); ServletContext
>> context =
>>> -     * m_engine.getServletContext(); InputStream propertyStream =
>>> -     * context.getResourceAsStream(getPath(templateName)+PROPERTYFILE);
>> if(
>>> -     * propertyStream != null ) { p.load( propertyStream );
>>> -     * propertyStream.close(); } else { log.debug("Template
>> '"+templateName+"'
>>> -     * does not have a propertyfile '"+PROPERTYFILE+"'."); } return p; }
>>> -     */
>>> -    /**
>>> -     * Returns the include resources marker for a given type. This is in
>> a HTML
>>> -     * or Javascript comment format.
>>> -     *
>>> -     * @param context the wiki context
>>> -     * @param type the marker
>>> -     * @return the generated marker comment
>>> -     * @deprecated use the Stripes <code>layout-component</code> tags
>> instead
>>> -     */
>>> -    public static String getMarker( WikiContext context, String type )
>>> -    {
>>> -        if( type.equals( RESOURCE_JSLOCALIZEDSTRINGS ) )
>>> -        {
>>> -            return getJSLocalizedStrings( context );
>>> -        }
>>> -        else if( type.equals( RESOURCE_JSFUNCTION ) )
>>> -        {
>>> -            return "/* INCLUDERESOURCES (" + type + ") */";
>>> -        }
>>> -        return "<!-- INCLUDERESOURCES (" + type + ") -->";
>>> -    }
>>> -
>>> -    /**
>>> -     * Extract all i18n strings in the javascript domain. (javascript.*)
>> Returns
>>> -     * a javascript snippet which defines the LoacalizedStings array.
>>> -     *
>>> -     * @param wiki context
>>> -     * @return Javascript snippet which defines the LocaliedStrings
>> array
>>> -     * @since 2.5.108
>>> -     * @deprecated use the Stripes <code>layout-component</code> tags
>> instead
>>> -     */
>>> -    private static String getJSLocalizedStrings( WikiContext context )
>>> -    {
>>> -        StringBuilder sb = new StringBuilder();
>>> -
>>> -        sb.append( "var LocalizedStrings = {\n" );
>>> -
>>> -        ResourceBundle rb = context.getBundle( "templates.default" );
>>> -
>>> -        boolean first = true;
>>> -
>>> -        for( Enumeration<String> en = rb.getKeys();
>> en.hasMoreElements(); )
>>> -        {
>>> -            String key = en.nextElement();
>>> -
>>> -            if( key.startsWith( "javascript" ) )
>>> -            {
>>> -                if( first )
>>> -                {
>>> -                    first = false;
>>> -                }
>>> -                else
>>> -                {
>>> -                    sb.append( ",\n" );
>>> -                }
>>> -                sb.append( "\"" + key + "\":\"" + rb.getString( key ) +
>> "\"" );
>>> -            }
>>> -        }
>>> -        sb.append( "\n};\n" );
>>> -
>>> -        return(sb.toString());
>>> -    }
>>> -
>>> -    /**
>>> -     * Adds a resource request to the current request context. The
>> content will
>>> -     * be added at the resource-type marker (see IncludeResourcesTag) in
>>> -     * WikiJSPFilter.
>>> -     * <p>
>>> -     * The resources can be of different types. For RESOURCE_SCRIPT and
>>> -     * RESOURCE_STYLESHEET this is an URI path to the resource (a script
>> file or
>>> -     * an external stylesheet) that needs to be included. For
>> RESOURCE_INLINECSS
>>> -     * the resource should be something that can be added between
>>> -     * &lt;style>&lt;/style> in the header file (commonheader.jsp). For
>>> -     * RESOURCE_JSFUNCTION it is the name of the Javascript function
>> that should
>>> -     * be run at page load.
>>> -     * <p>
>>> -     * The IncludeResourceTag inserts code in the template files, which
>> is then
>>> -     * filled by the WikiFilter after the request has been rendered but
>> not yet
>>> -     * sent to the recipient.
>>> -     * <p>
>>> -     * Note that ALL resource requests get rendered, so this method does
>> not
>>> -     * check if the request already exists in the resources. Therefore,
>> if you
>>> -     * have a plugin which makes a new resource request every time,
>> you'll end
>>> -     * up with multiple resource requests rendered. It's thus a good
>> idea to
>>> -     * make this request only once during the page life cycle.
>>> -     *
>>> -     * @param ctx The current wiki context
>>> -     * @param type What kind of a request should be added?
>>> -     * @param resource The resource to add.
>>> -     * @deprecated use the Stripes <code>layout-component</code> tags
>> instead
>>> -     */
>>> -    @SuppressWarnings( "unchecked" )
>>> -    public static void addResourceRequest( WikiContext ctx, String type,
>> String resource )
>>> -    {
>>> -        HashMap<String, Vector<String>> resourcemap = (HashMap<String,
>> Vector<String>>) ctx.getVariable( RESOURCE_INCLUDES );
>>> -
>>> -        if( resourcemap == null )
>>> -        {
>>> -            resourcemap = new HashMap<String, Vector<String>>();
>>> -        }
>>> -
>>> -        Vector<String> resources = resourcemap.get( type );
>>> -
>>> -        if( resources == null )
>>> -        {
>>> -            resources = new Vector<String>();
>>> -        }
>>> -
>>> -        String resourceString = null;
>>> -
>>> -        if( type.equals( RESOURCE_SCRIPT ) )
>>> -        {
>>> -            resourceString = "<script type='text/javascript' src='" +
>> resource + "'></script>";
>>> -        }
>>> -        else if( type.equals( RESOURCE_STYLESHEET ) )
>>> -        {
>>> -            resourceString = "<link rel='stylesheet' type='text/css'
>> href='" + resource + "' />";
>>> -        }
>>> -        else if( type.equals( RESOURCE_INLINECSS ) )
>>> -        {
>>> -            resourceString = "<style type='text/css'>\n" + resource +
>> "\n</style>\n";
>>> -        }
>>> -        else if( type.equals( RESOURCE_JSFUNCTION ) )
>>> -        {
>>> -            resourceString = resource;
>>> -        }
>>> -        else if( type.equals( RESOURCE_HTTPHEADER ) )
>>> -        {
>>> -            resourceString = resource;
>>> -        }
>>> -
>>> -        if( resourceString != null )
>>> -        {
>>> -            resources.add( resourceString );
>>> -        }
>>> -
>>> -        log.debug( "Request to add a resource: " + resourceString );
>>> -
>>> -        resourcemap.put( type, resources );
>>> -        ctx.setVariable( RESOURCE_INCLUDES, resourcemap );
>>> -    }
>>> -
>>> -    /**
>>> -     * Returns resource requests for a particular type. If there are no
>>> -     * resources, returns an empty array.
>>> -     *
>>> -     * @param ctx WikiContext
>>> -     * @param type The resource request type
>>> -     * @return a String array for the resource requests
>>> -     * @deprecated use the Stripes <code>layout-component</code> tags
>> instead
>>> -     */
>>> -    @SuppressWarnings( "unchecked" )
>>> -    public static String[] getResourceRequests( WikiContext ctx, String
>> type )
>>> -    {
>>> -        HashMap<String, Vector<String>> hm = (HashMap<String,
>> Vector<String>>) ctx.getVariable( RESOURCE_INCLUDES );
>>> -
>>> -        if( hm == null )
>>> -            return new String[0];
>>> -
>>> -        Vector<String> resources = hm.get( type );
>>> -
>>> -        if( resources == null )
>>> -            return new String[0];
>>> -
>>> -        String[] res = new String[resources.size()];
>>> -
>>> -        return resources.toArray( res );
>>> -    }
>>> -
>>> -    /**
>>> -     * Returns all those types that have been requested so far.
>>> -     *
>>> -     * @param ctx the wiki context
>>> -     * @return the array of types requested
>>> -     * @deprecated use the Stripes <code>layout-component</code> tags
>> instead
>>> -     */
>>> -    @SuppressWarnings( "unchecked" )
>>> -    public static String[] getResourceTypes( WikiContext ctx )
>>> -    {
>>> -        String[] res = new String[0];
>>> -
>>> -        if( ctx != null )
>>> -        {
>>> -            HashMap<String, String> hm = (HashMap<String, String>)
>> ctx.getVariable( RESOURCE_INCLUDES );
>>> -
>>> -            if( hm != null )
>>> -            {
>>> -                Set<String> keys = hm.keySet();
>>> -
>>> -                res = keys.toArray( res );
>>> -            }
>>> -        }
>>> -
>>> -        return res;
>>> -    }
>>> -
>>> +
>>>    /**
>>>     * Returns an empty collection, since at the moment the
>> TemplateManager does
>>>     * not manage any modules.
>>> @@ -631,50 +346,6 @@
>>>     */
>>>    public Collection<WikiModuleInfo> modules()
>>>    {
>>> -        return EMPTY_MODULE_LIST;
>>> -    }
>>> -
>>> -    /**
>>> -     * 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 context the servlet context
>>> -     * @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 static void addResources( ServletContext context,
>> Map<String,String> resolver, String prefix, String dir )
>>> -    {
>>> -        String searchPath = dir == null ? prefix : prefix + dir;
>>> -        Set<String> resources = context.getResourcePaths( searchPath );
>>> -        if ( resources != null )
>>> -        {
>>> -            for ( String resource : resources )
>>> -            {
>>> -                String shortName = resource.substring( prefix.length()
>> );
>>> -
>>> -                // Directory: process these entries too
>>> -                if ( shortName.endsWith( "/" ) )
>>> -                {
>>> -                    addResources( context, 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 );
>>> -                    }
>>> -                }
>>> -            }
>>> -        }
>>> +        return Collections.emptyList();
>>>    }
>>> }
>>> 
>>> Modified:
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/stripes/TemplateResolution.java
>>> URL:
>> http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/stripes/TemplateResolution.java?rev=917390&r1=917389&r2=917390&view=diff
>>> 
>> ==============================================================================
>>> ---
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/stripes/TemplateResolution.java
>> (original)
>>> +++
>> incubator/jspwiki/trunk/src/java/org/apache/wiki/ui/stripes/TemplateResolution.java
>> Mon Mar  1 05:23:10 2010
>>> @@ -22,6 +22,8 @@
>>> {
>>>    private static final Logger LOG = LoggerFactory.getLogger(
>> TemplateResolution.class );
>>> 
>>> +    private static final String DEFAULT_PATH_PREFIX = "/" +
>> TemplateManager.TEMPLATE_DIR + "/" + TemplateManager.DEFAULT_TEMPLATE + "/";
>>> +
>>>    /**
>>>     * Constructs a new TemplateResolution
>>>     *
>>> @@ -41,7 +43,7 @@
>>>        String path = TemplateManager.getResourceResolver( servletContext
>> ).get( getPath() );
>>>        if( path == null )
>>>        {
>>> -            path = "/templates/" + TemplateManager.DEFAULT_TEMPLATE +
>> "/" + getPath();
>>> +            path = DEFAULT_PATH_PREFIX + getPath();
>>>        }
>>>        setPath( path );
>>> 
>>> 
>> 
>> 

Reply via email to