You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by hu...@apache.org on 2006/08/13 02:45:15 UTC
svn commit: r431120 - in
/struts/sandbox/trunk/mailreader-course/struts2/register: ./ META-INF/ src/
src/java/ src/test/ src/webapp/ src/webapp/WEB-INF/
src/webapp/WEB-INF/classes/ src/webapp/pages/
Author: husted
Date: Sat Aug 12 17:45:14 2006
New Revision: 431120
URL: http://svn.apache.org/viewvc?rev=431120&view=rev
Log:
Update "register" lab for Struts 2
Added:
struts/sandbox/trunk/mailreader-course/struts2/register/
struts/sandbox/trunk/mailreader-course/struts2/register/META-INF/
struts/sandbox/trunk/mailreader-course/struts2/register/META-INF/context.xml
struts/sandbox/trunk/mailreader-course/struts2/register/register.iml
struts/sandbox/trunk/mailreader-course/struts2/register/src/
struts/sandbox/trunk/mailreader-course/struts2/register/src/java/
struts/sandbox/trunk/mailreader-course/struts2/register/src/java/DatabaseListener.java
struts/sandbox/trunk/mailreader-course/struts2/register/src/java/Hello.java
struts/sandbox/trunk/mailreader-course/struts2/register/src/java/MailReaderSupport.java
struts/sandbox/trunk/mailreader-course/struts2/register/src/java/Register.java
struts/sandbox/trunk/mailreader-course/struts2/register/src/java/applicationContext.xml
struts/sandbox/trunk/mailreader-course/struts2/register/src/java/database.xml
struts/sandbox/trunk/mailreader-course/struts2/register/src/java/resources.properties
struts/sandbox/trunk/mailreader-course/struts2/register/src/java/struts.properties
struts/sandbox/trunk/mailreader-course/struts2/register/src/java/struts.xml
struts/sandbox/trunk/mailreader-course/struts2/register/src/test/
struts/sandbox/trunk/mailreader-course/struts2/register/src/test/HelloTest.java
struts/sandbox/trunk/mailreader-course/struts2/register/src/test/RegisterTest.java
struts/sandbox/trunk/mailreader-course/struts2/register/src/test/RetainTest.java
struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/
struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/WEB-INF/
struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/WEB-INF/classes/
struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/WEB-INF/web.xml
struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/index.html
struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/
struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Hello.jsp
struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Missing.jsp
struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Register.jsp
struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Welcome.jsp
Added: struts/sandbox/trunk/mailreader-course/struts2/register/META-INF/context.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/META-INF/context.xml?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/META-INF/context.xml (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/META-INF/context.xml Sat Aug 12 17:45:14 2006
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Context path="/">
+</Context>
Added: struts/sandbox/trunk/mailreader-course/struts2/register/register.iml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/register.iml?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/register.iml (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/register.iml Sat Aug 12 17:45:14 2006
@@ -0,0 +1,282 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="J2EE_WEB_MODULE" j2ee-integration="Tomcat Server">
+ <component name="ModuleRootManager" />
+ <component name="NewModuleRootManager">
+ <output url="file://C:/opt/Apache/Tomcat-5.5/webapps/register/WEB-INF/classes" />
+ <exclude-output />
+ <exploded url="file://C:/opt/Apache/Tomcat-5.5/webapps/register" />
+ <exclude-exploded />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/src/java" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$APPLICATION_HOME_DIR$/lib/junit.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://C:/opt/Apache/Tomcat-5.5/common/lib/servlet-api.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/xwork-2.0-SNAPSHOT.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/spring-beans-1.2.6.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/spring-aop-1.2.6.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/commons-collections-2.1.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/commons-digester-1.6.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/struts-mailreader-dao-1.3.5-SNAPSHOT.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/ognl-2.6.7.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/freemarker-2.3.4.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/struts2-api-2.0.0-SNAPSHOT.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/spring-core-1.2.6.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/commons-logging-1.0.4.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/struts2-core-2.0.0-SNAPSHOT.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/struts2-extras-2.0.0-SNAPSHOT.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/oscore-2.2.4.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/spring-context-1.2.6.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../lib/spring-web-1.2.6.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="library" name="Tomcat 5.5" level="application_server_libraries" />
+ <orderEntryProperties />
+ </component>
+ <component name="WebModuleBuildComponent">
+ <setting name="EXPLODED_URL" value="file://C:/opt/Apache/Tomcat-5.5/webapps/register" />
+ <setting name="EXPLODED_ENABLED" value="true" />
+ <setting name="JAR_URL" value="file://" />
+ <setting name="JAR_ENABLED" value="false" />
+ <setting name="SYNC_EXPLODED_DIR" value="true" />
+ <setting name="BUILD_ON_FRAME_DEACTIVATION" value="false" />
+ <setting name="RUN_JASPER_VALIDATION" value="false" />
+ </component>
+ <component name="WebModuleProperties">
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/commons-digester-1.6.jar" />
+ <url>jar://$MODULE_DIR$/../lib/commons-digester-1.6.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/commons-logging-1.0.4.jar" />
+ <url>jar://$MODULE_DIR$/../lib/commons-logging-1.0.4.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/freemarker-2.3.4.jar" />
+ <url>jar://$MODULE_DIR$/../lib/freemarker-2.3.4.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/ognl-2.6.7.jar" />
+ <url>jar://$MODULE_DIR$/../lib/ognl-2.6.7.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/oscore-2.2.4.jar" />
+ <url>jar://$MODULE_DIR$/../lib/oscore-2.2.4.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/spring-aop-1.2.6.jar" />
+ <url>jar://$MODULE_DIR$/../lib/spring-aop-1.2.6.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/spring-beans-1.2.6.jar" />
+ <url>jar://$MODULE_DIR$/../lib/spring-beans-1.2.6.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/spring-context-1.2.6.jar" />
+ <url>jar://$MODULE_DIR$/../lib/spring-context-1.2.6.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/spring-core-1.2.6.jar" />
+ <url>jar://$MODULE_DIR$/../lib/spring-core-1.2.6.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/spring-web-1.2.6.jar" />
+ <url>jar://$MODULE_DIR$/../lib/spring-web-1.2.6.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/struts-mailreader-dao-1.3.5-SNAPSHOT.jar" />
+ <url>jar://$MODULE_DIR$/../lib/struts-mailreader-dao-1.3.5-SNAPSHOT.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/struts2-api-2.0.0-SNAPSHOT.jar" />
+ <url>jar://$MODULE_DIR$/../lib/struts2-api-2.0.0-SNAPSHOT.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/struts2-core-2.0.0-SNAPSHOT.jar" />
+ <url>jar://$MODULE_DIR$/../lib/struts2-core-2.0.0-SNAPSHOT.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/struts2-extras-2.0.0-SNAPSHOT.jar" />
+ <url>jar://$MODULE_DIR$/../lib/struts2-extras-2.0.0-SNAPSHOT.jar!/</url>
+ </containerElement>
+ <containerElement type="library" level="module">
+ <attribute name="method" value="1" />
+ <attribute name="URI" value="/WEB-INF/lib/xwork-2.0-SNAPSHOT.jar" />
+ <url>jar://$MODULE_DIR$/../lib/xwork-2.0-SNAPSHOT.jar!/</url>
+ </containerElement>
+ <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/src/webapp/WEB-INF/web.xml" optional="false" version="2.3" />
+ <deploymentDescriptor name="" url="file://$MODULE_DIR$/META-INF/context.xml" optional="false">
+ <option name="DEFAULT_DIR" value="WEB-INF" />
+ <option name="NAME" value="" />
+ <option name="DESCRIPTION" value="" />
+ </deploymentDescriptor>
+ <deploymentDescriptor name="context.xml" url="file://$MODULE_DIR$/META-INF/context.xml" optional="false" version="5.x" />
+ <webroots>
+ <root url="file://$MODULE_DIR$/src/webapp" relative="/" />
+ <root url="file://$MODULE_DIR$/src/java" relative="/WEB-INF/src/java" />
+ <root url="file://$MODULE_DIR$/src/test" relative="/WEB-INF/src/test" />
+ </webroots>
+ </component>
+ <component name="WeblogicWebModuleProperties">
+ <option name="IS_RUN_APPC" value="false" />
+ </component>
+</module>
+
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/java/DatabaseListener.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/java/DatabaseListener.java?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/java/DatabaseListener.java (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/java/DatabaseListener.java Sat Aug 12 17:45:14 2006
@@ -0,0 +1,229 @@
+/*
+ * Copyright 1999-2002,2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Id: ApplicationListener.java 372087 2006-01-25 03:38:42Z craigmcc $
+ */
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.apps.mailreader.dao.impl.memory.MemoryUserDatabase;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import java.io.*;
+
+/**
+ * <p><code>ServletContextListener</code> that initializes and finalizes the
+ * persistent storage of User and Subscription information for the Struts
+ * Demonstration Application, using an in-memory database backed by an XML
+ * file.</p>
+ * <p/>
+ * <p><strong>IMPLEMENTATION WARNING</strong> - If this web application is run
+ * from a WAR file, or in another environment where reading and writing of the
+ * web application resource is impossible, the initial contents will be copied
+ * to a file in the web application temporary directory provided by the
+ * container. This is for demonstration purposes only - you should
+ * <strong>NOT</strong> assume that files written here will survive a restart
+ * of your servlet container.</p>
+ * <p/>
+ * <p>This class was borrowed from the Shale Mailreader. Changes were:</p>
+ * <p/>
+ * <ul>
+ * <p/>
+ * <li>Path to database.xml (under classes here). </li>
+ * <p/>
+ * <li>Class to store protocol list (an array here). </li>
+ * <p/>
+ * </ul>
+ * <p/>
+ * DEVELOPMENT NOTE - Another approach would be to instantiate the database via Spring.
+ * </p>
+ */
+
+public final class DatabaseListener implements ServletContextListener {
+
+ // ------------------------------------------------------ Manifest Constants
+
+
+ /**
+ * <p>Appication scope attribute key under which the in-memory version of
+ * our database is stored.</p>
+ */
+ public static final String DATABASE_KEY = "database";
+
+
+ /**
+ * <p>Application scope attribute key under which the valid selection
+ * items for the protocol property is stored.</p>
+ */
+ public static final String PROTOCOLS_KEY = "protocols";
+
+ // ------------------------------------------------------ Instance Variables
+
+
+ /**
+ * <p>The <code>ServletContext</code> for this web application.</p>
+ */
+ private ServletContext context = null;
+
+
+ /**
+ * The {@link MemoryUserDatabase} object we construct and make available.
+ */
+ private MemoryUserDatabase database = null;
+
+
+ /**
+ * <p>Logging output for this plug in instance.</p>
+ */
+ private Log log = LogFactory.getLog(this.getClass());
+
+ // ------------------------------------------------------------- Properties
+
+
+ /**
+ * <p>The web application resource path of our persistent database storage
+ * file.</p>
+ */
+ private String pathname = "/WEB-INF/classes/database.xml";
+
+ /**
+ * <p>Return the application resource path to the database.</p>
+ *
+ * @return application resource path path to the database
+ */
+ public String getPathname() {
+ return (this.pathname);
+ }
+
+ /**
+ * <p>Set the application resource path to the database.</p>
+ *
+ * @param pathname to the database
+ */
+ public void setPathname(String pathname) {
+ this.pathname = pathname;
+ }
+
+ // ------------------------------------------ ServletContextListener Methods
+
+
+ /**
+ * <p>Gracefully shut down this database, releasing any resources that
+ * were allocated at initialization.</p>
+ *
+ * @param event ServletContextEvent to process
+ */
+ public void contextDestroyed(ServletContextEvent event) {
+
+ log.info("Finalizing memory database plug in");
+
+ if (database != null) {
+ try {
+ database.close();
+ } catch (Exception e) {
+ log.error("Closing memory database", e);
+ }
+ }
+
+ context.removeAttribute(DATABASE_KEY);
+ context.removeAttribute(PROTOCOLS_KEY);
+ database = null;
+ context = null;
+
+ }
+
+
+ /**
+ * <p>Initialize and load our initial database from persistent
+ * storage.</p>
+ *
+ * @param event The context initialization event
+ */
+ public void contextInitialized(ServletContextEvent event) {
+
+ log.info("Initializing memory database plug in from '" +
+ pathname + "'");
+
+ // Remember our associated ServletContext
+ this.context = event.getServletContext();
+
+ // Construct a new database and make it available
+ database = new MemoryUserDatabase();
+ try {
+ String path = calculatePath();
+ if (log.isDebugEnabled()) {
+ log.debug(" Loading database from '" + path + "'");
+ }
+ database.setPathname(path);
+ database.open();
+ } catch (Exception e) {
+ log.error("Opening memory database", e);
+ throw new IllegalStateException("Cannot load database from '" +
+ pathname + "': " + e);
+ }
+ context.setAttribute(DATABASE_KEY, database);
+
+ }
+
+ // -------------------------------------------------------- Private Methods
+
+
+ /**
+ * <p>Calculate and return an absolute pathname to the XML file to contain
+ * our persistent storage information.</p>
+ *
+ * @throws Exception if an input/output error occurs
+ */
+ private String calculatePath() throws Exception {
+
+ // Can we access the database via file I/O?
+ String path = context.getRealPath(pathname);
+ if (path != null) {
+ return (path);
+ }
+
+ // Does a copy of this file already exist in our temporary directory
+ File dir = (File)
+ context.getAttribute("javax.servlet.context.tempdir");
+ File file = new File(dir, "struts-example-database.xml");
+ if (file.exists()) {
+ return (file.getAbsolutePath());
+ }
+
+ // Copy the static resource to a temporary file and return its path
+ InputStream is =
+ context.getResourceAsStream(pathname);
+ BufferedInputStream bis = new BufferedInputStream(is, 1024);
+ FileOutputStream os =
+ new FileOutputStream(file);
+ BufferedOutputStream bos = new BufferedOutputStream(os, 1024);
+ byte buffer[] = new byte[1024];
+ while (true) {
+ int n = bis.read(buffer);
+ if (n <= 0) {
+ break;
+ }
+ bos.write(buffer, 0, n);
+ }
+ bos.close();
+ bis.close();
+ return (file.getAbsolutePath());
+
+ }
+
+
+}
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/java/Hello.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/java/Hello.java?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/java/Hello.java (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/java/Hello.java Sat Aug 12 17:45:14 2006
@@ -0,0 +1,16 @@
+import com.opensymphony.xwork2.ActionSupport;
+
+/**
+ * Example Action class.
+ */
+public class Hello extends ActionSupport {
+
+ /**
+ * An example implementation that does nothing and returns "success".
+ *
+ * @return {@link #SUCCESS}
+ */
+ public String execute() throws Exception {
+ return SUCCESS;
+ }
+}
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/java/MailReaderSupport.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/java/MailReaderSupport.java?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/java/MailReaderSupport.java (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/java/MailReaderSupport.java Sat Aug 12 17:45:14 2006
@@ -0,0 +1,141 @@
+import com.opensymphony.util.BeanUtils;
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.interceptor.ApplicationAware;
+import org.apache.struts.apps.mailreader.dao.ExpiredPasswordException;
+import org.apache.struts.apps.mailreader.dao.User;
+import org.apache.struts.apps.mailreader.dao.UserDatabase;
+
+import java.util.Map;
+
+public class MailReaderSupport extends ActionSupport implements ApplicationAware {
+
+ // ---- Register form properties ----
+
+ private String username = null;
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String value) {
+ username = value;
+ }
+
+ private String password = null;
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String value) {
+ password = value;
+ }
+
+ private String password2 = null;
+
+ public String getPassword2() {
+ return password2;
+ }
+
+ public void setPassword2(String value) {
+ password2 = value;
+ }
+
+ private String fullName = null;
+
+ public String getFullName() {
+ return fullName;
+ }
+
+ public void setFullName(String value) {
+ fullName = value;
+ }
+
+ private String fromAddress = null;
+
+ public String getFromAddress() {
+ return fromAddress;
+ }
+
+ public void setFromAddress(String value) {
+ fromAddress = value;
+ }
+
+ private String replyToAddress = null;
+
+ public String getReplyToAddress() {
+ return replyToAddress;
+ }
+
+ public void setReplyToAddress(String value) {
+ replyToAddress = value;
+ }
+
+ // ---- Keys ----
+
+ public static final String DATABASE_KEY = "database";
+
+ public static final String USER_KEY = "user";
+
+ // ---- Messages ----
+
+ public static final String ERROR_DATABASE_MISSING =
+ "Database is missing";
+
+ public static String ERROR_USERNAME_UNIQUE =
+ "That username is already in use - please select another";
+
+ // ---- ApplicationAware ----
+
+ private Map application;
+
+ public void setApplication(Map value) {
+ application = value;
+ }
+
+ public Map getApplication() {
+ return application;
+ }
+
+ // ---- Database property ----
+
+ public UserDatabase getDatabase() {
+ Object db = getApplication().get(DATABASE_KEY);
+ if (db == null) {
+ this.addActionError(ERROR_DATABASE_MISSING);
+ }
+ return (UserDatabase) db;
+ }
+
+ public void setDatabase(UserDatabase database) {
+ getApplication().put(DATABASE_KEY, database);
+ }
+
+ // ---- Database methods ----
+
+ public User findUser(String username, String password)
+ throws ExpiredPasswordException {
+ return getDatabase().findUser(username);
+ }
+
+ public User createUser(String username, String password) throws Exception {
+
+ UserDatabase database = getDatabase();
+ User user = database.findUser(username);
+
+ if (user != null) {
+ addActionError(ERROR_USERNAME_UNIQUE);
+ return null;
+ }
+
+ user = database.createUser(username);
+ BeanUtils.setValues(user, this, null);
+
+ return user;
+ }
+
+ public void saveUser() throws Exception {
+ getDatabase().save();
+ }
+
+}
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/java/Register.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/java/Register.java?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/java/Register.java (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/java/Register.java Sat Aug 12 17:45:14 2006
@@ -0,0 +1,23 @@
+import org.apache.struts.apps.mailreader.dao.User;
+
+public class Register extends MailReaderSupport {
+
+ public String save()
+ throws Exception {
+
+ User user = findUser(getUsername(), getPassword());
+ boolean haveUser = (user != null);
+
+ if (haveUser) {
+ addActionError(ERROR_USERNAME_UNIQUE);
+ return INPUT;
+ }
+
+ createUser(getUsername(), getPassword());
+
+ saveUser();
+
+ return SUCCESS;
+ }
+
+}
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/java/applicationContext.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/java/applicationContext.xml?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/java/applicationContext.xml (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/java/applicationContext.xml Sat Aug 12 17:45:14 2006
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
+
+<beans default-autowire="autodetect">
+ <!-- add your spring beans here -->
+</beans>
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/java/database.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/java/database.xml?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/java/database.xml (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/java/database.xml Sat Aug 12 17:45:14 2006
@@ -0,0 +1,13 @@
+<?xml version='1.0'?>
+<database>
+ <user username="user" fromAddress="John.User@somewhere.com"
+ fullName="John Q. User" password="pass">
+ <subscription host="mail.hotmail.com" autoConnect="false"
+ password="bar" type="pop3" username="user1234">
+ </subscription>
+ <subscription host="mail.yahoo.com" autoConnect="false" password="foo"
+ type="imap" username="jquser">
+ </subscription>
+ </user>
+</database>
+
\ No newline at end of file
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/java/resources.properties
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/java/resources.properties?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/java/resources.properties (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/java/resources.properties Sat Aug 12 17:45:14 2006
@@ -0,0 +1,2 @@
+hello.message = Congratulations! Struts is up and running ...
+# Add your messages here ...
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/java/struts.properties
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/java/struts.properties?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/java/struts.properties (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/java/struts.properties Sat Aug 12 17:45:14 2006
@@ -0,0 +1,4 @@
+struts.objectFactory = spring
+struts.devMode = true
+struts.action.extension = action
+struts.custom.i18n.resources = resources
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/java/struts.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/java/struts.xml?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/java/struts.xml (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/java/struts.xml Sat Aug 12 17:45:14 2006
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE struts PUBLIC
+ "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
+ "http://struts.apache.org/dtds/struts-2.0.dtd">
+
+<struts>
+ <include file="struts-default.xml"/>
+
+ <package name="default" extends="struts-default">
+
+ <default-action-ref name="Missing"/>
+
+ <action name="Hello" class="Hello">
+ <result>/pages/Hello.jsp</result>
+ </action>
+
+ <action name="Missing">
+ <result>/pages/Missing.jsp</result>
+ </action>
+
+ <action name="Welcome">
+ <result>/pages/Welcome.jsp</result>
+ </action>
+
+ <action name="Register" class="Register" method="input">
+ <result name="input">/pages/Register.jsp</result>
+ </action>
+
+ <action name="Register/save" class="Register" method="save">
+ <result name="input">/pages/Register.jsp</result>
+ <result>/pages/Missing.jsp</result>
+ </action>
+
+ </package>
+</struts>
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/test/HelloTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/test/HelloTest.java?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/test/HelloTest.java (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/test/HelloTest.java Sat Aug 12 17:45:14 2006
@@ -0,0 +1,16 @@
+import junit.framework.TestCase;
+
+/**
+ * An example text class to verify the configuration.
+ */
+public class HelloTest extends TestCase {
+
+ /**
+ * An example test that asserts true.
+ *
+ * @throws Exception On invalid assertions
+ */
+ public void testHelloAction() throws Exception {
+ assertTrue(true);
+ }
+}
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/test/RegisterTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/test/RegisterTest.java?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/test/RegisterTest.java (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/test/RegisterTest.java Sat Aug 12 17:45:14 2006
@@ -0,0 +1,34 @@
+import com.opensymphony.xwork2.Action;
+import org.apache.struts.apps.mailreader.dao.User;
+
+import java.util.HashMap;
+
+public class RegisterTest extends RetainTest {
+
+ Register action = null;
+
+ public void setUp() throws Exception {
+ super.setUp();
+ action = new Register();
+ action.setApplication(new HashMap());
+ action.setDatabase(database);
+ }
+
+ public void testExecute() throws Exception {
+
+ action.setUsername("user");
+ action.setPassword("pass");
+ action.setFullName("John Q. User");
+ action.setFromAddress("John.User@somewhere.com");
+
+ String success = action.execute();
+ assertTrue("Expected SUCCESS", Action.SUCCESS.equals(success));
+
+ User user = database.findUser("user");
+ assertNotNull("Expected user", user);
+
+ String input = action.execute();
+ assertTrue("Expected INPUT", Action.INPUT.equals(input));
+ }
+
+}
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/test/RetainTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/test/RetainTest.java?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/test/RetainTest.java (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/test/RetainTest.java Sat Aug 12 17:45:14 2006
@@ -0,0 +1,97 @@
+import junit.framework.TestCase;
+import org.apache.struts.apps.mailreader.dao.Subscription;
+import org.apache.struts.apps.mailreader.dao.User;
+import org.apache.struts.apps.mailreader.dao.UserDatabase;
+import org.apache.struts.apps.mailreader.dao.impl.memory.MemoryUserDatabase;
+
+public class RetainTest extends TestCase {
+
+ protected UserDatabase database;
+ protected String testName = "test-database.xml";
+
+ public void setUp() throws Exception {
+ super.setUp();
+ MemoryUserDatabase memoryUserDatabase = new MemoryUserDatabase();
+ memoryUserDatabase.setPathname(testName);
+ database = memoryUserDatabase;
+ }
+
+ public void testDatabaseClean() throws Exception {
+ User user = database.findUser("user");
+ assertNull("Expected user to be created", user);
+ }
+
+ // Add your test methods here.
+ // The setUp method will run between each test.
+
+ public void testCreateUser() throws Exception {
+ User user = database.createUser("user");
+ assertNotNull(user);
+ }
+
+ public void testFindUser() throws Exception {
+ User user1 = database.createUser("user");
+ User user2 = database.findUser("user");
+ assertSame("Expected users to match", user1, user2);
+ }
+
+ public void testCreateSubscription() throws Exception {
+ Subscription sub = database.createUser("user").createSubscription("mail.yahoo.com");
+ assertNotNull("Expected subscription to be created", sub);
+ }
+
+ public void testFindSubscription() throws Exception {
+ Subscription sub1 = database.createUser("user").createSubscription("mail.yahoo.com");
+ Subscription sub2 = database.findUser("user").findSubscription("mail.yahoo.com");
+ assertSame("Expected Subscriptions to match", sub1, sub2);
+ }
+
+ public void testDatabsaeSave() throws Exception {
+
+ User user = database.createUser("user");
+ user.setPassword("pass");
+ user.setFullName("John Q. User");
+ user.setFromAddress("John.User@somewhere.com");
+
+ Subscription sub1 = user.createSubscription("mail.hotmail.com");
+ sub1.setUsername("user1234");
+ sub1.setAutoConnect(false);
+ sub1.setType("pop3");
+ sub1.setPassword("bar");
+
+ Subscription sub2 = user.createSubscription("mail.yahoo.com");
+ sub2.setUsername("jquser");
+ sub2.setAutoConnect(false);
+ sub2.setType("imap");
+ sub2.setPassword("foo");
+
+ database.save();
+
+ }
+
+ // Extra credit
+
+ public void testFinderUserBogus() throws Exception {
+ User user1 = database.findUser("bogus");
+ assertNull("Expected bogus user to be not found", user1);
+ User user2 = database.createUser("user");
+ assertNotNull("Expected user to be created", user2);
+ user1 = database.findUser("bogus");
+ assertNull("Expected bogus user to be not found", user1);
+ user1 = database.findUser("user");
+ assertNotNull("Expected user to be found", user1);
+ }
+
+ public void testFindSubBogus() throws Exception {
+ User user = database.createUser("user");
+ Subscription sub = user.findSubscription("mail.bogus.com");
+ assertNull(sub);
+ sub = database.findUser("user").createSubscription("mail.hotmail.com");
+ assertNotNull(sub);
+ Subscription sub2 = user.findSubscription("mail.bogus.com");
+ assertNull(sub2);
+ Subscription sub3 = user.findSubscription("mail.hotmail.com");
+ assertSame(sub, sub3);
+ }
+
+}
\ No newline at end of file
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/WEB-INF/web.xml?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/WEB-INF/web.xml (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/WEB-INF/web.xml Sat Aug 12 17:45:14 2006
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
+<web-app>
+
+ <display-name>Struts 2 Mailreader</display-name>
+
+ <context-param>
+ <param-name>contextConfigLocation</param-name>
+ <param-value>classpath*:applicationContext*.xml</param-value>
+ </context-param>
+
+ <filter>
+ <filter-name>Struts2</filter-name>
+ <filter-class>
+ org.apache.struts2.dispatcher.FilterDispatcher
+ </filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>Struts2</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <listener>
+ <listener-class>
+ org.springframework.web.context.ContextLoaderListener
+ </listener-class>
+ </listener>
+
+ <!-- Application Listener for Mailreader database -->
+ <listener>
+ <listener-class>
+ DatabaseListener
+ </listener-class>
+ </listener>
+
+ <welcome-file-list>
+ <welcome-file>index.html</welcome-file>
+ </welcome-file-list>
+
+</web-app>
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/index.html
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/index.html?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/index.html (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/index.html Sat Aug 12 17:45:14 2006
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <META HTTP-EQUIV="Refresh" CONTENT="0;URL=Welcome.action">
+</head>
+
+<body>
+<p>Loading ...</p>
+</body>
+</html>
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Hello.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Hello.jsp?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Hello.jsp (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Hello.jsp Sat Aug 12 17:45:14 2006
@@ -0,0 +1,9 @@
+<%@ taglib prefix="s" uri="/tags" %>
+<html>
+<head>
+ <title>Hello</title>
+</head>
+<body>
+<h2><ww:text name="hello.message"/></h2>
+</body>
+</html>
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Missing.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Missing.jsp?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Missing.jsp (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Missing.jsp Sat Aug 12 17:45:14 2006
@@ -0,0 +1,9 @@
+<html>
+<head><title>Missing Feature</title></head>
+<body>
+<p>
+ This feature is under construction.
+ Please try again in the next interation.
+</p>
+</body>
+</html>
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Register.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Register.jsp?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Register.jsp (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Register.jsp Sat Aug 12 17:45:14 2006
@@ -0,0 +1,28 @@
+<%@ taglib prefix="s" uri="/tags" %>
+<html>
+<head>
+ <title>MailReader - Register</title>
+</head>
+
+<body onLoad="self.focus();document.Register/save.username.focus()">
+
+<s:actionerror/>
+<s:form action="Register/save">
+
+ <s:textfield label="Username" name="username"/>
+
+ <s:password label="Password" name="password"/>
+
+ <s:password label="(Repeat) Password" name="password2"/>
+
+ <s:textfield label="Full Name" name="fullName"/>
+
+ <s:textfield label="From Address" name="fromAddress"/>
+
+ <s:textfield label="Reply To Address" name="replyToAddress"/>
+
+ <s:submit value="Save" name="Save"/>
+
+</s:form>
+</body>
+</html>
Added: struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Welcome.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Welcome.jsp?rev=431120&view=auto
==============================================================================
--- struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Welcome.jsp (added)
+++ struts/sandbox/trunk/mailreader-course/struts2/register/src/webapp/pages/Welcome.jsp Sat Aug 12 17:45:14 2006
@@ -0,0 +1,23 @@
+<%@ taglib prefix="s" uri="/tags" %>
+<html>
+<head>
+ <title>MailReader</title>
+</head>
+
+<body>
+<h3>MailReader Options</h3>
+
+<ul>
+ <li><a href="<s:url action="Register"/>">Register with the MailReader</a></li>
+ <li><a href="<s:url action="Missing"/>">Log on to the MailReader</a></li>
+</ul>
+
+<h3>Language Options</h3>
+<ul>
+ <li><a href="<s:url action="Missing"/>">English</a></li>
+ <li><a href="<s:url action="Missing"/>">Japanese</a></li>
+ <li><a href="<s:url action="Missing"/>">Russian</a></li>
+</ul>
+
+</body>
+</html>