You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by ap...@apache.org on 2010/02/20 22:06:16 UTC

svn commit: r912223 [1/2] - in /tiles/sandbox/trunk/tiles3: tiles-freemarker/src/main/java/org/apache/tiles/freemarker/io/ tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/ tiles-freemarker/src/test/java/org/apache/tiles/freemarker/t...

Author: apetrelli
Date: Sat Feb 20 21:06:14 2010
New Revision: 912223

URL: http://svn.apache.org/viewvc?rev=912223&view=rev
Log:
TILESSB-23
Completed migration all the tags.
Removed tests that will be removed anyway later due to Autotag.
Added some base abstract classes.

Added:
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodyFMModel.java   (with props)
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodylessFMModel.java   (with props)
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodyTag.java   (with props)
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodylessTag.java   (with props)
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/BodyDirective.java
      - copied, changed from r912109, tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/BodyBlockDirective.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/BodylessDirective.java   (with props)
Removed:
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/io/
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/AddAttributeFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/AddListAttributeFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/DefinitionFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/GetAsStringFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/ImportAttributeFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertAttributeFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertTemplateFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/PutAttributeFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/PutListAttributeFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/SetCurrentContainerFMModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/BlockDirective.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/BodyBlockDirective.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/AddAttributeDirectiveTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/AddListAttributeDirectiveTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/BlockDirectiveTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/DefinitionDirectiveTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/GetAsStringDirectiveTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/ImportAttributeDirectiveTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/InsertAttributeDirectiveTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/InsertDefinitionDirectiveTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/InsertTemplateDirectiveTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/PutAttributeDirectiveTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/PutListAttributeDirectiveTest.java
Modified:
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/AddAttributeFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/AddListAttributeFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/DefinitionFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/ImportAttributeFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutAttributeFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutListAttributeFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/SetCurrentContainerFMModel.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddAttributeTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddListAttributeTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/GetAsStringTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/ImportAttributeTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertAttributeTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertDefinitionTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertTemplateTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutAttributeTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutListAttributeTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/UseAttributeTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DefinitionTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/SetCurrentContainerTag.java
    tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/AddListAttributeModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/DefinitionModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertDefinitionModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertTemplateModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/PutListAttributeModel.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/DefinitionModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/GetAsStringModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertAttributeModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertDefinitionModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-template/src/test/java/org/apache/tiles/template/InsertTemplateModelTest.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/AddAttributeDirective.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/AddListAttributeDirective.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/DefinitionDirective.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/GetAsStringDirective.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/ImportAttributeDirective.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/InsertAttributeDirective.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/InsertDefinitionDirective.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/InsertTemplateDirective.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/PutAttributeDirective.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/PutListAttributeDirective.java
    tiles/sandbox/trunk/tiles3/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/BodyBlockDirectiveTest.java

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/AddAttributeFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/AddAttributeFMModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/AddAttributeFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/AddAttributeFMModel.java Sat Feb 20 21:06:14 2010
@@ -24,17 +24,11 @@
 import java.io.IOException;
 import java.util.Map;
 
-import org.apache.tiles.freemarker.FreemarkerModelBody;
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.freemarker.FreemarkerRequest;
-import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
 import org.apache.tiles.template.AddAttributeModel;
 import org.apache.tiles.template.body.ModelBody;
 
