You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2011/11/01 14:55:05 UTC

svn commit: r1195999 - in /wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail: MailTemplate.html MailTemplate.java MailTemplatePanel.html MailTemplatePanel.java TemplateBasedOnPage.java

Author: mgrigorov
Date: Tue Nov  1 13:55:05 2011
New Revision: 1195999

URL: http://svn.apache.org/viewvc?rev=1195999&view=rev
Log:
Add example how to render a (mail) template from a Panel


Added:
    wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplatePanel.html
    wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplatePanel.java
Modified:
    wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.html
    wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.java
    wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/TemplateBasedOnPage.java

Modified: wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.html
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.html?rev=1195999&r1=1195998&r2=1195999&view=diff
==============================================================================
--- wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.html (original)
+++ wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.html Tue Nov  1 13:55:05 2011
@@ -14,6 +14,8 @@
     
     Using Wicket page as template: <a wicket:id="pageBasedLink">generate</a>.
     <br/>
+    Using Wicket panel as template: <a wicket:id="panelBasedLink">generate</a>.
+    <br/>
     Using Wicket TextTemplate as template: <a wicket:id="textTemplateBasedLink">generate</a>.
     
     <br/><br/>

Modified: wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.java?rev=1195999&r1=1195998&r2=1195999&view=diff
==============================================================================
--- wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.java (original)
+++ wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.java Tue Nov  1 13:55:05 2011
@@ -20,14 +20,18 @@ 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.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;
 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;
@@ -40,15 +44,18 @@ import org.apache.wicket.request.handler
 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;
 
 /**
- * An example page that shows how to generate email templates from Wicket {@link Page} or
- * {@link TextTemplate}
+ * An example page that shows how to generate email templates from a Wicket {@link Page}, a
+ * {@link Panel} or a {@link TextTemplate}
  */
 public class MailTemplate extends WicketExamplePage
 {
+	private static final long serialVersionUID = 1L;
 
 	/**
 	 * The name of the customer for which a mail body will be generated.
@@ -83,6 +90,8 @@ public class MailTemplate extends Wicket
 
 		AjaxSubmitLink basedOnPageLink = new AjaxSubmitLink("pageBasedLink", form)
 		{
+			private static final long serialVersionUID = 1L;
+
 			@Override
 			protected void onSubmit(AjaxRequestTarget target, Form<?> form)
 			{
@@ -99,8 +108,31 @@ public class MailTemplate extends Wicket
 			}
 		};
 
+		AjaxSubmitLink basedOnPanelLink = new AjaxSubmitLink("panelBasedLink", form)
+		{
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+			{
+				CharSequence panelHtml = renderPanel(new MailTemplatePanel(DummyPage.COMP_ID,
+					new PropertyModel<String>(MailTemplate.this, "name")));
+
+				updateResult(result, panelHtml, target);
+				target.add(feedback);
+			}
+
+			@Override
+			protected void onError(AjaxRequestTarget target, Form<?> form)
+			{
+				target.add(feedback);
+			}
+		};
+
 		AjaxSubmitLink basedOnTextTemplateLink = new AjaxSubmitLink("textTemplateBasedLink", form)
 		{
+			private static final long serialVersionUID = 1L;
+
 			@Override
 			protected void onSubmit(AjaxRequestTarget target, Form<?> form)
 			{
@@ -118,7 +150,7 @@ public class MailTemplate extends Wicket
 			}
 		};
 
-		add(basedOnPageLink, basedOnTextTemplateLink);
+		add(basedOnPageLink, basedOnPanelLink, basedOnTextTemplateLink);
 	}
 
 	/**
@@ -180,6 +212,55 @@ public class MailTemplate extends Wicket
 	}
 
 	/**
+	 * 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";
+
+		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

Added: wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplatePanel.html
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplatePanel.html?rev=1195999&view=auto
==============================================================================
--- wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplatePanel.html (added)
+++ wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplatePanel.html Tue Nov  1 13:55:05 2011
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html xmlns:wicket="http://wicket.apache.org">
+	<head>
+    	<title>ignored</title>
+	</head>
+	<body>
+		<wicket:panel>
+            Hello, <span wicket:id="name"></span>
+
+            You receive this email because you are subscribed for our products.
+            We just released a new version of product X.
+            
+            Please download it <a wicket:id="downloadLink">here</a>
+            
+            Sincerely,
+            The Marketing team
+		</wicket:panel>
+	</body>
+</html>
\ No newline at end of file

Added: wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplatePanel.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplatePanel.java?rev=1195999&view=auto
==============================================================================
--- wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplatePanel.java (added)
+++ wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplatePanel.java Tue Nov  1 13:55:05 2011
@@ -0,0 +1,54 @@
+/*
+ * 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.examples.asemail;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.ExternalLink;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.resource.PackageResourceReference;
+
+/**
+ * A demo panel which will be used to render mail template
+ */
+public class MailTemplatePanel extends Panel
+{
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param id
+	 *            the component id
+	 * @param nameModel
+	 *            the model that brings the customer's name
+	 */
+	public MailTemplatePanel(String id, IModel<String> nameModel)
+	{
+		super(id);
+
+		add(new Label("name", nameModel));
+
+		CharSequence relativeUrl = urlFor(new PackageResourceReference(MailTemplate.class,
+			"resource.txt"), null);
+		String href = getRequestCycle().getUrlRenderer().renderFullUrl(
+			Url.parse(relativeUrl.toString()));
+		ExternalLink downloadLink = new ExternalLink("downloadLink", href);
+		add(downloadLink);
+	}
+}

Modified: wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/TemplateBasedOnPage.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/TemplateBasedOnPage.java?rev=1195999&r1=1195998&r2=1195999&view=diff
==============================================================================
--- wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/TemplateBasedOnPage.java (original)
+++ wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/TemplateBasedOnPage.java Tue Nov  1 13:55:05 2011
@@ -28,6 +28,8 @@ import org.apache.wicket.request.resourc
  */
 public class TemplateBasedOnPage extends WebPage
 {
+	private static final long serialVersionUID = 1L;
+
 	/**
 	 * Constructor.
 	 *