Author: husted Date: Fri Apr 7 10:18:15 2006 New Revision: 392338 URL: http://svn.apache.org/viewcvs?rev=392338&view=rev Log: MailReader Course * Add lab 3-2
Added: struts/sandbox/trunk/mailreader-course/action2/lab-3-2/ - copied from r392136, struts/sandbox/trunk/mailreader-course/action2/lab-3-1/ struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/WEB-INF/webtest.properties.sample Modified: struts/sandbox/trunk/mailreader-course/action2/lab-3-1/src/java/resources.properties struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Login-validation.xml struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/MailReaderSupport.java struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Register-validation.xml struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Register.java struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/resources.properties struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/xwork.xml struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/WEB-INF/webtest.xml struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/pages/Menu.jsp struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/pages/Register.jsp struts/sandbox/trunk/mailreader-course/action2/mailreader-course-action2.ipr Modified: struts/sandbox/trunk/mailreader-course/action2/lab-3-1/src/java/resources.properties URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-3-1/src/java/resources.properties?rev=392338&r1=392337&r2=392338&view=diff ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-3-1/src/java/resources.properties (original) +++ struts/sandbox/trunk/mailreader-course/action2/lab-3-1/src/java/resources.properties Fri Apr 7 10:18:15 2006 @@ -16,6 +16,7 @@ button.cancel=Cancel button.save=Save +button.reset=Reset menu.title=MailReader - Main Menu menu.heading=Menu Options for @@ -46,7 +47,6 @@ button.doSubmit=DO_SUBMIT button.doReset=DO_RESULT button.doCancel=org.apache.struts.taglib.html.CANCEL -button.reset=Reset change.message=Your password has expired. Please ask the system administrator to change it. change.try=Try Again change.title=Password Has Expired Modified: struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Login-validation.xml URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Login-validation.xml?rev=392338&r1=392136&r2=392338&view=diff ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Login-validation.xml (original) +++ struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Login-validation.xml Fri Apr 7 10:18:15 2006 @@ -3,12 +3,12 @@ <validators> <field name="username"> <field-validator type="requiredstring"> - <message>Username is required</message> + <message key="error.username.required"/> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> - <message>Password is required</message> + <message key="error.password.required"/> </field-validator> </field> </validators> Modified: struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/MailReaderSupport.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/MailReaderSupport.java?rev=392338&r1=392136&r2=392338&view=diff ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/MailReaderSupport.java (original) +++ struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/MailReaderSupport.java Fri Apr 7 10:18:15 2006 @@ -73,6 +73,18 @@ replyToAddress = value; } + // ---- Task property (utilized by UI) ---- + + private String task = null; + + public String getTask() { + return task; + } + + public void setTask(String value) { + task = value; + } + // ---- Keys ---- public static final String DATABASE_KEY = "database"; @@ -83,16 +95,23 @@ public static final String CANCEL = "cancel"; - // ---- Messages ---- + public static final String CREATE = "Create"; + + public static final String EDIT = "Edit"; + + // ---- Message Keys ---- public static final String ERROR_DATABASE_MISSING = - "Database is missing"; + "error.database.missing"; public static final String ERROR_USERNAME_UNIQUE = - "That username is already in use - please select another"; + "error.username.unique"; public static final String ERROR_PASSWORD_MISMATCH = - "Invalid username and/or password, please try again"; + "error.password.mismatch"; + + public static final String ERROR_PASSWORD_MATCH = + "error.password.match"; // ---- ApplicationAware ---- @@ -111,7 +130,7 @@ public UserDatabase getDatabase() { Object db = getApplication().get(DATABASE_KEY); if (db == null) { - this.addActionError(ERROR_DATABASE_MISSING); + this.addActionError(getText(ERROR_DATABASE_MISSING)); } return (UserDatabase) db; } @@ -191,7 +210,7 @@ User user = database.findUser(username); if (user != null) { - addActionError(ERROR_USERNAME_UNIQUE); + addActionError(getText(ERROR_USERNAME_UNIQUE)); return null; } Modified: struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Register-validation.xml URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Register-validation.xml?rev=392338&r1=392136&r2=392338&view=diff ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Register-validation.xml (original) +++ struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Register-validation.xml Fri Apr 7 10:18:15 2006 @@ -4,52 +4,29 @@ <field name="username"> <field-validator type="requiredstring"> - <message>Username is required</message> + <message key="error.username.required"/> </field-validator> </field> - <field name="fullName"> + <field name="user.fullName"> <field-validator type="requiredstring"> - <message>Full Name is required</message> + <message key="error.fullName.required"/> </field-validator> </field> - <field name="fromAddress"> + <field name="user.fromAddress"> <field-validator type="requiredstring"> - <message>From Address is required</message> + <message key="error.fromAddress.required"/> </field-validator> <field-validator type="email"> - <message>Invalid format for From Address</message> + <message key="errors.email"/> </field-validator> </field> - <field name="replyToAddress"> + <field name="user.replyToAddress"> <field-validator type="email"> - <message>Invalid format for Reply To Address</message> + <message key="errors.email"/> </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> Modified: struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Register.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Register.java?rev=392338&r1=392136&r2=392338&view=diff ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Register.java (original) +++ struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/Register.java Fri Apr 7 10:18:15 2006 @@ -1,26 +1,65 @@ -import com.opensymphony.xwork.Action; +import com.opensymphony.util.BeanUtils; import org.apache.struts.apps.mailreader.dao.User; public class Register extends MailReaderSupport { + public String input() throws Exception { + + User user = getUser(); + boolean editing = (null != user); + + if (editing) { + setTask(EDIT); + BeanUtils.setValues(this, user, null); + setPassword(null); + } else { + setTask(CREATE); + } + + return INPUT; + } + public String execute() throws Exception { - User user = findUser(getUsername(), getPassword()); - boolean haveUser = (user != null); + User user = getUser(); + boolean editing = (null != user); - if (haveUser) { - addActionError(ERROR_USERNAME_UNIQUE); - return Action.INPUT; + if (editing) { + // FIXME: Any way to call the RegisterSave validators from here? + String newPassword = getPassword(); + boolean changing = ((null != newPassword) && (newPassword.length()>0)); + if (!changing) { + setPassword(user.getPassword()); + } else { + String confirmPassword = getPassword2(); + boolean matches = ((null != confirmPassword) + && (confirmPassword.equals(newPassword))); + if (matches) { + user.setPassword(newPassword); + } else { + addActionError(getText(ERROR_PASSWORD_MATCH)); + return INPUT; + } + } + BeanUtils.setValues(user, this, null); } - user = createUser(getUsername(), getPassword()); + if (!editing) { + user = findUser(getUsername(), getPassword()); + boolean haveUser = (user != null); + + if (haveUser) { + addActionError(getText(ERROR_USERNAME_UNIQUE)); + return INPUT; + } - setUser(user); + user = createUser(getUsername(), getPassword()); + setUser(user); + } saveUser(); - return Action.SUCCESS; + return SUCCESS; } - } Modified: struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/resources.properties URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/resources.properties?rev=392338&r1=392136&r2=392338&view=diff ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/resources.properties (original) +++ struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/resources.properties Fri Apr 7 10:18:15 2006 @@ -14,6 +14,9 @@ fromAddress=From Address replyToAddress=Reply To Address +button.cancel=Cancel +button.save=Save + menu.title=MailReader - Main Menu menu.heading=Menu Options for menu.registration=Edit your registration profile @@ -21,41 +24,41 @@ login.title=MailReader - Logon +error.database.missing=User database is missing, cannot validate logon credentials +error.username.unique=That username is already in use - please select another +error.password.mismatch=Invalid username and/or password, please try again + +error.username.required=Username is required +error.fullName.required=Full Name is required +error.fromAddress.required=From Address is required +error.fromAddress.format=Invalid format for From Address +error.replyToAddress.format=Invalid format for Reply To Address +error.password.required=Password is required +error.password2.required=Confirmation password is required +error.password.match=Password and confirmation password must match + +error.host.required=Mail Server is required +error.type.invalid=Server Type must be 'imap' or 'pop3' +error.type.required=Server Type is required # Future use -button.cancel=Cancel button.confirm=Confirm button.doSubmit=DO_SUBMIT button.doReset=DO_RESULT button.doCancel=org.apache.struts.taglib.html.CANCEL button.reset=Reset -button.save=Save change.message=Your password has expired. Please ask the system administrator to change it. change.try=Try Again change.title=Password Has Expired database.load=Cannot load database from {0} -error.database.missing=User database is missing, cannot validate logon credentials -error.fromAddress.format=Invalid format for From Address -error.fromAddress.required=From Address is required -error.fullName.required=Full Name is required -error.host.required=Mail Server is required -error.noSubscription=No Subscription bean in user session -error.password.expired=Your password has expired for username {0} -error.password.required=Password is required -error.password2.required=Confirmation password is required -error.password.match=Password and confirmation password must match -error.password.mismatch=Invalid username and/or password, please try again -error.replyToAddress.format=Invalid format for Reply To Address webwork.messages.invalid.token=Cannot submit this form out of order -error.type.invalid=Server Type must be 'imap' or 'pop3' -error.type.required=Server Type is required -error.username.required=Username is required -error.username.unique=That username is already in use - please select another errors.footer=</ul><hr> errors.header=<h3><font color="red">Validation Error</font></h3><p>You must correct the following error(s) before proceeding:</p><ul> errors.prefix=<li> errors.suffix=</li> errors.ioException=I/O exception rendering error messages: {0} +error.noSubscription=No Subscription bean in user session +error.password.expired=Your password has expired for username {0} expired.password=User Password has expired for {0} heading.autoConnect=Auto heading.subscriptions=Current Subscriptions Modified: struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/xwork.xml URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/xwork.xml?rev=392338&r1=392136&r2=392338&view=diff ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/xwork.xml (original) +++ struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/java/xwork.xml Fri Apr 7 10:18:15 2006 @@ -25,6 +25,11 @@ <result type="redirect-action">Menu</result> </action> + <action name="RegisterSave" class="RegisterSave"> + <result name="input">/pages/Register.jsp</result> + <result type="redirect-action">Menu</result> + </action> + <action name="Menu" class="MailReaderSupport"> <result>/pages/Menu.jsp</result> </action> Added: struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/WEB-INF/webtest.properties.sample URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/WEB-INF/webtest.properties.sample?rev=392338&view=auto ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/WEB-INF/webtest.properties.sample (added) +++ struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/WEB-INF/webtest.properties.sample Fri Apr 7 10:18:15 2006 @@ -0,0 +1,15 @@ +# ----------------------------------------------------------------------------- +# webtest.properties.sample +# +# This is an example "webtest.properties" file, used to customize building Struts +# for your local environment. Make any changes you need, and rename this file +# to "webtest.properties" in the same directory that contains the Struts +# "webtest.xml" file. +# ----------------------------------------------------------------------------- +webtest.home = /opt/Canoo/webtest-1.7 +host = localhost +port = 8080 +basepath = lab-2-2 +webapps.home = /opt/Apache/Tomcat-5.5/webapps/ +resource.home = ${webapps.home}/${basepath}/WEB-INF/classes/resources.properties" +# mailreader.home = Modified: struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/WEB-INF/webtest.xml URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/WEB-INF/webtest.xml?rev=392338&r1=392136&r2=392338&view=diff ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/WEB-INF/webtest.xml (original) +++ struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/WEB-INF/webtest.xml Fri Apr 7 10:18:15 2006 @@ -15,7 +15,7 @@ ]> <project name="MailReader Training Course - Exercise navigation and database logic -- Canoo WebTests" basedir="." default="Register"> +- Canoo WebTests" basedir="." default="clean"> <!-- Canoo WebTest configuration file to test navigating between pages and @@ -52,18 +52,16 @@ The tests are based on a set of MailReader Use Cases maintained at the Struts University site [http://opensource2.atlassian.com/confluence/oss/display/STRUTS/MailReader]. - - @version $Revision: 1.2 $ $Date: 2005-12-31 15:10:04 -0500 (Sat, 31 Dec 2005) $ */ --> <!-- Load local preferences, if any --> - <!-- property file="webtest.properties"/ --> + <property file="webtest.properties" /> <!-- These properties can be customized using via webtest.properties --> <!-- See webtest.properties.sample for a starter file --> <property name="webtest.home" - location="C:/opt/Canoo/webtest-1.7"/> + location="/opt/Canoo/webtest-1.7"/> <property name="host" value="localhost"/> @@ -75,19 +73,13 @@ value="lab-2-2"/> <property name="mailreader.home" - location=""/> + location="../../../"/> <property name="webapps.home" - location="C:/opt/Apache/Tomcat-5.0/webapps/"/> - - <!-- Load application resources + location="/opt/Apache/Tomcat-5.5/webapps"/> - <property name="resource.home" - location="${mailreader.home}/src/java/org/apache/struts/apps/mailreader/resources/ApplicationResources.properties"/> + <property file="${webapps.home}/${basepath}/WEB-INF/classes/resources.properties"/> - <property file="${resource.home}"/> - - --> <taskdef file="${webtest.home}/webtestTaskdefs.properties"> <classpath> @@ -96,9 +88,6 @@ </classpath> </taskdef> - <target name="clean" description="Only run against a clean database" - depends="Register"/> - <target name="clean-database" description="Sets database.xml to default. Stop server, run target, and Start server."> <copy file="${mailreader.home}/src/java/database.xml" @@ -108,6 +97,9 @@ <!-- ADD YOUR TARGETS HERE --> + <target name="clean" description="Only run against a clean database" + depends="Register"/> + <target name="Register" description="Subscribers can store login credentials and a primary email contact with the system."> @@ -118,8 +110,8 @@ ®ister-open; ®ister-trillian; <verifyTitle - description="Menu page title" - text="MailReader - Menu"/> + description="Menu page title" + text="MailReader - Menu"/> </steps> </webtest> Modified: struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/pages/Menu.jsp URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/pages/Menu.jsp?rev=392338&r1=392136&r2=392338&view=diff ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/pages/Menu.jsp (original) +++ struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/pages/Menu.jsp Fri Apr 7 10:18:15 2006 @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title><ww:text name="mainMenu.title"/></title> + <title><ww:text name="menu.title"/></title> </head> <body> Modified: struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/pages/Register.jsp URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/pages/Register.jsp?rev=392338&r1=392136&r2=392338&view=diff ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/pages/Register.jsp (original) +++ struts/sandbox/trunk/mailreader-course/action2/lab-3-2/src/webapp/pages/Register.jsp Fri Apr 7 10:18:15 2006 @@ -4,33 +4,58 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title><ww:text name="registration.title.create"/></title> + <ww:if test="task=='Create'"> + <title><ww:text name="registration.title.create"/></title> + </ww:if> + <ww:if test="task=='Edit'"> + <title><ww:text name="registration.title.edit"/></title> + </ww:if> </head> <body onLoad="self.focus();document.Register.username.focus()"> <ww:actionerror/> <ww:form method="POST" validate="true"> - - <ww:textfield label="%{getText('username')}" name="username"/> + <ww:hidden name="task"/> + <ww:if test="task == 'Create'"> + <ww:textfield label="%{getText('username')}" name="username"/> + </ww:if> + <ww:else> + <ww:label label="%{getText('username')}" name="username"/> + <ww:hidden name="username"/> + </ww:else> <ww:password label="%{getText('password')}" name="password"/> <ww:password label="%{getText('password2')}" name="password2"/> - <ww:textfield label="Full Name" name="fullName"/> + <ww:textfield label="%{getText('fullName')}" + name="user.fullName"/> - <ww:textfield label="From Address" name="fromAddress"/> + <ww:textfield label="%{getText('fromAddress')}" + name="user.fromAddress"/> - <ww:textfield label="Reply To Address" name="replyToAddress"/> + <ww:textfield label="%{getText('replyToAddress')}" + name="user.replyToAddress"/> - <ww:submit value="%{getText('button.save')}" name="Save"/> + <ww:if test="task == 'Create'"> + <ww:submit value="%{getText('button.save')}" action="RegisterSave"/> - <ww:submit action="Register!cancel" value="%{getText('button.cancel')}" name="Cancel" - onclick="form.onsubmit=null"/> - -</ww:form> + <ww:reset value="%{getText('button.reset')}"/> + + <ww:submit action="Welcome" value="%{getText('button.cancel')}" + onclick="form.onsubmit=null"/> + </ww:if> + <ww:else> + <ww:submit value="%{getText('button.save')}" action="Register"/> + <ww:reset value="%{getText('button.reset')}"/> + + <ww:submit action="Menu" value="%{getText('button.cancel')}" + onclick="form.onsubmit=null"/> + </ww:else> + +</ww:form> </body> </html> Modified: struts/sandbox/trunk/mailreader-course/action2/mailreader-course-action2.ipr URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/mailreader-course/action2/mailreader-course-action2.ipr?rev=392338&r1=392337&r2=392338&view=diff ============================================================================== --- struts/sandbox/trunk/mailreader-course/action2/mailreader-course-action2.ipr (original) +++ struts/sandbox/trunk/mailreader-course/action2/mailreader-course-action2.ipr Fri Apr 7 10:18:15 2006 @@ -9,6 +9,13 @@ <maximumHeapSize value="128" /> <properties /> </buildFile> + <buildFile url="file://$PROJECT_DIR$/lab-3-1/src/webapp/WEB-INF/webtest.xml"> + <additionalClassPath /> + <antReference projectDefault="true" /> + <customJdkName value="" /> + <maximumHeapSize value="128" /> + <properties /> + </buildFile> </component> <component name="CodeStyleSettingsManager"> <option name="PER_PROJECT_SETTINGS" /> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]