- Revision
- 684
- Author
- mauro
- Date
- 2008-05-20 08:34:15 -0500 (Tue, 20 May 2008)
Log Message
WAFFLE-81: Added decorator data model to override any entry of processor data model.
Modified Paths
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:
