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
         {