Author: nilsga
Date: Mon Nov  5 02:06:31 2007
New Revision: 591942

URL: http://svn.apache.org/viewvc?rev=591942&view=rev
Log:
WW-2296 Added jetty-pluto embedded to the sample application. Also added some 
new samples and a new integration test.

Added:
    
struts/struts2/trunk/apps/portlet/src/main/resources/org/apache/struts2/portlet/example/FormExample-formExamplePrg-validation.xml
    
struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/jetty-pluto-web-default.xml
    
struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleInputPrg.jsp
    
struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleSubmitToSelfWithValidation.jsp
    struts/struts2/trunk/apps/portlet/src/test/
    struts/struts2/trunk/apps/portlet/src/test/java/
    struts/struts2/trunk/apps/portlet/src/test/java/JettyPlutoLauncher.java
    struts/struts2/trunk/apps/portlet/src/test/java/org/
    struts/struts2/trunk/apps/portlet/src/test/java/org/apache/
    struts/struts2/trunk/apps/portlet/src/test/java/org/apache/struts2/
    struts/struts2/trunk/apps/portlet/src/test/java/org/apache/struts2/portlet/
    
struts/struts2/trunk/apps/portlet/src/test/java/org/apache/struts2/portlet/test/
    
struts/struts2/trunk/apps/portlet/src/test/java/org/apache/struts2/portlet/test/BasePortletTest.java
    
struts/struts2/trunk/apps/portlet/src/test/java/org/apache/struts2/portlet/test/Struts2PortletTest.java
Modified:
    struts/struts2/trunk/apps/portlet/   (props changed)
    
struts/struts2/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormExample.java
    struts/struts2/trunk/apps/portlet/src/main/resources/struts-view.xml
    struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/index.jsp

Propchange: struts/struts2/trunk/apps/portlet/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Mon Nov  5 02:06:31 2007
@@ -2,3 +2,6 @@
 *.ipr
 *.iml
 target
+.settings
+.classpath
+.project

Modified: 
struts/struts2/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormExample.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormExample.java?rev=591942&r1=591941&r2=591942&view=diff
==============================================================================
--- 
struts/struts2/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormExample.java
 (original)
+++ 
struts/struts2/trunk/apps/portlet/src/main/java/org/apache/struts2/portlet/example/FormExample.java
 Mon Nov  5 02:06:31 2007
@@ -20,18 +20,17 @@
  */
 package org.apache.struts2.portlet.example;
 
+import org.apache.struts2.dispatcher.DefaultActionSupport;
+
 import com.opensymphony.xwork2.ActionSupport;
 
 /**
  */
-public class FormExample extends ActionSupport {
+public class FormExample extends DefaultActionSupport {
 
     String firstName = null;
     String lastName = null;
-    public String execute() throws Exception {
-        // TODO Auto-generated method stub
-        return super.execute();
-    }
+
     public String getFirstName() {
         return firstName;
     }
@@ -43,5 +42,9 @@
     }
     public void setLastName(String lastName) {
         this.lastName = lastName;
+    }
+    
+    public String displayResult() {
+       return "displayResult";
     }
 }

Added: 
struts/struts2/trunk/apps/portlet/src/main/resources/org/apache/struts2/portlet/example/FormExample-formExamplePrg-validation.xml
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/portlet/src/main/resources/org/apache/struts2/portlet/example/FormExample-formExamplePrg-validation.xml?rev=591942&view=auto
==============================================================================
--- 
struts/struts2/trunk/apps/portlet/src/main/resources/org/apache/struts2/portlet/example/FormExample-formExamplePrg-validation.xml
 (added)
+++ 
struts/struts2/trunk/apps/portlet/src/main/resources/org/apache/struts2/portlet/example/FormExample-formExamplePrg-validation.xml
 Mon Nov  5 02:06:31 2007
@@ -0,0 +1,13 @@
+<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd";>
+<validators>
+    <field name="firstName">
+        <field-validator type="requiredstring">
+            <message>You must enter a first name</message>
+        </field-validator>
+    </field>
+    <field name="lastName">
+        <field-validator type="requiredstring">
+            <message>You must enter a last name</message>
+        </field-validator>
+    </field>
+</validators>

