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 > - * <style></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 ); > >
