aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Brisson <claude@renegat.net>2022-07-25 08:59:12 +0200
committerClaude Brisson <claude@renegat.net>2022-07-25 08:59:12 +0200
commit28c97b43c731ea42f87bcbdbd08d08fd08533a58 (patch)
treec6e7a8284bd3f51ca5c3f5dec92ab6969a8caa02
parent051f20a8b7b76ecd9f773ac83aac138867aa0976 (diff)
downloadapache-velocity-engine-28c97b43c731ea42f87bcbdbd08d08fd08533a58.tar.gz
Easier #include and #parse directives subclassing - fixes VELOCITY-959
-rw-r--r--velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Include.java20
-rw-r--r--velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Parse.java37
2 files changed, 41 insertions, 16 deletions
diff --git a/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Include.java b/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Include.java
index 58fe19b8..1e1abd7b 100644
--- a/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Include.java
+++ b/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Include.java
@@ -240,14 +240,14 @@ public class Include extends InputBase
try
{
if (!blockinput)
- resource = rsvc.getContent(arg, getInputEncoding(context));
+ resource = getResource(arg, getInputEncoding(context));
}
catch ( ResourceNotFoundException rnfe )
{
/*
* the arg wasn't found. Note it and throw
*/
- log.error("#include(): cannot find resource '{}', called at {}",
+ log.error("#" + getName() + "(): cannot find resource '{}', called at {}",
arg, StringUtils.formatFileString(this));
throw rnfe;
}
@@ -257,13 +257,13 @@ public class Include extends InputBase
*/
catch( RuntimeException e )
{
- log.error("#include(): arg = '{}', called at {}",
+ log.error("#" + getName() + "(): arg = '{}', called at {}",
arg, StringUtils.formatFileString(this));
throw e;
}
catch (Exception e)
{
- String msg = "#include(): arg = '" + arg +
+ String msg = "#" + getName() + "(): arg = '" + arg +
"', called at " + StringUtils.formatFileString(this);
log.error(msg, e);
throw new VelocityException(msg, e, rsvc.getLogContext().getStackTrace());
@@ -304,4 +304,16 @@ public class Include extends InputBase
writer.write(outputMsgEnd);
}
}
+
+ /**
+ * Find the resource to include
+ * @param path resource path
+ * @param encoding resource encoding
+ * @return found resource
+ * @throws ResourceNotFoundException if resource was not found
+ */
+ protected Resource getResource(String path, String encoding) throws ResourceNotFoundException
+ {
+ return rsvc.getContent(path, encoding);
+ }
}
diff --git a/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Parse.java b/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Parse.java
index 1d4b9e7b..06dbf13b 100644
--- a/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Parse.java
+++ b/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Parse.java
@@ -146,7 +146,7 @@ public class Parse extends InputBase
*/
if ( node.jjtGetNumChildren() == 0 )
{
- throw new VelocityException("#parse(): argument missing at " +
+ throw new VelocityException("#" + getName() + "(): argument missing at " +
StringUtils.formatFileString(this), null, rsvc.getLogContext().getStackTrace());
}
@@ -156,7 +156,7 @@ public class Parse extends InputBase
Object value = node.jjtGetChild(0).value( context );
if (value == null)
{
- log.debug("#parse(): null argument at {}", StringUtils.formatFileString(this));
+ log.debug("#" + getName() + "(): null argument at {}", StringUtils.formatFileString(this));
}
/*
@@ -174,7 +174,7 @@ public class Parse extends InputBase
*/
if (strictRef && value == null && arg == null)
{
- throw new VelocityException("The argument to #parse returned null at "
+ throw new VelocityException("The argument to #" + getName() + " returned null at "
+ StringUtils.formatFileString(this), null, rsvc.getLogContext().getStackTrace());
}
@@ -217,14 +217,14 @@ public class Parse extends InputBase
try
{
- t = rsvc.getTemplate( arg, getInputEncoding(context) );
+ t = getTemplate(arg, getInputEncoding(context));
}
catch ( ResourceNotFoundException rnfe )
{
/*
* the arg wasn't found. Note it and throw
*/
- log.error("#parse(): cannot find template '{}', called at {}",
+ log.error("#" + getName() + "(): cannot find template '{}', called at {}",
arg, StringUtils.formatFileString(this));
throw rnfe;
}
@@ -234,7 +234,7 @@ public class Parse extends InputBase
* the arg was found, but didn't parse - syntax error
* note it and throw
*/
- log.error("#parse(): syntax error in #parse()-ed template '{}', called at {}",
+ log.error("#" + getName() + "(): syntax error in #" + getName() + "()-ed template '{}', called at {}",
arg, StringUtils.formatFileString(this));
throw pee;
}
@@ -243,13 +243,13 @@ public class Parse extends InputBase
*/
catch( RuntimeException e )
{
- log.error("Exception rendering #parse({}) at {}",
+ log.error("Exception rendering #" + getName() + "({}) at {}",
arg, StringUtils.formatFileString(this));
throw e;
}
catch ( Exception e )
{
- String msg = "Exception rendering #parse(" + arg + ") at " +
+ String msg = "Exception rendering #" + getName() + "(" + arg + ") at " +
StringUtils.formatFileString(this);
log.error(msg, e);
throw new VelocityException(msg, e, rsvc.getLogContext().getStackTrace());
@@ -298,13 +298,13 @@ public class Parse extends InputBase
/*
* Log #parse errors so the user can track which file called which.
*/
- log.error("Exception rendering #parse({}) at {}",
+ log.error("Exception rendering #" + getName() + "({}) at {}",
arg, StringUtils.formatFileString(this));
throw e;
}
catch ( Exception e )
{
- String msg = "Exception rendering #parse(" + arg + ") at " +
+ String msg = "Exception rendering #" + getName() + "(" + arg + ") at " +
StringUtils.formatFileString(this);
log.error(msg, e);
throw new VelocityException(msg, e, rsvc.getLogContext().getStackTrace());
@@ -332,14 +332,27 @@ public class Parse extends InputBase
{
if (argtypes.size() != 1)
{
- throw new MacroParseException("The #parse directive requires one argument",
+ throw new MacroParseException("The #" + getName() + " directive requires one argument",
templateName, t);
}
if (argtypes.get(0) == ParserTreeConstants.JJTWORD)
{
- throw new MacroParseException("The argument to #parse is of the wrong type",
+ throw new MacroParseException("The argument to #" + getName() + " is of the wrong type",
templateName, t);
}
}
+
+ /**
+ * Find the template to render in the appropriate encoding
+ * @param path template path
+ * @param encoding template encoding
+ * @return found template
+ * @throws ResourceNotFoundException if template was not found
+ * @since 2.4
+ */
+ protected Template getTemplate(String path, String encoding) throws ResourceNotFoundException
+ {
+ return rsvc.getTemplate(path, encoding);
+ }
}