Author: apetrelli
Date: Sat Feb 7 22:09:23 2009
New Revision: 741970
URL: http://svn.apache.org/viewvc?rev=741970&view=rev
Log:
TILESSB-4
Added a servlet to load models.
Fixed some bugs.
Added:
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/TilesFreemarkerServlet.java
(with props)
Modified:
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerUtil.java
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/template/GetAsStringModel.java
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
Modified:
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerUtil.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerUtil.java?rev=741970&r1=741969&r2=741970&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerUtil.java
(original)
+++
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/context/FreeMarkerUtil.java
Sat Feb 7 22:09:23 2009
@@ -4,6 +4,8 @@
import java.io.StringWriter;
import java.util.Stack;
+import javax.servlet.http.HttpServletRequest;
+
import org.apache.tiles.TilesContainer;
import org.apache.tiles.access.TilesAccess;
import org.apache.tiles.freemarker.FreeMarkerTilesException;
@@ -186,29 +188,40 @@
@SuppressWarnings("unchecked")
public static Stack<Object> getComposeStack(Environment env) {
- return (Stack<Object>) getRequestHashModel(env).getRequest()
+ HttpServletRequest request = getRequestHashModel(env).getRequest();
+ Stack<Object> composeStack = (Stack<Object>) request
.getAttribute(COMPOSE_STACK_ATTRIBUTE_NAME);
+ if (composeStack == null) {
+ composeStack = new Stack<Object>();
+ request.setAttribute(COMPOSE_STACK_ATTRIBUTE_NAME, composeStack);
+ }
+ return composeStack;
}
public static void evaluateBody(TemplateDirectiveBody body)
throws TemplateException, IOException {
- NullWriter writer = new NullWriter();
- try {
- body.render(writer);
- } finally {
- writer.close();
+ if (body != null) {
+ NullWriter writer = new NullWriter();
+ try {
+ body.render(writer);
+ } finally {
+ writer.close();
+ }
}
}
public static String renderAsString(TemplateDirectiveBody body)
throws TemplateException, IOException {
- StringWriter stringWriter = new StringWriter();
- try {
- body.render(stringWriter);
- } finally {
- stringWriter.close();
+ String bodyString = null;
+ if (body != null) {
+ StringWriter stringWriter = new StringWriter();
+ try {
+ body.render(stringWriter);
+ } finally {
+ stringWriter.close();
+ }
+ bodyString = stringWriter.toString();
}
- String bodyString = stringWriter.toString();
return bodyString;
}
}
Added:
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/TilesFreemarkerServlet.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/TilesFreemarkerServlet.java?rev=741970&view=auto
==============================================================================
---
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/TilesFreemarkerServlet.java
(added)
+++
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/TilesFreemarkerServlet.java
Sat Feb 7 22:09:23 2009
@@ -0,0 +1,68 @@
+package org.apache.tiles.freemarker.servlet;
+
+import org.apache.tiles.freemarker.template.AddAttributeFMModel;
+import org.apache.tiles.freemarker.template.AddListAttributeFMModel;
+import org.apache.tiles.freemarker.template.DefinitionFMModel;
+import org.apache.tiles.freemarker.template.GetAsStringFMModel;
+import org.apache.tiles.freemarker.template.ImportAttributeFMModel;
+import org.apache.tiles.freemarker.template.InsertAttributeFMModel;
+import org.apache.tiles.freemarker.template.InsertDefinitionFMModel;
+import org.apache.tiles.freemarker.template.InsertTemplateFMModel;
+import org.apache.tiles.freemarker.template.PutAttributeFMModel;
+import org.apache.tiles.freemarker.template.PutListAttributeFMModel;
+import org.apache.tiles.freemarker.template.SetCurrentContainerFMModel;
+import org.apache.tiles.template.AddAttributeModel;
+import org.apache.tiles.template.AddListAttributeModel;
+import org.apache.tiles.template.AttributeResolver;
+import org.apache.tiles.template.DefaultAttributeResolver;
+import org.apache.tiles.template.DefinitionModel;
+import org.apache.tiles.template.GetAsStringModel;
+import org.apache.tiles.template.ImportAttributeModel;
+import org.apache.tiles.template.InsertAttributeModel;
+import org.apache.tiles.template.InsertDefinitionModel;
+import org.apache.tiles.template.InsertTemplateModel;
+import org.apache.tiles.template.PutAttributeModel;
+import org.apache.tiles.template.PutListAttributeModel;
+
+import freemarker.ext.servlet.FreemarkerServlet;
+import freemarker.template.Configuration;
+
+public class TilesFreemarkerServlet extends FreemarkerServlet {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see freemarker.ext.servlet.FreemarkerServlet#createConfiguration()
+ */
+ @Override
+ protected Configuration createConfiguration() {
+ Configuration configuration = super.createConfiguration();
+
+ configuration.setSharedVariable("addAttribute",
+ new AddAttributeFMModel(new AddAttributeModel()));
+ configuration.setSharedVariable("addListAttribute",
+ new AddListAttributeFMModel(new AddListAttributeModel()));
+ configuration.setSharedVariable("definition", new DefinitionFMModel(
+ new DefinitionModel()));
+ AttributeResolver attributeResolver = new DefaultAttributeResolver();
+ configuration.setSharedVariable("getAsString", new GetAsStringFMModel(
+ new GetAsStringModel(attributeResolver)));
+ configuration.setSharedVariable("importAttribute",
+ new ImportAttributeFMModel(new ImportAttributeModel()));
+ configuration.setSharedVariable("insertAttribute",
+ new InsertAttributeFMModel(new InsertAttributeModel(
+ attributeResolver)));
+ configuration.setSharedVariable("insertDefinition",
+ new InsertDefinitionFMModel(new InsertDefinitionModel()));
+ configuration.setSharedVariable("insertTemplate",
+ new InsertTemplateFMModel(new InsertTemplateModel()));
+ configuration.setSharedVariable("putAttribute",
+ new PutAttributeFMModel(new PutAttributeModel()));
+ configuration.setSharedVariable("putListAttribute",
+ new PutListAttributeFMModel(new PutListAttributeModel()));
+ configuration.setSharedVariable("setCurrentContainer",
+ new SetCurrentContainerFMModel());
+ return configuration;
+ }
+
+}
Propchange:
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/TilesFreemarkerServlet.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/servlet/TilesFreemarkerServlet.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified:
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java?rev=741970&r1=741969&r2=741970&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java
(original)
+++
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java
Sat Feb 7 22:09:23 2009
@@ -27,19 +27,22 @@
TemplateDirectiveBody body) throws TemplateException, IOException {
Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
TilesContainer container = FreeMarkerUtil.getCurrentContainer(env);
- model.start(container,
FreeMarkerUtil.getAsString(parms.get("preparer")), env);
- FreeMarkerUtil.evaluateBody(body);
- model.end(FreeMarkerUtil.getComposeStack(env), container,
- env.getOut(),
- FreeMarkerUtil.getAsBoolean(parms.get("flush"), false),
+ model.start(
+ FreeMarkerUtil.getComposeStack(env),
+ container,
FreeMarkerUtil.getAsBoolean(parms.get("ignore"), false),
FreeMarkerUtil.getAsString(parms.get("preparer")),
FreeMarkerUtil.getAsString(parms.get("role")),
FreeMarkerUtil.getAsObject(parms.get("defaultValue")),
- FreeMarkerUtil.getAsString(parms.get("defaultValueRole")),
- FreeMarkerUtil.getAsString(parms.get("defaultValueType")),
+ FreeMarkerUtil.getAsString(parms
+ .get("defaultValueRole")), FreeMarkerUtil
+ .getAsString(parms.get("defaultValueType")),
FreeMarkerUtil.getAsString(parms.get("name")),
- (Attribute) FreeMarkerUtil.getAsObject(parms.get("value")),
env);
+ (Attribute) FreeMarkerUtil.getAsObject(parms
+ .get("value")), env);
+ FreeMarkerUtil.evaluateBody(body);
+ model.end(FreeMarkerUtil.getComposeStack(env), container, env.getOut(),
+ FreeMarkerUtil.getAsBoolean(parms.get("ignore"), false), env);
}
}
Modified:
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java?rev=741970&r1=741969&r2=741970&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java
(original)
+++
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java
Sat Feb 7 22:09:23 2009
@@ -17,7 +17,7 @@
public class InsertAttributeFMModel implements TemplateDirectiveModel {
private InsertAttributeModel model;
-
+
public InsertAttributeFMModel(InsertAttributeModel model) {
this.model = model;
}
@@ -27,18 +27,22 @@
TemplateDirectiveBody body) throws TemplateException, IOException {
Map<String, TemplateModel> parms = (Map<String, TemplateModel>) params;
TilesContainer container = FreeMarkerUtil.getCurrentContainer(env);
- model.start(container,
FreeMarkerUtil.getAsString(parms.get("preparer")), env);
- FreeMarkerUtil.evaluateBody(body);
- model.end(FreeMarkerUtil.getComposeStack(env), container,
- FreeMarkerUtil.getAsBoolean(parms.get("flush"), false),
+ model.start(
+ FreeMarkerUtil.getComposeStack(env),
+ container,
FreeMarkerUtil.getAsBoolean(parms.get("ignore"), false),
FreeMarkerUtil.getAsString(parms.get("preparer")),
FreeMarkerUtil.getAsString(parms.get("role")),
FreeMarkerUtil.getAsObject(parms.get("defaultValue")),
- FreeMarkerUtil.getAsString(parms.get("defaultValueRole")),
- FreeMarkerUtil.getAsString(parms.get("defaultValueType")),
+ FreeMarkerUtil.getAsString(parms
+ .get("defaultValueRole")), FreeMarkerUtil
+ .getAsString(parms.get("defaultValueType")),
FreeMarkerUtil.getAsString(parms.get("name")),
- (Attribute) FreeMarkerUtil.getAsObject(parms.get("value")),
env);
+ (Attribute) FreeMarkerUtil.getAsObject(parms
+ .get("value")), env);
+ FreeMarkerUtil.evaluateBody(body);
+ model.end(FreeMarkerUtil.getComposeStack(env), container,
+ FreeMarkerUtil.getAsBoolean(parms.get("ignore"), false), env);
}
}
Modified:
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/template/GetAsStringModel.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/template/GetAsStringModel.java?rev=741970&r1=741969&r2=741970&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/template/GetAsStringModel.java
(original)
+++
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/template/GetAsStringModel.java
Sat Feb 7 22:09:23 2009
@@ -19,20 +19,24 @@
this.attributeResolver = attributeResolver;
}
- public void start(TilesContainer container, String preparer, Object...
requestItems) {
+ public void start(Stack<Object> composeStack, TilesContainer container,
+ boolean ignore, String preparer, String role, Object defaultValue,
+ String defaultValueRole, String defaultValueType, String name,
+ Attribute value, Object... requestItems) {
if (preparer != null) {
container.prepare(preparer, requestItems);
}
+ Attribute attribute = attributeResolver.computeAttribute(container,
+ value, name, ignore, defaultValue, defaultValueRole,
+ defaultValueType, requestItems);
+ composeStack.push(attribute);
container.startContext(requestItems);
}
public void end(Stack<Object> composeStack, TilesContainer container,
- Writer writer, boolean flush, boolean ignore, String preparer,
String role,
- Object defaultValue, String defaultValueRole, String
defaultValueType,
- String name, Attribute value, Object... requestItems) throws
IOException {
- Attribute attribute = attributeResolver.computeAttribute(container,
- value, name, ignore, defaultValue, defaultValueRole,
- defaultValueType, requestItems);
+ Writer writer, boolean ignore, Object... requestItems)
+ throws IOException {
+ Attribute attribute = (Attribute) composeStack.pop();
if (attribute == null && ignore) {
return;
}
Modified:
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/template/InsertAttributeModel.java?rev=741970&r1=741969&r2=741970&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
(original)
+++
tiles/sandbox/trunk/tiles-freemarker/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
Sat Feb 7 22:09:23 2009
@@ -11,27 +11,30 @@
public class InsertAttributeModel {
private Log log = LogFactory.getLog(getClass());
-
+
private AttributeResolver attributeResolver;
-
+
public InsertAttributeModel(AttributeResolver attributeResolver) {
this.attributeResolver = attributeResolver;
}
- public void start(TilesContainer container, String preparer, Object...
requestItems) {
+ public void start(Stack<Object> composeStack, TilesContainer container,
+ boolean ignore, String preparer, String role, Object defaultValue,
+ String defaultValueRole, String defaultValueType, String name,
+ Attribute value, Object... requestItems) {
if (preparer != null) {
container.prepare(preparer, requestItems);
}
- container.startContext(requestItems);
- }
-
- public void end(Stack<Object> composeStack, TilesContainer container,
- boolean flush, boolean ignore, String preparer, String role,
- Object defaultValue, String defaultValueRole, String
defaultValueType,
- String name, Attribute value, Object... requestItems) throws
IOException {
Attribute attribute = attributeResolver.computeAttribute(container,
value, name, ignore, defaultValue, defaultValueRole,
defaultValueType, requestItems);
+ composeStack.push(attribute);
+ container.startContext(requestItems);
+ }
+
+ public void end(Stack<Object> composeStack, TilesContainer container,
+ boolean ignore, Object... requestItems) throws IOException {
+ Attribute attribute = (Attribute) composeStack.pop();
if (attribute == null && ignore) {
return;
}