Author: mgrigorov
Date: Mon Oct  3 14:39:41 2011
New Revision: 1178419

URL: http://svn.apache.org/viewvc?rev=1178419&view=rev
Log:
WICKET-4095 Adding wicket-example for rendering a Page in the current 
requestCycle


Added:
    
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/
    
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/MailTemplateApplication.java
    
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/TemplateBasedOnPage.html
    
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/TemplateBasedOnPage.java
    
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/resource.txt
    
wicket/trunk/wicket-examples/src/main/resources/org/apache/wicket/examples/asemail/
    
wicket/trunk/wicket-examples/src/main/resources/org/apache/wicket/examples/asemail/mail-template.tmpl
Modified:
    wicket/trunk/wicket-examples/pom.xml
    
wicket/trunk/wicket-examples/src/main/resources/org/apache/wicket/examples/homepage/HomePage.html
    wicket/trunk/wicket-examples/src/main/webapp/WEB-INF/web.xml

Modified: wicket/trunk/wicket-examples/pom.xml
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/pom.xml?rev=1178419&r1=1178418&r2=1178419&view=diff
==============================================================================
--- wicket/trunk/wicket-examples/pom.xml (original)
+++ wicket/trunk/wicket-examples/pom.xml Mon Oct  3 14:39:41 2011
@@ -141,6 +141,7 @@
                                        <include>**/*.xml</include>
                                        <include>**/*.properties</include>
                                        <include>**/*.vm</include>
+                                       <include>**/*.tmpl</include>
                                </includes>
                        </resource>
                </resources> 

Added: 
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=1178419&view=auto
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.html
 (added)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.html
 Mon Oct  3 14:39:41 2011
@@ -0,0 +1,27 @@
+<html xmlns:wicket="http://wicket.apache.org";>
+<head>
+    <title>Wicket Examples - Render mail templates</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+</head>
+<body>
+    <span wicket:id="mainNavigation"/>
+    
+    <div wicket:id="feedback"></div>
+    
+    <form wicket:id="form">
+        <label wicket:for="name"><wicket:label>Enter your 
name:</wicket:label></label><input wicket:id="name"/>
+    </form>
+    
+    Using Wicket page as template: <a wicket:id="pageBasedLink">generate</a>.
+    <br/>
+    Using Wicket TextTemplate as template: <a 
wicket:id="textTemplateBasedLink">generate</a>.
+    
+    <br/><br/>
+    
+    <h3>Here is the generated markup:</h3>
+    <div wicket:id="result">
+    
+    </div>
+    
+</body>
+</html>
\ No newline at end of file

Added: 
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=1178419&view=auto
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.java
 (added)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplate.java
 Mon Oct  3 14:39:41 2011