Modified: struts/struts2/trunk/apps/portlet/src/main/resources/struts-view.xml
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/portlet/src/main/resources/struts-view.xml?rev=591942&r1=591941&r2=591942&view=diff
==============================================================================
--- struts/struts2/trunk/apps/portlet/src/main/resources/struts-view.xml 
(original)
+++ struts/struts2/trunk/apps/portlet/src/main/resources/struts-view.xml Mon 
Nov  5 02:06:31 2007
@@ -28,6 +28,21 @@
                        </result>
                </action>
                
+               <action name="formExamplePrg" 
class="org.apache.struts2.portlet.example.FormExample">
+                       <result name="input">
+                               /WEB-INF/view/formExampleInputPrg.jsp
+                       </result>
+                       <result name="success" type="redirectAction">
+                               <param name="actionName">formExamplePrg</param>
+                               <param name="method">displayResult</param>
+                               <param name="firstName">${firstName}</param>
+                               <param name="lastName">${lastName}</param>
+                       </result>
+                       <result name="displayResult">
+                               /WEB-INF/view/formExample.jsp
+                       </result>
+               </action>
+               
                <action name="formExampleModelDriven"
                        
class="org.apache.struts2.portlet.example.FormExampleModelDriven">
                        <result name="input">

Added: 
struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/jetty-pluto-web-default.xml
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/jetty-pluto-web-default.xml?rev=591942&view=auto
==============================================================================
--- 
struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/jetty-pluto-web-default.xml
 (added)
+++ 
struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/jetty-pluto-web-default.xml
 Mon Nov  5 02:06:31 2007
