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 );