You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by nb...@apache.org on 2008/12/31 02:28:24 UTC
svn commit: r730291 - in /velocity/tools/trunk: examples/showcase/WEB-INF/
src/main/java/org/apache/velocity/tools/
src/main/java/org/apache/velocity/tools/view/
Author: nbubna
Date: Tue Dec 30 17:28:24 2008
New Revision: 730291
URL: http://svn.apache.org/viewvc?rev=730291&view=rev
Log:
don't default tools to read-only, since we load them in typical configuration now. read-only tools now require configuration
Modified:
velocity/tools/trunk/examples/showcase/WEB-INF/web.xml
velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ToolContext.java
velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ToolManager.java
velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityView.java
velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/ViewToolContext.java
velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java
Modified: velocity/tools/trunk/examples/showcase/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/examples/showcase/WEB-INF/web.xml?rev=730291&r1=730290&r2=730291&view=diff
==============================================================================
--- velocity/tools/trunk/examples/showcase/WEB-INF/web.xml (original)
+++ velocity/tools/trunk/examples/showcase/WEB-INF/web.xml Tue Dec 30 17:28:24 2008
@@ -32,6 +32,10 @@
<param-name>org.apache.velocity.tools.cleanConfiguration</param-name>
<param-value>true</param-value>
</init-param>
+ <init-param>
+ <param-name>org.apache.velocity.tools.userCanOverwriteTools</param-name>
+ <param-value>false</param-value>
+ </init-param>
</servlet>
<servlet-mapping>
<servlet-name>velocity</servlet-name>
Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ToolContext.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ToolContext.java?rev=730291&r1=730290&r2=730291&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ToolContext.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ToolContext.java Tue Dec 30 17:28:24 2008
@@ -52,6 +52,7 @@
private Map<String,Object> toolProps = new HashMap<String,Object>(12);
// this is only for values added during use of this context
private Map<String,Object> localContext = new HashMap<String,Object>();
+ private boolean userOverwrite = true;
public ToolContext()
{
@@ -83,6 +84,26 @@
}
}
+ /**
+ * Set whether or not tool references can be overwritten within a template.
+ * The default value is {@code true}. Set this to false if you want to
+ * ensure that your tool references are never replaced within the course
+ * of a template.
+ */
+ public void setUserCanOverwriteTools(boolean overwrite)
+ {
+ this.userOverwrite = overwrite;
+ }
+
+ /**
+ * Default is {@code true}.
+ * @see #setUserCanOverwriteTools
+ */
+ public boolean getUserCanOverwriteTools()
+ {
+ return this.userOverwrite;
+ }
+
public void addToolbox(Toolbox toolbox)
{
toolboxes.add(toolbox);
@@ -178,10 +199,11 @@
public Object get(String key)
{
- Object value = findTool(key);
+ // for user overwriting, it's all a matter of which we check first
+ Object value = userOverwrite ? internalGet(key) : findTool(key);
if (value == null)
{
- return internalGet(key);
+ value = userOverwrite ? findTool(key) : internalGet(key);
}
return value;
}
Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ToolManager.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ToolManager.java?rev=730291&r1=730290&r2=730291&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ToolManager.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ToolManager.java Tue Dec 30 17:28:24 2008
@@ -41,6 +41,7 @@
protected VelocityEngine velocity;
protected ToolboxFactory factory;
private Toolbox application;
+ private boolean userOverwrite = true;
/**
* Constructs an instance already configured to use the
@@ -152,6 +153,16 @@
return this.velocity;
}
+ public void setUserCanOverwriteTools(boolean overwrite)
+ {
+ this.userOverwrite = overwrite;
+ }
+
+ public boolean getUserCanOverwriteTools()
+ {
+ return this.userOverwrite;
+ }
+
public Log getLog()
{
if (velocity == null)
@@ -184,6 +195,7 @@
protected void prepareContext(ToolContext context)
{
+ context.setUserCanOverwriteTools(this.userOverwrite);
if (this.velocity != null)
{
context.putVelocityEngine(this.velocity);
Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityView.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityView.java?rev=730291&r1=730290&r2=730291&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityView.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityView.java Tue Dec 30 17:28:24 2008
@@ -169,6 +169,14 @@
"org.apache.velocity.tools.cleanConfiguration";
/**
+ * Controls whether or not templates can overwrite tool and servlet API
+ * variables in the local context. The default is true; set to {@code false}
+ * to prevent overwriting of any tool variables.
+ */
+ public static final String USER_OVERWRITE_KEY =
+ "org.apache.velocity.tools.userCanOverwriteTools";
+
+ /**
* Controls support for deprecated tools and configuration.
* The default is {@code true}; set to {@code false} to turn off
* support for deprecated tools and configuration.
@@ -285,12 +293,18 @@
this.velocity = new VelocityEngine();
}
+ // default is true for these, so just watch for false
String depMode = config.findInitParameter(DEPRECATION_SUPPORT_MODE_KEY);
if (depMode != null && depMode.equalsIgnoreCase("false"))
{
setDeprecationSupportMode(false);
}
-
+ String allowOverwrite = config.findInitParameter(USER_OVERWRITE_KEY);
+ if (allowOverwrite != null && allowOverwrite.equalsIgnoreCase("false"))
+ {
+ setUserCanOverwriteTools(false);
+ }
+
// configure and initialize the VelocityEngine
init(config, velocity);
Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/ViewToolContext.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/ViewToolContext.java?rev=730291&r1=730290&r2=730291&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/ViewToolContext.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/ViewToolContext.java Tue Dec 30 17:28:24 2008
@@ -155,34 +155,54 @@
* <p>Looks up and returns the object with the specified key.</p>
* <p>See the class documentation for more details.</p>
*
+ * @see #setUserCanOverwriteTools
+ * @see #getUserVar
+ * @see #getToolVar
* @param key the key of the object requested
* @return the requested object or null if not found
*/
+ @Override
public Object get(String key)
{
- /* search for a tool first, keeping them read-only */
- Object o = findTool(key);
- if (o != null)
+ boolean overwrite = getUserCanOverwriteTools();
+ Object o = overwrite ? getUserVar(key) : getToolVar(key);
+ if (o == null)
{
- return o;
+ o = overwrite ? getToolVar(key) : getUserVar(key);
}
+ return o;
+ }
- /* put servlet API access here to keep it read-only */
- o = getServletApi(key);
+ /**
+ * Finds "user" set values, either in the local context
+ * or in the scoped attributes if none is in the local context.
+ * @see #internalGet
+ * @see #getAttribute
+ */
+ protected Object getUserVar(String key)
+ {
+ Object o = internalGet(key);
if (o != null)
{
return o;
}
+ return getAttribute(key);
+ }
- /* try the local context */
- o = internalGet(key);
+ /**
+ * Finds the automatically provided values, either configured
+ * tools or servlet API objects (request, response, etc).
+ * @see #findTool
+ * @see #getServletApi
+ */
+ protected Object getToolVar(String key)
+ {
+ Object o = findTool(key);
if (o != null)
{
return o;
}
-
- /* if not found, wander down the scopes... */
- return getAttribute(key);
+ return getServletApi(key);
}
/**
Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java?rev=730291&r1=730290&r2=730291&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java Tue Dec 30 17:28:24 2008
@@ -260,11 +260,13 @@
// and others can find them
publishToolboxes(request);
+ // these would otherwise be done in super.prepareContext
VelocityEngine engine = getVelocityEngine();
if (engine != null)
{
context.putVelocityEngine(engine);
}
+ context.setUserCanOverwriteTools(getUserCanOverwriteTools());
}
else
{