r3253 - in branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main: java/org/chorem/pollen/ui/actions/poll webapp/WEB-INF/jsp/poll
Author: fdesbois Date: 2012-04-12 18:27:37 +0200 (Thu, 12 Apr 2012) New Revision: 3253 Url: http://chorem.org/repositories/revision/pollen/3253 Log: validation for votingLists Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/SavePoll.java branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/displayPersonToList.jsp branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/displayVotingList.jsp Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/SavePoll.java =================================================================== --- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/SavePoll.java 2012-04-12 16:27:32 UTC (rev 3252) +++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/SavePoll.java 2012-04-12 16:27:37 UTC (rev 3253) @@ -29,6 +29,7 @@ import com.google.common.collect.Sets; import com.opensymphony.xwork2.Preparable; import com.opensymphony.xwork2.interceptor.annotations.InputConfig; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -226,15 +227,9 @@ @Override public void validate() { - informationsError = validateInformations(); + validateInformations(); - optionsError = validateOptions(); - - if (!informationsError && optionsError) { - - // trick to force to go back to form - addFieldError("", ""); - } + validateOptions(); } @Override @@ -367,11 +362,12 @@ return result; } - protected boolean validateInformations() { + protected void validateInformations() { // -- Title : required -- // if (StringUtils.isBlank(poll.getTitle())) { - addFieldError("poll.title", _("pollen.error.poll.required.title")); + addInformationsError("poll.title", + _("pollen.error.poll.required.title")); } if (isVoteStarted()) { @@ -385,8 +381,8 @@ if (MapUtils.isEmpty(choices)) { // poll must have at least one choice - addFieldError("poll.choices", - _("pollen.error.poll.required.one.choice")); + addInformationsError("poll.choices", + _("pollen.error.poll.required.one.choice")); } else { ChoiceType choiceType = poll.getChoiceType(); @@ -396,22 +392,16 @@ choiceType)); if (inputChoicesSize > choiceValues.size()) { - addFieldError( + addInformationsError( "poll.choices", _("pollen.error.poll.detected.duplicate.choice.name")); } } } - - boolean result = hasFieldErrors(); - - return result; } - protected boolean validateOptions() { + protected void validateOptions() { - boolean result = false; - if (isVoteStarted()) { // no validation on votingLists if vote is started @@ -431,56 +421,43 @@ Set<String> emails = Sets.newHashSet(); for (Map.Entry<Integer, VotingList> entry : votingLists.entrySet()) { - result |= validateVotingList(entry.getKey(), - entry.getValue(), - groups, - voters, - emails); + validateVotingList(entry.getKey(), + entry.getValue(), + groups, + voters, + emails); } } } if (validateEndDate(poll.getBeginChoiceDate(), poll.getEndChoiceDate())) { - addFieldError("poll.endChoiceDate", + addOptionsError("poll.endChoiceDate", _("pollen.error.poll.endChoiceDate.before.beginChoiceDate")); - result = true; } if (validateEndDate(poll.getBeginDate(), poll.getEndDate())) { - addFieldError("poll.endDate", + addOptionsError("poll.endDate", _("pollen.error.poll.endDate.before.beginDate")); - result = true; } if (validateEndDate(poll.getEndChoiceDate(), poll.getEndDate())) { - addFieldError("poll.endChoiceDate", + addOptionsError("poll.endChoiceDate", _("pollen.error.poll.endChoiceDate.after.endDate")); - result = true; } - - return result; } - - protected boolean validateEndDate(Date begin, Date end) { - return begin != null - && end != null - && end.before(begin); - } - protected boolean validateVotingList(int votingListNumber, - VotingList votingList, - Set<String> groups, - Set<String> voters, - Set<String> emails) { + protected void validateVotingList(int votingListNumber, + VotingList votingList, + Set<String> groups, + Set<String> voters, + Set<String> emails) { + + PollType votingListType = poll.getPollType(); + String fieldNamePrefix = "votingList" + votingListType + "_" + votingListNumber; - boolean result = false; - Map<String, String> errors = Maps.newHashMap(); - - String votingListErrorPrefix = "poll.votingList_" + votingListNumber; - if (isGroupPoll()) { // group poll @@ -496,8 +473,9 @@ if (StringUtils.isEmpty(votingListName)) { - errors.put(votingListErrorPrefix + ".name", - _("pollen.error.poll.required.votingList.name")); + addOptionsError( + fieldNamePrefix + ".name", + _("pollen.error.poll.required.votingList.name")); } else { // check no votingList name doublon @@ -505,8 +483,8 @@ if (!add) { // name doublon - errors.put( - votingListErrorPrefix + ".name", + addOptionsError( + fieldNamePrefix + ".name", _("pollen.error.poll.votingList.name.doublon")); } @@ -518,8 +496,8 @@ if (votingList.getWeight() == 0) { // no weight filled (can be a bad conversion) - errors.put( - votingListErrorPrefix + ".weight", + addOptionsError( + fieldNamePrefix + ".weight", _("pollen.error.poll.votingList.weight.not.valid")); } } @@ -527,53 +505,38 @@ // check there is at least one voter -// String persontoListToken = DisplayPersonToList.getPersonToListTokenId( -// getVotingListTokenId(), votingListNumber); -// -// Map<Integer, PersonToList> personToLists = -// getPollenSession().getDynamicData(persontoListToken); -// -// if (MapUtils.isEmpty(personToLists)) { -// -// // no personToList found for unique votingList 0 -// errors.put(votingListErrorPrefix, -// _("pollen.error.poll.required.one.personToList")); -// } else { -// -// // check no doublon on voter names -// // check no doublon on voter emails -// -// for (Map.Entry<Integer, PersonToList> entry : -// personToLists.entrySet()) { -// -// result |= validatePersonList(entry.getKey(), entry.getValue(), -// voters, emails); -// } -// } -// -// if (MapUtils.isNotEmpty(errors)) { -// -// // keep errors to display them in correct action -// String errorToken = DisplayVotingList.getVotingListErrorTokenId( -// getVotingListTokenId(), votingListNumber); -// if (log.isInfoEnabled()) { -// log.info("Add " + errors.size() + " errors to " + errorToken); -// } -// getPollenSession().putDynamicData(errorToken, errors); -// result = true; -// } - return result; + List<PersonToList> personToLists = votingList.getPollAccountPersonToList(); + + if (CollectionUtils.isEmpty(personToLists)) { + + // no personToList found for unique votingList 0 + addOptionsError(fieldNamePrefix, + _("pollen.error.poll.required.one.personToList")); + } else { + + // check no doublon on voter names + // check no doublon on voter emails + + for (int i = 0; i < personToLists.size(); i++) { + + validatePersonList(i, + fieldNamePrefix, + personToLists.get(i), + voters, + emails); + } + } } - protected boolean validatePersonList(int personToListNumber, - PersonToList personToList, - Set<String> voters, - Set<String> emails) { + protected void validatePersonList(int personToListNumber, + String votingListFieldNamePrefix, + PersonToList personToList, + Set<String> voters, + Set<String> emails) { - boolean result = false; - Map<String, String> errors = Maps.newHashMap(); - String fieldNamePrefix = - "personToList_0_" + personToListNumber; + String fieldNamePrefix = votingListFieldNamePrefix + + "PersonToList_" + personToListNumber; + PollAccount pollAccount = personToList.getPollAccount(); { // validate votingId @@ -584,7 +547,7 @@ if (!add) { // voter doublon - errors.put( + addOptionsError( fieldNamePrefix + ".votingId", _("pollen.error.poll.personToList.votingId.doublon")); } @@ -593,7 +556,7 @@ String email = pollAccount.getEmail(); if (StringUtils.isEmpty(email)) { - errors.put( + addOptionsError( fieldNamePrefix + ".email", _("pollen.error.poll.personToList.email.required")); } else { @@ -603,7 +566,7 @@ if (!validEmail) { // not a valid email - errors.put( + addOptionsError( fieldNamePrefix + ".email", _("pollen.error.poll.personToList.email.not.valid")); } else { @@ -613,7 +576,7 @@ if (!add) { // email doublon - errors.put( + addOptionsError( fieldNamePrefix + ".email", _("pollen.error.poll.personToList.email.doublon")); } @@ -624,25 +587,37 @@ if (personToList.getWeight() == 0) { // no weight filled (can be a bad conversion) - errors.put( + addOptionsError( fieldNamePrefix + ".weight", _("pollen.error.poll.personToList.weight.not.valid")); } } + } - if (MapUtils.isNotEmpty(errors)) { -// String errorToken = -// DisplayPersonToList.getPersonToListErrorTokenId( -// getVotingListTokenId(), 0, personToListNumber); -// if (log.isInfoEnabled()) { -// log.info("Add " + errors.size() + " errors to " + errorToken); -// } -// getPollenSession().putDynamicData(errorToken, errors); - result = true; + protected boolean validateEndDate(Date begin, Date end) { + return begin != null + && end != null + && end.before(begin); + } + + @Override + public void addFieldError(String fieldName, String errorMessage) { + super.addFieldError(fieldName, errorMessage); + if (log.isDebugEnabled()) { + log.debug("VALIDATION [" + fieldName + "] : " + errorMessage); } - return result; } + protected void addInformationsError(String fieldName, String errorMessage) { + addFieldError(fieldName, errorMessage); + informationsError = true; + } + + protected void addOptionsError(String fieldName, String errorMessage) { + addFieldError(fieldName, errorMessage); + optionsError = true; + } + protected Map<Integer, Choice> buildTextChoices() { Map<Integer, Choice> result = Maps.newTreeMap(); Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/displayPersonToList.jsp =================================================================== --- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/displayPersonToList.jsp 2012-04-12 16:27:32 UTC (rev 3252) +++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/displayPersonToList.jsp 2012-04-12 16:27:37 UTC (rev 3253) @@ -32,7 +32,6 @@ <s:text name="pollen.action.pollPersonToListDelete"/> </s:set> <s:div id='%{#personPrefix}' cssClass="personToList"> - <s:fielderror/> <s:hidden key='%{#personPrefix}.topiaId' value='%{#personToList.topiaId}' label=''/> <s:hidden key='%{#personPrefix}.accountId' value='%{#personToList.pollAccount.accountId}' label=''/> <div class="fleft choiceName"> Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/displayVotingList.jsp =================================================================== --- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/displayVotingList.jsp 2012-04-12 16:27:32 UTC (rev 3252) +++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/displayVotingList.jsp 2012-04-12 16:27:37 UTC (rev 3253) @@ -36,7 +36,7 @@ <s:div id='%{#prefix}' cssClass="votingList"> <fieldset class="ui-widget-content ui-corner-all"> - <s:fielderror/> + <s:fielderror fieldName="%{#prefix}"/> <s:if test='%{#votingListType == "GROUP"}'> <%--<div>--%> <div class="fleft choiceName">
participants (1)
-
fdesbois@users.chorem.org