r39 - in trunk/chorem-web/src/main: java/org/chorem/gepeto/action resources resources/i18n resources/org/chorem/gepeto/action webapp/WEB-INF/jsp/gepeto
Author: vbriand Date: 2011-03-24 16:19:11 +0100 (Thu, 24 Mar 2011) New Revision: 39 Url: http://chorem.org/repositories/revision/chorem/39 Log: Added new user input controls when adding a task or a project order Added: trunk/chorem-web/src/main/java/org/chorem/gepeto/action/ProjectOrderAction.java trunk/chorem-web/src/main/resources/org/chorem/gepeto/action/ProjectOrderAction-validation.xml Modified: trunk/chorem-web/src/main/java/org/chorem/gepeto/action/TaskAction.java trunk/chorem-web/src/main/resources/i18n/chorem-web_en_GB.properties trunk/chorem-web/src/main/resources/i18n/chorem-web_fr_FR.properties trunk/chorem-web/src/main/resources/org/chorem/gepeto/action/TaskAction-validation.xml trunk/chorem-web/src/main/resources/struts.xml trunk/chorem-web/src/main/webapp/WEB-INF/jsp/gepeto/addProjectOrder.jsp trunk/chorem-web/src/main/webapp/WEB-INF/jsp/gepeto/addTask.jsp Added: trunk/chorem-web/src/main/java/org/chorem/gepeto/action/ProjectOrderAction.java =================================================================== --- trunk/chorem-web/src/main/java/org/chorem/gepeto/action/ProjectOrderAction.java (rev 0) +++ trunk/chorem-web/src/main/java/org/chorem/gepeto/action/ProjectOrderAction.java 2011-03-24 15:19:11 UTC (rev 39) @@ -0,0 +1,168 @@ +package org.chorem.gepeto.action; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.chorem.ChoremProxy; +import org.chorem.action.BaseAction; +import org.chorem.entities.ProjectOrderImpl; + +import static org.nuiton.i18n.I18n.n_; + +/** + * Project order management class + * + * @author vbriand + */ +public class ProjectOrderAction extends BaseAction { + + private static final long serialVersionUID = -5469320345746533520L; + + private static final Log log = LogFactory.getLog(ProjectOrderAction.class); + + /** + * Adds a new project order + * + * @return INPUT if the mandatory fields haven't all been filled in + * @return SUCCESS if the project order has been added successfully + * @return ERROR if an error occurred + */ + public String add() { + String result = INPUT; + + if (type!= null && description != null && + beginDate != null && estimatedEndDate != null) { + if (!type.isEmpty() && !description.isEmpty()) { + //If the project order has been added successfully + if (addProjectOrder()) { + result = SUCCESS; + } else { + result = ERROR; + } + } + } + return result; + } + + protected String type; + protected String description; + protected String beginDate; + protected String estimatedEndDate; + + /** + * Stores the new project order through the proxy + * + * @return true if the project order has been stored properly + * @return false if a problem occurred + */ + protected boolean addProjectOrder() { + boolean result = true; + + try { + ChoremProxy proxy = getChoremProxy(); + ProjectOrderImpl newProjectOrder = new ProjectOrderImpl(); + SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); + + newProjectOrder.setType(type); + newProjectOrder.setDescription(description); + + //Lenient mode disabled because results may be very odd + formatter.setLenient(false); + try { + Calendar cal = Calendar.getInstance(); + + newProjectOrder.setBeginDate(formatter.parse(beginDate)); + newProjectOrder.setEndDate(formatter.parse(estimatedEndDate)); + + //Subtracts 1 day to the current time so the next test willn't + //fail if the begin date is today's date, as the before() method + //is exclusive + cal.add(Calendar.DAY_OF_MONTH, -1); + //If the begin date is set before the current date + if (newProjectOrder.getBeginDate().before(cal.getTime())) { + result = false; + addFieldError("beginDate", getText(n_("chorem.beginDate.beforeToday"))); + } + + //If the estimated end date is before the begin date (...) + if (newProjectOrder.getEndDate().before(newProjectOrder.getBeginDate())) { + result = false; + addActionError(getText(n_("chorem.endDate.afterBegin"))); + } + } catch (ParseException e) { + //If the date doesn't match the format above + result = false; + addActionError(getText(n_("chorem.date.wrongFormat"))); + } + + //If everything went smoothly + if (result) { + proxy.store(newProjectOrder); + } + } catch (Exception e) { + result = false; + addActionError(getText(n_("chorem.gepeto.projectOrder.create.error"))); + log.error("An error occured while creating a new project order", e); + } + return result; + } + + /** + * @return the type + */ + public String getType() { + return type; + } + + /** + * @param type the type to set + */ + public void setType(String type) { + this.type = type; + } + + /** + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * @param description the description to set + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * @return the beginDate + */ + public String getBeginDate() { + return beginDate; + } + + /** + * @param beginDate the beginDate to set + */ + public void setBeginDate(String beginDate) { + this.beginDate = beginDate; + } + + /** + * @return the estimatedEndDate + */ + public String getEstimatedEndDate() { + return estimatedEndDate; + } + + /** + * @param estimatedEndDate the estimatedEndDate to set + */ + public void setEstimatedEndDate(String estimatedEndDate) { + this.estimatedEndDate = estimatedEndDate; + } +} Property changes on: trunk/chorem-web/src/main/java/org/chorem/gepeto/action/ProjectOrderAction.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: trunk/chorem-web/src/main/java/org/chorem/gepeto/action/TaskAction.java =================================================================== --- trunk/chorem-web/src/main/java/org/chorem/gepeto/action/TaskAction.java 2011-03-24 10:30:02 UTC (rev 38) +++ trunk/chorem-web/src/main/java/org/chorem/gepeto/action/TaskAction.java 2011-03-24 15:19:11 UTC (rev 39) @@ -3,7 +3,9 @@ */ package org.chorem.gepeto.action; -import java.util.Date; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -34,9 +36,11 @@ public String add() { String result = INPUT; - if (name != null && description != null && - beginDate != null && estimatedEndDate != null) { - if (!name.isEmpty() && !description.isEmpty()) { + if (name != null && description != null && price != null && + estimatedDays != null && beginDate != null && + estimatedEndDate != null) { + if (!name.isEmpty() && !description.isEmpty() && + !price.isEmpty() && !estimatedDays.isEmpty()) { //If the task has been added successfully if (addTask()) { result = SUCCESS; @@ -52,8 +56,8 @@ protected String description; protected String price; protected String estimatedDays; - protected Date beginDate; - protected Date estimatedEndDate; + protected String beginDate; + protected String estimatedEndDate; /** * Stores the new task through the proxy @@ -67,14 +71,50 @@ try { ChoremProxy proxy = getChoremProxy(); TaskImpl newTask = new TaskImpl(); + SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); newTask.setDescription(description); newTask.setName(name); - newTask.setBeginDate(beginDate); - newTask.setEndDate(estimatedEndDate); + + //Lenient mode disabled because results may be very odd + formatter.setLenient(false); + try { + Calendar cal = Calendar.getInstance(); + + newTask.setBeginDate(formatter.parse(beginDate)); + newTask.setEndDate(formatter.parse(estimatedEndDate)); + + //Subtracts 1 day to the current time so the next test willn't + //fail if the begin date is today's date, as the before() method + //is exclusive + cal.add(Calendar.DAY_OF_MONTH, -1); + //If the begin date is set before the current date + if (newTask.getBeginDate().before(cal.getTime())) { + result = false; + addFieldError("beginDate", getText(n_("chorem.beginDate.beforeToday"))); + } + + //If the estimated end date is before the begin date (...) + if (newTask.getEndDate().before(newTask.getBeginDate())) { + result = false; + addActionError(getText(n_("chorem.endDate.afterBegin"))); + } + } catch (ParseException e) { + //If the date doesn't match the format above + result = false; + addActionError(getText(n_("chorem.date.wrongFormat"))); + } + newTask.setEstimatedDays(Integer.parseInt(estimatedDays)); + //Replaces the (possible) comma by a dot, so the string can be + //parsed successfully as a float + price = price.replace(',', '.'); newTask.setPrice(Float.parseFloat(price)); - proxy.store(newTask); + + //If everything went smoothly + if (result) { + proxy.store(newTask); + } } catch (Exception e) { result = false; addActionError(getText(n_("chorem.gepeto.task.create.error"))); @@ -142,28 +182,28 @@ /** * @return the beginDate */ - public Date getBeginDate() { + public String getBeginDate() { return beginDate; } /** * @param beginDate the beginDate to set */ - public void setBeginDate(Date beginDate) { + public void setBeginDate(String beginDate) { this.beginDate = beginDate; } /** * @return the estimatedEndDate */ - public Date getEstimatedEndDate() { + public String getEstimatedEndDate() { return estimatedEndDate; } /** * @param estimatedEndDate the estimatedEndDate to set */ - public void setEstimatedEndDate(Date estimatedEndDate) { + public void setEstimatedEndDate(String estimatedEndDate) { this.estimatedEndDate = estimatedEndDate; } } Modified: trunk/chorem-web/src/main/resources/i18n/chorem-web_en_GB.properties =================================================================== --- trunk/chorem-web/src/main/resources/i18n/chorem-web_en_GB.properties 2011-03-24 10:30:02 UTC (rev 38) +++ trunk/chorem-web/src/main/resources/i18n/chorem-web_en_GB.properties 2011-03-24 15:19:11 UTC (rev 39) @@ -1,3 +1,4 @@ +chorem.beginDate.beforeToday=The date cannot be set before today''s date chorem.bonzoms.company=Company {0} chorem.bonzoms.company.add=Add a new company chorem.bonzoms.company.name=Company name @@ -14,6 +15,8 @@ chorem.bonzoms.person.firstName=First name chorem.bonzoms.person.lastName=Last name chorem.config.configFileName.description=chorem''s configuration filename +chorem.date.wrongFormat=The date must be in the following format \: dd/mm/yyyy +chorem.endDate.afterBegin=The end date cannot be before the begin date chorem.error.internal=An internal error occurred chorem.gepeto.home=Home chorem.gepeto.project=Project {0} @@ -27,9 +30,14 @@ chorem.gepeto.projectOrder=Project order chorem.gepeto.projectOrder.add=Add a new project order chorem.gepeto.projectOrder.beginDate=Begin date +chorem.gepeto.projectOrder.beginDate.required=You must provide a begin date for this project order +chorem.gepeto.projectOrder.create.error=An error occurred while creating your new project order, please try again. If the problem persists, please contact an administrator chorem.gepeto.projectOrder.description=Description +chorem.gepeto.projectOrder.description.required=You must describe the project order chorem.gepeto.projectOrder.estimatedEndDate=Estimated end date +chorem.gepeto.projectOrder.estimatedEndDate.required=You must enter the estimated end date for this project order chorem.gepeto.projectOrder.type=Type +chorem.gepeto.projectOrder.type.required=You must specify the project order''s type chorem.gepeto.projectsByYear.title=Projects of year {0} chorem.gepeto.results.title=Results by year chorem.gepeto.task=Task {0} @@ -37,7 +45,6 @@ chorem.gepeto.task.beginDate=Begin date chorem.gepeto.task.beginDate.required=You must enter the begin date for this task chorem.gepeto.task.create.error=An error occurred while creating your new task, please try again. If the problem persists, please contact an administrator -chorem.gepeto.task.date.wrongFormat=The date must be in the following format \: XX/YY/ZZZZ chorem.gepeto.task.description=Description chorem.gepeto.task.description.required=You must describe the task chorem.gepeto.task.estimatedDays=Estimated days Modified: trunk/chorem-web/src/main/resources/i18n/chorem-web_fr_FR.properties =================================================================== --- trunk/chorem-web/src/main/resources/i18n/chorem-web_fr_FR.properties 2011-03-24 10:30:02 UTC (rev 38) +++ trunk/chorem-web/src/main/resources/i18n/chorem-web_fr_FR.properties 2011-03-24 15:19:11 UTC (rev 39) @@ -1,3 +1,4 @@ +chorem.beginDate.beforeToday=La date entr\u00E9e ne peut \u00EAtre inf\u00E9rieure \u00E0 la date du jour chorem.bonzoms.company=Soci\u00E9t\u00E9 chorem.bonzoms.company.add=Ajouter une nouvelle soci\u00E9t\u00E9 chorem.bonzoms.company.name=Nom de la soci\u00E9t\u00E9 @@ -14,6 +15,8 @@ chorem.bonzoms.person.firstName=Pr\u00E9nom chorem.bonzoms.person.lastName=Nom chorem.config.configFileName.description=Nom du fichier de configuration de chorem +chorem.date.wrongFormat=La date doit respecter le format suivant \: jj/mm/yyyy +chorem.endDate.afterBegin=La date de fin ne doit pas pas \u00EAtre inf\u00E9rieure \u00E0 la date de d\u00E9but chorem.error.internal=Une erreur interne s''est produite chorem.gepeto.home=Accueil chorem.gepeto.project=Projet {0} @@ -27,9 +30,14 @@ chorem.gepeto.projectOrder=Contrat de commande d''un projet chorem.gepeto.projectOrder.add=Ajouter le contrat d''un projet chorem.gepeto.projectOrder.beginDate=Date de d\u00E9but +chorem.gepeto.projectOrder.beginDate.required=Vous devez renseigner une date de d\u00E9but pour le contrat +chorem.gepeto.projectOrder.create.error=Une erreur s''est produite lors de la cr\u00E9ation de votre nouveau contrat de projet, merci d''essayer \u00E0 nouveau. Si le probl\u00E8me se reproduit, merci de contacter un administrateur chorem.gepeto.projectOrder.description=Description +chorem.gepeto.projectOrder.description.required=Vous devez d\u00E9crire le contrat chorem.gepeto.projectOrder.estimatedEndDate=Date de fin estim\u00E9e +chorem.gepeto.projectOrder.estimatedEndDate.required=Vous devez renseigner la date de fin estim\u00E9e du contrat chorem.gepeto.projectOrder.type=Type +chorem.gepeto.projectOrder.type.required=Vous devez sp\u00E9cifier le type du contrat chorem.gepeto.projectsByYear.title=Projets de l''ann\u00E9e {0} chorem.gepeto.results.title=R\u00E9sultats par ann\u00E0e chorem.gepeto.task=T\u00E2che {0} @@ -37,7 +45,6 @@ chorem.gepeto.task.beginDate=Date de d\u00E9but chorem.gepeto.task.beginDate.required=Vous devez renseigner la date de d\u00E9but de la t\u00E2che chorem.gepeto.task.create.error=Une erreur s''est produite lors de la cr\u00E9ation de votre nouvelle t\u00E2che, merci d''essayer \u00E0 nouveau. Si le probl\u00E8me se reproduit, merci de contacter un administrateur -chorem.gepeto.task.date.wrongFormat=La date doit respecter le format suivant \: XX/YY/ZZZZ chorem.gepeto.task.description=Description chorem.gepeto.task.description.required=Vous devez d\u00E9crire la t\u00E2che chorem.gepeto.task.estimatedDays=Nombre de jours estim\u00E9s Added: trunk/chorem-web/src/main/resources/org/chorem/gepeto/action/ProjectOrderAction-validation.xml =================================================================== --- trunk/chorem-web/src/main/resources/org/chorem/gepeto/action/ProjectOrderAction-validation.xml (rev 0) +++ trunk/chorem-web/src/main/resources/org/chorem/gepeto/action/ProjectOrderAction-validation.xml 2011-03-24 15:19:11 UTC (rev 39) @@ -0,0 +1,34 @@ +<!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="type"> + <field-validator type="requiredstring"> + <message key="chorem.gepeto.projectOrder.type.required" /> + </field-validator> + </field> + <field name="description"> + <field-validator type="requiredstring"> + <message key="chorem.gepeto.projectOrder.description.required" /> + </field-validator> + </field> + <field name="beginDate"> + <field-validator type="requiredstring"> + <message key="chorem.gepeto.projectOrder.beginDate.required" /> + </field-validator> + <field-validator type="regex"> + <param name="expression"><![CDATA[([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})]]></param> + <message key="chorem.date.wrongFormat" /> + </field-validator> + </field> + <field name="estimatedEndDate"> + <field-validator type="requiredstring"> + <message key="chorem.gepeto.projectOrder.estimatedEndDate.required" /> + </field-validator> + <field-validator type="regex"> + <param name="expression"><![CDATA[([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})]]></param> + <message key="chorem.date.wrongFormat" /> + </field-validator> + </field> +</validators> Property changes on: trunk/chorem-web/src/main/resources/org/chorem/gepeto/action/ProjectOrderAction-validation.xml ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: trunk/chorem-web/src/main/resources/org/chorem/gepeto/action/TaskAction-validation.xml =================================================================== --- trunk/chorem-web/src/main/resources/org/chorem/gepeto/action/TaskAction-validation.xml 2011-03-24 10:30:02 UTC (rev 38) +++ trunk/chorem-web/src/main/resources/org/chorem/gepeto/action/TaskAction-validation.xml 2011-03-24 15:19:11 UTC (rev 39) @@ -32,21 +32,21 @@ </field-validator> </field> <field name="beginDate"> - <field-validator type="required"> + <field-validator type="requiredstring"> <message key="chorem.gepeto.task.beginDate.required" /> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})]]></param> - <message key="chorem.gepeto.task.date.wrongFormat" /> + <message key="chorem.date.wrongFormat" /> </field-validator> </field> <field name="estimatedEndDate"> - <field-validator type="required"> + <field-validator type="requiredstring"> <message key="chorem.gepeto.task.estimatedEndDate.required" /> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})]]></param> - <message key="chorem.gepeto.task.date.wrongFormat" /> + <message key="chorem.date.wrongFormat" /> </field-validator> </field> </validators> Modified: trunk/chorem-web/src/main/resources/struts.xml =================================================================== --- trunk/chorem-web/src/main/resources/struts.xml 2011-03-24 10:30:02 UTC (rev 38) +++ trunk/chorem-web/src/main/resources/struts.xml 2011-03-24 15:19:11 UTC (rev 39) @@ -52,8 +52,10 @@ <result name="error">/WEB-INF/jsp/gepeto/addTask.jsp</result> <result type="redirectAction">home</result> </action> - <action name="addProjectOrder"> - <result>/WEB-INF/jsp/gepeto/addProjectOrder.jsp</result> + <action name="addProjectOrder" class="org.chorem.gepeto.action.ProjectOrderAction" method="add"> + <result name="input">/WEB-INF/jsp/gepeto/addProjectOrder.jsp</result> + <result name="error">/WEB-INF/jsp/gepeto/addProjectOrder.jsp</result> + <result type="redirectAction">home</result> </action> </package> Modified: trunk/chorem-web/src/main/webapp/WEB-INF/jsp/gepeto/addProjectOrder.jsp =================================================================== --- trunk/chorem-web/src/main/webapp/WEB-INF/jsp/gepeto/addProjectOrder.jsp 2011-03-24 10:30:02 UTC (rev 38) +++ trunk/chorem-web/src/main/webapp/WEB-INF/jsp/gepeto/addProjectOrder.jsp 2011-03-24 15:19:11 UTC (rev 39) @@ -9,6 +9,7 @@ </head> <body> <h2><s:text name="chorem.gepeto.projectOrder.add" /></h2> + <s:actionerror /> <s:form action="addProjectOrder" method="post"> <fieldset> <legend><s:text name="chorem.gepeto.projectOrder" /></legend> Modified: trunk/chorem-web/src/main/webapp/WEB-INF/jsp/gepeto/addTask.jsp =================================================================== --- trunk/chorem-web/src/main/webapp/WEB-INF/jsp/gepeto/addTask.jsp 2011-03-24 10:30:02 UTC (rev 38) +++ trunk/chorem-web/src/main/webapp/WEB-INF/jsp/gepeto/addTask.jsp 2011-03-24 15:19:11 UTC (rev 39) @@ -9,6 +9,7 @@ </head> <body> <h2><s:text name="chorem.gepeto.task.add" /></h2> + <s:actionerror /> <s:form action="addTask" method="post"> <fieldset> <legend>
participants (1)
-
vbriand@users.chorem.org