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