@@ -0,0 +1,199 @@
+/*
+ * 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 java.util.HashMap;
+import java.util.Map;
+
+import org.apache.wicket.Component;
+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.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.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.handler.PageProvider;
+import org.apache.wicket.request.handler.RenderPageRequestHandler;
+import 
org.apache.wicket.request.handler.RenderPageRequestHandler.RedirectPolicy;
+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.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}
+ */
+public class MailTemplate extends WicketExamplePage
+{
+
+       /**
+        * The name of the customer for which a mail body will be generated.
+        */
+       private String name = "";
+
+       /**
+        * Constructor.
+        * 
+        * @param parameters
+        *            the current page parameters
+        */
+       public MailTemplate(final PageParameters parameters)
+       {
+               super(parameters);
+
+               final FeedbackPanel feedback = new FeedbackPanel("feedback");
+               feedback.setOutputMarkupId(true);
+               add(feedback);
+
+               final Form<Void> form = new Form<Void>("form");
+               add(form);
+
+               TextField<String> nameTextField = new TextField<String>("name", 
new PropertyModel<String>(
+                       MailTemplate.this, "name"));
+               nameTextField.setOutputMarkupId(true);
+               form.add(nameTextField);
+
+               final MultiLineLabel result = new MultiLineLabel("result", new 
Model<String>());
+               result.setOutputMarkupId(true);
+               add(result);
+
+               AjaxSubmitLink basedOnPageLink = new 
AjaxSubmitLink("pageBasedLink", form)
+               {
+                       @Override
+                       protected void onSubmit(AjaxRequestTarget target, 
Form<?> form)
+                       {
+                               CharSequence pageHtml = 
renderPage(TemplateBasedOnPage.class);
+
+                               updateResult(result, pageHtml, target);
+                               target.add(feedback);
+                       }
+
+                       @Override
+                       protected void onError(AjaxRequestTarget target, 
Form<?> form)
+                       {
+                               target.add(feedback);
+                       }
+               };
+
+               AjaxSubmitLink basedOnTextTemplateLink = new 
AjaxSubmitLink("textTemplateBasedLink", form)
+               {
+                       @Override
+                       protected void onSubmit(AjaxRequestTarget target, 
Form<?> form)
+                       {
+
+                               CharSequence templateHtml = renderTemplate(new 
PackageTextTemplate(
+                                       MailTemplate.class, 
"mail-template.tmpl"));
+                               updateResult(result, templateHtml, target);
+                               target.add(feedback);
+                       }
+
+                       @Override
+                       protected void onError(AjaxRequestTarget target, 
Form<?> form)
+                       {
+                               target.add(feedback);
+                       }
+               };
+
+               add(basedOnPageLink, basedOnTextTemplateLink);
+       }
+
+       /**
+        * 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 requestCycle = getRequestCycle();
+
+               final Response oldResponse = requestCycle.getResponse();
+               BufferedWebResponse tempResponse = new 
BufferedWebResponse(null);
+
+               try
+               {
+                       requestCycle.setResponse(tempResponse);
+                       pageRenderer.respond(requestCycle);
+               }
+               finally
+               {
+                       requestCycle.setResponse(oldResponse);
+               }
+
+               return tempResponse.getText();
+       }
+
+       /**
+        * Updates the component that is used to show the generated mail body 
for this example.
+        * 
+        * @param result
+        *            the component that shows the mail body
+        * @param mailBody
+        *            the text for the mail body
+        * @param target
+        *            the current Ajax request handler
+        */
+       private void updateResult(final Component result, final CharSequence 
mailBody,
+               final AjaxRequestTarget target)
+       {
+               result.setDefaultModelObject(mailBody);
+               target.add(result);
+       }
+
+}

Added: 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplateApplication.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplateApplication.java?rev=1178419&view=auto
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplateApplication.java
 (added)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/MailTemplateApplication.java
 Mon Oct  3 14:39:41 2011
@@ -0,0 +1,34 @@
+/*
+ * 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.Page;
+import org.apache.wicket.protocol.http.WebApplication;
+
+/**
+ * 
+ */
+public class MailTemplateApplication extends WebApplication
+{
+
+       @Override
+       public Class<? extends Page> getHomePage()
+       {
+               return MailTemplate.class;
+       }
+
+}

Added: 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/TemplateBasedOnPage.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/TemplateBasedOnPage.html?rev=1178419&view=auto
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/TemplateBasedOnPage.html
 (added)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/TemplateBasedOnPage.html
 Mon Oct  3 14:39:41 2011
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html xmlns:wicket="http://wicket.apache.org";>
+       
+       <head>
+               <title>A template based on a page</title>
+       </head>
+       
+       <body>
+        <!-- The next is dynamically generated -->
+        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.
+
+        <!-- This link is also dynamically generated -->
+        Please download it <a wicket:id="downloadLink">here</a>!
+        
+        <br/><br/>
+        Sincerely,
+        The Marketing team
+       </body>
+       
+</html>
\ No newline at end of file

Added: 
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=1178419&view=auto
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/TemplateBasedOnPage.java
 (added)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/TemplateBasedOnPage.java
 Mon Oct  3 14:39:41 2011
@@ -0,0 +1,50 @@
+/*
+ * 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.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.ExternalLink;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.PackageResourceReference;
+
+/**
+ * A page which acts a template for mails which should be send to the 
customers.
+ */
+public class TemplateBasedOnPage extends WebPage
+{
+       /**
+        * Constructor.
+        * 
+        * @param parameters
+        *            the current page parameters
+        */
+       public TemplateBasedOnPage(final PageParameters parameters)
+       {
+               super(parameters);
+
+               add(new Label("name", 
parameters.get("name").toString("Unknown")));
+
+               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);
+       }
+}

Added: 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/resource.txt
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/resource.txt?rev=1178419&view=auto
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/resource.txt
 (added)
+++ 
wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/asemail/resource.txt
 Mon Oct  3 14:39:41 2011