@@ -0,0 +1,384 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!-- ===================================================================== -->
+<!-- This file contains the default descriptor for web applications.       -->
+<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+<!-- The intent of this descriptor is to include jetty specific or common  -->
+<!-- configuration for all webapps.   If a context has a webdefault.xml    -->
+<!-- descriptor, it is applied before the contexts own web.xml file        -->
+<!--                                                                       -->
+<!-- A context may be assigned a default descriptor by:                    -->
+<!--  + Calling WebApplicationContext.setDefaultsDescriptor                -->
+<!--  + Passed an arg to addWebApplications                                -->
+<!--                                                                       -->
+<!-- This file is used both as the resource within the jetty.jar (which is -->
+<!-- used as the default if no explicit defaults descriptor is set) and it -->
+<!-- is copied to the etc directory of the Jetty distro and explicitly     -->
+<!-- by the jetty.xml file.                                                -->
+<!--                                                                       -->
+<!-- ===================================================================== -->
+<web-app 
+   xmlns="http://java.sun.com/xml/ns/javaee"; 
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"; 
+   metadata-complete="true"
+   version="2.5"> 
+
+  <description>
+    Default web.xml file.  
+    This file is applied to a Web application before it's own WEB_INF/web.xml 
file
+  </description>
+
+  <!-- ==================================================================== -->
+  <!-- Context params to control Session Cookies                            -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <!-- UNCOMMENT TO ACTIVATE
+  <context-param>
+    <param-name>org.mortbay.jetty.servlet.SessionDomain</param-name>
+    <param-value>127.0.0.1</param-value>
+  </context-param>
+
+  <context-param>
+    <param-name>org.mortbay.jetty.servlet.SessionPath</param-name>
+    <param-value>/</param-value>
+  </context-param>
+
+  <context-param>
+    <param-name>org.mortbay.jetty.servlet.MaxAge</param-name>
+    <param-value>-1</param-value>
+  </context-param>
+  -->
+
+  <context-param>
+    <param-name>org.mortbay.jetty.webapp.NoTLDJarPattern</param-name>
+    
<param-value>start.jar|ant-.*\.jar|dojo-.*\.jar|jetty-.*\.jar|jsp-api-.*\.jar|junit-.*\.jar|servlet-api-.*\.jar|dnsns\.jar|rt\.jar|jsse\.jar|tools\.jar|sunpkcs11\.jar|sunjce_provider\.jar|xerces.*\.jar</param-value>
+  </context-param>
+       
+       <listener>
+               <listener-class>
+                       
com.bekk.boss.pluto.embedded.jetty.util.OverrideContextLoaderListener
+        </listener-class>
+       </listener>
+  <listener>
+               <listener-class>
+                       com.bekk.boss.pluto.embedded.util.PortalStartupListener
+               </listener-class>
+       </listener>
+  <filter>
+         <filter-name>plutoResourceFilter</filter-name>
+         
<filter-class>com.bekk.boss.pluto.embedded.util.PlutResourcesFilter</filter-class>
+  </filter>
+  <filter>
+        <filter-name>plutoPortalDriver</filter-name>
+        
<filter-class>com.bekk.boss.pluto.embedded.util.PlutoPortalDriverFilter</filter-class>
+  </filter>
+       
+   <filter-mapping>
+               <filter-name>plutoResourceFilter</filter-name>
+               <url-pattern>*.css</url-pattern>
+       </filter-mapping>
+       <filter-mapping>
+               <filter-name>plutoResourceFilter</filter-name>
+               <url-pattern>*.gif</url-pattern>
+       </filter-mapping>
+       <filter-mapping>
+               <filter-name>plutoResourceFilter</filter-name>
+               <url-pattern>*.png</url-pattern>
+       </filter-mapping>
+       <filter-mapping>
+               <filter-name>plutoResourceFilter</filter-name>
+               <url-pattern>*.js</url-pattern>
+       </filter-mapping>
+       <filter-mapping>
+               <filter-name>plutoPortalDriver</filter-name>
+               <url-pattern>/pluto/index.jsp</url-pattern>
+       </filter-mapping>
+       <filter-mapping>
+               <filter-name>plutoPortalDriver</filter-name>
+               <url-pattern>/pluto/index.jsp/*</url-pattern>
+       </filter-mapping>
+
+  <!-- ==================================================================== -->
+  <!-- The default servlet.                                                 -->
+  <!-- This servlet, normally mapped to /, provides the handling for static -->
+  <!-- content, OPTIONS and TRACE methods for the context.                  -->
+  <!-- The following initParameters are supported:                          -->
+  <!--                                                                      -->
+  <!--   acceptRanges     If true, range requests and responses are         -->
+  <!--                    supported                                         -->
+  <!--                                                                      -->
+  <!--   dirAllowed       If true, directory listings are returned if no    -->
+  <!--                    welcome file is found. Else 403 Forbidden.        -->
+  <!--                                                                      -->
+  <!--   redirectWelcome  If true, redirect welcome file requests           -->
+  <!--                    else use request dispatcher forwards              -->
+  <!--                                                                      -->
+  <!--   gzip             If set to true, then static content will be 
served--> 
+  <!--                    as gzip content encoded if a matching resource is -->
+  <!--                    found ending with ".gz"                           -->
+  <!--                                                                      -->
+  <!--   resoureBase      Can be set to replace the context resource base   -->
+  <!--                                                                      -->
+  <!--   relativeResourceBase                                               -->
+  <!--                    Set with a pathname relative to the base of the   -->
+  <!--                    servlet context root. Useful for only serving     -->
+  <!--                    static content from only specific subdirectories. -->
+  <!--                                                                      -->
+  <!--   useFileMappedBuffer                                                -->
+  <!--                    If set to true (the default), a  memory mapped    -->
+  <!--                    file buffer will be used to serve static content  -->
+  <!--                    when using an NIO connector. Setting this value   -->
+  <!--                    to false means that a direct buffer will be used  -->
+  <!--                    instead. If you are having trouble with Windows   -->
+  <!--                    file locking, set this to false.                  -->
+  <!--                                                                      -->
+  <!--  cacheControl      If set, all static content will have this value   -->
+  <!--                    set as the cache-control header.                  -->
+  <!--                                                                      -->
+  <!--  maxCacheSize      Maximum size of the static resource cache         -->
+  <!--                                                                      -->
+  <!--  maxCachedFileSize Maximum size of any single file in the cache      -->
+  <!--                                                                      -->
+  <!--  maxCachedFiles    Maximum number of files in the cache              -->
+  <!--                                                                      -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <servlet>
+    <servlet-name>default</servlet-name>
+    <servlet-class>org.mortbay.jetty.servlet.DefaultServlet</servlet-class>
+    <init-param>
+      <param-name>acceptRanges</param-name>
+      <param-value>true</param-value>
+    </init-param>
+    <init-param>
+      <param-name>dirAllowed</param-name>
+      <param-value>true</param-value>
+    </init-param>
+    <init-param>
+      <param-name>redirectWelcome</param-name>
+      <param-value>false</param-value>
+    </init-param>
+    <init-param>
+      <param-name>maxCacheSize</param-name>
+      <param-value>4000000</param-value>
+    </init-param>
+    <init-param>
+      <param-name>maxCachedFileSize</param-name>
+      <param-value>254000</param-value>
+    </init-param>
+    <init-param>
+      <param-name>maxCachedFiles</param-name>
+      <param-value>1000</param-value>
+    </init-param>
+    <init-param>
+      <param-name>gzip</param-name>
+      <param-value>true</param-value>
+    </init-param>
+    <init-param>
+      <param-name>useFileMappedBuffer</param-name>
+      <param-value>true</param-value>
+    </init-param>  
+    <!--
+    <init-param>
+      <param-name>cacheControl</param-name>
+      <param-value>max-age=3600,public</param-value>
+    </init-param>
+    -->
+    <load-on-startup>0</load-on-startup>
+  </servlet> 
+
+  <servlet-mapping> <servlet-name>default</servlet-name> 
<url-pattern>/</url-pattern> </servlet-mapping>
+  
+
+  <!-- ==================================================================== -->
+  <!-- JSP Servlet                                                          -->
+  <!-- This is the jasper JSP servlet from the jakarta project              -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <!-- The JSP page compiler and execution servlet, which is the mechanism  -->
+  <!-- used by Glassfish to support JSP pages.  Traditionally, this servlet -->
+  <!-- is mapped to URL patterh "*.jsp".  This servlet supports the         -->
+  <!-- following initialization parameters (default values are in square    -->
+  <!-- brackets):                                                           -->
+  <!--                                                                      -->
+  <!--   checkInterval       If development is false and reloading is true, -->
+  <!--                       background compiles are enabled. checkInterval -->
+  <!--                       is the time in seconds between checks to see   -->
+  <!--                       if a JSP page needs to be recompiled. [300]    -->
+  <!--                                                                      -->
+  <!--   compiler            Which compiler Ant should use to compile JSP   -->
+  <!--                       pages.  See the Ant documenation for more      -->
+  <!--                       information. [javac]                           -->
+  <!--                                                                      -->
+  <!--   classdebuginfo      Should the class file be compiled with         -->
+  <!--                       debugging information?  [true]                 -->
+  <!--                                                                      -->
+  <!--   classpath           What class path should I use while compiling   -->
+  <!--                       generated servlets?  [Created dynamically      -->
+  <!--                       based on the current web application]          -->
+  <!--                       Set to ? to make the container explicitly set  -->
+  <!--                       this parameter.                                -->
+  <!--                                                                      -->
+  <!--   development         Is Jasper used in development mode (will check -->
+  <!--                       for JSP modification on every access)?  [true] -->
+  <!--                                                                      -->
+  <!--   enablePooling       Determines whether tag handler pooling is      -->
+  <!--                       enabled  [true]                                -->
+  <!--                                                                      -->
+  <!--   fork                Tell Ant to fork compiles of JSP pages so that -->
+  <!--                       a separate JVM is used for JSP page compiles   -->
+  <!--                       from the one Tomcat is running in. [true]      -->
+  <!--                                                                      -->
+  <!--   ieClassId           The class-id value to be sent to Internet      -->
+  <!--                       Explorer when using <jsp:plugin> tags.         -->
+  <!--                       [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93]   -->
+  <!--                                                                      -->
+  <!--   javaEncoding        Java file encoding to use for generating java  -->
+  <!--                       source files. [UTF-8]                          -->
+  <!--                                                                      -->
+  <!--   keepgenerated       Should we keep the generated Java source code  -->
+  <!--                       for each page instead of deleting it? [true]   -->
+  <!--                                                                      -->
+  <!--   logVerbosityLevel   The level of detailed messages to be produced  -->
+  <!--                       by this servlet.  Increasing levels cause the  -->
+  <!--                       generation of more messages.  Valid values are -->
+  <!--                       FATAL, ERROR, WARNING, INFORMATION, and DEBUG. -->
+  <!--                       [WARNING]                                      -->
+  <!--                                                                      -->
+  <!--   mappedfile          Should we generate static content with one     -->
+  <!--                       print statement per input line, to ease        -->
+  <!--                       debugging?  [false]                            -->
+  <!--                                                                      -->
+  <!--                                                                      -->
+  <!--   reloading           Should Jasper check for modified JSPs?  [true] -->
+  <!--                                                                      -->
+  <!--   suppressSmap        Should the generation of SMAP info for JSR45   -->
+  <!--                       debugging be suppressed?  [false]              -->
+  <!--                                                                      -->
+  <!--   dumpSmap            Should the SMAP info for JSR45 debugging be    -->
+  <!--                       dumped to a file? [false]                      -->
+  <!--                       False if suppressSmap is true                  -->
+  <!--                                                                      -->
+  <!--   scratchdir          What scratch directory should we use when      -->
+  <!--                       compiling JSP pages?  [default work directory  -->
+  <!--                       for the current web application]               -->
+  <!--                                                                      -->
+  <!--   tagpoolMaxSize      The maximum tag handler pool size  [5]         -->
+  <!--                                                                      -->
+  <!--   xpoweredBy          Determines whether X-Powered-By response       -->
+  <!--                       header is added by generated servlet  [false]  -->
+  <!--                                                                      -->
+  <!-- If you wish to use Jikes to compile JSP pages:                       -->
+  <!--   Set the init parameter "compiler" to "jikes".  Define              -->
+  <!--   the property "-Dbuild.compiler.emacs=true" when starting Jetty     -->
+  <!--   to cause Jikes to emit error messages in a format compatible with  -->
+  <!--   Jasper.                                                            -->
+  <!--   If you get an error reporting that jikes can't use UTF-8 encoding, -->
+  <!--   try setting the init parameter "javaEncoding" to "ISO-8859-1".     -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <servlet id="jsp">
+    <servlet-name>jsp</servlet-name>
+    
<servlet-class>com.bekk.boss.pluto.embedded.util.PortletJspServlet</servlet-class>
+    <init-param>
+        <param-name>logVerbosityLevel</param-name>
+        <param-value>DEBUG</param-value>
+    </init-param>
+    <init-param>
+        <param-name>fork</param-name>
+        <param-value>false</param-value>
+    </init-param>
+    <init-param>
+        <param-name>xpoweredBy</param-name>
+        <param-value>false</param-value>
+    </init-param>
+    <!--  
+    <init-param>
+        <param-name>classpath</param-name>
+        <param-value>?</param-value>
+    </init-param>
+    -->
+    <load-on-startup>0</load-on-startup>
+  </servlet>
+
+  <servlet-mapping> 
+    <servlet-name>jsp</servlet-name> 
+    <url-pattern>*.jsp</url-pattern> 
+    <url-pattern>*.jspf</url-pattern>
+    <url-pattern>*.jspx</url-pattern>
+    <url-pattern>*.xsp</url-pattern>
+    <url-pattern>*.JSP</url-pattern> 
+    <url-pattern>*.JSPF</url-pattern>
+    <url-pattern>*.JSPX</url-pattern>
+    <url-pattern>*.XSP</url-pattern>
+  </servlet-mapping>
+
+
+
+  <!-- ==================================================================== -->
+  <session-config>
+    <session-timeout>30</session-timeout>
+  </session-config>
+
+  <!-- ==================================================================== -->
+  <!-- Default MIME mappings                                                -->
+  <!-- The default MIME mappings are provided by the mime.properties        -->
+  <!-- resource in the org.mortbay.jetty.jar file.  Additional or modified  -->
+  <!-- mappings may be specified here                                       -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <!-- UNCOMMENT TO ACTIVATE
+  <mime-mapping>
+    <extension>mysuffix</extension>
+    <mime-type>mymime/type</mime-type>
+  </mime-mapping>
+  -->
+
+  <!-- ==================================================================== -->
+  <welcome-file-list>
+    <welcome-file>index.html</welcome-file>
+    <welcome-file>index.htm</welcome-file>
+    <welcome-file>index.jsp</welcome-file>
+  </welcome-file-list>
+       
+  <!-- ==================================================================== -->
+  <locale-encoding-mapping-list>
+    
<locale-encoding-mapping><locale>ar</locale><encoding>ISO-8859-6</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>be</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>bg</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>ca</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>cs</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>da</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>de</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>el</locale><encoding>ISO-8859-7</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>en</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>es</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>et</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>fi</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>fr</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>hr</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>hu</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>is</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>it</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>iw</locale><encoding>ISO-8859-8</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>ja</locale><encoding>Shift_JIS</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>ko</locale><encoding>EUC-KR</encoding></locale-encoding-mapping>
     
+    
<locale-encoding-mapping><locale>lt</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>lv</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>mk</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>nl</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>no</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>pl</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>pt</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>ro</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>ru</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>sh</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>sk</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>sl</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>sq</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>sr</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>sv</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>tr</locale><encoding>ISO-8859-9</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>uk</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>zh</locale><encoding>GB2312</encoding></locale-encoding-mapping>
+    
<locale-encoding-mapping><locale>zh_TW</locale><encoding>Big5</encoding></locale-encoding-mapping>
   
+  </locale-encoding-mapping-list>
+  
+</web-app>
+

Added: 
struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleInputPrg.jsp
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleInputPrg.jsp?rev=591942&view=auto
==============================================================================
--- 
struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleInputPrg.jsp
 (added)
+++ 
struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleInputPrg.jsp
 Mon Nov  5 02:06:31 2007
@@ -0,0 +1,8 @@
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+<H2>Input your name</H2>
+<s:form action="formExamplePrg" method="POST">
+    <s:textfield label="First name" name="firstName" value="%{firstName}"/>
+    <s:textfield label="Last name" name="lastName" value="%{lastName}"/>
+    <s:submit value="Submit the form"/>
+</s:form>

Added: 
struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleSubmitToSelfWithValidation.jsp
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleSubmitToSelfWithValidation.jsp?rev=591942&view=auto
==============================================================================
--- 
struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleSubmitToSelfWithValidation.jsp
 (added)
+++ 
struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/formExampleSubmitToSelfWithValidation.jsp
 Mon Nov  5 02:06:31 2007
@@ -0,0 +1,6 @@
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+<H2>Hello <s:property value="firstName"/> <s:property value="lastName"/></H2>
+<p/>
+<a href="<s:url action="index"/>">Back to front page</a>
+

Modified: 
struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/index.jsp
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/index.jsp?rev=591942&r1=591941&r2=591942&view=diff
==============================================================================
--- struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/index.jsp 
(original)
+++ struts/struts2/trunk/apps/portlet/src/main/webapp/WEB-INF/view/index.jsp 
Mon Nov  5 02:06:31 2007
@@ -4,6 +4,7 @@
 Here you'll find examples of what is possible with the Struts Portlet 
integration framework.
 <ul>
 <li><a href="<s:url action="formExample"/>">A simple form</a></li>
+<li><a href="<s:url action="formExamplePrg" method="input"/>">Form example 
with proper PRG</a></li>
 <li><a href="<s:url action="formExampleModelDriven" method="input"/>">Model 
driven example</li>
 <li><a href="<s:url action="validationExample"/>">Validation</a></li>
 <li><a href="<s:url action="tokenExample"/>">Token</a></li>

Added: struts/struts2/trunk/apps/portlet/src/test/java/JettyPlutoLauncher.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/portlet/src/test/java/JettyPlutoLauncher.java?rev=591942&view=auto
==============================================================================
--- struts/struts2/trunk/apps/portlet/src/test/java/JettyPlutoLauncher.java 
(added)
+++ struts/struts2/trunk/apps/portlet/src/test/java/JettyPlutoLauncher.java Mon 
Nov  5 02:06:31 2007
@@ -0,0 +1,19 @@
+import org.apache.pluto.core.PortletServlet;
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.servlet.ServletHolder;
+import org.mortbay.jetty.webapp.WebAppContext;
+
+public class JettyPlutoLauncher {
+       public static void main(String[] args) throws Exception {
+           System.setProperty("org.apache.pluto.embedded.portletId", 
"StrutsPortlet");
+           Server server = new Server(8080);
+           WebAppContext webapp = new WebAppContext("src/main/webapp", 
"/test");
+           
webapp.setDefaultsDescriptor("/WEB-INF/jetty-pluto-web-default.xml");
+           ServletHolder portletServlet = new ServletHolder(new 
PortletServlet());
+           portletServlet.setInitParameter("portlet-name", "StrutsPortlet");
+           portletServlet.setInitOrder(1);
+           webapp.addServlet(portletServlet, "/PlutoInvoker/StrutsPortlet");
+           server.addHandler(webapp);
+           server.start();
+       }
+}

Added: 
struts/struts2/trunk/apps/portlet/src/test/java/org/apache/struts2/portlet/test/BasePortletTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/portlet/src/test/java/org/apache/struts2/portlet/test/BasePortletTest.java?rev=591942&view=auto
==============================================================================
--- 
struts/struts2/trunk/apps/portlet/src/test/java/org/apache/struts2/portlet/test/BasePortletTest.java
 (added)
+++ 
struts/struts2/trunk/apps/portlet/src/test/java/org/apache/struts2/portlet/test/BasePortletTest.java
 Mon Nov  5 02:06:31 2007
@@ -0,0 +1,75 @@
+package org.apache.struts2.portlet.test;
+
+import net.sourceforge.jwebunit.junit.WebTestCase;
+
+import org.apache.pluto.core.PortletServlet;
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.servlet.ServletHolder;
+import org.mortbay.jetty.webapp.WebAppContext;
+
+public abstract class BasePortletTest extends WebTestCase {
+       
+       protected Server server;
+
+       private int port = 8080;
+       
+       private String contextPath = "/test";
+       
+       public void setUp() throws Exception {
+               System.setProperty("org.apache.pluto.embedded.portletId", 
getPortletName());
+               server = new Server(port);
+               WebAppContext webapp = new WebAppContext("src/main/webapp", 
contextPath);
+               
webapp.setDefaultsDescriptor("/WEB-INF/jetty-pluto-web-default.xml");
+               ServletHolder portletServlet = new ServletHolder(new 
PortletServlet());
+               portletServlet.setInitParameter("portlet-name", 
getPortletName());
+               portletServlet.setInitOrder(1);
+               webapp.addServlet(portletServlet, "/PlutoInvoker/" + 
getPortletName());
+               server.addHandler(webapp);
+               server.start();
+               getTestContext().setBaseUrl("http://localhost:"; + port + 
contextPath);
+       }
+       
+
+       public void tearDown() throws Exception {
+               server.stop();
+       }
+       
+       public void minimizeWindow() {
+               clickElementByXPath("//[EMAIL PROTECTED]'minimized']/..");
+       }
+       
+       public void maximizeWindow() {
+               clickElementByXPath("//[EMAIL PROTECTED]'minimized']/..");
+       }
+       
+       public void restoreWindow() {
+               clickElementByXPath("//[EMAIL PROTECTED]'normal']/..");
+       }
+       
+       public void switchEdit() {
+               clickElementByXPath("//[EMAIL PROTECTED]'edit']/..");
+       }
+       
+       public void switchView() {
+               clickElementByXPath("//[EMAIL PROTECTED]'view']/..");
+       }
+       
+       public void switchHelp() {
+               clickElementByXPath("//[EMAIL PROTECTED]'help']/..");
+       }
+       
+       public void setPort(int port) {
+               this.port = port;
+       }
+       
+       public void setContextPath(String contextPath) {
+               if(!contextPath.startsWith("/")) {
+                       this.contextPath = "/" + contextPath;
+               }
+               else {
+                       this.contextPath = contextPath;
+               }
+       }
+       
+       public abstract String getPortletName();
+}

Added: 
struts/struts2/trunk/apps/portlet/src/test/java/org/apache/struts2/portlet/test/Struts2PortletTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/portlet/src/test/java/org/apache/struts2/portlet/test/Struts2PortletTest.java?rev=591942&view=auto
==============================================================================
--- 
struts/struts2/trunk/apps/portlet/src/test/java/org/apache/struts2/portlet/test/Struts2PortletTest.java
 (added)
+++ 
struts/struts2/trunk/apps/portlet/src/test/java/org/apache/struts2/portlet/test/Struts2PortletTest.java
 Mon Nov  5 02:06:31 2007
@@ -0,0 +1,83 @@
+package org.apache.struts2.portlet.test;
+
+public class Struts2PortletTest extends BasePortletTest {
+       
+       private final static String PORTLET_NAME = "StrutsPortlet";
+       
+       public void testIndexPage() throws Exception {
+               beginAt("pluto/index.jsp");
+               assertTextPresent("Welcome to the Struts example portlet");
+               assertLinkPresentWithExactText("A simple form");
+               assertLinkPresentWithExactText("Validation");
+       }
+       
+       public void testFormExample() throws Exception {
+               beginAt("pluto/index.jsp");
+               clickLinkWithExactText("A simple form");
+               assertFormPresent("processFormExample");
+               assertTextPresent("Input your name");
+               setWorkingForm("processFormExample");
+               setTextField("firstName", "Nils-Helge");
+               setTextField("lastName", "Garli");
+               submit();
+               assertTextPresent("Hello Nils-Helge Garli");
+       }
+       
+       public void testValidationExample() throws Exception {
+               beginAt("pluto/index.jsp");
+               clickLinkWithExactText("Validation");
+               assertFormPresent("processValidationExample");
+               assertTextPresent("Input your name");
+               setWorkingForm("processValidationExample");
+               setTextField("firstName", "Nils-Helge");
+               submit();
+               assertTextFieldEquals("firstName", "Nils-Helge");
+               assertTextPresent("You must enter a last name");
+               setTextField("lastName", "Garli");
+               submit();
+               assertTextPresent("Hello Nils-Helge Garli");
+       }
+       
+       public void testValidationErrorMessagesStickBetweenWindowStateChanges() 
throws Exception {
+               beginAt("pluto/index.jsp");
+               clickLinkWithExactText("Validation");
+               assertFormPresent("processValidationExample");
+               assertTextPresent("Input your name");
+               setWorkingForm("processValidationExample");
+               setTextField("firstName", "Nils-Helge");
+               submit();
+               assertTextFieldEquals("firstName", "Nils-Helge");
+               assertTextPresent("You must enter a last name");
+               minimizeWindow();
+               assertTextNotPresent("Input your name");
+               restoreWindow();
+               assertTextPresent("Input your name");
+               assertTextPresent("You must enter a last name");
+       }
+       
+       public void testTokenExample() throws Exception {
+               beginAt("pluto/index.jsp");
+               clickLinkWithText("Token");
+               setWorkingForm(0);
+               setTextField("theValue", "something");
+               submit();
+               assertTextPresent("ERROR");
+               setWorkingForm(1);
+               setTextField("theValue", "somethingElse");
+               submit();
+               assertTextPresent("The form was successfully submitted with a 
valid token");
+       }
+       
+       public void testSwitchFromViewToEditShouldGoToDefaultEditPage() throws 
Exception {
+               beginAt("pluto/index.jsp");
+               assertTextPresent("Welcome to the Struts example portlet");
+               switchEdit();
+               assertTextPresent("Back to view mode");
+       }
+
+       @Override
+       public String getPortletName() {
+               return PORTLET_NAME;
+       }
+       
+}


Reply via email to