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 2009/03/12 22:47:56 UTC
svn commit: r753027 - in /velocity/engine/trunk/src:
java/org/apache/velocity/context/
java/org/apache/velocity/runtime/defaults/ test/org/apache/velocity/test/
Author: nbubna
Date: Thu Mar 12 21:47:56 2009
New Revision: 753027
URL: http://svn.apache.org/viewvc?rev=753027&view=rev
Log:
VELOCITY-704 do not provide local context for #evaluate by default, now that $evaluate is provided
Modified:
velocity/engine/trunk/src/java/org/apache/velocity/context/EvaluateContext.java
velocity/engine/trunk/src/java/org/apache/velocity/runtime/defaults/velocity.properties
velocity/engine/trunk/src/test/org/apache/velocity/test/EvaluateContextTestCase.java
velocity/engine/trunk/src/test/org/apache/velocity/test/EvaluateTestCase.java
Modified: velocity/engine/trunk/src/java/org/apache/velocity/context/EvaluateContext.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/context/EvaluateContext.java?rev=753027&r1=753026&r2=753027&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/context/EvaluateContext.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/context/EvaluateContext.java Thu Mar 12 21:47:56 2009
@@ -46,6 +46,7 @@
* @author <a href="mailto:wglass@forio.com">Will Glass-Husain</a>
* @version $Id$
* @since 1.6
+ * @deprecated Will be removed in 2.0
*/
public class EvaluateContext extends ChainedInternalContextAdapter
{
@@ -73,6 +74,12 @@
if (contextClass != null && contextClass.length() > 0)
{
+ rsvc.getLog().warn("The "+RuntimeConstants.EVALUATE_CONTEXT_CLASS+
+ " property has been deprecated. It will be removed in Velocity 2.0. "+
+ " Instead, please use the automatically provided $evaluate"+
+ " namespace to get and set local references"+
+ " (e.g. #set($evaluate.foo = 'bar') and $evaluate.foo).");
+
Object o = null;
try
@@ -107,9 +114,15 @@
}
else
{
- String err = "No class specified for #evaluate() context.";
- rsvc.getLog().error(err);
- throw new RuntimeException(err);
+ if (rsvc.getLog().isDebugEnabled())
+ {
+ rsvc.getLog().debug("No class specified for #evaluate() context, "+
+ "so #set calls will now alter the global context and no longer be local. "+
+ "This is a change from earlier versions due to VELOCITY-704. "+
+ "If you need references within #evaluate to stay local, "+
+ "please use the automatically provided $evaluate namespace instead "+
+ "(e.g. #set($evaluate.foo = 'bar') and $evaluate.foo).");
+ }
}
}
@@ -123,11 +136,11 @@
*/
public Object put(String key, Object value)
{
- /*
- * just put in the local context
- */
- return localContext.put(key, value);
-
+ if (localContext != null)
+ {
+ return localContext.put(key, value);
+ }
+ return super.put(key, value);
}
/**
@@ -141,14 +154,15 @@
/*
* always try the local context then innerContext
*/
-
- Object o = localContext.get( key );
-
- if ( o == null)
+ Object o = null;
+ if (localContext != null)
+ {
+ o = localContext.get(key);
+ }
+ if (o == null)
{
o = super.get( key );
}
-
return o;
}
@@ -157,7 +171,8 @@
*/
public boolean containsKey(Object key)
{
- return localContext.containsKey(key) || super.containsKey(key);
+ return (localContext != null && localContext.containsKey(key)) ||
+ super.containsKey(key);
}
/**
@@ -165,19 +180,23 @@
*/
public Object[] getKeys()
{
- Set keys = new HashSet();
- Object[] localKeys = localContext.getKeys();
- for (int i=0; i < localKeys.length; i++)
+ if (localContext != null)
{
- keys.add(localKeys[i]);
- }
-
- Object[] innerKeys = super.getKeys();
- for (int i=0; i < innerKeys.length; i++)
- {
- keys.add(innerKeys[i]);
+ Set keys = new HashSet();
+ Object[] localKeys = localContext.getKeys();
+ for (int i=0; i < localKeys.length; i++)
+ {
+ keys.add(localKeys[i]);
+ }
+
+ Object[] innerKeys = super.getKeys();
+ for (int i=0; i < innerKeys.length; i++)
+ {
+ keys.add(innerKeys[i]);
+ }
+ return keys.toArray();
}
- return keys.toArray();
+ return super.getKeys();
}
/**
@@ -185,7 +204,11 @@
*/
public Object remove(Object key)
{
- return localContext.remove( key );
+ if (localContext != null)
+ {
+ return localContext.remove(key);
+ }
+ return super.remove(key);
}
/**
@@ -199,7 +222,11 @@
*/
public Object localPut(final String key, final Object value)
{
- return localContext.put(key, value);
+ if (localContext != null)
+ {
+ return localContext.put(key, value);
+ }
+ return super.localPut(key, value);
}
}
Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/defaults/velocity.properties
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/defaults/velocity.properties?rev=753027&r1=753026&r2=753027&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/defaults/velocity.properties (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/defaults/velocity.properties Thu Mar 12 21:47:56 2009
@@ -192,10 +192,12 @@
# ----------------------------------------------------------------------------
# EVALUATE
# ----------------------------------------------------------------------------
-# Evaluate VTL dynamically in template. Select a class for the Context
+# Evaluate VTL dynamically in template. Select a class for the Context, if
+# you want all #set calls within it to be locally scoped. This feature is
+# deprecated; please use $evaluate to hold local references instead.
# ----------------------------------------------------------------------------
-directive.evaluate.context.class = org.apache.velocity.VelocityContext
+#directive.evaluate.context.class = org.apache.velocity.VelocityContext
# ----------------------------------------------------------------------------
Modified: velocity/engine/trunk/src/test/org/apache/velocity/test/EvaluateContextTestCase.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/test/org/apache/velocity/test/EvaluateContextTestCase.java?rev=753027&r1=753026&r2=753027&view=diff
==============================================================================
--- velocity/engine/trunk/src/test/org/apache/velocity/test/EvaluateContextTestCase.java (original)
+++ velocity/engine/trunk/src/test/org/apache/velocity/test/EvaluateContextTestCase.java Thu Mar 12 21:47:56 2009
@@ -42,7 +42,7 @@
RuntimeInstance instance;
instance = new RuntimeInstance();
- instance.setProperty(RuntimeConstants.VM_CONTEXT_LOCALSCOPE, Boolean.TRUE);
+ instance.setProperty(RuntimeConstants.EVALUATE_CONTEXT_CLASS, VelocityContext.class.getName());
instance.init();
VelocityContext base = new VelocityContext();
Modified: velocity/engine/trunk/src/test/org/apache/velocity/test/EvaluateTestCase.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/test/org/apache/velocity/test/EvaluateTestCase.java?rev=753027&r1=753026&r2=753027&view=diff
==============================================================================
--- velocity/engine/trunk/src/test/org/apache/velocity/test/EvaluateTestCase.java (original)
+++ velocity/engine/trunk/src/test/org/apache/velocity/test/EvaluateTestCase.java Thu Mar 12 21:47:56 2009
@@ -27,10 +27,6 @@
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
@@ -88,16 +84,12 @@
super(name);
}
- public void setUp()
+ public void setUp() throws Exception
{
+ super.setUp();
assureResultsDirectoryExists(RESULTS_DIR);
}
- public static Test suite()
- {
- return new TestSuite(EvaluateTestCase.class);
- }
-
/**
* Test basic functionality.
* @throws Exception
@@ -105,7 +97,9 @@
public void testEvaluate()
throws Exception
{
- testFile("eval1", new HashMap());
+ Map props = new HashMap();
+ props.put(RuntimeConstants.EVALUATE_CONTEXT_CLASS, VelocityContext.class.getName());
+ testFile("eval1", props);
}
/**
@@ -142,25 +136,16 @@
}
/**
- * Test #stop (since it is attached to context).
+ * Test #stop and #break
* @throws Exception
*/
- public void testStop()
- throws Exception
+ public void testStopAndBreak()
{
- VelocityEngine ve = new VelocityEngine();
- ve.init();
-
- Context context = new VelocityContext();
- StringWriter writer = new StringWriter();
- ve.evaluate(context, writer, "test","test #stop test2 #evaluate('test3')");
- assertEquals("test ", writer.toString());
-
- context = new VelocityContext();
- writer = new StringWriter();
- ve.evaluate(context, writer, "test","test test2 #evaluate('test3 #stop test4') test5");
- assertEquals("test test2 test3 test5", writer.toString());
-
+ assertEvalEquals("t ", "t #stop t2 #evaluate('t3')");
+ assertEvalEquals("t ", "t #break t2 #evaluate('t3')");
+ //assertEvalEquals("t t2 t3 ", "t t2 #evaluate('t3 #stop t4') t5");
+ assertEvalEquals("t t2 t3 t5", "t t2 #evaluate('t3 #break t4') t5");
+ assertEvalEquals("t t2 t3 ", "t t2 #evaluate('t3 #break($evaluate.topmost) t4') t5");
}
/**
@@ -270,7 +255,8 @@
private void testFile(String basefilename, Map properties)
throws Exception
{
- VelocityEngine ve = new VelocityEngine();
+ info("Test file: "+basefilename);
+ VelocityEngine ve = engine;
ve.addProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, FILE_RESOURCE_LOADER_PATH);
for (Iterator i = properties.keySet().iterator(); i.hasNext();)
@@ -278,6 +264,7 @@
String key = (String) i.next();
String value = (String) properties.get(key);
ve.addProperty(key, value);
+ info("Add property: "+key+" = "+value);
}
ve.init();
@@ -285,7 +272,6 @@
Template template;
FileOutputStream fos;
Writer fwriter;
- Context context;
template = ve.getTemplate( getFileName(null, basefilename, TMPL_FILE_EXT) );
@@ -294,8 +280,6 @@
fwriter = new BufferedWriter( new OutputStreamWriter(fos) );
- context = new VelocityContext();
- setupContext(context);
template.merge(context, fwriter);
fwriter.flush();
fwriter.close();
@@ -313,10 +297,5 @@
fail(msg);
}
}
-
- public void setupContext(Context context)
- {
- }
-
-
+
}