@@ -0,0 +1,2 @@
+This is the new version of product X.
+Enjoy!
\ No newline at end of file

Added: 
wicket/trunk/wicket-examples/src/main/resources/org/apache/wicket/examples/asemail/mail-template.tmpl
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/resources/org/apache/wicket/examples/asemail/mail-template.tmpl?rev=1178419&view=auto
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/resources/org/apache/wicket/examples/asemail/mail-template.tmpl
 (added)
+++ 
wicket/trunk/wicket-examples/src/main/resources/org/apache/wicket/examples/asemail/mail-template.tmpl
 Mon Oct  3 14:39:41 2011
@@ -0,0 +1,9 @@
+Hello, ${name}
+
+You receive this email because you are subscribed for our products.
+We just released a new version of product X.
+
+Please download it <a href="${downloadLink}">here</a>
+
+Sincerely,
+The Marketing team
\ No newline at end of file

Modified: 
wicket/trunk/wicket-examples/src/main/resources/org/apache/wicket/examples/homepage/HomePage.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/resources/org/apache/wicket/examples/homepage/HomePage.html?rev=1178419&r1=1178418&r2=1178419&view=diff
==============================================================================
--- 
wicket/trunk/wicket-examples/src/main/resources/org/apache/wicket/examples/homepage/HomePage.html
 (original)
+++ 
wicket/trunk/wicket-examples/src/main/resources/org/apache/wicket/examples/homepage/HomePage.html
 Mon Oct  3 14:39:41 2011
@@ -39,6 +39,7 @@
         <tr><td align="right"><a href="upload/single">upload</a></td><td> - 
Single file upload.</td></tr>
         <tr><td align="right"><a href="upload/multi">upload</a></td><td> - 
Multiple file upload.</td></tr>
         <tr><td align="right"><a href="template">template</a></td><td> - 
Templating example.</td></tr>
+        <tr><td align="right"><a href="mailtemplate">mail 
template</a></td><td> - Generate mail templates out of Page or 
TextTemplate.</td></tr>
                <tr><td align="right"><a 
href="stateless">stateless</a></td><td> - Demonstrates stateless 
pages/sessions.</td></tr>
         <tr><td align="right"><a href="hellobrowser">hellobrowser</a></td><td> 
- Browser snooper.</td></tr>
         <tr><td align="right"><a href="frames">frames</a></td><td> - Example 
demonstrating HTML frames.</td></tr>
@@ -68,4 +69,4 @@
 </div>
 </body>
 
-</html>
\ No newline at end of file
+</html>

Modified: wicket/trunk/wicket-examples/src/main/webapp/WEB-INF/web.xml
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/webapp/WEB-INF/web.xml?rev=1178419&r1=1178418&r2=1178419&view=diff
==============================================================================
--- wicket/trunk/wicket-examples/src/main/webapp/WEB-INF/web.xml (original)
+++ wicket/trunk/wicket-examples/src/main/webapp/WEB-INF/web.xml Mon Oct  3 
14:39:41 2011
@@ -432,6 +432,14 @@
                </init-param>
        </filter>
 
+    <filter>
+        <filter-name>wicket.mail-template</filter-name>
+        
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
+        <init-param>
+            <param-name>applicationClassName</param-name>
+            
<param-value>org.apache.wicket.examples.asemail.MailTemplateApplication</param-value>
+        </init-param>
+    </filter>
        <!-- couple the session filter to the helloworld servlet -->
 
 
@@ -741,6 +749,12 @@
                <dispatcher>REQUEST</dispatcher>
                <dispatcher>INCLUDE</dispatcher>
        </filter-mapping>
+     
+    <filter-mapping>
+        <filter-name>wicket.mail-template</filter-name>
+        <url-pattern>/mailtemplate/*</url-pattern>
+    </filter-mapping>
+ 
        
        <!-- LISTENER -->
        <listener>
@@ -754,9 +768,9 @@
        </servlet>
 
        <servlet-mapping>
-               <servlet-name>HelloWorldServlet</servlet-name>
-               <url-pattern>/helloworldservlet/*</url-pattern>
-       </servlet-mapping>
+        <servlet-name>HelloWorldServlet</servlet-name>
+        <url-pattern>/helloworldservlet/*</url-pattern>
+    </servlet-mapping>
 
        <servlet>
                <servlet-name>ServletTest</servlet-name>


Reply via email to