struts-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From musa...@apache.org
Subject svn commit: r819727 [1/3] - in /struts/sandbox/trunk/showcase-reborn: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/struts2/ src/main/java/org/apache/struts2/showcase/ src/main/java/org/apache/st...
Date Mon, 28 Sep 2009 20:49:36 GMT
Author: musachy
Date: Mon Sep 28 20:49:32 2009
New Revision: 819727

URL: http://svn.apache.org/viewvc?rev=819727&view=rev
Log:
initial import

Added:
    struts/sandbox/trunk/showcase-reborn/
    struts/sandbox/trunk/showcase-reborn/pom.xml
    struts/sandbox/trunk/showcase-reborn/src/
    struts/sandbox/trunk/showcase-reborn/src/main/
    struts/sandbox/trunk/showcase-reborn/src/main/java/
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/actions/
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/actions/PersonAction-validation.xml
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/actions/PersonAction.java
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/GenericDAO.java
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/GenericDAOJPAImpl.java
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/PersonDao.java
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/PersonDaoImpl.java
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/entities/
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/entities/Persistent.java
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/entities/Person.java
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/source/
    struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/source/SourceAction.java
    struts/sandbox/trunk/showcase-reborn/src/main/resources/
    struts/sandbox/trunk/showcase-reborn/src/main/resources/META-INF/
    struts/sandbox/trunk/showcase-reborn/src/main/resources/META-INF/persistence.xml
    struts/sandbox/trunk/showcase-reborn/src/main/resources/log4j.properties
    struts/sandbox/trunk/showcase-reborn/src/main/resources/struts.xml
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/META-INF/
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/META-INF/MANIFEST.MF
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/applicationContext.xml
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/content/
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/content/crud/
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/content/crud/person-list.jsp
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/content/source/
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/content/source/source.jsp
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators/
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators.xml
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators/left-nav.jsp
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators/main.jsp
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/lib/
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/web.xml
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/highlight.css
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/main.css
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_glass_95_fef1ec_1x400.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_217bc0_256x240.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_2e83ff_256x240.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_469bdd_256x240.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_6da8d5_256x240.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_cd0a0a_256x240.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_d8e7f3_256x240.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_f9bd01_256x240.png   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/jquery-ui-1.7.2.custom.css
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/images/
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/images/calendar.gif   (with props)
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/index.jsp
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/javascript/
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/javascript/jquery-1.3.2.min.js
    struts/sandbox/trunk/showcase-reborn/src/main/webapp/javascript/jquery-ui-1.7.2.custom.min.js
    struts/sandbox/trunk/showcase-reborn/src/test/
    struts/sandbox/trunk/showcase-reborn/src/test/java/
    struts/sandbox/trunk/showcase-reborn/src/test/resources/

Added: struts/sandbox/trunk/showcase-reborn/pom.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/pom.xml?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/pom.xml (added)
+++ struts/sandbox/trunk/showcase-reborn/pom.xml Mon Sep 28 20:49:32 2009
@@ -0,0 +1,145 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.apache.struts</groupId>
+    <artifactId>struts2-showcase-reborn</artifactId>
+    <packaging>war</packaging>
+    <version>2.1.9-SNAPSHOT</version>
+    <name>Struts 2 Showcase Reincarnation Webapp</name>
+
+    <repositories>
+        <repository>
+            <id>maven.java.net</id>
+            <name>Java.net Maven2 Repository</name>
+            <url>http://download.java.net/maven/2</url>
+        </repository>
+    </repositories>
+
+
+    <dependencies>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>1.2.9</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <version>2.4</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>jsp-api</artifactId>
+            <version>2.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>hsqldb</groupId>
+            <artifactId>hsqldb</artifactId>
+            <version>1.8.0.7</version>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-annotations</artifactId>
+            <version>3.3.0.ga</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-convention-plugin</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-oval-plugin</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-sitemesh-plugin</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-spring-plugin</artifactId>
+            <version>${pom.version}</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>spring-beans</artifactId>
+                    <groupId>org.springframework</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>spring-core</artifactId>
+                    <groupId>org.springframework</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>spring-context</artifactId>
+                    <groupId>org.springframework</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>spring-web</artifactId>
+                    <groupId>org.springframework</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring</artifactId>
+            <version>2.5.6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-json-plugin</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-entitymanager</artifactId>
+            <version>3.3.1.ga</version>
+        </dependency>
+        <dependency>
+            <groupId>concurrent</groupId>
+            <artifactId>concurrent</artifactId>
+            <version>1.3.4</version>
+        </dependency>
+        <dependency>
+            <groupId>com.uwyn</groupId>
+            <artifactId>jhighlight</artifactId>
+            <version>1.0</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>maven-jetty-plugin</artifactId>
+                <version>6.1.11</version>
+                <executions>
+                    <execution>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>2.0.2</version>
+                <configuration>
+                    <source>1.5</source>
+                    <target>1.5</target>
+                </configuration>
+            </plugin>
+        </plugins>
+        <resources>
+            <!-- Include resources under src/main/java in WEB-INF/classes -->
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.java</include>
+                </includes>
+            </resource>
+        </resources>
+    </build>
+</project>

