You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2017/09/13 09:49:21 UTC
[20/36] incubator-freemarker git commit: FREEMARKER-55: code cleanups
FREEMARKER-55: code cleanups
Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/834abd7d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/834abd7d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/834abd7d
Branch: refs/heads/3
Commit: 834abd7d6f338ee7fcc5bdaa060ce2d36495fc8b
Parents: 075bd88
Author: Woonsan Ko <wo...@apache.org>
Authored: Mon Sep 11 16:50:45 2017 -0400
Committer: Woonsan Ko <wo...@apache.org>
Committed: Mon Sep 11 16:50:45 2017 -0400
----------------------------------------------------------------------
.../AbstractSpringTemplateCallableModel.java | 17 +++----
.../freemarker/spring/model/EvalFunction.java | 15 +++++-
.../spring/model/NestedPathDirective.java | 21 ++++-----
.../model/SpringTemplateCallableHashModel.java | 49 +++++++++++---------
4 files changed, 55 insertions(+), 47 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/834abd7d/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java
index 0d5d6ed..384a47b 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java
@@ -27,6 +27,7 @@ import org.apache.freemarker.core.TemplateException;
import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
import org.apache.freemarker.core.model.TemplateCallableModel;
import org.apache.freemarker.core.model.TemplateModel;
+import org.apache.freemarker.core.model.TemplateStringModel;
import org.apache.freemarker.core.model.impl.DefaultObjectWrapper;
import org.apache.freemarker.core.util.CallableUtils;
import org.springframework.web.servlet.support.BindStatus;
@@ -95,21 +96,15 @@ public abstract class AbstractSpringTemplateCallableModel implements TemplateCal
protected abstract boolean isFunction();
- protected String getCurrentNestedPath(final Environment env) throws TemplateException {
- SpringTemplateCallableHashModel springHash = (SpringTemplateCallableHashModel) env
- .getVariable(SpringTemplateCallableHashModel.NAME);
- return springHash.getNestedPath();
- }
-
- protected void setCurrentNestedPath(final Environment env, final String nestedPath) throws TemplateException {
- SpringTemplateCallableHashModel springHash = (SpringTemplateCallableHashModel) env
- .getVariable(SpringTemplateCallableHashModel.NAME);
- springHash.setNestedPath(nestedPath);
+ protected SpringTemplateCallableHashModel getSpringTemplateCallableHashModel(final Environment env)
+ throws TemplateException {
+ return (SpringTemplateCallableHashModel) env.getVariable(SpringTemplateCallableHashModel.NAME);
}
private String resolveNestedPath(final Environment env, ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper,
final String path) throws TemplateException {
- String curNestedPath = getCurrentNestedPath(env);
+ final TemplateStringModel curNestedPathModel = getSpringTemplateCallableHashModel(env).getNestedPathModel();
+ final String curNestedPath = (curNestedPathModel != null) ? curNestedPathModel.getAsString() : null;
if (curNestedPath != null && !path.startsWith(curNestedPath)
&& !path.equals(curNestedPath.substring(0, curNestedPath.length() - 1))) {
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/834abd7d/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java
index 01c3cc5..6ae0bb5 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java
@@ -66,6 +66,8 @@ public class EvalFunction extends AbstractSpringTemplateFunctionModel {
private static final ArgumentArrayLayout ARGS_LAYOUT = ArgumentArrayLayout.create(1, false, null, false);
+ private static final String EVALUATION_CONTEXT_VAR_NAME = "org.apache.freemarker.spring.model.EVALUATION_CONTEXT";
+
private final ExpressionParser expressionParser = new SpelExpressionParser();
public EvalFunction(HttpServletRequest request, HttpServletResponse response) {
@@ -79,8 +81,17 @@ public class EvalFunction extends AbstractSpringTemplateFunctionModel {
final String expressionString = CallableUtils.getStringArgument(args, EXPRESSION_PARAM_IDX, this);
final Expression expression = expressionParser.parseExpression(expressionString);
- // TODO: cache evaluationContext somewhere in request level....
- EvaluationContext evaluationContext = createEvaluationContext(env, objectWrapperAndUnwrapper, requestContext);
+ EvaluationContext evaluationContext = null;
+ final SpringTemplateCallableHashModel springTemplateModel = getSpringTemplateCallableHashModel(env);
+ TemplateModel evaluationContextModel = springTemplateModel.get(EVALUATION_CONTEXT_VAR_NAME);
+
+ if (evaluationContextModel != null) {
+ evaluationContext = (EvaluationContext) unwrapObject(objectWrapperAndUnwrapper, evaluationContextModel);
+ } else {
+ evaluationContext = createEvaluationContext(env, objectWrapperAndUnwrapper, requestContext);
+ evaluationContextModel = wrapObject(objectWrapperAndUnwrapper, evaluationContext);
+ springTemplateModel.setEvaluationContextModel(evaluationContextModel);
+ }
final Object result = expression.getValue(evaluationContext);
return wrapObject(objectWrapperAndUnwrapper, result);
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/834abd7d/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/NestedPathDirective.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/NestedPathDirective.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/NestedPathDirective.java
index 37d4370..9bd51ef 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/NestedPathDirective.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/NestedPathDirective.java
@@ -31,6 +31,7 @@ import org.apache.freemarker.core.TemplateException;
import org.apache.freemarker.core.model.ArgumentArrayLayout;
import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
import org.apache.freemarker.core.model.TemplateModel;
+import org.apache.freemarker.core.model.TemplateStringModel;
import org.apache.freemarker.core.util.CallableUtils;
import org.springframework.beans.PropertyAccessor;
import org.springframework.web.servlet.support.RequestContext;
@@ -59,13 +60,7 @@ public class NestedPathDirective extends AbstractSpringTemplateDirectiveModel {
private static final int PATH_PARAM_IDX = 0;
- private static final ArgumentArrayLayout ARGS_LAYOUT =
- ArgumentArrayLayout.create(
- 1,
- false,
- null,
- false
- );
+ private static final ArgumentArrayLayout ARGS_LAYOUT = ArgumentArrayLayout.create(1, false, null, false);
public NestedPathDirective(HttpServletRequest request, HttpServletResponse response) {
super(request, response);
@@ -85,14 +80,18 @@ public class NestedPathDirective extends AbstractSpringTemplateDirectiveModel {
path += PropertyAccessor.NESTED_PROPERTY_SEPARATOR;
}
- String prevNestedPath = getCurrentNestedPath(env);
- String newNestedPath = (prevNestedPath != null) ? prevNestedPath + path : path;
+ final SpringTemplateCallableHashModel springTemplateModel = getSpringTemplateCallableHashModel(env);
+ final TemplateStringModel prevNestedPathModel = springTemplateModel.getNestedPathModel();
+ final String prevNestedPath = (prevNestedPathModel != null) ? prevNestedPathModel.getAsString() : null;
+ final String newNestedPath = (prevNestedPath != null) ? prevNestedPath + path : path;
+ final TemplateStringModel newNestedPathModel = (TemplateStringModel) wrapObject(objectWrapperAndUnwrapper,
+ newNestedPath);
try {
- setCurrentNestedPath(env, newNestedPath);
+ springTemplateModel.setNestedPathModel(newNestedPathModel);
callPlace.executeNestedContent(null, out, env);
} finally {
- setCurrentNestedPath(env, prevNestedPath);
+ springTemplateModel.setNestedPathModel(prevNestedPathModel);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/834abd7d/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java
index e090cd9..7315947 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java
@@ -29,7 +29,7 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.freemarker.core.TemplateException;
import org.apache.freemarker.core.model.TemplateHashModel;
import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.impl.SimpleString;
+import org.apache.freemarker.core.model.TemplateStringModel;
/**
* TemplateHashModel wrapper for templates using Spring directives and functions.
@@ -40,31 +40,26 @@ public final class SpringTemplateCallableHashModel implements TemplateHashModel,
public static final String NAME = "spring";
- public static final String NESTED_PATH = "nestedPath";
+ public static final String NESTED_PATH_MODEL = "nestedPathModel";
- private Map<String, AbstractSpringTemplateCallableModel> callablesMap = new HashMap<>();
+ public static final String EVALUATION_CONTEXT_MODEL = "evaluationContextModel";
- private String nestedPath;
+ private Map<String, TemplateModel> modelsMap = new HashMap<>();
public SpringTemplateCallableHashModel(final HttpServletRequest request, final HttpServletResponse response) {
- callablesMap.put(MessageFunction.NAME, new MessageFunction(request, response));
- callablesMap.put(ThemeFunction.NAME, new ThemeFunction(request, response));
- callablesMap.put(BindErrorsDirective.NAME, new BindErrorsDirective(request, response));
- callablesMap.put(NestedPathDirective.NAME, new NestedPathDirective(request, response));
- callablesMap.put(BindDirective.NAME, new BindDirective(request, response));
-
- callablesMap.put(TransformFunction.NAME, new TransformFunction(request, response));
- callablesMap.put(UrlFunction.NAME, new UrlFunction(request, response));
- callablesMap.put(EvalFunction.NAME, new EvalFunction(request, response));
- callablesMap.put(MvcUrlFunction.NAME, new MvcUrlFunction(request, response));
+ modelsMap.put(MessageFunction.NAME, new MessageFunction(request, response));
+ modelsMap.put(ThemeFunction.NAME, new ThemeFunction(request, response));
+ modelsMap.put(BindErrorsDirective.NAME, new BindErrorsDirective(request, response));
+ modelsMap.put(NestedPathDirective.NAME, new NestedPathDirective(request, response));
+ modelsMap.put(BindDirective.NAME, new BindDirective(request, response));
+ modelsMap.put(TransformFunction.NAME, new TransformFunction(request, response));
+ modelsMap.put(UrlFunction.NAME, new UrlFunction(request, response));
+ modelsMap.put(EvalFunction.NAME, new EvalFunction(request, response));
+ modelsMap.put(MvcUrlFunction.NAME, new MvcUrlFunction(request, response));
}
public TemplateModel get(String key) throws TemplateException {
- if (NESTED_PATH.equals(key)) {
- return (nestedPath != null) ? new SimpleString(nestedPath) : null;
- }
-
- return callablesMap.get(key);
+ return modelsMap.get(key);
}
@Override
@@ -72,12 +67,20 @@ public final class SpringTemplateCallableHashModel implements TemplateHashModel,
return false;
}
- public String getNestedPath() {
- return nestedPath;
+ public TemplateStringModel getNestedPathModel() throws TemplateException {
+ return (TemplateStringModel) get(NESTED_PATH_MODEL);
+ }
+
+ public void setNestedPathModel(TemplateStringModel nestedPathModel) {
+ modelsMap.put(NESTED_PATH_MODEL, nestedPathModel);
+ }
+
+ public TemplateModel getEvaluationContextModel() throws TemplateException {
+ return (TemplateModel) get(EVALUATION_CONTEXT_MODEL);
}
- public void setNestedPath(String nestedPath) {
- this.nestedPath = nestedPath;
+ public void setEvaluationContextModel(TemplateModel evaluationContextModel) {
+ modelsMap.put(EVALUATION_CONTEXT_MODEL, evaluationContextModel);
}
}