Author: husted Date: Thu Apr 6 12:42:22 2006 New Revision: 392051 URL: http://svn.apache.org/viewcvs?rev=392051&view=rev Log: MailReader Course * Add lab 2-2 * Add missing files from other labs.
Added: struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/MailReaderSupport.java (with props) struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/Register.java (with props) struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/database.xml (with props) struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/test/RegisterTest.java (with props) struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/webapp/pages/Register.jsp (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/MailReaderSupport.java (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/Register-validation.xml (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/Register.java (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/database.xml (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/test/RegisterTest.java (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/webapp/pages/Register.jsp (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/ - copied from r392023, struts/sandbox/trunk/mailreader-course/action2/lab-2-1/ struts/sandbox/trunk/mailreader-course/action2/lab-2-2/lab-2-2.iml struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/MailReaderSupport.java (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/Register-validation.xml (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/Register.java (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/database.xml (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/test/RegisterTest.java (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/webapp/WEB-INF/entities/ struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/webapp/WEB-INF/entities/WebTest.dtd (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/webapp/WEB-INF/entities/config.xml (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/webapp/WEB-INF/entities/register-open.xml (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/webapp/WEB-INF/entities/register-page.xml (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/webapp/WEB-INF/entities/register-trillian.xml (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/webapp/WEB-INF/entities/save-click.xml (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/webapp/WEB-INF/entities/taskdef.xml (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/webapp/WEB-INF/entities/welcome-open.xml (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/webapp/WEB-INF/webtest.xml (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/webapp/pages/Menu.jsp (with props) struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/webapp/pages/Register.jsp (with props) Removed: struts/sandbox/trunk/mailreader-course/action2/lab-2-2/lab-2-1.iml Modified: struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/xwork.xml struts/sandbox/trunk/mailreader-course/action2/mailreader-course-action2.ipr Added: struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/MailReaderSupport.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/MailReaderSupport.java?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/MailReaderSupport.java (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/MailReaderSupport.java Thu Apr 6 12:42:22 2006 @@ -0,0 +1,139 @@ +import com.opensymphony.util.BeanUtils; +import com.opensymphony.webwork.interceptor.ApplicationAware; +import com.opensymphony.xwork.ActionSupport; +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; + } + + // ---- Messages ---- + + public static final String DATABASE_KEY = "database"; + + 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"; + + public static final String USER_KEY = "user"; + + // ---- 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(); + } + +} Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/MailReaderSupport.java ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/Register.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/Register.java?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/Register.java (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/Register.java Thu Apr 6 12:42:22 2006 @@ -0,0 +1,24 @@ +import com.opensymphony.xwork.Action; +import org.apache.struts.apps.mailreader.dao.User; + +public class Register extends MailReaderSupport { + + public String execute() + throws Exception { + + User user = findUser(getUsername(), getPassword()); + boolean haveUser = (user != null); + + if (haveUser) { + addActionError(ERROR_USERNAME_UNIQUE); + return Action.INPUT; + } + + createUser(getUsername(), getPassword()); + + saveUser(); + + return Action.SUCCESS; + } + +} Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/Register.java ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/database.xml URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/database.xml?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/database.xml (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/database.xml Thu Apr 6 12:42:22 2006 @@ -0,0 +1,13 @@ +<?xml version='1.0'?> +<database> + <user username="user" fromAddress="[EMAIL PROTECTED]" + 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 Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/java/database.xml ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/test/RegisterTest.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/test/RegisterTest.java?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/test/RegisterTest.java (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/test/RegisterTest.java Thu Apr 6 12:42:22 2006 @@ -0,0 +1,34 @@ +import com.opensymphony.xwork.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("[EMAIL PROTECTED]"); + + 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)); + } + +} Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/test/RegisterTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/webapp/pages/Register.jsp URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/webapp/pages/Register.jsp?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/webapp/pages/Register.jsp (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/webapp/pages/Register.jsp Thu Apr 6 12:42:22 2006 @@ -0,0 +1,30 @@ +<%@ taglib uri="/webwork" prefix="ww" %> +<html> +<head> + <title>Register</title> +</head> + +<body onLoad="self.focus();document.Register.username.focus()"> + +<ww:actionerror/> +<ww:form method="POST"> + + <ww:textfield label="UserName" name="username"/> + + <ww:password label="Password" name="password"/> + + <ww:password label="Confirm Password" name="password2"/> + + <ww:textfield label="Full Name" name="fullName"/> + + <ww:textfield label="From Address" name="fromAddress"/> + + <ww:textfield label="Reply To Address" name="replyToAddress"/> + + <ww:submit value="Save" name="Save"/> + +</ww:form> + + +</body> +</html> Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-1-3/src/webapp/pages/Register.jsp ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/MailReaderSupport.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/MailReaderSupport.java?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/MailReaderSupport.java (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/MailReaderSupport.java Thu Apr 6 12:42:22 2006 @@ -0,0 +1,139 @@ +import com.opensymphony.util.BeanUtils; +import com.opensymphony.webwork.interceptor.ApplicationAware; +import com.opensymphony.xwork.ActionSupport; +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; + } + + // ---- Messages ---- + + public static final String DATABASE_KEY = "database"; + + 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"; + + public static final String USER_KEY = "user"; + + // ---- 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(); + } + +} Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/MailReaderSupport.java ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/Register-validation.xml URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/Register-validation.xml?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/Register-validation.xml (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/Register-validation.xml Thu Apr 6 12:42:22 2006 @@ -0,0 +1,55 @@ +<!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="username"> + <field-validator type="requiredstring"> + <message>Username is required</message> + </field-validator> + </field> + + <field name="fullName"> + <field-validator type="requiredstring"> + <message>Full Name is required</message> + </field-validator> + </field> + + <field name="fromAddress"> + <field-validator type="requiredstring"> + <message>From Address is required</message> + </field-validator> + <field-validator type="email"> + <message>Invalid format for From Address</message> + </field-validator> + </field> + + <field name="replyToAddress"> + <field-validator type="email"> + <message>Invalid format for Reply To Address</message> + </field-validator> + </field> + + <field name="password"> + <field-validator type="requiredstring"> + <message>Password is required</message> + </field-validator> + <field-validator type="stringlength"> + <param name="trim">true</param> + <param name="minLength">4</param> + <param name="maxLength">10</param> + <message>Password length is not in the range 4 through 10.</message> + </field-validator> + </field> + + <field name="password2"> + <field-validator type="requiredstring"> + <message>Confirmation password is required</message> + </field-validator> + </field> + + <validator type="expression"> + <param name="expression">password eq password2</param> + <message>Invalid username and/or password, please try again</message> + </validator> + +</validators> Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/Register-validation.xml ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/Register.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/Register.java?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/Register.java (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/Register.java Thu Apr 6 12:42:22 2006 @@ -0,0 +1,24 @@ +import com.opensymphony.xwork.Action; +import org.apache.struts.apps.mailreader.dao.User; + +public class Register extends MailReaderSupport { + + public String execute() + throws Exception { + + User user = findUser(getUsername(), getPassword()); + boolean haveUser = (user != null); + + if (haveUser) { + addActionError(ERROR_USERNAME_UNIQUE); + return Action.INPUT; + } + + createUser(getUsername(), getPassword()); + + saveUser(); + + return Action.SUCCESS; + } + +} Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/Register.java ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/database.xml URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/database.xml?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/database.xml (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/database.xml Thu Apr 6 12:42:22 2006 @@ -0,0 +1,13 @@ +<?xml version='1.0'?> +<database> + <user username="user" fromAddress="[EMAIL PROTECTED]" + 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 Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/java/database.xml ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/test/RegisterTest.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/test/RegisterTest.java?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/test/RegisterTest.java (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/test/RegisterTest.java Thu Apr 6 12:42:22 2006 @@ -0,0 +1,34 @@ +import com.opensymphony.xwork.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("[EMAIL PROTECTED]"); + + 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)); + } + +} Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/test/RegisterTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/webapp/pages/Register.jsp URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/webapp/pages/Register.jsp?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/webapp/pages/Register.jsp (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/webapp/pages/Register.jsp Thu Apr 6 12:42:22 2006 @@ -0,0 +1,30 @@ +<%@ taglib uri="/webwork" prefix="ww" %> +<html> +<head> + <title>Register</title> +</head> + +<body onLoad="self.focus();document.Register.username.focus()"> + +<ww:actionerror/> +<ww:form method="POST" validate="true"> + + <ww:textfield label="UserName" name="username"/> + + <ww:password label="Password" name="password"/> + + <ww:password label="Confirm Password" name="password2"/> + + <ww:textfield label="Full Name" name="fullName"/> + + <ww:textfield label="From Address" name="fromAddress"/> + + <ww:textfield label="Reply To Address" name="replyToAddress"/> + + <ww:submit value="Save" name="Save"/> + +</ww:form> + + +</body> +</html> Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-2-1/src/webapp/pages/Register.jsp ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-2-2/lab-2-2.iml URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-2-2/lab-2-2.iml?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-2-2/lab-2-2.iml (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-2-2/lab-2-2.iml Thu Apr 6 12:42:22 2006 @@ -0,0 +1,264 @@ +<?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.0/webapps/lab-2-2/WEB-INF/classes" /> + <exclude-output /> + <exploded url="file://C:/opt/Apache/Tomcat-5.0/webapps/lab-2-2" /> + <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="library" name="Tomcat" level="application_server_libraries" /> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$MODULE_DIR$/../../lib/spring-web.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$MODULE_DIR$/../../lib/oscore.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$MODULE_DIR$/../../lib/struts-mailreader-dao-1.3.0-dev.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$MODULE_DIR$/../../lib/spring-context.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$MODULE_DIR$/../../lib/spring-core.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$MODULE_DIR$/../../lib/webwork-2.2.2.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$MODULE_DIR$/../../lib/xwork-1.1.2.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$MODULE_DIR$/../../lib/freemarker.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/rife-continuations.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$MODULE_DIR$/../../lib/commons-collections-3.1.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$MODULE_DIR$/../../lib/spring-beans.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$MODULE_DIR$/../../lib/ognl.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/struts-taglib-1.3.0.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$APPLICATION_HOME_DIR$/lib/junit.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntryProperties /> + </component> + <component name="WebModuleBuildComponent"> + <setting name="EXPLODED_URL" value="file://C:/opt/Apache/Tomcat-5.0/webapps/lab-2-2" /> + <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/junit.jar" /> + <url>jar://$APPLICATION_HOME_DIR$/lib/junit.jar!/</url> + </containerElement> + <containerElement type="library" level="module"> + <attribute name="method" value="1" /> + <attribute name="URI" value="/WEB-INF/lib/commons-collections-3.1.jar" /> + <url>jar://$MODULE_DIR$/../../lib/commons-collections-3.1.jar!/</url> + </containerElement> + <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.jar" /> + <url>jar://$MODULE_DIR$/../../lib/freemarker.jar!/</url> + </containerElement> + <containerElement type="library" level="module"> + <attribute name="method" value="1" /> + <attribute name="URI" value="/WEB-INF/lib/ognl.jar" /> + <url>jar://$MODULE_DIR$/../../lib/ognl.jar!/</url> + </containerElement> + <containerElement type="library" level="module"> + <attribute name="method" value="1" /> + <attribute name="URI" value="/WEB-INF/lib/oscore.jar" /> + <url>jar://$MODULE_DIR$/../../lib/oscore.jar!/</url> + </containerElement> + <containerElement type="library" level="module"> + <attribute name="method" value="1" /> + <attribute name="URI" value="/WEB-INF/lib/rife-continuations.jar" /> + <url>jar://$MODULE_DIR$/../../lib/rife-continuations.jar!/</url> + </containerElement> + <containerElement type="library" level="module"> + <attribute name="method" value="1" /> + <attribute name="URI" value="/WEB-INF/lib/spring-beans.jar" /> + <url>jar://$MODULE_DIR$/../../lib/spring-beans.jar!/</url> + </containerElement> + <containerElement type="library" level="module"> + <attribute name="method" value="1" /> + <attribute name="URI" value="/WEB-INF/lib/spring-context.jar" /> + <url>jar://$MODULE_DIR$/../../lib/spring-context.jar!/</url> + </containerElement> + <containerElement type="library" level="module"> + <attribute name="method" value="1" /> + <attribute name="URI" value="/WEB-INF/lib/spring-core.jar" /> + <url>jar://$MODULE_DIR$/../../lib/spring-core.jar!/</url> + </containerElement> + <containerElement type="library" level="module"> + <attribute name="method" value="1" /> + <attribute name="URI" value="/WEB-INF/lib/spring-web.jar" /> + <url>jar://$MODULE_DIR$/../../lib/spring-web.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.0-dev.jar" /> + <url>jar://$MODULE_DIR$/../../lib/struts-mailreader-dao-1.3.0-dev.jar!/</url> + </containerElement> + <containerElement type="library" level="module"> + <attribute name="method" value="1" /> + <attribute name="URI" value="/WEB-INF/lib/struts-taglib-1.3.0.jar" /> + <url>jar://$MODULE_DIR$/../../lib/struts-taglib-1.3.0.jar!/</url> + </containerElement> + <containerElement type="library" level="module"> + <attribute name="method" value="1" /> + <attribute name="URI" value="/WEB-INF/lib/webwork-2.2.2.jar" /> + <url>jar://$MODULE_DIR$/../../lib/webwork-2.2.2.jar!/</url> + </containerElement> + <containerElement type="library" level="module"> + <attribute name="method" value="1" /> + <attribute name="URI" value="/WEB-INF/lib/xwork-1.1.2.jar" /> + <url>jar://$MODULE_DIR$/../../lib/xwork-1.1.2.jar!/</url> + </containerElement> + <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/src/webapp/WEB-INF/web.xml" optional="false" version="2.3" /> + <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/action2/lab-2-2/src/java/MailReaderSupport.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/MailReaderSupport.java?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/MailReaderSupport.java (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/MailReaderSupport.java Thu Apr 6 12:42:22 2006 @@ -0,0 +1,139 @@ +import com.opensymphony.util.BeanUtils; +import com.opensymphony.webwork.interceptor.ApplicationAware; +import com.opensymphony.xwork.ActionSupport; +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; + } + + // ---- Messages ---- + + public static final String DATABASE_KEY = "database"; + + 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"; + + public static final String USER_KEY = "user"; + + // ---- 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(); + } + +} Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/MailReaderSupport.java ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/Register-validation.xml URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/Register-validation.xml?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/Register-validation.xml (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/Register-validation.xml Thu Apr 6 12:42:22 2006 @@ -0,0 +1,55 @@ +<!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="username"> + <field-validator type="requiredstring"> + <message>Username is required</message> + </field-validator> + </field> + + <field name="fullName"> + <field-validator type="requiredstring"> + <message>Full Name is required</message> + </field-validator> + </field> + + <field name="fromAddress"> + <field-validator type="requiredstring"> + <message>From Address is required</message> + </field-validator> + <field-validator type="email"> + <message>Invalid format for From Address</message> + </field-validator> + </field> + + <field name="replyToAddress"> + <field-validator type="email"> + <message>Invalid format for Reply To Address</message> + </field-validator> + </field> + + <field name="password"> + <field-validator type="requiredstring"> + <message>Password is required</message> + </field-validator> + <field-validator type="stringlength"> + <param name="trim">true</param> + <param name="minLength">4</param> + <param name="maxLength">10</param> + <message>Password length is not in the range 4 through 10.</message> + </field-validator> + </field> + + <field name="password2"> + <field-validator type="requiredstring"> + <message>Confirmation password is required</message> + </field-validator> + </field> + + <validator type="expression"> + <param name="expression">password eq password2</param> + <message>Invalid username and/or password, please try again</message> + </validator> + +</validators> Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/Register-validation.xml ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/Register.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/Register.java?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/Register.java (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/Register.java Thu Apr 6 12:42:22 2006 @@ -0,0 +1,24 @@ +import com.opensymphony.xwork.Action; +import org.apache.struts.apps.mailreader.dao.User; + +public class Register extends MailReaderSupport { + + public String execute() + throws Exception { + + User user = findUser(getUsername(), getPassword()); + boolean haveUser = (user != null); + + if (haveUser) { + addActionError(ERROR_USERNAME_UNIQUE); + return Action.INPUT; + } + + createUser(getUsername(), getPassword()); + + saveUser(); + + return Action.SUCCESS; + } + +} Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/Register.java ------------------------------------------------------------------------------ svn:eol-style = native Added: struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/database.xml URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/database.xml?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/database.xml (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/database.xml Thu Apr 6 12:42:22 2006 @@ -0,0 +1,13 @@ +<?xml version='1.0'?> +<database> + <user username="user" fromAddress="[EMAIL PROTECTED]" + 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 Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/database.xml ------------------------------------------------------------------------------ svn:eol-style = native Modified: struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/xwork.xml URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/xwork.xml?rev=392051&r1=392023&r2=392051&view=diff ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/xwork.xml (original) +++ struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/java/xwork.xml Thu Apr 6 12:42:22 2006 @@ -21,7 +21,7 @@ <action name="Register" class="Register"> <result name="input">/pages/Register.jsp</result> - <result>/pages/Missing.jsp</result> + <result>/pages/Menu.jsp</result> </action> </package> Added: struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/test/RegisterTest.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/test/RegisterTest.java?rev=392051&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/test/RegisterTest.java (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/test/RegisterTest.java Thu Apr 6 12:42:22 2006 @@ -0,0 +1,34 @@ +import com.opensymphony.xwork.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("[EMAIL PROTECTED]"); + + 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)); + } + +} Propchange: struts/sandbox/trunk/mailreader-course/action2/lab-2-2/src/test/RegisterTest.java ------------------------------------------------------------------------------ svn:eol-style = native --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]