Added: struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/actions/PersonAction-validation.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/actions/PersonAction-validation.xml?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/actions/PersonAction-validation.xml (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/actions/PersonAction-validation.xml Mon Sep 28 20:49:32 2009
@@ -0,0 +1,19 @@
+<!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="person.name">
+    	<field-validator type="requiredstring">
+          <message>Your friend must have a name.</message>
+      	</field-validator>
+    </field>
+    <field name="person.birthDay">
+    	<field-validator type="required">
+          <message>If you are a good friend, you will know your friend's birthday.</message>
+      	</field-validator>
+    </field>
+    <field name="person.coolness">
+    	<field-validator type="required">
+          <message>You have to rate your friend's coolness.</message>
+      	</field-validator>
+    </field>
+</validators>
\ No newline at end of file

Added: struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/actions/PersonAction.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/actions/PersonAction.java?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/actions/PersonAction.java (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/actions/PersonAction.java Mon Sep 28 20:49:32 2009
@@ -0,0 +1,83 @@
+package org.apache.struts2.showcase.crud.actions;
+
+import java.util.List;
+
+import org.apache.struts2.convention.annotation.Action;
+import org.apache.struts2.convention.annotation.Result;
+import org.apache.struts2.convention.annotation.Results;
+import org.apache.struts2.convention.annotation.Namespace;
+import org.apache.struts2.interceptor.validation.SkipValidation;
+
+import org.apache.struts2.showcase.crud.dao.PersonDao;
+import org.apache.struts2.showcase.crud.entities.Person;
+import com.opensymphony.xwork2.ActionSupport;
+import com.opensymphony.xwork2.Preparable;
+
+@Namespace("/crud")
+@Results({
+        @Result(name = com.opensymphony.xwork2.Action.INPUT, location = "person-list.jsp"),
+        @Result(name = "list", location = "person-list.jsp")
+})
+public class PersonAction extends ActionSupport implements Preparable {
+
+    private Person person;
+    private List<Person> personList;
+    private PersonDao personDao;
+
+    public void prepare() {
+        person = new Person();
+    }
+
+    @SkipValidation
+    public String execute() {
+        return SUCCESS;
+    }
+
+    @Action(value = "person-submit",
+            results = @Result(name = com.opensymphony.xwork2.Action.SUCCESS, location = "person-list", type = "redirect")
+    )
+    public String update() {
+        if (person.getKey() != null) {
+            personDao.update(person);
+        } else {
+            personDao.create(person);
+        }
+        personList = personDao.findAll();
+        return SUCCESS;
+    }
+
+    @SkipValidation
+    @Action(value = "person-delete",
+            results = @Result(name = com.opensymphony.xwork2.Action.SUCCESS, location = "person-list", type = "redirect")
+    )
+    public String delete() {
+        person = personDao.read(person);
+        personDao.delete(person);
+        personList = personDao.findAll();
+        return "list";
+    }
+
+    @SkipValidation
+    @Action("person-list")
+    public String list() {
+        personList = personDao.findAll();
+        return "list";
+    }
+
+    public Person getPerson() {
+        return person;
+    }
+
+    public void setPerson(Person person) {
+        this.person = person;
+    }
+
+    public void setPersonDao(PersonDao personDao) {
+        this.personDao = personDao;
+    }
+
+    public List<Person> getPersonList() {
+        return personList;
+    }
+
+}

Added: struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/GenericDAO.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/GenericDAO.java?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/GenericDAO.java (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/GenericDAO.java Mon Sep 28 20:49:32 2009
@@ -0,0 +1,16 @@
+package org.apache.struts2.showcase.crud.dao;
+
+import org.apache.struts2.showcase.crud.entities.Persistent;
+
+
+public interface GenericDAO<T extends Persistent<K>, K> {
+    
+	T create(T newInstance);
+
+	T read(T object);
+
+	void update(T transientObject);
+
+	void delete(T persistentObject);
+
+}
\ No newline at end of file

Added: struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/GenericDAOJPAImpl.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/GenericDAOJPAImpl.java?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/GenericDAOJPAImpl.java (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/GenericDAOJPAImpl.java Mon Sep 28 20:49:32 2009
@@ -0,0 +1,31 @@
+package org.apache.struts2.showcase.crud.dao;
+
+import org.springframework.orm.jpa.support.JpaDaoSupport;
+import org.springframework.transaction.annotation.Transactional;
+
+import org.apache.struts2.showcase.crud.entities.Persistent;
+
+@Transactional
+public class GenericDAOJPAImpl<T extends Persistent<K>, K> 
+		extends JpaDaoSupport 
+		implements GenericDAO<T, K> {
+
+    public T create(T newInstance) {
+    	return getJpaTemplate().merge(newInstance);
+    }
+
+    public void delete(T persistentObject) {
+    	getJpaTemplate().remove(getJpaTemplate().merge(persistentObject));
+    }
+
+	public T read(T persistentObject) {
+    	return getJpaTemplate().find(
+    			(Class<T>)persistentObject.getClass(), 
+    			persistentObject.getKey() );
+    }
+
+    public void update(T transientObject) {
+    	getJpaTemplate().merge(transientObject);
+    }
+
+}

Added: struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/PersonDao.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/PersonDao.java?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/PersonDao.java (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/PersonDao.java Mon Sep 28 20:49:32 2009
@@ -0,0 +1,12 @@
+package org.apache.struts2.showcase.crud.dao;
+
+import java.util.List;
+
+import org.apache.struts2.showcase.crud.entities.Person;
+
+public interface PersonDao extends GenericDAO<Person,Integer> {
+
+	/** Retrieve all people */
+	public List<Person> findAll() ;
+	
+}

Added: struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/PersonDaoImpl.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/PersonDaoImpl.java?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/PersonDaoImpl.java (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/dao/PersonDaoImpl.java Mon Sep 28 20:49:32 2009
@@ -0,0 +1,13 @@
+package org.apache.struts2.showcase.crud.dao;
+
+import java.util.List;
+
+import org.apache.struts2.showcase.crud.entities.Person;
+
+public class PersonDaoImpl extends GenericDAOJPAImpl<Person,Integer> 
+  implements PersonDao {
+	
+	public List<Person> findAll() {
+		return getJpaTemplate().findByNamedQuery("Person.findAll");
+	}
+}

Added: struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/entities/Persistent.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/entities/Persistent.java?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/entities/Persistent.java (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/entities/Persistent.java Mon Sep 28 20:49:32 2009
@@ -0,0 +1,7 @@
+package org.apache.struts2.showcase.crud.entities;
+
+public interface Persistent<T> {
+
+	public abstract T getKey();
+
+}
\ No newline at end of file

Added: struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/entities/Person.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/entities/Person.java?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/entities/Person.java (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/crud/entities/Person.java Mon Sep 28 20:49:32 2009
@@ -0,0 +1,70 @@
+package org.apache.struts2.showcase.crud.entities;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Transient;
+
+@Entity
+@NamedQueries({
+  @NamedQuery(name="Person.findAll", query="SELECT p FROM Person p")		
+})
+public class Person implements Persistent<Integer> {
+
+	private Integer id;
+	
+	private String name;
+	
+	private Date birthDay;
+
+	private Integer coolness;
+
+
+    @Id
+	@GeneratedValue	
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Transient
+	public Integer getKey() {
+		return id;
+	}
+
+	@Column(length=32, nullable=false)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@Column(nullable=false)
+	public Date getBirthDay() {
+		return birthDay;
+	}
+
+	public void setBirthDay(Date birthDay) {
+		this.birthDay = birthDay;
+	}
+	
+	@Column(nullable=false)
+	public Integer getCoolness() {
+		return coolness;
+	}
+
+	public void setCoolness(Integer coolness) {
+		this.coolness = coolness;
+	}
+
+}

Added: struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/source/SourceAction.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/source/SourceAction.java?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/source/SourceAction.java (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/java/org/apache/struts2/showcase/source/SourceAction.java Mon Sep 28 20:49:32 2009
@@ -0,0 +1,90 @@
+package org.apache.struts2.showcase.source;
+
+import org.apache.struts2.convention.annotation.Action;
+import org.apache.struts2.convention.annotation.Namespace;
+import org.apache.struts2.convention.annotation.Results;
+import org.apache.struts2.convention.annotation.Result;
+import org.apache.struts2.util.ServletContextAware;
+import org.apache.struts2.interceptor.ServletResponseAware;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.xwork.StringUtils;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.File;
+import java.net.URL;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.opensymphony.xwork2.util.ClassLoaderUtil;
+import com.uwyn.jhighlight.renderer.XhtmlRendererFactory;
+import com.uwyn.jhighlight.renderer.Renderer;
+
+@Namespace("/source")
+@Results(
+        @Result(name = com.opensymphony.xwork2.Action.SUCCESS, location = "source.jsp")
+)
+public class SourceAction extends ActionSupport implements ServletContextAware {
+    private ServletContext servletContext;
+
+    private String className;
+    private String output;
+    private boolean fragment = true;
+    private String path;
+
+    @Action("get-class-source")
+    public String getClassSource() throws IOException {
+        String filePath = "/" + className.replace('.', '/') + ".java";
+
+        InputStream is = ClassLoaderUtil.getResourceAsStream(filePath, getClass());
+
+        Renderer renderer = XhtmlRendererFactory.getRenderer(XhtmlRendererFactory.JAVA);
+        String fileName = StringUtils.substringAfterLast(filePath, "/");
+        output = renderer.highlight(fileName, IOUtils.toString(is), "UTF-8", fragment);
+
+        return SUCCESS;
+    }
+
+    @Action("get-xml-source")
+    public String getXmlSource() throws IOException {
+        if (path.endsWith(".xml")) {
+            File root = FileUtils.toFile(ClassLoaderUtil.getResource("/", getClass()));
+            File fileUrl = FileUtils.toFile(ClassLoaderUtil.getResource(path, getClass()));
+
+            //make sure file is under the right directory
+            if (fileUrl.getAbsolutePath().startsWith(root.getAbsolutePath())) {
+                Renderer renderer = XhtmlRendererFactory.getRenderer(XhtmlRendererFactory.XML);
+                String content = IOUtils.toString(FileUtils.openInputStream(fileUrl));
+                output = renderer.highlight(fileUrl.getName(), content, "UTF-8", fragment);
+            }
+        }
+        return SUCCESS;
+    }
+
+
+    public void setServletContext(ServletContext servletContext) {
+        this.servletContext = servletContext;
+    }
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+
+    public String getOutput() {
+        return output;
+    }
+
+    public void setFragment(boolean fragment) {
+        this.fragment = fragment;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+}

Added: struts/sandbox/trunk/showcase-reborn/src/main/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/resources/META-INF/persistence.xml?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/resources/META-INF/persistence.xml (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/resources/META-INF/persistence.xml Mon Sep 28 20:49:32 2009
@@ -0,0 +1,8 @@
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
+      http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+    version="1.0">
+    <persistence-unit name="showcase">
+    </persistence-unit>
+</persistence>
\ No newline at end of file

Added: struts/sandbox/trunk/showcase-reborn/src/main/resources/log4j.properties
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/resources/log4j.properties?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/resources/log4j.properties (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/resources/log4j.properties Mon Sep 28 20:49:32 2009
@@ -0,0 +1,8 @@
+log4j.rootLogger=ERROR, Console
+
+log4j.appender.Console=org.apache.log4j.ConsoleAppender
+
+log4j.appender.Console.layout=org.apache.log4j.PatternLayout
+log4j.appender.Console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+
+log4j.logger.org.apache.struts2.convention=DEBUG
\ No newline at end of file

Added: struts/sandbox/trunk/showcase-reborn/src/main/resources/struts.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/resources/struts.xml?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/resources/struts.xml (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/resources/struts.xml Mon Sep 28 20:49:32 2009
@@ -0,0 +1,18 @@
+<!DOCTYPE struts PUBLIC
+        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
+        "http://struts.apache.org/dtds/struts-2.0.dtd">
+
+<struts>
+
+
+    <!-- Convention Plugin Settings -->
+    <constant name="struts.convention.exclude.packages"
+              value="org.springframework.web.struts.*,org.springframework.web.struts2.*,org.hibernate.*"/>
+    <constant name="struts.convention.default.parent.package" value="ConventionPackage"/>
+    <constant name="struts.convention.action.alwaysMapExecute" value="false"/>
+
+    <package name="ConventionPackage" extends="convention-default,json-default">
+        
+    </package>
+
+</struts>
\ No newline at end of file

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/META-INF/MANIFEST.MF?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/webapp/META-INF/MANIFEST.MF (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/webapp/META-INF/MANIFEST.MF Mon Sep 28 20:49:32 2009
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path: 
+

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/applicationContext.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/applicationContext.xml?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/applicationContext.xml (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/applicationContext.xml Mon Sep 28 20:49:32 2009
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:tx="http://www.springframework.org/schema/tx"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans 
+    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+    http://www.springframework.org/schema/tx 
+    http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
+
+    <bean
+        class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
+
+    <bean id="entityManagerFactory"
+        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+        <property name="dataSource" ref="dataSource" />
+        <property name="jpaVendorAdapter">
+            <bean
+                class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
+                <property name="database" value="HSQL" />
+                <property name="showSql" value="true" />
+            </bean>
+        </property>
+        <property name="jpaProperties">
+          <props>
+            <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
+            <prop key="hibernate.hbm2ddl.auto">update</prop>
+          </props>
+        </property>
+    </bean>
+
+    <bean id="dataSource"
+        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+        <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
+        <property name="url" value="jdbc:hsqldb:mem:ch04ex01" />
+        <property name="username" value="sa" />
+        <property name="password" value="" />
+    </bean>
+
+    <bean id="transactionManager"
+        class="org.springframework.orm.jpa.JpaTransactionManager">
+        <property name="entityManagerFactory" ref="entityManagerFactory" />
+    </bean>
+
+	<bean id="personDao" 
+	    class="org.apache.struts2.showcase.crud.dao.PersonDaoImpl">
+	    <property name="entityManagerFactory" ref="entityManagerFactory" />
+	</bean>
+		
+    <tx:annotation-driven transaction-manager="transactionManager" />
+
+</beans>

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/content/crud/person-list.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/content/crud/person-list.jsp?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/content/crud/person-list.jsp (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/content/crud/person-list.jsp Mon Sep 28 20:49:32 2009
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
+<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page" %>
+<%@taglib prefix="s" uri="/struts-tags" %>
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+</head>
+
+<body>
+<s:actionerror/>
+<s:actionmessage/>
+
+<s:form namespace="/crud" action="person-submit" cssClass="section">
+    <s:textfield label="Name" name="person.name"/>
+    <s:textfield label="Coolness Level" name="person.coolness"/>
+    <s:textfield label="Birth Date" name="person.birthDay"/>
+    <s:submit/>
+</s:form>
+
+<table class="section">
+    <tr>
+        <td>ID</td>
+        <td>Name</td>
+        <td>Coolness Level</td>
+        <td>Birthday</td>
+        <td/>
+    </tr>
+    <s:iterator var="person" value="%{personList}">
+        <tr>
+            <td>${id}</td>
+            <td>${name}</td>
+            <td>${coolness}</td>
+            <td><s:date name="birthDay" format="MM/dd/yyyy" /></td>
+            <td>
+                <s:a namespace="/crud" action="person-delete">
+                    <s:param name="person.id" value="%{id}"/>
+                    Delete
+                </s:a>
+            </td>
+        </tr>
+    </s:iterator>
+</table>
+
+<div class="doc-tabs">
+	<ul>
+		<li><a href="#tabs-1">Description</a></li>
+		<li><a href="#tabs-2">Source</a></li>
+	</ul>
+	<div id="tabs-1">
+        <p>This example shows how to use the Convention plugin with Spring and JPA to create a CRUD application</p>
+        For more details:
+        <ul>
+            <li><a href="http://struts.apache.org/2.x/docs/convention-plugin.html">Convention Plugin</a></li>
+            <li><a href="http://struts.apache.org/2.x/docs/spring-plugin.html">Spring Plugin</a></li>
+            <li><a href="http://struts.apache.org/2.x/docs/struts-2-spring-2-jpa-ajax.html">Another CRUD example</a> </li>
+        </ul>
+	</div>
+	<div id="tabs-2">
+        <div class="doc-tabs">
+            <ul>
+                <li><a href="#src-tabs-1">PersonAction.java (action)</a></li>
+                <li><a href="#src-tabs-2">PersonAction-validation.xml (validation)</a></li>
+                <li><a href="#src-tabs-3">person-list.jsp (view)</a></li>
+            </ul>
+            <div id="src-tabs-1" class="src-java-tab">
+                <s:action namespace="/source" name="get-class-source" executeResult="true" flush="false">
+                    <s:param name="className" value="%{'org.apache.struts2.showcase.crud.actions.PersonAction'}"/>
+                </s:action>
+            </div>
+            <div id="src-tabs-2" class="src-xml-tab">
+                <s:action namespace="/source" name="get-xml-source" executeResult="true" flush="false">
+                    <s:param name="path" value="%{'org/apache/struts2/showcase/crud/actions/PersonAction-validation.xml'}"/>
+                </s:action>
+            </div>
+            <div id="src-tabs-3">
+            </div>
+        </div>
+	</div>
+</div>
+
+</body>
+
+</html>

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/content/source/source.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/content/source/source.jsp?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/content/source/source.jsp (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/content/source/source.jsp Mon Sep 28 20:49:32 2009
@@ -0,0 +1 @@
+${output}
\ No newline at end of file

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators.xml?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators.xml (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators.xml Mon Sep 28 20:49:32 2009
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<decorators defaultdir="/WEB-INF/decorators">
+    <!-- Any urls that are excluded will never be decorated by Sitemesh -->
+    <excludes>
+        <pattern>/css/*</pattern>
+        <pattern>/scripts/*</pattern>
+        <pattern>/images/*</pattern>
+        <pattern>/dojo/*</pattern>
+        <pattern>/struts/*</pattern>
+    </excludes>
+
+    <decorator name="main" page="main.jsp">
+        <pattern>/*</pattern>
+    </decorator>
+</decorators>
\ No newline at end of file

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators/left-nav.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators/left-nav.jsp?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators/left-nav.jsp (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators/left-nav.jsp Mon Sep 28 20:49:32 2009
@@ -0,0 +1,41 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
+<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page" %>
+<%@taglib prefix="s" uri="/struts-tags" %>
+
+<div id="left-nav">
+	<h3><a href="#">Spring</a></h3>
+	<div>
+		<ul>
+            <li><s:a namespace="/crud" action="person-list">CRUD Application</s:a></li>
+		</ul>
+	</div>
+	<h3><a href="#">Validation</a></h3>
+	<div>
+		<ul>
+            <li><s:a namespace="/crud" action="person-list">CRUD Application</s:a></li>
+		</ul>
+	</div>
+	<h3><a href="#">Convention</a></h3>
+	<div>
+		<ul>
+            <li><s:a namespace="/crud" action="person-list">CRUD Application</s:a></li>
+		</ul>
+	</div>
+	<h3><a href="#">Section 4</a></h3>
+	<div>
+		<p>
+		Cras dictum. Pellentesque habitant morbi tristique senectus et netus
+		et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in
+		faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia
+		mauris vel est.
+		</p>
+		<p>
+		Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus.
+		Class aptent taciti sociosqu ad litora torquent per conubia nostra, per
+		inceptos himenaeos.
+		</p>
+	</div>
+</div>

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators/main.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators/main.jsp?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators/main.jsp (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/decorators/main.jsp Mon Sep 28 20:49:32 2009
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
+<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page" %>
+<%@taglib prefix="s" uri="/struts-tags" %>
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title><decorator:title default="${artifactId}"/></title>
+
+    <s:url var="mainCss" value="/css/main.css"/>
+    <link rel="stylesheet" href="${mainCss}"/>
+
+    <s:url var="highlightCss" value="/css/highlight.css"/>
+    <link rel="stylesheet" href="${highlightCss}"/>
+
+    <s:url var="jqueryCss" value="/css/redmond/jquery-ui-1.7.2.custom.css"/>
+    <link rel="stylesheet" href="${jqueryCss}"/>
+
+    <s:url var="jquery" value="/javascript/jquery-1.3.2.min.js"/>
+    <script type="text/javascript" src="${jquery}"></script>
+
+    <s:url var="jqueryUI" value="/javascript/jquery-ui-1.7.2.custom.min.js"/>
+    <script type="text/javascript" src="${jqueryUI}"></script>
+    <decorator:head/>
+
+    <script type="text/javascript">
+        $(function() {
+            $("#left-nav").accordion();
+            $(".doc-tabs").tabs();
+            $(".errorMessage").effect("pulsate", { times:3 }, 2000);
+        });
+    </script>
+</head>
+
+<body>
+<div class="logo">
+    <s:url var="logo" value="/images/struts-power.gif"/>
+    <img src="${logo}" alt="Powered by Struts"/>
+</div>
+
+<div id="wrapper">
+    <div class="left-nav">
+        <jsp:include page="left-nav.jsp"/>
+    </div>
+
+    <div id="content">
+        <decorator:body/>
+    </div>
+</div>
+</body>
+</html>
+

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/web.xml?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/web.xml (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/webapp/WEB-INF/web.xml Mon Sep 28 20:49:32 2009
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+         version="2.4">
+
+    <display-name>Archetype Created Web Application</display-name>
+
+    <filter>
+        <filter-name>Struts2-Prepare</filter-name>
+        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
+    </filter>
+
+    <filter>
+        <filter-name>Struts2-Execute</filter-name>
+        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
+    </filter>
+
+    <filter>
+        <filter-name>Sitemesh</filter-name>
+        <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
+    </filter>
+
+
+    <filter>
+        <filter-name>Spring-OpenEntityManagerInView</filter-name>
+        <filter-class>
+            org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
+        </filter-class>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>Spring-OpenEntityManagerInView</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+
+    <filter-mapping>
+        <filter-name>Struts2-Prepare</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+
+    <filter-mapping>
+        <filter-name>Sitemesh</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+
+    <filter-mapping>
+        <filter-name>Struts2-Execute</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+
+    <welcome-file-list>
+        <welcome-file>index.jsp</welcome-file>
+    </welcome-file-list>
+
+    <listener>
+        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+    </listener>
+
+</web-app>

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/highlight.css
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/highlight.css?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/highlight.css (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/highlight.css Mon Sep 28 20:49:32 2009
@@ -0,0 +1,119 @@
+.src-java-tab, .src-xml-tab {
+    font-size: 10pt !important;
+    overflow: auto;
+}
+
+.java_type {
+    color: rgb(0, 44, 221);
+}
+
+.java_keyword {
+    color: rgb(0, 0, 0);
+    font-weight: bold;
+}
+
+.java_javadoc_comment {
+    color: rgb(147, 147, 147);
+    background-color: rgb(247, 247, 247);
+    font-style: italic;
+}
+
+.java_comment {
+    color: rgb(147, 147, 147);
+    background-color: rgb(247, 247, 247);
+}
+
+.java_operator {
+    color: rgb(0, 124, 31);
+}
+
+.java_plain {
+    color: rgb(0, 0, 0);
+}
+
+.java_literal {
+    color: rgb(188, 0, 0);
+}
+
+code {
+    color: rgb(0, 0, 0);
+    font-family: monospace;
+    font-size: 12px;
+    white-space: nowrap;
+}
+
+.java_javadoc_tag {
+    color: rgb(147, 147, 147);
+    background-color: rgb(247, 247, 247);
+    font-style: italic;
+    font-weight: bold;
+}
+
+.java_separator {
+    color: rgb(0, 33, 255);
+}
+
+.xml_plain {
+    color: rgb(0, 0, 0);
+}
+
+.xml_tag_name {
+    color: rgb(0, 55, 255);
+}
+
+.xml_comment {
+    color: rgb(147, 147, 147);
+    background-color: rgb(247, 247, 247);
+}
+
+.xml_tag_symbols {
+    color: rgb(0, 59, 255);
+}
+
+.xml_rife_tag {
+    color: rgb(0, 0, 0);
+    background-color: rgb(228, 230, 160);
+}
+
+.xml_attribute_value {
+    color: rgb(193, 0, 0);
+}
+
+.xml_attribute_name {
+    color: rgb(0, 0, 0);
+    font-weight: bold;
+}
+
+.xml_char_data {
+    color: rgb(0, 0, 0);
+}
+
+code {
+    color: rgb(0, 0, 0);
+    font-family: monospace;
+    font-size: 12px;
+    white-space: nowrap;
+}
+
+.xml_rife_name {
+    color: rgb(0, 0, 196);
+    background-color: rgb(228, 230, 160);
+}
+
+h1 {
+    font-family: sans-serif;
+    font-size: 16pt;
+    font-weight: bold;
+    color: rgb(0, 0, 0);
+    background: rgb(210, 210, 210);
+    border: solid 1px black;
+    padding: 5px;
+    text-align: center;
+}
+
+.xml_processing_instruction {
+    color: rgb(0, 0, 0);
+    font-weight: bold;
+    font-style: italic;
+}
+

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/main.css
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/main.css?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/main.css (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/main.css Mon Sep 28 20:49:32 2009
@@ -0,0 +1,22 @@
+#left-nav {
+    width: 300px;
+    float: left;
+}
+
+#content {
+    float: left;
+    width: 900px;
+}
+
+.section {
+    border: 1px solid #DDDDDD;
+}
+
+.errorMessage {
+    color: red;
+}
+
+/* overwrite jquery theme */
+.ui-helper-reset {
+    font-size: 10pt !important;
+}
\ No newline at end of file

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_glass_95_fef1ec_1x400.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_glass_95_fef1ec_1x400.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_glass_95_fef1ec_1x400.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_217bc0_256x240.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_217bc0_256x240.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_217bc0_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_2e83ff_256x240.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_2e83ff_256x240.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_2e83ff_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_469bdd_256x240.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_469bdd_256x240.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_469bdd_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_6da8d5_256x240.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_6da8d5_256x240.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_6da8d5_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_cd0a0a_256x240.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_cd0a0a_256x240.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_cd0a0a_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_d8e7f3_256x240.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_d8e7f3_256x240.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_d8e7f3_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_f9bd01_256x240.png
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_f9bd01_256x240.png?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/images/ui-icons_f9bd01_256x240.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/jquery-ui-1.7.2.custom.css
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/jquery-ui-1.7.2.custom.css?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/jquery-ui-1.7.2.custom.css (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/webapp/css/redmond/jquery-ui-1.7.2.custom.css Mon Sep 28 20:49:32 2009
@@ -0,0 +1,406 @@
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+*/
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=02_glass.png&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight
 =fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+*/
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+.ui-widget-header a { color: #ffffff; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #c5dbec; background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2e6e9e; outline: none; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2e6e9e; text-decoration: none; outline: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #79b7e7; background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1d5987; outline: none; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #1d5987; text-decoration: none; outline: none; }
+.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #79b7e7; background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #e17009; outline: none; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; outline: none; text-decoration: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_469bdd_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_469bdd_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_6da8d5_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_217bc0_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_f9bd01_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; }
+.ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; }
+.ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; }
+.ui-corner-top { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; }
+.ui-corner-right {  -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; }
+.ui-corner-left { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; }
+.ui-corner-all { -moz-border-radius: 5px; -webkit-border-radius: 5px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Accordion
+----------------------------------*/
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
+.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
+----------------------------------*/
+.ui-datepicker { width: 17em; padding: .2em .2em 0; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month, 
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+    display: none; /*sorry for IE5*/
+    display/**/: block; /*sorry for IE5*/
+    position: absolute; /*must have*/
+    z-index: -1; /*must have*/
+    filter: mask(); /*must have*/
+    top: -4px; /*must have*/
+    left: -4px; /*must have*/
+    width: 200px; /*must have*/
+    height: 200px; /*must have*/
+}/* Dialog
+----------------------------------*/
+.ui-dialog { position: relative; padding: .2em; width: 300px; }
+.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative;  }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } 
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/* Progressbar
+----------------------------------*/
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
+----------------------------------*/
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
+----------------------------------*/
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
+----------------------------------*/
+.ui-tabs { padding: .2em; zoom: 1; }
+.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
+.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/images/calendar.gif
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/images/calendar.gif?rev=819727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: struts/sandbox/trunk/showcase-reborn/src/main/webapp/images/calendar.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: struts/sandbox/trunk/showcase-reborn/src/main/webapp/index.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/showcase-reborn/src/main/webapp/index.jsp?rev=819727&view=auto
==============================================================================
--- struts/sandbox/trunk/showcase-reborn/src/main/webapp/index.jsp (added)
+++ struts/sandbox/trunk/showcase-reborn/src/main/webapp/index.jsp Mon Sep 28 20:49:32 2009
@@ -0,0 +1,7 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<html>
+  <head><title>Struts 2 Showcase</title></head>
+  <body>
+  
+  </body>
+</html>
\ No newline at end of file



Mime
View raw message