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


Reply via email to