-import freemarker.core.Environment;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
 import freemarker.template.TemplateModel;
 
 /**
@@ -45,7 +39,7 @@
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class AddAttributeFMModel implements TemplateDirectiveModel {
+public class AddAttributeFMModel extends BodyFMModel {
 
     /**
      * The template model.
@@ -63,14 +57,9 @@
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws IOException {
-        Request request = FreemarkerRequest
-                .createServletFreemarkerRequest(FreemarkerRequestUtil
-                        .getApplicationContext(env), env);
-        ModelBody modelBody = new FreemarkerModelBody(env.getOut(), body);
-        Map<String, TemplateModel> parms = params;
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request,
+            ModelBody modelBody) throws IOException {
         model.execute(FreeMarkerUtil.getAsObject(parms.get("value")),
                 FreeMarkerUtil.getAsString(parms.get("expression")),
                 FreeMarkerUtil.getAsString(parms.get("role")), FreeMarkerUtil

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/AddListAttributeFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/AddListAttributeFMModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/AddListAttributeFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/AddListAttributeFMModel.java Sat Feb 20 21:06:14 2010
@@ -26,14 +26,9 @@
 
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.freemarker.FreemarkerRequest;
-import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
 import org.apache.tiles.template.AddListAttributeModel;
+import org.apache.tiles.template.body.ModelBody;
 
-import freemarker.core.Environment;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
 import freemarker.template.TemplateModel;
 
 /**
@@ -44,7 +39,7 @@
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class AddListAttributeFMModel implements TemplateDirectiveModel {
+public class AddListAttributeFMModel extends BodyFMModel {
 
     /**
      * The template model.
@@ -62,15 +57,10 @@
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Request request = FreemarkerRequest
-                .createServletFreemarkerRequest(FreemarkerRequestUtil
-                        .getApplicationContext(env), env);
-        Map<String, TemplateModel> parms = params;
-        model.start(FreeMarkerUtil.getAsString(parms.get("role")), request);
-        FreeMarkerUtil.evaluateBody(body);
-        model.end(request);
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request,
+            ModelBody modelBody) throws IOException {
+        model.execute(FreeMarkerUtil.getAsString(parms.get("role")), request,
+                modelBody);
     }
 }

Added: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodyFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodyFMModel.java?rev=912223&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodyFMModel.java (added)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodyFMModel.java Sat Feb 20 21:06:14 2010
@@ -0,0 +1,31 @@
+package org.apache.tiles.freemarker.template;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.tiles.freemarker.FreemarkerModelBody;
+import org.apache.tiles.request.Request;
+import org.apache.tiles.request.freemarker.FreemarkerRequest;
+import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
+import org.apache.tiles.template.body.ModelBody;
+
+import freemarker.core.Environment;
+import freemarker.template.TemplateDirectiveBody;
+import freemarker.template.TemplateDirectiveModel;
+import freemarker.template.TemplateModel;
+
+public abstract class BodyFMModel implements TemplateDirectiveModel {
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public void execute(Environment env, Map params, TemplateModel[] loopVars,
+            TemplateDirectiveBody body) throws IOException {
+        Request request = FreemarkerRequest.createServletFreemarkerRequest(
+                FreemarkerRequestUtil.getApplicationContext(env), env);
+        ModelBody modelBody = new FreemarkerModelBody(env.getOut(), body);
+        execute(params, request, modelBody);
+    }
+
+    protected abstract void execute(Map<String, TemplateModel> parms,
+            Request request, ModelBody modelBody) throws IOException;
+}

Propchange: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodyFMModel.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodyFMModel.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodylessFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodylessFMModel.java?rev=912223&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodylessFMModel.java (added)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodylessFMModel.java Sat Feb 20 21:06:14 2010
@@ -0,0 +1,28 @@
+package org.apache.tiles.freemarker.template;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.tiles.request.Request;
+import org.apache.tiles.request.freemarker.FreemarkerRequest;
+import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
+
+import freemarker.core.Environment;
+import freemarker.template.TemplateDirectiveBody;
+import freemarker.template.TemplateDirectiveModel;
+import freemarker.template.TemplateModel;
+
+public abstract class BodylessFMModel implements TemplateDirectiveModel {
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public void execute(Environment env, Map params, TemplateModel[] loopVars,
+            TemplateDirectiveBody body) throws IOException {
+        Request request = FreemarkerRequest.createServletFreemarkerRequest(
+                FreemarkerRequestUtil.getApplicationContext(env), env);
+        execute(params, request);
+    }
+
+    protected abstract void execute(Map<String, TemplateModel> parms,
+            Request request) throws IOException;
+}

Propchange: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodylessFMModel.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/BodylessFMModel.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/DefinitionFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/DefinitionFMModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/DefinitionFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/DefinitionFMModel.java Sat Feb 20 21:06:14 2010
@@ -26,14 +26,9 @@
 
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.freemarker.FreemarkerRequest;
-import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
 import org.apache.tiles.template.DefinitionModel;
+import org.apache.tiles.template.body.ModelBody;
 
-import freemarker.core.Environment;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
 import freemarker.template.TemplateModel;
 
 /**
@@ -44,7 +39,7 @@
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class DefinitionFMModel implements TemplateDirectiveModel {
+public class DefinitionFMModel extends BodyFMModel {
 
     /**
      * The template model.
@@ -62,21 +57,15 @@
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Map<String, TemplateModel> parms = params;
-        Request request = FreemarkerRequest
-                .createServletFreemarkerRequest(FreemarkerRequestUtil
-                        .getApplicationContext(env), env);
-        model.start(FreeMarkerUtil.getAsString(parms.get("name")),
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request,
+            ModelBody modelBody) throws IOException {
+        model.execute(FreeMarkerUtil.getAsString(parms.get("name")),
                 FreeMarkerUtil.getAsString(parms.get("template")),
                 FreeMarkerUtil.getAsString(parms.get("role")),
                 FreeMarkerUtil.getAsString(parms.get("extends")),
                 FreeMarkerUtil.getAsString(parms.get("preparer")),
-                request);
-        FreeMarkerUtil.evaluateBody(body);
-        model.end(request);
+                request, modelBody);
     }
 
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/GetAsStringFMModel.java Sat Feb 20 21:06:14 2010
@@ -27,14 +27,9 @@
 import org.apache.tiles.Attribute;
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.freemarker.FreemarkerRequest;
-import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
 import org.apache.tiles.template.GetAsStringModel;
+import org.apache.tiles.template.body.ModelBody;
 
-import freemarker.core.Environment;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
 import freemarker.template.TemplateModel;
 
 /**
@@ -49,7 +44,7 @@
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class GetAsStringFMModel implements TemplateDirectiveModel {
+public class GetAsStringFMModel extends BodyFMModel {
 
     /**
      * The template model.
@@ -67,14 +62,10 @@
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Map<String, TemplateModel> parms = params;
-        Request request = FreemarkerRequest
-                .createServletFreemarkerRequest(FreemarkerRequestUtil
-                        .getApplicationContext(env), env);
-        model.start(
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request,
+            ModelBody modelBody) throws IOException {
+        model.execute(
                 FreeMarkerUtil.getAsBoolean(parms.get("ignore"), false),
                 FreeMarkerUtil.getAsString(parms.get("preparer")),
                 FreeMarkerUtil.getAsString(parms.get("role")),
@@ -85,9 +76,7 @@
                 .getAsString(parms.get("defaultValueType")),
                 FreeMarkerUtil.getAsString(parms.get("name")), (Attribute) FreeMarkerUtil.getAsObject(parms
                         .get("value")),
-                request);
-        FreeMarkerUtil.evaluateBody(body);
-        model.end(FreeMarkerUtil.getAsBoolean(parms.get("ignore"), false), request);
+                request, modelBody);
     }
 
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/ImportAttributeFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/ImportAttributeFMModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/ImportAttributeFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/ImportAttributeFMModel.java Sat Feb 20 21:06:14 2010
@@ -25,13 +25,8 @@
 
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.freemarker.FreemarkerRequest;
-import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
 import org.apache.tiles.template.ImportAttributeModel;
 
-import freemarker.core.Environment;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
 import freemarker.template.TemplateModel;
 
 /**
@@ -43,7 +38,7 @@
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class ImportAttributeFMModel implements TemplateDirectiveModel {
+public class ImportAttributeFMModel extends BodylessFMModel {
 
     /**
      * The template model.
@@ -62,13 +57,8 @@
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) {
-        Map<String, TemplateModel> parms = params;
-        Request request = FreemarkerRequest
-                .createServletFreemarkerRequest(FreemarkerRequestUtil
-                        .getApplicationContext(env), env);
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request) {
         model.execute(FreeMarkerUtil.getAsString(parms.get("name")),
                 FreeMarkerUtil.getAsString(parms.get("scope")), FreeMarkerUtil
                         .getAsString(parms.get("toName")), FreeMarkerUtil

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertAttributeFMModel.java Sat Feb 20 21:06:14 2010
@@ -27,14 +27,9 @@
 import org.apache.tiles.Attribute;
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.freemarker.FreemarkerRequest;
-import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
 import org.apache.tiles.template.InsertAttributeModel;
+import org.apache.tiles.template.body.ModelBody;
 
-import freemarker.core.Environment;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
 import freemarker.template.TemplateModel;
 
 /**
@@ -48,7 +43,7 @@
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class InsertAttributeFMModel implements TemplateDirectiveModel {
+public class InsertAttributeFMModel extends BodyFMModel {
 
     /**
      * The template model.
@@ -67,23 +62,18 @@
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Map<String, TemplateModel> parms = params;
-        Request request = FreemarkerRequest
-                .createServletFreemarkerRequest(FreemarkerRequestUtil
-                        .getApplicationContext(env), env);
-        model.start(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("name")),
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request,
+            ModelBody modelBody) throws IOException {
+        model.execute(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("name")),
                 (Attribute) FreeMarkerUtil.getAsObject(parms.get("value")),
-                request);
-        FreeMarkerUtil.evaluateBody(body);
-        model.end(FreeMarkerUtil.getAsBoolean(parms.get("ignore"), false), request);
+                request, modelBody);
     }
 
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java Sat Feb 20 21:06:14 2010
@@ -26,14 +26,9 @@
 
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.freemarker.FreemarkerRequest;
-import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
 import org.apache.tiles.template.InsertDefinitionModel;
+import org.apache.tiles.template.body.ModelBody;
 
-import freemarker.core.Environment;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
 import freemarker.template.TemplateModel;
 
 /**
@@ -47,7 +42,7 @@
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class InsertDefinitionFMModel implements TemplateDirectiveModel {
+public class InsertDefinitionFMModel extends BodyFMModel {
 
     /**
      * The template model.
@@ -66,21 +61,15 @@
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Map<String, TemplateModel> parms = params;
-        Request request = FreemarkerRequest
-                .createServletFreemarkerRequest(FreemarkerRequestUtil
-                        .getApplicationContext(env), env);
-        model.start(request);
-        FreeMarkerUtil.evaluateBody(body);
-        model.end(FreeMarkerUtil.getAsString(parms.get("name")), FreeMarkerUtil.getAsString(parms.get("template")),
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request,
+            ModelBody modelBody) throws IOException {
+        model.execute(FreeMarkerUtil.getAsString(parms.get("name")), FreeMarkerUtil.getAsString(parms.get("template")),
                 FreeMarkerUtil.getAsString(parms.get("templateType")),
                 FreeMarkerUtil.getAsString(parms.get("templateExpression")),
                 FreeMarkerUtil.getAsString(parms.get("role")),
                 FreeMarkerUtil
-                        .getAsString(parms.get("preparer")), request);
+                        .getAsString(parms.get("preparer")), request, modelBody);
     }
 
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java Sat Feb 20 21:06:14 2010
@@ -26,14 +26,9 @@
 
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.freemarker.FreemarkerRequest;
-import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
 import org.apache.tiles.template.InsertTemplateModel;
+import org.apache.tiles.template.body.ModelBody;
 
-import freemarker.core.Environment;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
 import freemarker.template.TemplateModel;
 
 /**
@@ -47,7 +42,7 @@
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class InsertTemplateFMModel implements TemplateDirectiveModel {
+public class InsertTemplateFMModel extends BodyFMModel {
 
     /**
      * The template model.
@@ -66,20 +61,15 @@
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Map<String, TemplateModel> parms = params;
-        Request request = FreemarkerRequest
-                .createServletFreemarkerRequest(FreemarkerRequestUtil
-                        .getApplicationContext(env), env);
-        model.start(request);
-        FreeMarkerUtil.evaluateBody(body);
-        model.end(FreeMarkerUtil.getAsString(parms.get("template")), FreeMarkerUtil.getAsString(parms.get("templateType")),
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request,
+            ModelBody modelBody) throws IOException {
+        model.execute(FreeMarkerUtil.getAsString(parms.get("template")),
+                FreeMarkerUtil.getAsString(parms.get("templateType")),
                 FreeMarkerUtil.getAsString(parms.get("templateExpression")),
                 FreeMarkerUtil.getAsString(parms.get("role")),
-                FreeMarkerUtil
-                        .getAsString(parms.get("preparer")), request);
+                FreeMarkerUtil.getAsString(parms.get("preparer")),
+                request, modelBody);
     }
 
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutAttributeFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutAttributeFMModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutAttributeFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutAttributeFMModel.java Sat Feb 20 21:06:14 2010
@@ -24,17 +24,11 @@
 import java.io.IOException;
 import java.util.Map;
 
-import org.apache.tiles.freemarker.FreemarkerModelBody;
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.freemarker.FreemarkerRequest;
-import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
 import org.apache.tiles.template.PutAttributeModel;
 import org.apache.tiles.template.body.ModelBody;
 
-import freemarker.core.Environment;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
 import freemarker.template.TemplateModel;
 
 /**
@@ -46,7 +40,7 @@
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class PutAttributeFMModel implements TemplateDirectiveModel {
+public class PutAttributeFMModel extends BodyFMModel {
 
     /**
      * The template model.
@@ -65,14 +59,9 @@
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws IOException {
-        Request request = FreemarkerRequest
-                .createServletFreemarkerRequest(FreemarkerRequestUtil
-                        .getApplicationContext(env), env);
-        ModelBody modelBody = new FreemarkerModelBody(env.getOut(), body);
-        Map<String, TemplateModel> parms = params;
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request,
+            ModelBody modelBody) throws IOException {
         model.execute(FreeMarkerUtil.getAsString(parms.get("name")),
                 FreeMarkerUtil.getAsObject(parms.get("value")), FreeMarkerUtil
                         .getAsString(parms.get("expression")), FreeMarkerUtil

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutListAttributeFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutListAttributeFMModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutListAttributeFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/PutListAttributeFMModel.java Sat Feb 20 21:06:14 2010
@@ -26,14 +26,9 @@
 
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.freemarker.FreemarkerRequest;
-import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
 import org.apache.tiles.template.PutListAttributeModel;
+import org.apache.tiles.template.body.ModelBody;
 
-import freemarker.core.Environment;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
 import freemarker.template.TemplateModel;
 
 /**
@@ -46,7 +41,7 @@
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class PutListAttributeFMModel implements TemplateDirectiveModel {
+public class PutListAttributeFMModel extends BodyFMModel {
 
     /**
      * The template model.
@@ -65,19 +60,13 @@
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Map<String, TemplateModel> parms = params;
-        Request request = FreemarkerRequest
-                .createServletFreemarkerRequest(FreemarkerRequestUtil
-                        .getApplicationContext(env), env);
-        model.start(FreeMarkerUtil.getAsString(parms.get("role")),
-                FreeMarkerUtil
-                        .getAsBoolean(parms.get("inherit"), false), request);
-        FreeMarkerUtil.evaluateBody(body);
-        model.end(FreeMarkerUtil.getAsString(parms
-                .get("name")), FreeMarkerUtil.getAsBoolean(
-      parms.get("cascade"), false), request);
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request,
+            ModelBody modelBody) throws IOException {
+        model.execute(FreeMarkerUtil.getAsString(parms.get("name")),
+                FreeMarkerUtil.getAsString(parms.get("role")), FreeMarkerUtil
+                        .getAsBoolean(parms.get("inherit"), false),
+                FreeMarkerUtil.getAsBoolean(parms.get("cascade"), false),
+                request, modelBody);
     }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/SetCurrentContainerFMModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/SetCurrentContainerFMModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/SetCurrentContainerFMModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/SetCurrentContainerFMModel.java Sat Feb 20 21:06:14 2010
@@ -25,13 +25,8 @@
 
 import org.apache.tiles.freemarker.context.FreeMarkerUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.freemarker.FreemarkerRequest;
-import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
 import org.apache.tiles.template.SetCurrentContainerModel;
 
-import freemarker.core.Environment;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
 import freemarker.template.TemplateModel;
 
 /**
@@ -41,7 +36,7 @@
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class SetCurrentContainerFMModel implements TemplateDirectiveModel {
+public class SetCurrentContainerFMModel extends BodylessFMModel {
 
     private SetCurrentContainerModel model;
 
@@ -50,13 +45,8 @@
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) {
-        Map<String, TemplateModel> parms = params;
-        Request request = FreemarkerRequest
-                .createServletFreemarkerRequest(FreemarkerRequestUtil
-                        .getApplicationContext(env), env);
+    @Override
+    public void execute(Map<String, TemplateModel> parms, Request request) {
         model.execute(FreeMarkerUtil.getAsString(parms.get("containerKey")),
                 request);
     }

Modified: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddAttributeTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddAttributeTag.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddAttributeTag.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddAttributeTag.java Sat Feb 20 21:06:14 2010
@@ -23,13 +23,7 @@
 
 import java.io.IOException;
 
-import javax.servlet.jsp.JspContext;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.SimpleTagSupport;
-
-import org.apache.tiles.jsp.JspModelBody;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.jsp.JspRequest;
 import org.apache.tiles.template.AddAttributeModel;
 import org.apache.tiles.template.body.ModelBody;
 
@@ -68,7 +62,7 @@
  *
  * @version $Rev$ $Date$
  */
