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