Author: cbrisson
Date: Wed Apr 24 14:08:32 2019
New Revision: 1858051

URL: http://svn.apache.org/viewvc?rev=1858051&view=rev
Log:
[tools] Merge minor modifications from obsolete model branch

Added:
    
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/BaseWebappMockTest.java
      - copied unchanged from r1858050, 
velocity/tools/branches/model/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/BaseWebappMockTest.java
Modified:
    velocity/tools/trunk/   (props changed)
    velocity/tools/trunk/pom.xml
    velocity/tools/trunk/velocity-tools-generic/   (props changed)
    
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/ClassUtils.java
    
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/ToolManager.java
    
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/XmlUtils.java
    
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/config/ConfigurationException.java
    
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/config/ConfigurationUtils.java
    
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ValueParser.java
    
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/XmlTool.java
    velocity/tools/trunk/velocity-tools-view/   (props changed)
    velocity/tools/trunk/velocity-tools-view/pom.xml
    
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ServletUtils.java
    
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityView.java
    
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java
    
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewContextTool.java
    
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java
    
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/VelocityViewTest.java

Propchange: velocity/tools/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Apr 24 14:08:32 2019
@@ -1,3 +1,4 @@
 /velocity/tools/branches/VELTOOLS-177:1841696-1842346
 /velocity/tools/branches/VELTOOLS-178:1842409-1842427
 /velocity/tools/branches/VELTOOLS-179:1842406-1842428
+/velocity/tools/branches/model:1857728-1858050

Modified: velocity/tools/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/pom.xml?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- velocity/tools/trunk/pom.xml (original)
+++ velocity/tools/trunk/pom.xml Wed Apr 24 14:08:32 2019
@@ -194,6 +194,10 @@
               <name>org.slf4j.simpleLogger.logFile</name>
               <value>${project.build.directory}/velocity-tools.log</value>
             </property>
+            <property>
+              <name>test.resources.dir</name>
+              <value>${project.build.testOutputDirectory}</value>
+            </property>
           </systemProperties>
         </configuration>
       </plugin>

Propchange: velocity/tools/trunk/velocity-tools-generic/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Apr 24 14:08:32 2019
@@ -1,4 +1,5 @@
 /velocity/tools/branches/VELTOOLS-177/velocity-tools-generic:1841696-1842346
 /velocity/tools/branches/VELTOOLS-178/velocity-tools-generic:1842409-1842427
 /velocity/tools/branches/VELTOOLS-179/velocity-tools-generic:1842406-1842428
+/velocity/tools/branches/model/velocity-tools-generic:1857728-1858050
 /velocity/tools/trunk:990897-995744

Modified: 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/ClassUtils.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/ClassUtils.java?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/ClassUtils.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/ClassUtils.java
 Wed Apr 24 14:08:32 2019
@@ -38,6 +38,8 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Predicate;
+
 import org.apache.velocity.util.ArrayIterator;
 import org.apache.velocity.util.EnumerationIterator;
 
@@ -336,7 +338,7 @@ public class ClassUtils
      * @return method object
      * @throws SecurityException if not granted
      */