-public class AddAttributeTag extends SimpleTagSupport {
+public class AddAttributeTag extends BodyTag {
 
     /**
      * The template model.
@@ -199,13 +193,7 @@
 
     /** {@inheritDoc} */
     @Override
-    public void doTag() throws IOException {
-        JspContext pageContext = getJspContext();
-        Request request = JspRequest.createServletJspRequest(
-                org.apache.tiles.request.jsp.JspUtil
-                        .getApplicationContext(pageContext),
-                (PageContext) pageContext);
-        ModelBody modelBody = new JspModelBody(getJspBody(), pageContext);
+    protected void execute(Request request, ModelBody modelBody) throws IOException {
         model.execute(value, expression, role, type, request, modelBody);
     }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddListAttributeTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddListAttributeTag.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddListAttributeTag.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/AddListAttributeTag.java Sat Feb 20 21:06:14 2010
@@ -23,15 +23,9 @@
 
 import java.io.IOException;
 
-import javax.servlet.jsp.JspContext;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.SimpleTagSupport;
-
-import org.apache.tiles.jsp.JspUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.jsp.JspRequest;
 import org.apache.tiles.template.AddListAttributeModel;
+import org.apache.tiles.template.body.ModelBody;
 
 /**
  * AddListAttribute tag implementation.
@@ -39,7 +33,7 @@
  * @since Tiles 1.0
  * @version $Rev$ $Date$
  */
-public class AddListAttributeTag extends SimpleTagSupport {
+public class AddListAttributeTag extends BodyTag {
 
     /**
      * The template model.
@@ -97,36 +91,9 @@
         return type;
     }
 
-    /**
-     * <p>
-     * Sets content type: string, template or definition.
-     * </p>
-     * <ul>
-     * <li>String : Content is printed directly.</li>
-     * <li>template : Content is included from specified URL. Value is used as
-     * an URL.</li>
-     * <li>definition : Value denote a definition defined in factory (xml file).
-     * Definition will be searched in the inserted tile, in a
-     * <code>&lt;insert attribute="attributeName"&gt;</code> tag, where
-     * 'attributeName' is the name used for this tag.</li>
-     * </ul>
-     *
-     * @param type The attribute type.
-     */
-    public void setType(String type) {
-        this.type = type;
-    }
-
     /** {@inheritDoc} */
     @Override
-    public void doTag() throws JspException, IOException {
-        JspContext jspContext = getJspContext();
-        Request request = JspRequest.createServletJspRequest(
-                org.apache.tiles.request.jsp.JspUtil
-                        .getApplicationContext(jspContext),
-                (PageContext) jspContext);
-        model.start(role, request);
-        JspUtil.evaluateFragment(getJspBody());
-        model.end(request);
+    public void execute(Request request, ModelBody modelBody) throws IOException {
+        model.execute(role, request, modelBody);
     }
 }

Added: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodyTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodyTag.java?rev=912223&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodyTag.java (added)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodyTag.java Sat Feb 20 21:06:14 2010
@@ -0,0 +1,29 @@
+package org.apache.tiles.jsp.taglib;
+
+import java.io.IOException;
+
+import javax.servlet.jsp.JspContext;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.SimpleTagSupport;
+
+import org.apache.tiles.jsp.JspModelBody;
+import org.apache.tiles.request.Request;
+import org.apache.tiles.request.jsp.JspRequest;
+import org.apache.tiles.template.body.ModelBody;
+
+public abstract class BodyTag extends SimpleTagSupport {
+
+    @Override
+    public void doTag() throws IOException {
+        JspContext pageContext = getJspContext();
+        Request request = JspRequest.createServletJspRequest(
+                org.apache.tiles.request.jsp.JspUtil
+                        .getApplicationContext(pageContext),
+                (PageContext) pageContext);
+        ModelBody modelBody = new JspModelBody(getJspBody(), pageContext);
+        execute(request, modelBody);
+    }
+
+    protected abstract void execute(Request request, ModelBody modelBody)
+            throws IOException;
+}

Propchange: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodyTag.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodyTag.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodylessTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodylessTag.java?rev=912223&view=auto
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodylessTag.java (added)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodylessTag.java Sat Feb 20 21:06:14 2010
@@ -0,0 +1,25 @@
+package org.apache.tiles.jsp.taglib;
+
+import java.io.IOException;
+
+import javax.servlet.jsp.JspContext;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.SimpleTagSupport;
+
+import org.apache.tiles.request.Request;
+import org.apache.tiles.request.jsp.JspRequest;
+
+public abstract class BodylessTag extends SimpleTagSupport {
+
+    @Override
+    public void doTag() throws IOException {
+        JspContext pageContext = getJspContext();
+        Request request = JspRequest.createServletJspRequest(
+                org.apache.tiles.request.jsp.JspUtil
+                        .getApplicationContext(pageContext),
+                (PageContext) pageContext);
+        execute(request);
+    }
+
+    protected abstract void execute(Request request) throws IOException;
+}

Propchange: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodylessTag.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/BodylessTag.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/GetAsStringTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/GetAsStringTag.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/GetAsStringTag.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/GetAsStringTag.java Sat Feb 20 21:06:14 2010
@@ -22,17 +22,11 @@
 
 import java.io.IOException;
 
-import javax.servlet.jsp.JspContext;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.SimpleTagSupport;
-
 import org.apache.tiles.Attribute;
-import org.apache.tiles.jsp.JspUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.jsp.JspRequest;
 import org.apache.tiles.template.DefaultAttributeResolver;
 import org.apache.tiles.template.GetAsStringModel;
+import org.apache.tiles.template.body.ModelBody;
 
 /**
  * Retrieve the value of the specified definition/template attribute property,
@@ -41,7 +35,7 @@
  *
  * @version $Rev$ $Date$
  */
-public class GetAsStringTag extends SimpleTagSupport {
+public class GetAsStringTag extends BodyTag {
 
     /**
      * The template model.
@@ -57,7 +51,7 @@
     /**
      * The value of the attribute.
      */
-    private Object value = null;
+    private Attribute value = null;
 
     /**
      * This value is evaluated only if <code>value</code> is null and the
@@ -136,7 +130,7 @@
      *
      * @return The value.
      */
-    public Object getValue() {
+    public Attribute getValue() {
         return value;
     }
 
@@ -145,7 +139,7 @@
      *
      * @param value The new value
      */
-    public void setValue(Object value) {
+    public void setValue(Attribute value) {
         this.value = value;
     }
 
@@ -303,15 +297,8 @@
 
     /** {@inheritDoc} */
     @Override
-    public void doTag() throws JspException, IOException {
-        JspContext jspContext = getJspContext();
-        Request request = JspRequest.createServletJspRequest(
-                org.apache.tiles.request.jsp.JspUtil
-                        .getApplicationContext(jspContext),
-                (PageContext) jspContext);
-        model.start(ignore, preparer, role, defaultValue, defaultValueRole,
-                defaultValueType, name, (Attribute) value, request);
-        JspUtil.evaluateFragment(getJspBody());
-        model.end(ignore, request);
+    public void execute(Request request, ModelBody modelBody) throws IOException {
+        model.execute(ignore, preparer, role, defaultValue, defaultValueRole,
+                defaultValueType, name, value, request, modelBody);
     }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/ImportAttributeTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/ImportAttributeTag.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/ImportAttributeTag.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/ImportAttributeTag.java Sat Feb 20 21:06:14 2010
@@ -20,12 +20,7 @@
  */
 package org.apache.tiles.jsp.taglib;
 
-import javax.servlet.jsp.JspContext;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.SimpleTagSupport;
-
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.jsp.JspRequest;
 import org.apache.tiles.template.ImportAttributeModel;
 
 /**
@@ -36,7 +31,7 @@
  * @since Tiles 1.0
  * @version $Rev$ $Date$
  */
-public class ImportAttributeTag extends SimpleTagSupport {
+public class ImportAttributeTag extends BodylessTag {
 
     /**
      * The template model.
@@ -153,12 +148,7 @@
 
     /** {@inheritDoc} */
     @Override
-    public void doTag() {
-        JspContext jspContext = getJspContext();
-        Request request = JspRequest.createServletJspRequest(
-                org.apache.tiles.request.jsp.JspUtil
-                        .getApplicationContext(jspContext),
-                (PageContext) jspContext);
+    public void execute(Request request) {
         model.execute(name, scopeName, toName, ignore, request);
     }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertAttributeTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertAttributeTag.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertAttributeTag.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertAttributeTag.java Sat Feb 20 21:06:14 2010
@@ -23,17 +23,11 @@
 
 import java.io.IOException;
 
-import javax.servlet.jsp.JspContext;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.SimpleTagSupport;
-
 import org.apache.tiles.Attribute;
-import org.apache.tiles.jsp.JspUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.jsp.JspRequest;
 import org.apache.tiles.template.DefaultAttributeResolver;
 import org.apache.tiles.template.InsertAttributeModel;
+import org.apache.tiles.template.body.ModelBody;
 
 /**
  * This is the tag handler for &lt;tiles:attribute&gt;, which defines an
@@ -42,7 +36,7 @@
  *
  * @version $Rev$ $Date$
  */
-public class InsertAttributeTag extends SimpleTagSupport {
+public class InsertAttributeTag extends BodyTag {
 
     /**
      * The template model.
@@ -58,7 +52,7 @@
     /**
      * The value of the attribute.
      */
-    private Object value = null;
+    private Attribute value = null;
 
     /**
      * This value is evaluated only if <code>value</code> is null and the
@@ -138,7 +132,7 @@
      *
      * @return The value.
      */
-    public Object getValue() {
+    public Attribute getValue() {
         return value;
     }
 
@@ -148,7 +142,7 @@
      * @param value
      *            The new value
      */
-    public void setValue(Object value) {
+    public void setValue(Attribute value) {
         this.value = value;
     }
 
@@ -313,16 +307,8 @@
 
     /** {@inheritDoc} */
     @Override
-    public void doTag() throws JspException, IOException {
-        JspContext jspContext = getJspContext();
-        Request request = JspRequest.createServletJspRequest(
-                org.apache.tiles.request.jsp.JspUtil
-                        .getApplicationContext(jspContext),
-                (PageContext) jspContext);
-        model.start(ignore, preparer,
-                role, defaultValue, defaultValueRole, defaultValueType, name,
-                (Attribute) value, request);
-        JspUtil.evaluateFragment(getJspBody());
-        model.end(ignore, request);
+    public void execute(Request request, ModelBody modelBody) throws IOException {
+        model.execute(ignore, preparer, role, defaultValue, defaultValueRole,
+                defaultValueType, name, value, request, modelBody);
     }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertDefinitionTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertDefinitionTag.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertDefinitionTag.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertDefinitionTag.java Sat Feb 20 21:06:14 2010
@@ -23,15 +23,9 @@
 
 import java.io.IOException;
 
-import javax.servlet.jsp.JspContext;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.SimpleTagSupport;
-
-import org.apache.tiles.jsp.JspUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.jsp.JspRequest;
 import org.apache.tiles.template.InsertDefinitionModel;
+import org.apache.tiles.template.body.ModelBody;
 
 /**
  * This is the tag handler for &lt;tiles:insertDefinition&gt;, which includes a
@@ -39,7 +33,7 @@
  *
  * @version $Rev$ $Date$
  */
-public class InsertDefinitionTag extends SimpleTagSupport {
+public class InsertDefinitionTag extends BodyTag {
 
     /**
      * The template model.
@@ -282,15 +276,8 @@
 
     /** {@inheritDoc} */
     @Override
-    public void doTag() throws JspException, IOException {
-        JspContext jspContext = getJspContext();
-        Request request = JspRequest.createServletJspRequest(
-                org.apache.tiles.request.jsp.JspUtil
-                        .getApplicationContext(jspContext),
-                (PageContext) jspContext);
-        model.start(request);
-        JspUtil.evaluateFragment(getJspBody());
-        model.end(name, template, templateType,
-                templateExpression, role, preparer, request);
+    public void execute(Request request, ModelBody modelBody) throws IOException {
+        model.execute(name, template, templateType, templateExpression, role,
+                preparer, request, modelBody);
     }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertTemplateTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertTemplateTag.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertTemplateTag.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertTemplateTag.java Sat Feb 20 21:06:14 2010
@@ -23,15 +23,9 @@
 
 import java.io.IOException;
 
-import javax.servlet.jsp.JspContext;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.SimpleTagSupport;
-
-import org.apache.tiles.jsp.JspUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.jsp.JspRequest;
 import org.apache.tiles.template.InsertTemplateModel;
+import org.apache.tiles.template.body.ModelBody;
 
 /**
  * This is the tag handler for &lt;tiles:insertTemplate&gt;, which includes a
@@ -39,7 +33,7 @@
  *
  * @version $Rev$ $Date$
  */
-public class InsertTemplateTag extends SimpleTagSupport {
+public class InsertTemplateTag extends BodyTag {
 
     /**
      * The template model.
@@ -258,15 +252,8 @@
 
     /** {@inheritDoc} */
     @Override
-    public void doTag() throws JspException, IOException {
-        JspContext jspContext = getJspContext();
-        Request request = JspRequest.createServletJspRequest(
-                org.apache.tiles.request.jsp.JspUtil
-                        .getApplicationContext(jspContext),
-                (PageContext) jspContext);
-        model.start(request);
-        JspUtil.evaluateFragment(getJspBody());
-        model.end(template, templateType, templateExpression, role,
-                preparer, request);
+    public void execute(Request request, ModelBody modelBody) throws IOException {
+        model.execute(template, templateType, templateExpression, role,
+                preparer, request, modelBody);
     }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutAttributeTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutAttributeTag.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutAttributeTag.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutAttributeTag.java Sat Feb 20 21:06:14 2010
@@ -23,13 +23,7 @@
 
 import java.io.IOException;
 
-import javax.servlet.jsp.JspContext;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.SimpleTagSupport;
-
-import org.apache.tiles.jsp.JspModelBody;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.jsp.JspRequest;
 import org.apache.tiles.template.PutAttributeModel;
 import org.apache.tiles.template.body.ModelBody;
 
@@ -79,7 +73,7 @@
  *
  * @version $Rev$ $Date$
  */
-public class PutAttributeTag extends SimpleTagSupport {
+public class PutAttributeTag extends BodyTag {
 
     /**
      * The template model.
@@ -266,13 +260,7 @@
 
     /** {@inheritDoc} */
     @Override
-    public void doTag() throws IOException {
-        JspContext jspContext = getJspContext();
-        Request request = JspRequest.createServletJspRequest(
-                org.apache.tiles.request.jsp.JspUtil
-                        .getApplicationContext(jspContext),
-                (PageContext) jspContext);
-        ModelBody modelBody = new JspModelBody(getJspBody(), jspContext);
+    public void execute(Request request, ModelBody modelBody) throws IOException {
         model.execute(name, value, expression, role, type, cascade, request,
                 modelBody);
     }

Modified: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutListAttributeTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutListAttributeTag.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutListAttributeTag.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/PutListAttributeTag.java Sat Feb 20 21:06:14 2010
@@ -23,15 +23,9 @@
 
 import java.io.IOException;
 
-import javax.servlet.jsp.JspContext;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.SimpleTagSupport;
-
-import org.apache.tiles.jsp.JspUtil;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.jsp.JspRequest;
 import org.apache.tiles.template.PutListAttributeModel;
+import org.apache.tiles.template.body.ModelBody;
 
 /**
  * PutList tag implementation.
@@ -39,7 +33,7 @@
  * @since Tiles 1.0
  * @version $Rev$ $Date$
  */
-public class PutListAttributeTag extends SimpleTagSupport {
+public class PutListAttributeTag extends BodyTag {
 
     /**
      * The template model.
@@ -205,14 +199,7 @@
 
     /** {@inheritDoc} */
     @Override
-    public void doTag() throws JspException, IOException {
-        JspContext jspContext = getJspContext();
-        Request request = JspRequest.createServletJspRequest(
-                org.apache.tiles.request.jsp.JspUtil
-                        .getApplicationContext(jspContext),
-                (PageContext) jspContext);
-        model.start(role, inherit, request);
-        JspUtil.evaluateFragment(getJspBody());
-        model.end(name, cascade, request);
+    public void execute(Request request, ModelBody modelBody) throws IOException {
+        model.execute(name, role, inherit, cascade, request, modelBody);
     }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/UseAttributeTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/UseAttributeTag.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/UseAttributeTag.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/UseAttributeTag.java Sat Feb 20 21:06:14 2010
@@ -21,15 +21,11 @@
 
 package org.apache.tiles.jsp.taglib;
 
-import javax.servlet.jsp.JspContext;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.SimpleTagSupport;
 import javax.servlet.jsp.tagext.TagData;
 import javax.servlet.jsp.tagext.TagExtraInfo;
 import javax.servlet.jsp.tagext.VariableInfo;
 
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.jsp.JspRequest;
 import org.apache.tiles.template.ImportAttributeModel;
 
 /**
@@ -38,7 +34,7 @@
  * @since Tiles 1.0
  * @version $Rev$ $Date$
  */
-public class UseAttributeTag extends SimpleTagSupport {
+public class UseAttributeTag extends BodylessTag {
 
     /**
      * The template model.
@@ -176,12 +172,7 @@
 
     /** {@inheritDoc} */
     @Override
-    public void doTag() {
-        JspContext jspContext = getJspContext();
-        Request request = JspRequest.createServletJspRequest(
-                org.apache.tiles.request.jsp.JspUtil
-                        .getApplicationContext(jspContext),
-                (PageContext) jspContext);
+    public void execute(Request request) {
         model.execute(name, scopeName, id, ignore, request);
     }
 

Modified: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DefinitionTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DefinitionTag.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DefinitionTag.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/DefinitionTag.java Sat Feb 20 21:06:14 2010
@@ -22,16 +22,11 @@
 
 import java.io.IOException;
 
-import javax.servlet.jsp.JspContext;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.SimpleTagSupport;
-
-import org.apache.tiles.jsp.JspUtil;
+import org.apache.tiles.jsp.taglib.BodyTag;
 import org.apache.tiles.mgmt.MutableTilesContainer;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.jsp.JspRequest;
 import org.apache.tiles.template.DefinitionModel;
+import org.apache.tiles.template.body.ModelBody;
 
 /**
  * This is the tag handler for &lt;tiles:definition&gt;, which creates a custom
@@ -40,7 +35,7 @@
  *
  * @version $Rev$ $Date$
  */
-public class DefinitionTag extends SimpleTagSupport {
+public class DefinitionTag extends BodyTag {
 
     /**
      * The template model.
@@ -164,13 +159,7 @@
 
     /** {@inheritDoc} */
     @Override
-    public void doTag() throws JspException, IOException {
-        JspContext jspContext = getJspContext();
-        Request request = JspRequest.createServletJspRequest(
-                org.apache.tiles.request.jsp.JspUtil.getApplicationContext(jspContext),
-                (PageContext) jspContext);
-        model.start(name, template, role, extend, preparer, request);
-        JspUtil.evaluateFragment(getJspBody());
-        model.end(request);
+    protected void execute(Request request, ModelBody modelBody) throws IOException {
+        model.execute(name, template, role, extend, preparer, request, modelBody);
     }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/SetCurrentContainerTag.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/SetCurrentContainerTag.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/SetCurrentContainerTag.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/SetCurrentContainerTag.java Sat Feb 20 21:06:14 2010
@@ -21,13 +21,8 @@
 
 package org.apache.tiles.jsp.taglib.definition;
 
-import javax.servlet.jsp.JspContext;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.SimpleTagSupport;
-
+import org.apache.tiles.jsp.taglib.BodylessTag;
 import org.apache.tiles.request.Request;
-import org.apache.tiles.request.jsp.JspRequest;
-import org.apache.tiles.request.jsp.JspUtil;
 import org.apache.tiles.template.SetCurrentContainerModel;
 
 /**
@@ -36,7 +31,7 @@
  * @version $Rev$ $Date$
  * @since 2.1.0
  */
-public class SetCurrentContainerTag extends SimpleTagSupport {
+public class SetCurrentContainerTag extends BodylessTag {
 
     private SetCurrentContainerModel model = new SetCurrentContainerModel();
 
@@ -67,11 +62,7 @@
 
     /** {@inheritDoc} */
     @Override
-    public void doTag() {
-        JspContext jspContext = getJspContext();
-        Request request = JspRequest.createServletJspRequest(
-                JspUtil.getApplicationContext(jspContext),
-                (PageContext) jspContext);
+    public void execute(Request request) {
         model.execute(containerKey, request);
     }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld (original)
+++ tiles/sandbox/trunk/tiles3/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld Sat Feb 20 21:06:14 2010
@@ -317,7 +317,7 @@
          <name>value</name>
          <required>false</required>
          <rtexprvalue>true</rtexprvalue>
-         <type>java.lang.Object</type>
+         <type>org.apache.tiles.Attribute</type>
       </attribute>
       <attribute>
          <description>
@@ -741,6 +741,7 @@
          <name>name</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
+         <type>org.apache.tiles.Attribute</type>
       </attribute>
       <attribute>
          <description>

Modified: tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/AddListAttributeModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/AddListAttributeModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/AddListAttributeModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/AddListAttributeModel.java Sat Feb 20 21:06:14 2010
@@ -21,9 +21,12 @@
 
 package org.apache.tiles.template;
 
+import java.io.IOException;
+
 import org.apache.tiles.ArrayStack;
 import org.apache.tiles.ListAttribute;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.template.body.ModelBody;
 
 /**
  * <p>
@@ -67,4 +70,15 @@
         ListAttribute parent = (ListAttribute) composeStack.peek();
         parent.add(listAttribute);
     }
+
+    public void execute(String role, Request request, ModelBody modelBody) throws IOException {
+        ArrayStack<Object> composeStack = ComposeStackUtil.getComposeStack(request);
+        ListAttribute listAttribute = new ListAttribute();
+        listAttribute.setRole(role);
+        composeStack.push(listAttribute);
+        modelBody.evaluateWithoutWriting();
+        listAttribute = (ListAttribute) composeStack.pop();
+        ListAttribute parent = (ListAttribute) composeStack.peek();
+        parent.add(listAttribute);
+    }
 }

Modified: tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/DefinitionModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/DefinitionModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/DefinitionModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/DefinitionModel.java Sat Feb 20 21:06:14 2010
@@ -21,12 +21,15 @@
 
 package org.apache.tiles.template;
 
+import java.io.IOException;
+
 import org.apache.tiles.ArrayStack;
 import org.apache.tiles.Attribute;
 import org.apache.tiles.Definition;
 import org.apache.tiles.access.TilesAccess;
 import org.apache.tiles.mgmt.MutableTilesContainer;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.template.body.ModelBody;
 
 /**
  * <p>
@@ -44,19 +47,23 @@
 
     /**
      * Starts the operation.
-     * @param name The name of the definition to create. If not specified, an anonymous definition will be created.
+     *
+     * @param name The name of the definition to create. If not specified, an
+     * anonymous definition will be created.
      * @param template The template of this definition.
      * @param role A comma-separated list of roles. If present, the definition
      * will be rendered only if the current user belongs to one of the roles.
      * @param extendsParam The definition name that this definition extends.
-     * @param preparer The preparer to use to invoke before the definition is rendered.
+     * @param preparer The preparer to use to invoke before the definition is
+     * rendered.
      * @param request TODO
      * @param composeStack The compose stack,
      * @since 2.2.0
      */
     public void start(String name, String template, String role,
             String extendsParam, String preparer, Request request) {
-        ArrayStack<Object> composeStack = ComposeStackUtil.getComposeStack(request);
+        ArrayStack<Object> composeStack = ComposeStackUtil
+                .getComposeStack(request);
         Definition definition = createDefinition(name, template, role,
                 extendsParam, preparer);
         composeStack.push(definition);
@@ -64,6 +71,7 @@
 
     /**
      * Ends the operation.
+     *
      * @param request TODO
      * @param container The Tiles container to use. It must be "mutable".
      * @param composeStack The compose stack.
@@ -73,45 +81,55 @@
     public void end(Request request) {
         MutableTilesContainer container = (MutableTilesContainer) TilesAccess
                 .getCurrentContainer(request);
-        ArrayStack<Object> composeStack = ComposeStackUtil.getComposeStack(request);
+        ArrayStack<Object> composeStack = ComposeStackUtil
+                .getComposeStack(request);
         Definition definition = (Definition) composeStack.pop();
         registerDefinition(definition, container, composeStack, request);
     }
 
     /**
      * Executes the operation.
-     * @param name The name of the definition to create. If not specified, an anonymous definition will be created.
+     *
+     * @param name The name of the definition to create. If not specified, an
+     * anonymous definition will be created.
      * @param template The template of this definition.
      * @param role A comma-separated list of roles. If present, the definition
      * will be rendered only if the current user belongs to one of the roles.
      * @param extendsParam The definition name that this definition extends.
-     * @param preparer The preparer to use to invoke before the definition is rendered.
+     * @param preparer The preparer to use to invoke before the definition is
+     * rendered.
      * @param request TODO
+     * @param modelBody TODO
      * @param container The Tiles container to use. It must be "mutable".
      * @param composeStack The compose stack.
-     *
+     * @throws IOException If something goes wrong.
      * @since 2.2.0
      */
-    public void execute(String name,
-            String template, String role, String extendsParam,
-            String preparer, Request request) {
-        MutableTilesContainer container = (MutableTilesContainer) TilesAccess
-                .getCurrentContainer(request);
-        ArrayStack<Object> composeStack = ComposeStackUtil.getComposeStack(request);
+    public void execute(String name, String template, String role,
+            String extendsParam, String preparer, Request request, ModelBody modelBody) throws IOException {
+        ArrayStack<Object> composeStack = ComposeStackUtil
+                .getComposeStack(request);
         Definition definition = createDefinition(name, template, role,
                 extendsParam, preparer);
+        composeStack.push(definition);
+        modelBody.evaluateWithoutWriting();
+        MutableTilesContainer container = (MutableTilesContainer) TilesAccess
+                .getCurrentContainer(request);
+        definition = (Definition) composeStack.pop();
         registerDefinition(definition, container, composeStack, request);
     }
 
     /**
      * Creates the definition to store.
      *
-     * @param name The name of the definition to create. If not specified, an anonymous definition will be created.
+     * @param name The name of the definition to create. If not specified, an
+     * anonymous definition will be created.
      * @param template The template of this definition.
      * @param role A comma-separated list of roles. If present, the definition
      * will be rendered only if the current user belongs to one of the roles.
      * @param extendsParam The definition name that this definition extends.
-     * @param preparer The preparer to use to invoke before the definition is rendered.
+     * @param preparer The preparer to use to invoke before the definition is
+     * rendered.
      * @return The created definition.
      */
     private Definition createDefinition(String name, String template,
@@ -131,7 +149,8 @@
      * Registers a definition in the container.
      *
      * @param definition The definition to register.
-     * @param container The container into which the definition will be registered.
+     * @param container The container into which the definition will be
+     * registered.
      * @param composeStack The compose stack,
      * @param request TODO
      */

Modified: tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/GetAsStringModel.java Sat Feb 20 21:06:14 2010
@@ -29,6 +29,7 @@
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.template.body.ModelBody;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -135,6 +136,7 @@
      * @param name The name of the attribute.
      * @param value The attribute to use immediately, if not null.
      * @param request TODO
+     * @param modelBody TODO
      * @param writer The writer into which the attribute will be written.
      * @param container The Tiles container to use.
      * @throws IOException If an I/O error happens during rendering.
@@ -142,12 +144,17 @@
      */
     public void execute(boolean ignore, String preparer,
             String role, Object defaultValue, String defaultValueRole, String defaultValueType,
-            String name, Attribute value, Request request) throws IOException {
+            String name, Attribute value, Request request, ModelBody modelBody) throws IOException {
         TilesContainer container = TilesAccess.getCurrentContainer(request);
-        Writer writer = request.getWriter();
+        ArrayStack<Object> composeStack = ComposeStackUtil.getComposeStack(request);
         Attribute attribute = resolveAttribute(container, ignore, preparer,
                 role, defaultValue, defaultValueRole, defaultValueType, name,
                 value, request);
+        composeStack.push(attribute);
+        modelBody.evaluateWithoutWriting();
+        container = TilesAccess.getCurrentContainer(request);
+        Writer writer = request.getWriter();
+        attribute = (Attribute) composeStack.pop();
         renderAttribute(attribute, container, writer, ignore, request);
     }
 

Modified: tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertAttributeModel.java Sat Feb 20 21:06:14 2010
@@ -28,6 +28,7 @@
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.template.body.ModelBody;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -144,19 +145,24 @@
      * @param name The name of the attribute.
      * @param value The attribute to use immediately, if not null.
      * @param request TODO
+     * @param modelBody TODO
      * @param container The Tiles container to use.
-     *
      * @throws IOException If an I/O error happens during rendering.
      * @since 2.2.0
      */
     public void execute(boolean ignore, String preparer,
             String role, Object defaultValue, String defaultValueRole,
             String defaultValueType, String name, Attribute value,
-            Request request) throws IOException {
+            Request request, ModelBody modelBody) throws IOException {
         TilesContainer container = TilesAccess.getCurrentContainer(request);
+        ArrayStack<Object> composeStack = ComposeStackUtil.getComposeStack(request);
         Attribute attribute = resolveAttribute(container, ignore, preparer,
                 role, defaultValue, defaultValueRole, defaultValueType, name,
                 value, request);
+        composeStack.push(attribute);
+        modelBody.evaluateWithoutWriting();
+        container = TilesAccess.getCurrentContainer(request);
+        attribute = (Attribute) composeStack.pop();
         renderAttribute(container, ignore, attribute, request);
     }
 

Modified: tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertDefinitionModel.java
URL: http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertDefinitionModel.java?rev=912223&r1=912222&r2=912223&view=diff
==============================================================================
--- tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertDefinitionModel.java (original)
+++ tiles/sandbox/trunk/tiles3/tiles-template/src/main/java/org/apache/tiles/template/InsertDefinitionModel.java Sat Feb 20 21:06:14 2010
@@ -21,11 +21,14 @@
 
 package org.apache.tiles.template;
 
+import java.io.IOException;
+
 import org.apache.tiles.Attribute;
 import org.apache.tiles.AttributeContext;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
 import org.apache.tiles.request.Request;
+import org.apache.tiles.template.body.ModelBody;
 
 /**
  * <p>
@@ -115,15 +118,18 @@
      * rendered. If specified, it overrides the preparer specified in the
      * definition itself.
      * @param request TODO
+     * @param modelBody TODO
      * @param container The Tiles container.
-     *
+     * @throws IOException If something goes wrong.
      * @since 2.2.0
      */
     public void execute(String definitionName, String template,
             String templateType, String templateExpression, String role,
-            String preparer, Request request) {
+            String preparer, Request request, ModelBody modelBody) throws IOException {
         TilesContainer container = TilesAccess.getCurrentContainer(request);
         container.startContext(request);
+        modelBody.evaluateWithoutWriting();
+        container = TilesAccess.getCurrentContainer(request);
         renderDefinition(container, definitionName, template, templateType,
                 templateExpression, role, preparer, request);
     }