Updated Branches:
  refs/heads/master 03df3bcd8 -> 6b8ab22ea

WICKET-5005 Add Utility to allow conversion from Panel (or Component) to html 
String


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/6b8ab22e
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/6b8ab22e
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/6b8ab22e

Branch: refs/heads/master
Commit: 6b8ab22eaefb37cd17c2a6dae12f46517bfb59a5
Parents: 03df3bc
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Wed Mar 13 15:22:13 2013 +0100
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Wed Mar 13 15:22:13 2013 +0100

----------------------------------------------------------------------
 .../wicket/core/util/string/ComponentRenderer.java |  130 +++++++++++++
 .../wicket/examples/asemail/MailTemplate.java      |  147 ++-------------
 2 files changed, 147 insertions(+), 130 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/6b8ab22e/wicket-core/src/main/java/org/apache/wicket/core/util/string/ComponentRenderer.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/util/string/ComponentRenderer.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/util/string/ComponentRenderer.java
new file mode 100644
index 0000000..308b548
--- /dev/null
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/util/string/ComponentRenderer.java
@@ -0,0 +1,130 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.string;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.core.request.handler.PageProvider;
+import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.protocol.http.BufferedWebResponse;
+import org.apache.wicket.request.Response;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.cycle.RequestCycleContext;
+import org.apache.wicket.request.handler.render.PageRenderer;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+
+/**
+ * A helper class for rendering components and pages
+ */
+public class ComponentRenderer
+{
+       /**
+        * The id to use when rendering a component
+        */
+       public static final String COMP_ID = "compId";
+
+       /**
+        * Collects the html generated by the rendering of a page.
+        *
+        * @param pageProvider
+        *            the provider of the page class/instance and its parameters
+        * @return the html rendered by a page
+        */
+       public static CharSequence renderPage(final PageProvider pageProvider)
+       {
+               final RenderPageRequestHandler handler = new 
RenderPageRequestHandler(pageProvider,
+                               
RenderPageRequestHandler.RedirectPolicy.NEVER_REDIRECT);
+
+               Application application = Application.get();
+               final PageRenderer pageRenderer = 
application.getPageRendererProvider().get(handler);
+
+               RequestCycle originalRequestCycle = RequestCycle.get();
+
+               BufferedWebResponse tempResponse = new 
BufferedWebResponse(null);
+
+               RequestCycleContext requestCycleContext = new 
RequestCycleContext(originalRequestCycle.getRequest(),
+                               tempResponse, 
application.getRootRequestMapper(), 
application.getExceptionMapperProvider().get());
+               RequestCycle tempRequestCycle = new 
RequestCycle(requestCycleContext);
+
+               final Response oldResponse = originalRequestCycle.getResponse();
+
+               try
+               {
+                       originalRequestCycle.setResponse(tempResponse);
+                       pageRenderer.respond(tempRequestCycle);
+               }
+               finally
+               {
+                       originalRequestCycle.setResponse(oldResponse);
+               }
+
+               return tempResponse.getText();
+       }
+
+
+       /**
+        * Collects the html generated by the rendering of a component.
+        *
+        * @param component
+        *            the component to render.
+        * @return the html rendered by the component
+        */
+       public static CharSequence renderComponent(final Component component)
+       {
+               RequestCycle requestCycle = RequestCycle.get();
+
+               final Response originalResponse = requestCycle.getResponse();
+               BufferedWebResponse tempResponse = new 
BufferedWebResponse(null);
+
+               try
+               {
+                       requestCycle.setResponse(tempResponse);
+
+                       RenderPage page = new RenderPage();
+                       page.add(component);
+
+                       component.render();
+               }
+               finally
+               {
+                       requestCycle.setResponse(originalResponse);
+               }
+
+               return tempResponse.getText();
+       }
+
+       /**
+        * A page used as a parent for the component based rendering.
+        */
+       private static class RenderPage extends WebPage implements 
IMarkupResourceStreamProvider
+       {
+               private static final String MARKUP = "<wicket:container 
wicket:id='" + COMP_ID +
+                               "'></wicket:container>";
+
+               @Override
+               public IResourceStream getMarkupResourceStream(MarkupContainer 
container, Class<?> containerClass)
+               {
+                       return new StringResourceStream(MARKUP);
+               }
+
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/6b8ab22e/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.java
----------------------------------------------------------------------
diff --git 
a/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.java
 
b/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.java
index 7a26fcd..f3f1512 100644
--- 
a/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.java
+++ 
b/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.java
@@ -20,16 +20,12 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Page;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
 import org.apache.wicket.core.request.handler.PageProvider;
-import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
-import 
org.apache.wicket.core.request.handler.RenderPageRequestHandler.RedirectPolicy;
+import org.apache.wicket.core.util.string.ComponentRenderer;
 import org.apache.wicket.examples.WicketExamplePage;
-import org.apache.wicket.markup.IMarkupResourceStreamProvider;
-import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.MultiLineLabel;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.TextField;
@@ -37,16 +33,9 @@ import org.apache.wicket.markup.html.panel.FeedbackPanel;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.protocol.http.BufferedWebResponse;
-import org.apache.wicket.request.Response;
 import org.apache.wicket.request.Url;
-import org.apache.wicket.request.cycle.RequestCycle;
-import org.apache.wicket.request.cycle.RequestCycleContext;
-import org.apache.wicket.request.handler.render.PageRenderer;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.PackageResourceReference;
-import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.StringResourceStream;
 import org.apache.wicket.util.template.PackageTextTemplate;
 import org.apache.wicket.util.template.TextTemplate;
 
@@ -96,7 +85,10 @@ public class MailTemplate extends WicketExamplePage
                        @Override
                        protected void onSubmit(AjaxRequestTarget target, 
Form<?> form)
                        {
-                               CharSequence pageHtml = 
renderPage(TemplateBasedOnPage.class);
+                               PageParameters parameters = new 
PageParameters();
+                               parameters.set("name", name);
+                               PageProvider pageProvider = new 
PageProvider(TemplateBasedOnPage. class, parameters);
+                               CharSequence pageHtml = 
ComponentRenderer.renderPage(pageProvider);
 
                                updateResult(result, pageHtml, target);
                                target.add(feedback);
@@ -116,8 +108,8 @@ public class MailTemplate extends WicketExamplePage
                        @Override
                        protected void onSubmit(AjaxRequestTarget target, 
Form<?> form)
                        {
-                               CharSequence panelHtml = renderPanel(new 
MailTemplatePanel(DummyPage.COMP_ID,
-                                       new 
PropertyModel<String>(MailTemplate.this, "name")));
+                               CharSequence panelHtml = 
ComponentRenderer.renderComponent(new 
MailTemplatePanel(ComponentRenderer.COMP_ID,
+                                               new 
PropertyModel<String>(MailTemplate.this, "name")));
 
                                updateResult(result, panelHtml, target);
                                target.add(feedback);
@@ -137,9 +129,17 @@ public class MailTemplate extends WicketExamplePage
                        @Override
                        protected void onSubmit(AjaxRequestTarget target, 
Form<?> form)
                        {
+                               Map<String, Object> variables = new 
HashMap<String, Object>();
+                               variables.put("name", name);
 
-                               CharSequence templateHtml = renderTemplate(new 
PackageTextTemplate(
-                                       MailTemplate.class, 
"mail-template.tmpl"));
+                               CharSequence relativeUrl = urlFor(new 
PackageResourceReference(MailTemplate.class,
+                                               "resource.txt"), null);
+                               String href = 
getRequestCycle().getUrlRenderer().renderFullUrl(
+                                               
Url.parse(relativeUrl.toString()));
+                               variables.put("downloadLink", href);
+
+                               PackageTextTemplate template = new 
PackageTextTemplate(MailTemplate.class, "mail-template.tmpl");
+                               CharSequence templateHtml = 
template.asString(variables);
                                updateResult(result, templateHtml, target);
                                target.add(feedback);
                        }
@@ -155,119 +155,6 @@ public class MailTemplate extends WicketExamplePage
        }
 
        /**
-        * Loads the mail template from a file with placeholders, populates 
them and returns the text
-        * that can be used as mail body.
-        * 
-        * @param template
-        *            the {@link TextTemplate} to use for the final result
-        * @return the fully populated template
-        */
-       private CharSequence renderTemplate(final TextTemplate template)
-       {
-               Map<String, Object> variables = new HashMap<String, Object>();
-               variables.put("name", name);
-
-               CharSequence relativeUrl = urlFor(new 
PackageResourceReference(MailTemplate.class,
-                       "resource.txt"), null);
-               String href = getRequestCycle().getUrlRenderer().renderFullUrl(
-                       Url.parse(relativeUrl.toString()));
-               variables.put("downloadLink", href);
-
-               String html = template.asString(variables);
-               return html;
-       }
-
-       /**
-        * Collects the html generated by the rendering of a page.
-        * 
-        * @param pageClass
-        *            the class of the page which should be rendered.
-        * @return the html rendered by a page
-        */
-       private CharSequence renderPage(final Class<? extends Page> pageClass)
-       {
-               PageParameters parameters = new PageParameters();
-               parameters.set("name", name);
-
-               final RenderPageRequestHandler handler = new 
RenderPageRequestHandler(new PageProvider(
-                       pageClass, parameters), RedirectPolicy.NEVER_REDIRECT);
-
-               final PageRenderer pageRenderer = 
getApplication().getPageRendererProvider().get(handler);
-
-               RequestCycle originalRequestCycle = getRequestCycle();
-
-               BufferedWebResponse tempResponse = new 
BufferedWebResponse(null);
-
-               RequestCycleContext requestCycleContext = new 
RequestCycleContext(originalRequestCycle.getRequest(),
-                               tempResponse, 
getApplication().getRootRequestMapper(), 
getApplication().getExceptionMapperProvider().get());
-               RequestCycle tempRequestCycle = new 
RequestCycle(requestCycleContext);
-
-               final Response oldResponse = originalRequestCycle.getResponse();
-
-               try
-               {
-                       originalRequestCycle.setResponse(tempResponse);
-                       pageRenderer.respond(tempRequestCycle);
-               }
-               finally
-               {
-                       originalRequestCycle.setResponse(oldResponse);
-               }
-
-               return tempResponse.getText();
-       }
-
-       /**
-        * Collects the html generated by the rendering of a page.
-        * 
-        * @param panel
-        *            the panel that should be rendered.
-        * @return the html rendered by the panel
-        */
-       private CharSequence renderPanel(final Panel panel)
-       {
-               RequestCycle requestCycle = getRequestCycle();
-
-               final Response oldResponse = requestCycle.getResponse();
-               BufferedWebResponse tempResponse = new 
BufferedWebResponse(null);
-
-               try
-               {
-                       requestCycle.setResponse(tempResponse);
-
-                       DummyPage page = new DummyPage();
-                       page.add(panel);
-
-                       panel.render();
-               }
-               finally
-               {
-                       requestCycle.setResponse(oldResponse);
-               }
-
-               return tempResponse.getText();
-       }
-
-       /**
-        * A page used as a parent for the panel based templating.
-        */
-       private static class DummyPage extends WebPage implements 
IMarkupResourceStreamProvider
-       {
-               private static final long serialVersionUID = 1L;
-
-               private static final String COMP_ID = "dummy";
-
-               @Override
-               public IResourceStream getMarkupResourceStream(MarkupContainer 
container,
-                       Class<?> containerClass)
-               {
-                       return new StringResourceStream("<wicket:container 
wicket:id='" + COMP_ID +
-                               "'></wicket:container>");
-               }
-
-       }
-
-       /**
         * Updates the component that is used to show the generated mail body 
for this example.
         * 
         * @param result

Reply via email to