Title: [waffle-scm] [684] trunk/waffle-testing/src/test/java/org/codehaus/waffle/testing/view: WAFFLE-81: Added decorator data model to override any entry of processor data model.

Diff

Modified: trunk/waffle-testing/src/main/java/org/codehaus/waffle/testing/view/ViewHarness.java (683 => 684)

--- trunk/waffle-testing/src/main/java/org/codehaus/waffle/testing/view/ViewHarness.java	2008-05-20 13:07:04 UTC (rev 683)
+++ trunk/waffle-testing/src/main/java/org/codehaus/waffle/testing/view/ViewHarness.java	2008-05-20 13:34:15 UTC (rev 684)
@@ -4,6 +4,7 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.Map;
 
 import org.codehaus.waffle.testing.view.freemarker.FreemarkerProcessor;
 import org.codehaus.waffle.testing.view.sitemesh.SitemeshDecorator;
@@ -80,12 +81,13 @@
      * @param controller the controller instance
      * @param decoratorsResource the Sitemesh decorators resource
      * @param decoratorName the decorator name
+     * @param decoratorDataModel the decorator data model that can be used to override the processor data model
      * @return The decorated resource
      */
     public static String decorateView(String resource, Object controller, String decoratorsResource,
-            String decoratorName) {
+            String decoratorName, Map<String, Object> decoratorDataModel) {
         SitemeshDecorator decorator = new SitemeshDecorator(new ViewHarness().processorFor(resource));
-        return decorator.decorate(resource, controller, decoratorsResource, decoratorName);
+        return decorator.decorate(resource, controller, decoratorsResource, decoratorName, decoratorDataModel);
     }
 
     /**

Modified: trunk/waffle-testing/src/main/java/org/codehaus/waffle/testing/view/sitemesh/SitemeshDecorator.java (683 => 684)

--- trunk/waffle-testing/src/main/java/org/codehaus/waffle/testing/view/sitemesh/SitemeshDecorator.java	2008-05-20 13:07:04 UTC (rev 683)
+++ trunk/waffle-testing/src/main/java/org/codehaus/waffle/testing/view/sitemesh/SitemeshDecorator.java	2008-05-20 13:34:15 UTC (rev 684)
@@ -13,7 +13,7 @@
 import com.opensymphony.module.sitemesh.Page;
 import com.opensymphony.module.sitemesh.PageParser;
 import com.opensymphony.module.sitemesh.mapper.ConfigLoader;
-import com.opensymphony.module.sitemesh.multipass.DivExtractingPageParser;
+import com.opensymphony.module.sitemesh.parser.HTMLPageParser;
 
 /**
  * Sitemesh template decorator
@@ -28,13 +28,29 @@
         this.processor = processor;
     }
 
-    public String decorate(String resource, Object controller, String decoratorsResource, String decoratorName) {
+    /**
+     * Decorates a view with Sitemesh
+     * 
+     * @param resource the template resource path
+     * @param controller the controller instance
+     * @param decoratorsResource the Sitemesh decorators resource
+     * @param decoratorName the decorator name
+     * @param decoratorDataModel the decorator data model that can be used to override the processor data model
+     * @return The decorated resource
+     */
+    public String decorate(String resource, Object controller, String decoratorsResource, String decoratorName,
+            Map<String, Object> decoratorDataModel) {
         try {
             ConfigLoader configLoader = new ConfigLoader(createTempFile(decoratorsResource, "decorators-test", ".xml"));
             Decorator decorator = configLoader.getDecoratorByName(decoratorName);
-            PageParser parser = new DivExtractingPageParser();            
-            Page page = parser.parse(processor.process(resource, controller).toCharArray());
+            PageParser parser = new HTMLPageParser();
             Map<String, Object> dataModel = processor.createDataModel(controller);
+            // Add/override any entries from the decorator data model
+            for (String key : decoratorDataModel.keySet()) {
+                dataModel.put(key, decoratorDataModel.get(key));
+            }
+            Page page = parser.parse(processor.process(resource, dataModel).toCharArray());
+            // Add the page title and body 
             dataModel.put("title", page.getTitle());
             dataModel.put("body", page.getBody());
             return processor.process(decorator.getPage(), dataModel);

Modified: trunk/waffle-testing/src/test/java/org/codehaus/waffle/testing/view/ViewHarnessTest.java (683 => 684)

--- trunk/waffle-testing/src/test/java/org/codehaus/waffle/testing/view/ViewHarnessTest.java	2008-05-20 13:07:04 UTC (rev 683)
+++ trunk/waffle-testing/src/test/java/org/codehaus/waffle/testing/view/ViewHarnessTest.java	2008-05-20 13:34:15 UTC (rev 684)
@@ -7,6 +7,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.HashMap;
 
 import org.codehaus.waffle.testing.ListController;
 import org.junit.Test;
@@ -28,7 +29,7 @@
     public void canDecorateWithSitemesh() {
         ListController controller = new ListController();
         controller.list();
-        String decorated = decorateView("freemarker/list.ftl", controller, "WEB-INF/testing-decorators.xml", "layout");
+        String decorated = decorateView("freemarker/list.ftl", controller, "WEB-INF/testing-decorators.xml", "layout", new HashMap<String, Object>());
         assertTrue(decorated.length() > 0);
     }
 
@@ -40,7 +41,9 @@
         exportView(processView("freemarker/list.ftl", controller, false), list);
         assertTrue(list.exists());
         File decorated = new File("target/export/decorated-list.html");
-        exportView(decorateView("freemarker/list.ftl", controller, "WEB-INF/testing-decorators.xml", "layout"), decorated);
+        HashMap<String, Object> decoratorDataModel = new HashMap<String, Object>();
+        decoratorDataModel.put("base", "..");
+        exportView(decorateView("freemarker/list.ftl", controller, "WEB-INF/testing-decorators.xml", "layout", decoratorDataModel), decorated);
         assertTrue(decorated.exists());
     }
 }


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to