-    public static Method findMethod(Class clazz, String name, Class[] params)
+    public static Method findMethod(Class clazz, String name, Class... params)
         throws SecurityException
     {
         try
@@ -359,7 +361,7 @@ public class ClassUtils
      * @return
      * @throws SecurityException if not allowed
      */
-    public static Method findDeclaredMethod(Class clazz, String name, Class[] 
params)
+    public static Method findDeclaredMethod(Class clazz, String name, Class... 
params)
         throws SecurityException
     {
         try
@@ -510,4 +512,70 @@ public class ClassUtils
         return ret;
     }
 
+    public static Method findGetter(String getterName, Class clazz) throws 
NoSuchMethodException
+    {
+        return findGetter(getterName, clazz, true);
+    }
+
+    public static Method findGetter(String getterName, Class clazz, boolean 
mandatory) throws NoSuchMethodException
+    {
+        do
+        {
+            for (Method method : clazz.getDeclaredMethods())
+            {
+                // prefix matching: we allow a method name like setWriteAccess 
for a parameter like write="..."
+                if (method.getParameterCount() == 0 && 
method.getName().startsWith(getterName))
+                {
+                    return method;
+                }
+            }
+            clazz = clazz.getSuperclass();
+        }
+        while (clazz != Object.class);
+        if (mandatory)
+        {
+            throw new NoSuchMethodException(clazz.getName() + "::" + 
getterName);
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    public static Method findSetter(String setterName, Class clazz) throws 
NoSuchMethodException
+    {
+        return findSetter(setterName, clazz, x -> true);
+    }
+
+    public static Method findSetter(String setterName, Class clazz, 
Predicate<Class> argumentClassFilter) throws NoSuchMethodException
+    {
+        return findSetter(setterName, clazz, argumentClassFilter, true);
+    }
+
+    public static Method findSetter(String setterName, Class clazz, 
Predicate<Class> argumentClassFilter, boolean mandatory) throws 
NoSuchMethodException
+    {
+        do
+        {
+            for (Method method : clazz.getDeclaredMethods())
+            {
+                // prefix matching: we allow a method name like setWriteAccess 
for a parameter like write="..."
+                if (method.getParameterCount() == 1 && 
method.getName().startsWith(setterName) && 
argumentClassFilter.test(method.getParameterTypes()[0]))
+                {
+                    return method;
+                }
+            }
+            clazz = clazz.getSuperclass();
+        }
+        while (clazz != Object.class);
+        if (mandatory)
+        {
+            throw new NoSuchMethodException(clazz.getName() + "::" + 
setterName);
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+
 }

Modified: 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/ToolManager.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/ToolManager.java?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/ToolManager.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/ToolManager.java
 Wed Apr 24 14:08:32 2019
@@ -321,7 +321,7 @@ public class ToolManager
      * @return <code>true</code> if this tool manager has request scoped tools,
      *         <code>false</code> otherwise
      */
-    protected boolean hasRequestTools()
+    public boolean hasRequestTools()
     {
         return hasTools(Scope.REQUEST);
     }
@@ -330,7 +330,7 @@ public class ToolManager
      * Get the toolbox for request scoped tools
      * @return toolbox of request scoped tools
      */
-    protected Toolbox getRequestToolbox()
+    public Toolbox getRequestToolbox()
     {
         return createToolbox(Scope.REQUEST);
     }
@@ -340,7 +340,7 @@ public class ToolManager
      * @return <code>true</code> if this tool manager has application scoped 
tools,
      *         <code>false</code> otherwise
      */
-    protected boolean hasApplicationTools()
+    public boolean hasApplicationTools()
     {
         return hasTools(Scope.APPLICATION);
     }
@@ -349,7 +349,7 @@ public class ToolManager
      * Get the toolbox for application scoped tools
      * @return toolbox of application scoped tools
      */
-    protected Toolbox getApplicationToolbox()
+    public Toolbox getApplicationToolbox()
     {
         if (this.application == null && hasApplicationTools())
         {

Modified: 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/XmlUtils.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/XmlUtils.java?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/XmlUtils.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/XmlUtils.java
 Wed Apr 24 14:08:32 2019
@@ -35,6 +35,8 @@ import java.io.Reader;
 import java.io.StringReader;
 import java.io.StringWriter;
 import java.lang.ref.SoftReference;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Stack;
 import java.util.concurrent.LinkedBlockingDeque;
 
@@ -89,26 +91,11 @@ public final class XmlUtils
 
     private static boolean canReuseBuilders = false;
 
-    private static final DocumentBuilderFactory builderFactory = 
DocumentBuilderFactory.newInstance();
+    private static final DocumentBuilderFactory builderFactory = 
createDocumentBuilderFactory();
 
-    private static final ThreadLocal<DocumentBuilder> reusableBuilder
-        = new ThreadLocal<DocumentBuilder>() {
-        @Override
-        protected DocumentBuilder initialValue() {
-            try
+    public static final DocumentBuilderFactory createDocumentBuilderFactory()
             {
-                LOGGER.trace("Created a new document builder");
-                return builderFactory.newDocumentBuilder();
-            }
-            catch (ParserConfigurationException e)
-            {
-                throw new RuntimeException(e);
-            }
-        }
-    };
-
-    static
-    {
+        DocumentBuilderFactory builderFactory = 
DocumentBuilderFactory.newInstance();
         // Namespace support is required for <os:> elements
         builderFactory.setNamespaceAware(true);
 
@@ -157,6 +144,27 @@ public final class XmlUtils
             LOGGER.info("Error parsing secure XML: ", e);
         }
 
+        return builderFactory;
+    }
+
+    private static final ThreadLocal<DocumentBuilder> reusableBuilder
+        = new ThreadLocal<DocumentBuilder>() {
+        @Override
+        protected DocumentBuilder initialValue() {
+            try
+            {
+                LOGGER.trace("Created a new document builder");
+                return builderFactory.newDocumentBuilder();
+            }
+            catch (ParserConfigurationException e)
+            {
+                throw new RuntimeException(e);
+            }
+        }
+    };
+
+    static
+    {
         try
         {
             DocumentBuilder builder = builderFactory.newDocumentBuilder();
@@ -246,7 +254,7 @@ public final class XmlUtils
 
     /**
      * Release the given document builder
-     * @param document builder
+     * @param builder document builder
      */
     private static synchronized void releaseBuilder(DocumentBuilder builder)
     {
@@ -384,18 +392,57 @@ public final class XmlUtils
         return parse(new StringReader(xml));
     }
 
-    public static NodeList search(String xpath, Node context)
+    /**
+     * Search for nodes using an XPath expression
+     * @param xpath XPath expression
+     * @param context evaluation context
+     * @return org.w3c.NodeList of found nodes
+     * @throws XPathExpressionException
+     */
+    public static NodeList search(String xpath, Node context) throws 
XPathExpressionException
     {
         NodeList ret = null;
-        try
-        {
             XPath xp = XPathFactory.newInstance().newXPath();
             XPathExpression exp = xp.compile(xpath);
             ret = (NodeList)exp.evaluate(context, XPathConstants.NODESET);
+        return ret;
         }
-        catch (XPathExpressionException xpe)
+
+    /**
+     * Search for nodes using an XPath expression
+     * @param xpath XPath expression
+     * @param context evaluation context
+     * @return List of found nodes
+     * @throws XPathExpressionException
+     */
+    public static List<Node> getNodes(String xpath, Node context) throws 
XPathExpressionException
+        {
+        List<Node> ret = new ArrayList<>();
+        NodeList lst = search(xpath, context);
+        for (int i = 0; i < lst.getLength(); ++i)
         {
-            LOGGER.error("could not process xpath expression {}", xpath, xpe);
+            ret.add(lst.item(i));
+        }
+        return ret;
+    }
+
+
+    /**
+     * Search for elements using an XPath expression
+     * @param xpath XPath expression
+     * @param context evaluation context
+     * @return List of found elements
+     * @throws XPathExpressionException
+     */
+    public static List<Element> getElements(String xpath, Node context) throws 
XPathExpressionException
+    {
+        List<Element> ret = new ArrayList<>();
+        NodeList lst = search(xpath, context);
+        for (int i = 0; i < lst.getLength(); ++i)
+        {
+            // will throw a ClassCastExpression if Node is not an Element,
+            // that's what we want
+            ret.add((Element)lst.item(i));
         }
         return ret;
     }

Modified: 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/config/ConfigurationException.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/config/ConfigurationException.java?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/config/ConfigurationException.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/config/ConfigurationException.java
 Wed Apr 24 14:08:32 2019
@@ -31,6 +31,18 @@ public class ConfigurationException exte
 
     private final Object source;
 
+    public ConfigurationException(String message)
+    {
+        super(message);
+        source = null;
+    }
+
+    public ConfigurationException(String message, Throwable cause)
+    {
+        super(message, cause);
+        source = null;
+    }
+
     public ConfigurationException(Data data, Throwable cause)
     {
         super(cause);

Modified: 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/config/ConfigurationUtils.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/config/ConfigurationUtils.java?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/config/ConfigurationUtils.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/config/ConfigurationUtils.java
 Wed Apr 24 14:08:32 2019
@@ -106,7 +106,7 @@ public class ConfigurationUtils
 
     /**
      * <p>Returns a {@link FactoryConfiguration} including all default
-     * "VelocityView" tools available as well as the default 
"GenericTools".</p>
+     * "velocity-tools-view" tools available as well as the default 
"GenericTools".</p>
      * @return all default tools {@link FactoryConfiguration}
      * @throws ConfigurationException if a tools.xml is not found at the 
{@link #VIEW_DEFAULTS_PATH}.
      */

Modified: 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ValueParser.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ValueParser.java?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ValueParser.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ValueParser.java
 Wed Apr 24 14:08:32 2019
@@ -673,7 +673,7 @@ public class ValueParser extends FormatC
      * @param subkey subkey to search for
      * @return the map of found values
      */
-    protected ValueParser getSubkey(String subkey)
+    public ValueParser getSubkey(String subkey)
     {
         if (!hasSubkeys() || subkey == null || subkey.length() == 0)
         {

Modified: 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/XmlTool.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/XmlTool.java?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/XmlTool.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/XmlTool.java
 Wed Apr 24 14:08:32 2019
@@ -41,6 +41,8 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.w3c.dom.Text;
 
+import javax.xml.xpath.XPathExpressionException;
+
 /**
  * <p>Tool for reading/navigating XML files, with XPath expressions 
support.</p>
  *
@@ -571,7 +573,16 @@ public class XmlTool extends SafeConfig
         List<Node> found = new ArrayList<Node>();
         for (Node n : nodes)
         {
-            NodeList lst = XmlUtils.search(xpath, n);
+            NodeList lst;
+            try
+            {
+                lst = XmlUtils.search(xpath, n);
+            }
+            catch(XPathExpressionException xpee)
+            {
+                getLog().error("could not parse XML expression '{}'", xpath, 
xpee);
+                return null;
+            }
             if (lst != null)
             {
                 for (int i = 0; i < lst.getLength(); ++i)

Propchange: velocity/tools/trunk/velocity-tools-view/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Apr 24 14:08:32 2019
@@ -1,3 +1,4 @@
 /velocity/tools/branches/VELTOOLS-177/velocity-tools-view:1841696-1842346
 /velocity/tools/branches/VELTOOLS-178/velocity-tools-view:1842409-1842427
+/velocity/tools/branches/model/velocity-tools-view:1857728-1858050
 /velocity/tools/trunk:990897-995744

Modified: velocity/tools/trunk/velocity-tools-view/pom.xml
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/pom.xml?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- velocity/tools/trunk/velocity-tools-view/pom.xml (original)
+++ velocity/tools/trunk/velocity-tools-view/pom.xml Wed Apr 24 14:08:32 2019
@@ -88,6 +88,10 @@
               <name>test.output.dir</name>
               <value>${project.build.testOutputDirectory}</value>
             </property>
+            <property>
+              <name>org.slf4j.simpleLogger.defaultLogLevel</name>
+              <value>info</value>
+            </property>
             </systemProperties>
         </configuration>
       </plugin>

Modified: 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ServletUtils.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ServletUtils.java?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ServletUtils.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ServletUtils.java
 Wed Apr 24 14:08:32 2019
@@ -477,6 +477,45 @@ public class ServletUtils
         return lock;
     }
 
+    /**
+     * If end is null, this will return start and vice versa.
+     * If neither is null, this will append the end to the start,
+     * making sure that there is only one '/' character between
+     * the two values.
+     * @param before start path
+     * @param after end path
+     * @return combined path
+     */
+    public static String combinePath(String before, String after)
+    {
+        // code taken from generics LinkTool.
+        // TODO - it should be factorize somewhere in generics tools.
+        if (after == null)
+        {
+            return before;
+        }
+        if (before == null)
+        {
+            return after;
+        }
+
+        // make sure we don't get // or nothing between start and end
+        boolean startEnds = before.endsWith("/");
+        boolean endStarts = after.startsWith("/");
+        if (startEnds ^ endStarts) //one
+        {
+            return before + after;
+        }
+        else if (startEnds & endStarts) //both
+        {
+            return before + after.substring(1, after.length());
+        }
+        else //neither
+        {
+            return before + '/' + after;
+        }
+    }
+
     private static class SessionMutex implements java.io.Serializable
     {
     }

Modified: 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityView.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityView.java?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityView.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityView.java
 Wed Apr 24 14:08:32 2019
@@ -31,8 +31,6 @@ import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.velocity.util.ExtProperties;
-
 import org.apache.velocity.Template;
 import org.apache.velocity.app.VelocityEngine;
 import org.apache.velocity.context.Context;
@@ -42,7 +40,7 @@ import org.apache.velocity.tools.Toolbox
 import org.apache.velocity.tools.config.ConfigurationCleaner;
 import org.apache.velocity.tools.config.ConfigurationUtils;
 import org.apache.velocity.tools.config.FactoryConfiguration;
-import org.apache.velocity.tools.view.ViewToolContext;
+import org.apache.velocity.util.ExtProperties;
 import org.apache.velocity.util.SimplePool;
 
 /**

Modified: 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java
 Wed Apr 24 14:08:32 2019
@@ -29,8 +29,6 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 import org.apache.velocity.context.Context;
 import org.apache.velocity.tools.Toolbox;
-import org.apache.velocity.tools.view.VelocityView;
-import org.apache.velocity.tools.view.ViewToolContext;
 
 /**
  * <p>A filter to ensure VelocityTools {@link Toolbox}es are

Modified: 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewContextTool.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewContextTool.java?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewContextTool.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewContextTool.java
 Wed Apr 24 14:08:32 2019
@@ -26,7 +26,6 @@ import javax.servlet.http.HttpSession;
 import javax.servlet.ServletContext;
 import org.apache.velocity.tools.generic.ContextTool;
 import org.apache.velocity.tools.generic.ValueParser;
-import org.apache.velocity.tools.view.ViewContext;
 
 /**
  * <p>Extension of {@link ContextTool} that includes keys and values

Modified: 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ViewToolManager.java
 Wed Apr 24 14:08:32 2019
@@ -32,9 +32,6 @@ import org.apache.velocity.tools.Toolbox
 import org.apache.velocity.tools.ToolContext;
 import org.apache.velocity.tools.ToolManager;
 import org.apache.velocity.tools.config.FactoryConfiguration;
-import org.apache.velocity.tools.view.ServletUtils;
-import org.apache.velocity.tools.view.ViewContext;
-import org.apache.velocity.tools.view.ViewToolContext;
 
 /**
  * Manages tools for web applications. This simplifies the process
@@ -203,10 +200,13 @@ public class ViewToolManager extends Too
     /**
      * Publish {@link Scope#APPLICATION} Toolbox.
      */
-    protected void publishApplicationTools()
+    public synchronized void publishApplicationTools()
     {
-        servletContext.setAttribute(this.toolboxKey, getApplicationToolbox());
-        appToolsPublished = true;
+        if (!appToolsPublished)
+        {
+            servletContext.setAttribute(this.toolboxKey, 
getApplicationToolbox());
+            appToolsPublished = true;
+        }
     }
 
     /**
@@ -242,9 +242,11 @@ public class ViewToolManager extends Too
     protected void addToolboxes(ToolContext context)
     {
         super.addToolboxes(context);
-        if (hasSessionTools())
+        if (hasSessionTools() && context != null && context instanceof 
ViewToolContext)
         {
-            context.addToolbox(getSessionToolbox());
+            ViewToolContext viewContext = (ViewToolContext)context;
+            HttpSession session = viewContext.getSession();
+            context.addToolbox(getSessionToolbox(session));
         }
     }
 
@@ -291,7 +293,7 @@ public class ViewToolManager extends Too
         }
     }
 
-    protected boolean hasSessionTools()
+    public boolean hasSessionTools()
     {
         return hasTools(Scope.SESSION);
     }
@@ -301,6 +303,11 @@ public class ViewToolManager extends Too
         return createToolbox(Scope.SESSION);
     }
 
+    public Toolbox getSessionToolbox(HttpSession session)
+    {
+        return (Toolbox)session.getAttribute(this.toolboxKey);
+    }
+
     /**
      * Places the {@link Scope#REQUEST} {@link Toolbox} (if any)
      * into the {@link ServletRequest} attributes using

Modified: 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/VelocityViewTest.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/VelocityViewTest.java?rev=1858051&r1=1858050&r2=1858051&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/VelocityViewTest.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-view/src/test/java/org/apache/velocity/tools/view/VelocityViewTest.java
 Wed Apr 24 14:08:32 2019
@@ -45,47 +45,12 @@ import org.slf4j.LoggerFactory;
  * Tests {@link VelocityView}.
  *
  */
-public class VelocityViewTest
+public class VelocityViewTest extends BaseWebappMockTest
 {
 
     static Logger logger = LoggerFactory.getLogger(VelocityViewTest.class);
 
     /**
-     * Unique point of passage for non-void calls
-     * @param value value to return
-     * @param <T> type of returned value
-     * @return value
-     */
-    static <T> IAnswer<T> eval(final T value)
-    {
-        return new IAnswer<T>()
-        {
-            public T answer() throws Throwable
-            {
-                String caller = null;
-                String callee = null;
-                StackTraceElement stackTrace[] = 
Thread.currentThread().getStackTrace();
-                String previous = null;
-                for (StackTraceElement line : stackTrace)
-                {
-                    String at = line.toString();
-                    if (at.contains("org.apache") && 
!at.contains("VelocityViewTest"))
-                    {
-                        caller = at;
-                        break;
-                    }
-                    previous = at;
-                }
-                if (caller != null) callee = previous;
-                else caller = callee = "???";
-                // good place for a breakpoint
-                logger.trace("[view] method {} called, expecting {}, at {}", 
value, caller);
-                return value;
-            }
-        };
-    }
-
-    /**
      * Test method for {@link 
org.apache.velocity.tools.view.VelocityView#getTemplate(javax.servlet.http.HttpServletRequest)}.
      * Tests VELTOOLS-119
      * @throws IOException If something goes wrong.
@@ -103,18 +68,18 @@ public class VelocityViewTest
         Context context = createMock(Context.class);
 
         expect(config.getServletContext()).andAnswer(eval(servletContext));
-        
expect(config.findInitParameter(VelocityView.USER_OVERWRITE_KEY)).andAnswer(eval((String)null));
+        
expect(config.findInitParameter(VelocityView.USER_OVERWRITE_KEY)).andAnswer(eval(null));
         
expect(config.findInitParameter(VelocityView.LOAD_DEFAULTS_KEY)).andAnswer(eval("false"));
-        
expect(servletContext.getInitParameter(VelocityView.PROPERTIES_KEY)).andAnswer(eval((String)null));
+        
expect(servletContext.getInitParameter(VelocityView.PROPERTIES_KEY)).andAnswer(eval(null));
         
expect(servletContext.getResourceAsStream(VelocityView.USER_PROPERTIES_PATH))
             
.andAnswer(eval(getClass().getResourceAsStream("/WEB-INF/velocity.properties")));
         String root = new 
File(getClass().getResource("/").getFile()).getAbsolutePath();
-        
expect(config.getInitParameter(VelocityView.PROPERTIES_KEY)).andAnswer(eval((String)null));
-        
expect(config.findInitParameter(VelocityView.CLEAN_CONFIGURATION_KEY)).andAnswer(eval((String)null));
-        
expect(servletContext.getInitParameter(VelocityView.TOOLS_KEY)).andAnswer(eval((String)null));
-        
expect(config.getInitParameter(VelocityView.TOOLS_KEY)).andAnswer(eval((String)null));
+        
expect(config.getInitParameter(VelocityView.PROPERTIES_KEY)).andAnswer(eval(null));
+        
expect(config.findInitParameter(VelocityView.CLEAN_CONFIGURATION_KEY)).andAnswer(eval(null));
+        
expect(servletContext.getInitParameter(VelocityView.TOOLS_KEY)).andAnswer(eval(null));
+        
expect(config.getInitParameter(VelocityView.TOOLS_KEY)).andAnswer(eval(null));
         
expect(servletContext.getAttribute(ServletUtils.CONFIGURATION_KEY)).andAnswer(eval((String)null));
-        
expect(servletContext.getResource(VelocityView.USER_TOOLS_PATH)).andAnswer(eval((URL)null));
+        
expect(servletContext.getResource(VelocityView.USER_TOOLS_PATH)).andAnswer(eval(null));
         
expect(request.getAttribute("javax.servlet.include.servlet_path")).andAnswer(eval("/charset-test.vm"));
         
expect(request.getAttribute("javax.servlet.include.path_info")).andAnswer(eval((String)null));
 


Reply via email to