r3152 - in branches/pollen-1.2.6-struts2: pollen-services/src/main/java/org/chorem/pollen/services/impl pollen-services/src/main/resources/i18n pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll pollen-ui-struts2/src/main/resources/i18n pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll
Author: tchemit Date: 2012-02-28 22:34:08 +0100 (Tue, 28 Feb 2012) New Revision: 3152 Url: http://chorem.org/repositories/revision/pollen/3152 Log: continue results page (do number charts) + move some code to service Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollResultsService.java branches/pollen-1.2.6-struts2/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties branches/pollen-1.2.6-struts2/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ResultForPoll.java branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/result.jsp Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollResultsService.java =================================================================== --- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollResultsService.java 2012-02-28 15:32:26 UTC (rev 3151) +++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollResultsService.java 2012-02-28 21:34:08 UTC (rev 3152) @@ -23,7 +23,10 @@ */ package org.chorem.pollen.services.impl; +import com.google.common.base.Preconditions; import com.google.common.collect.Lists; +import com.google.common.collect.Multimap; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.pollen.bean.PollResult; @@ -32,7 +35,6 @@ import org.chorem.pollen.business.persistence.Poll; import org.chorem.pollen.business.persistence.Result; import org.chorem.pollen.business.persistence.ResultDAO; -import org.chorem.pollen.common.ChoiceType; import org.chorem.pollen.common.PollType; import org.chorem.pollen.common.VoteCountingType; import org.chorem.pollen.services.PollenServiceSupport; @@ -43,13 +45,15 @@ import org.chorem.pollen.votecounting.services.ServiceVoteCounting; import org.chorem.pollen.votecounting.services.ServiceVoteCountingImpl; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.Collection; -import java.util.Date; +import java.util.Collections; +import java.util.Comparator; import java.util.Iterator; import java.util.List; +import java.util.Locale; +import static org.nuiton.i18n.I18n.l_; + /** * Deals with poll results. * @@ -61,29 +65,11 @@ /** log. */ private static final Log log = LogFactory.getLog(PollResultsService.class); - public PollResultList getAllResults(String pollId) { - return getResults(pollId, null, false, false); - } - - public PollResultList getResultsByVoteCounting(String pollId, - VoteCountingType voteCounting) { - return getResults(pollId, voteCounting, false, false); - } - public PollResultList getGroupResults(String pollId) { - return getResults(pollId, null, true, true); + return generateResults(pollId, null, true, true); } public PollResultList getNormalResults(String pollId) { - return getResults(pollId, null, true, false); - } - - public List<PollResult> getNormalPollResults(String pollId) { - PollResultList results = getResults(pollId, null, true, false); - return results.getPollResults(); - } - - public PollResultList generateNormalResults(String pollId) { return generateResults(pollId, null, true, false); } @@ -183,123 +169,19 @@ } } - PollResultList resultListDTO = new PollResultList(); - resultListDTO.setPollResults(list); - resultListDTO.setVoteCountingResult(result); - - return resultListDTO; + PollResultList resultList = new PollResultList(); + resultList.setPollResults(list); + resultList.setVoteCountingResult(result); + return resultList; } /** - * Récupère les résultats d'un sondage (sans rien dépouiller). - * - * @param pollId le sondage - * @param voteCounting type de dépouillement - * @param byGroup résultats par groupe - * @param groupOnly résultats uniquement par groupe - * @return les résultats du sondage - */ - private PollResultList getResults(String pollId, - VoteCountingType voteCounting, - boolean byGroup, - boolean groupOnly) { - - PollService pollService = newService(PollService.class); - Poll poll = pollService.getPollByPollId(pollId); - -// DataResultConverter converter = new DataResultConverter(transaction); - if (log.isDebugEnabled()) { - log.debug(poll.getPollId() + " (" + voteCounting - + ") has results: " + hasResults(poll, voteCounting)); - } - - // Dépouillement du sondage. - // S'il n'existe pas de résultats ou si le sondage est encore ouvert. - //if (!hasResults(ePoll, voteCounting) || !ePoll.getIsClosed()) { - PollDTO dto = pollService.createPollDTOForVoteCounting(poll); - - if (voteCounting != null) { - dto.setVoteCounting(voteCounting); - } - -// // clear result (they will be regenerated ! (a big shame)) -// poll.clearResult(); - -// ServiceVoteCounting service = new ServiceVoteCountingImpl(); -// -// VoteCountingResultDTO result; -// -// if (PollType.GROUP == poll.getPollType()) { -// result = service.executeGroupCounting(dto); -// } else { -// result = service.executeVoteCounting(dto); -// } -// for (ChoiceDTO choice : result.getChoices()) { -// -// ResultDAO daoResult = getDAO(Result.class); -// Result eResult = create(daoResult); -// -// Choice eChoice = poll.getChoiceByTopiaId(choice.getIdChoice()); -// -// poll.addResult(eResult); -// -// eResult.setName(eChoice.getName()); -// eResult.setByGroup(result.isByGroup()); -// eResult.setPoll(poll); -// eResult.setResultValue(String.valueOf(choice.getValue())); -// eResult.setVoteCountingType(result.getTypeVoteCounting()); -// } - - // Conversion et trie des résultats - List<PollResult> list = createPollResults(poll); - - VoteCountingType voteCountingType = poll.getVoteCountingType(); - - Iterator<PollResult> it = list.iterator(); - while (it.hasNext()) { - PollResult currentResult = it.next(); - - // Cas d'un dépouillement particulier - // Suppression des resultats qui ne sont pas de se dépouillement - if (voteCounting != null - && currentResult.getVoteCountingType() != voteCounting) { - it.remove(); - } - - // Cas d'un sondage de type GROUP avec filtre - if (byGroup) { - - // Filtre group : Suppression resultats non group - if (groupOnly && !currentResult.isByGroup()) { - it.remove(); - } - - // Filtre non group : Suppression resultats group - else if (!groupOnly && currentResult.isByGroup()) { - it.remove(); - } - - // Suppression des autres resultats de depouillements differents - if (currentResult.getVoteCountingType() != voteCountingType) { - it.remove(); - } - } - } - - PollResultList resultListDTO = new PollResultList(); - resultListDTO.setPollResults(list); - resultListDTO.setVoteCountingResult(null); - - return resultListDTO; - } - - /** * Retourne la liste des résultats d'un sondage sous forme de DTOs. * * @param poll le sondage (entitée Poll) * @return la liste des DTO Result */ - public List<PollResult> createPollResults(Poll poll) { + protected List<PollResult> createPollResults(Poll poll) { List<PollResult> results = Lists.newArrayList(); for (Result res : poll.getResult()) { PollResult dto = new PollResult(); @@ -318,34 +200,6 @@ return results; } - /** - * Retourne une chaîne contenant les résultats du sondage. - * - * @param poll le sondage - * @param results les résultats du sondage - * @return les résultats sous forme de chaine de caractères - */ - public String getResultsAsString(Poll poll, Collection<Result> results) { - - DateFormat dateFormat = new SimpleDateFormat(); - StringBuilder res = new StringBuilder(""); - Iterator<Result> it = results.iterator(); - while (it.hasNext()) { - Result result = it.next(); - if (poll.getChoiceType() == ChoiceType.DATE) { - Date date = new Date(Long.parseLong(result.getName())); - res.append(dateFormat.format(date)); - } else { - res.append(result.getName()); - } - res.append("=").append(removeTrailing0(result.getResultValue())); - if (it.hasNext()) { - res.append(", "); - } - } - return res.toString(); - } - public String getResultValue(Choice choice, Collection<PollResult> results) { String val = ""; @@ -358,7 +212,124 @@ return val; } + public List<PollResult> createNumberVoteCountingResult(PollResultList resultListDTO, + Multimap<String, String> choicesResults, + Multimap<String, String> subtitles) { + Preconditions.checkNotNull(resultListDTO); + Preconditions.checkNotNull(choicesResults); + Preconditions.checkNotNull(subtitles); + List<PollResult> results = resultListDTO.getPollResults(); + + /* + * liste des vrais choix (les choix pas cachés). + * cette variable sera affectée à la variable results + */ + List<PollResult> results2 = Lists.newArrayList(); + + // Ajout des résultats des choix cachés + for (PollResult result : results) { + if (result.isHidden()) { + String name = result.getName(); + int indexOf = name.indexOf('#'); + String choice = name.substring( + NumberMethod.HIDDEN_PREFIX.length(), indexOf); + + String votingId = name.substring(indexOf + 1); + String value = result.getValue(); + + choicesResults.put(choice, votingId); + choicesResults.put(choice, value); + + } else { + results2.add(result); + } + } + + Locale locale = getLocale(); + + // Récupération du choix correspondant au résultat + VoteCountingResultDTO voteCountingResult = resultListDTO + .getVoteCountingResult(); + + for (String choiceName : choicesResults.keySet()) { + Collection<String> values = choicesResults.get(choiceName); + + for (ChoiceDTO choice : voteCountingResult.getChoices()) { + if (choiceName.equals(choice.getName())) { + subtitles.put( + choiceName, + l_(locale, "pollen.common.numberVote-total")); + subtitles.put( + choiceName, + String.valueOf(choice.getValue())); + + subtitles.put( + choiceName, + l_(locale, "pollen.common.numberVote-average")); + subtitles.put( + choiceName, + String.valueOf(choice.getAverage())); + + subtitles.put( + choiceName, + l_(locale, "pollen.common.numberVote-blank-votes")); + subtitles.put( + choiceName, + String.valueOf(choice.getNbBlankVotes())); + + subtitles.put( + choiceName, + l_(locale, "pollen.common.numberVote-total-votes")); + subtitles.put( + choiceName, + String.valueOf(values.size() / 2)); + break; + } + } + } + + if (results2.size() == 1) { + results2.remove(0); + } + return results2; + } + + public List<PollResult> getTopRanking(List<PollResult> results) { + List<PollResult> ranking = Lists.newArrayList(results); + + Collections.sort(ranking, new Comparator<PollResult>() { + @Override + public int compare(PollResult o1, PollResult o2) { + Double result1 = Double.parseDouble(o1.getValue()); + Double result2 = Double.parseDouble(o2.getValue()); + int comp = 0; // résultat de la comparaison + + if (result1 > result2) { + comp = -1; + } else if (result1 < result2) { + comp = 1; + } + if (comp == 0) { + comp = o1.getName().compareTo(o2.getName()); + } + return comp; + } + }); + + List<PollResult> topRanking = Lists.newArrayList(); + + if (CollectionUtils.isNotEmpty(ranking)) { + String winValue = ranking.get(0).getValue(); + for (PollResult r : ranking) { + if (winValue.equals(r.getValue())) { + topRanking.add(r); + } + } + } + return topRanking; + } + /** * Supprime le 0 final d'un nombre à virgule. Le résultat peut-être un * double : 1,0 -> 1 et 1,2 -> 1,2. @@ -366,14 +337,13 @@ * @param val le nombre * @return le nombre sans 0 final */ - private String removeTrailing0(String val) { + protected String removeTrailing0(String val) { if (val.endsWith(".0")) { val = val.substring(0, val.indexOf('.')); } return val; } - /** * Création des résultats de sondage à partir d'un dto de résultats de * sondage. @@ -406,7 +376,7 @@ * @param type type de dépouillement * @return vrai si le sondage a des résultats */ - private boolean hasResults(Poll poll, VoteCountingType type) { + protected boolean hasResults(Poll poll, VoteCountingType type) { boolean hasresult = false; if (!poll.isResultEmpty()) { @@ -422,10 +392,121 @@ } } } - return hasresult; } +// public PollResultList getAllResults(String pollId) { +// return getResults(pollId, null, false, false); +// } +// +// public PollResultList getResultsByVoteCounting(String pollId, +// VoteCountingType voteCounting) { +// return getResults(pollId, voteCounting, false, false); +// } +// +// /** +// * Récupère les résultats d'un sondage (sans rien dépouiller). +// * +// * @param pollId le sondage +// * @param voteCounting type de dépouillement +// * @param byGroup résultats par groupe +// * @param groupOnly résultats uniquement par groupe +// * @return les résultats du sondage +// */ +// private PollResultList getResults(String pollId, +// VoteCountingType voteCounting, +// boolean byGroup, +// boolean groupOnly) { +// +// PollService pollService = newService(PollService.class); +// Poll poll = pollService.getPollByPollId(pollId); +// +//// DataResultConverter converter = new DataResultConverter(transaction); +// if (log.isDebugEnabled()) { +// log.debug(poll.getPollId() + " (" + voteCounting +// + ") has results: " + hasResults(poll, voteCounting)); +// } +// +// // Dépouillement du sondage. +// // S'il n'existe pas de résultats ou si le sondage est encore ouvert. +// //if (!hasResults(ePoll, voteCounting) || !ePoll.getIsClosed()) { +// PollDTO dto = pollService.createPollDTOForVoteCounting(poll); +// +// if (voteCounting != null) { +// dto.setVoteCounting(voteCounting); +// } +// +//// // clear result (they will be regenerated ! (a big shame)) +//// poll.clearResult(); +// +//// ServiceVoteCounting service = new ServiceVoteCountingImpl(); +//// +//// VoteCountingResultDTO result; +//// +//// if (PollType.GROUP == poll.getPollType()) { +//// result = service.executeGroupCounting(dto); +//// } else { +//// result = service.executeVoteCounting(dto); +//// } +//// for (ChoiceDTO choice : result.getChoices()) { +//// +//// ResultDAO daoResult = getDAO(Result.class); +//// Result eResult = create(daoResult); +//// +//// Choice eChoice = poll.getChoiceByTopiaId(choice.getIdChoice()); +//// +//// poll.addResult(eResult); +//// +//// eResult.setName(eChoice.getName()); +//// eResult.setByGroup(result.isByGroup()); +//// eResult.setPoll(poll); +//// eResult.setResultValue(String.valueOf(choice.getValue())); +//// eResult.setVoteCountingType(result.getTypeVoteCounting()); +//// } +// +// // Conversion et trie des résultats +// List<PollResult> list = createPollResults(poll); +// +// VoteCountingType voteCountingType = poll.getVoteCountingType(); +// +// Iterator<PollResult> it = list.iterator(); +// while (it.hasNext()) { +// PollResult currentResult = it.next(); +// +// // Cas d'un dépouillement particulier +// // Suppression des resultats qui ne sont pas de se dépouillement +// if (voteCounting != null +// && currentResult.getVoteCountingType() != voteCounting) { +// it.remove(); +// } +// +// // Cas d'un sondage de type GROUP avec filtre +// if (byGroup) { +// +// // Filtre group : Suppression resultats non group +// if (groupOnly && !currentResult.isByGroup()) { +// it.remove(); +// } +// +// // Filtre non group : Suppression resultats group +// else if (!groupOnly && currentResult.isByGroup()) { +// it.remove(); +// } +// +// // Suppression des autres resultats de depouillements differents +// if (currentResult.getVoteCountingType() != voteCountingType) { +// it.remove(); +// } +// } +// } +// +// PollResultList resultListDTO = new PollResultList(); +// resultListDTO.setPollResults(list); +// resultListDTO.setVoteCountingResult(null); +// +// return resultListDTO; +// } +// // public String exportPoll(String pollId) { // TopiaContext transaction = getTransaction(); // try { @@ -503,4 +584,32 @@ // // return topiaId; // } + +// /** +// * Retourne une chaîne contenant les résultats du sondage. +// * +// * @param poll le sondage +// * @param results les résultats du sondage +// * @return les résultats sous forme de chaine de caractères +// */ +// public String getResultsAsString(Poll poll, Collection<Result> results) { +// +// DateFormat dateFormat = new SimpleDateFormat(); +// StringBuilder res = new StringBuilder(""); +// Iterator<Result> it = results.iterator(); +// while (it.hasNext()) { +// Result result = it.next(); +// if (poll.getChoiceType() == ChoiceType.DATE) { +// Date date = new Date(Long.parseLong(result.getName())); +// res.append(dateFormat.format(date)); +// } else { +// res.append(result.getName()); +// } +// res.append("=").append(removeTrailing0(result.getResultValue())); +// if (it.hasNext()) { +// res.append(", "); +// } +// } +// return res.toString(); +// } } Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties =================================================================== --- branches/pollen-1.2.6-struts2/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties 2012-02-28 15:32:26 UTC (rev 3151) +++ branches/pollen-1.2.6-struts2/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties 2012-02-28 21:34:08 UTC (rev 3152) @@ -1,154 +1,15 @@ add=Add -addChoice-choiceDate-regexp=\\d{2}/\\d{2}/\\d{4}( \\d{2}\\\:\\d{2})? -addChoice-choiceDate-regexp-message=Date does not match pattern 12/31/2000 12\:59 AM. -addChoice-choiceDate-required-message=You must provide a choice. -addChoice-choiceImage-regexp=\\.(jpe?g|gif|png|JPE?G|GIF|PNG)$ -addChoice-choiceImage-regexp-message=The image must be a JPG, GIF or PNG file. -addChoice-choiceImage-required-message=You must provide a choice. -addChoice-choiceText-required-message=You must provide a choice. -cancel=Cancel -choiceDate-label=Date and time -choiceDescription-label=Description -choiceImage-label=Image -choiceText-label=Choice create=Create -creatorEmail_msg=You had just created the new poll\: "%s".\nYou can access to this poll by following the links below.\n\nVote page\: \n%s\nEdit page\: \n%s -creatorEmail_subject=[Pollen] Poll creation (%s) delete=Delete edit=Edit -email-regexp=^([a-zA-Z0-9_.+-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$ -email-regexp-message=Invalid email help=Help -load=Load -login-required-message=You must provide a username -ok=Ok -pollFeed_choiceContent=%s -pollFeed_choiceTitle=New choice \: %s -pollFeed_commentContent=%s -pollFeed_commentTitle=New comment from %s -pollFeed_createContent= -pollFeed_createTitle=Poll created by %s -pollFeed_desc=%s -pollFeed_title=Pollen \: %s -pollFeed_voteContent=Poll state \: %s -pollFeed_voteTitle=New vote from %s -pollen.common.anonymous= +pollen.common.anonymous=Anonymous vote +pollen.common.numberVote-average=Average of numbers +pollen.common.numberVote-blank-votes=Number of blank votes +pollen.common.numberVote-total=Sum of numbers +pollen.common.numberVote-total-votes=Total votes pollen.email.userRegister.content=Welcome %1$s. You had just created an account on the web application Pollen.\n\nLogin\: %2$s\nPassword\: %3$s\n\nYou can now manage your polls by logging on the website \: \n%4$s pollen.email.userRegister.subject=[Pollen] Confirmation of account creation %s -pollen.error.context.close= -pollen.error.context.getRootContext= -pollen.error.context.parse= -pollen.error.context.rollback= -pollen.error.context.start= -pollen.error.context.stop= -pollen.error.encodePassword= -pollen.error.serviceEmail.createEmail= -pollen.error.serviceEmail.getNewEmail= -pollen.error.serviceEmail.sendEmail= -pollen.error.serviceFavorite.createFavoriteList= -pollen.error.serviceFavorite.createFavoriteParticipant= -pollen.error.serviceFavorite.deleteFavoriteList= -pollen.error.serviceFavorite.deleteFavoriteParticipant= -pollen.error.serviceFavorite.getFavoriteLists= -pollen.error.serviceFavorite.getFavoriteParticipant= -pollen.error.serviceFavorite.getFavoriteParticipants= -pollen.error.serviceFavorite.getNbFavoriteParticipants= -pollen.error.serviceFavorite.getNewFavoriteList= -pollen.error.serviceFavorite.getNewFavoriteParticipant= -pollen.error.serviceFavorite.updateFavoriteParticipant= -pollen.error.serviceList.createAccountForPersonList= -pollen.error.serviceList.deleteAccountFromPersonList= -pollen.error.serviceMail.sendEmail= -pollen.error.servicePoll.addComment= -pollen.error.servicePoll.canAdminPoll= -pollen.error.servicePoll.createChoice= -pollen.error.servicePoll.createComment= -pollen.error.servicePoll.createPoll= -pollen.error.servicePoll.createUpdateVote= -pollen.error.servicePoll.delete= -pollen.error.servicePoll.deleteChoice= -pollen.error.servicePoll.deleteComment= -pollen.error.servicePoll.deletePoll= -pollen.error.servicePoll.deleteVote= -pollen.error.servicePoll.getAllPolls= -pollen.error.servicePoll.getComments= -pollen.error.servicePoll.getNbComments= -pollen.error.servicePoll.getNbPollsByUser= -pollen.error.servicePoll.getNbTotalPolls= -pollen.error.servicePoll.getNewChoice= -pollen.error.servicePoll.getNewComment= -pollen.error.servicePoll.getNewPoll= -pollen.error.servicePoll.getNewPollList= -pollen.error.servicePoll.getNewPollParticipant= -pollen.error.servicePoll.getPoll= -pollen.error.servicePoll.getPollForResults= -pollen.error.servicePoll.getPollForUpdate= -pollen.error.servicePoll.getPollForVote= -pollen.error.servicePoll.getPolls= -pollen.error.servicePoll.getPollsByUser= -pollen.error.servicePoll.getRestrictedAccount=Unable to retrieve restricted account with accountUid \= %1$s and poll with uid \= %2$s -pollen.error.servicePoll.getRunningPolls= -pollen.error.servicePoll.getVotes= -pollen.error.servicePoll.savePoll= -pollen.error.servicePoll.setPollClosed= -pollen.error.servicePoll.updatePoll= -pollen.error.serviceResults.importPoll= -pollen.error.serviceUser.connect= -pollen.error.serviceUser.createDefaultAdmin= -pollen.error.serviceUser.createFavoriteList= -pollen.error.serviceUser.createFavoriteParticipant= -pollen.error.serviceUser.createList= -pollen.error.serviceUser.createUpdateList= -pollen.error.serviceUser.createUpdateUser= -pollen.error.serviceUser.createUser= -pollen.error.serviceUser.deleteFavoriteList= -pollen.error.serviceUser.deleteFavoriteParticipant= -pollen.error.serviceUser.deleteList= -pollen.error.serviceUser.deleteUser= -pollen.error.serviceUser.getAccounts= -pollen.error.serviceUser.getFavoriteLists= -pollen.error.serviceUser.getFavoriteParticipants= -pollen.error.serviceUser.getNbAccounts= -pollen.error.serviceUser.getNbFavoriteParticipants= -pollen.error.serviceUser.getNbUsers= -pollen.error.serviceUser.getNewAccount= -pollen.error.serviceUser.getNewFavoriteList= -pollen.error.serviceUser.getNewFavoriteParticipant= -pollen.error.serviceUser.getNewList= -pollen.error.serviceUser.getNewPerson= -pollen.error.serviceUser.getNewUser= -pollen.error.serviceUser.getPerson= -pollen.error.serviceUser.getUsers= -pollen.error.serviceUser.updateFavoriteParticipant= -pollen.error.serviceUser.updateUser= -pollen.error.serviceVote.canVote= -pollen.error.serviceVote.deleteVote= -pollen.error.serviceVote.findPollAccount= -pollen.error.serviceVote.getNbVotes= -pollen.error.serviceVote.getNewPollAccount= -pollen.error.serviceVote.getNewVote= -pollen.error.serviceVote.getPollAccount= -pollen.error.serviceVote.getVote= -pollen.error.serviceVote.getVotes= -pollen.error.serviceVote.getVotesByPoll=Unable to load votes from poll with uid \= %1$s -pollen.error.serviceVote.hasAlreadyVoted=Unable test vote existing for account with votingId \= %1$s and poll with uid \= %2$s -pollen.error.serviceVote.saveVote= -pollen.exception.favorite_list_name_exist= -pollen.exception.favorite_participant_exist= -pollen.exception.favorite_participant_exist_without_email= -pollen.exception.load_configuration= -pollen.exception.participant_doubloons= -pollen.exception.participant_exist= -pollen.exception.participant_exist_without_email= -pollen.exception.poll_exist= -pollen.exception.poll_not_exist=No such poll exists. Please make sure that you are using the correct link and copy it completely into your browser's address field. -pollen.exception.smtp_not_available= -pollen.exception.user_email_exist= -pollen.exception.user_login_exist= -pollen.exception.user_not_exist= -pollen.exception.user_wrong_password= -pollen.exception.vote_doubloon= -pollen.exception.vote_not_allowed= pollen.feed.addChoiceContent= pollen.feed.addChoiceTitle= pollen.feed.addCommentContent=%s @@ -160,23 +21,8 @@ pollen.feed.pollTitle=Pollen \: %s pollen.info.admin.created=Super admin was created with login %1$s pollen.info.admin.exists=Super admin already exists -pollen.info.start=Start Pollen -pollen.info.started=Pollen is started \! -pollen.info.stop=Stop Pollen -pollen.text.empty= -pollen.ui.choice.add.submit=Add -pollen.ui.choice.add.title=Adding a choice -pollen.ui.choice.datePattern=MM/dd/yyyy h\:mm a -pollen.ui.choice.delete.confirm=Are you sure you want to delete this choice ? -pollen.ui.choice.delete.title=Delete this choice -pollen.ui.error.upload=An error occurred while uploading files. Maximum size allowed is %$1s per file, and %$2s total. -pollen.ui.user.cancelEdit=Cancel changes pollen.ui.user.delete=Delete this user account -pollen.ui.user.delete.confirmMessage=Are you sure you want to definitively delete this user ? pollen.ui.user.edit=Edit this user account -pollen.ui.user.save=Save this user account -pollen.ui.vote.noPager=%$1d existing votes -pollen.ui.vote.noVote=Aucune personne n'a encore participé au sondage reminderEmail_msg=You have not yet voted for the poll "%s".\nYou can still participate with the identifier %s by following this link\: \n%s reminderEmail_subject=[Pollen] Reminder (%s) return=Return Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties =================================================================== --- branches/pollen-1.2.6-struts2/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties 2012-02-28 15:32:26 UTC (rev 3151) +++ branches/pollen-1.2.6-struts2/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties 2012-02-28 21:34:08 UTC (rev 3152) @@ -1,158 +1,17 @@ -addChoice-choiceDate-regexp=\\d{2}/\\d{2}/\\d{4}( \\d{2}\\\:\\d{2})? -addChoice-choiceDate-regexp-message=La date de début doit-être au format 31/12/2000 23\:59. -addChoice-choiceDate-required-message=Vous devez saisir un choix. -addChoice-choiceImage-regexp=\\.(jpe?g|gif|png|JPE?G|GIF|PNG)$ -addChoice-choiceImage-regexp-message=L'image doit-être au format JPG, GIF ou PNG. -addChoice-choiceImage-required-message=Vous devez saisir un choix. -addChoice-choiceText-required-message=Vous devez saisir un choix. -choiceDate-label=Date et heure -choiceDateField-label=Date et heure -choiceDateField-regexp=\\d{2}/\\d{2}/\\d{4}( \\d{2}\\\:\\d{2})? -choiceDateField-regexp-message=La date doit-être au format 31/12/2000 23\:59. -choiceDescription-label=Description -choiceImage-label=Image -choiceImageField-label=Image -choiceImageField-regexp=\\.(jpe?g|gif|png|JPE?G|GIF|PNG)$ -choiceImageField-regexp-message=L'image doit-être au format JPG, GIF ou PNG. -choiceText-label=Choix -connectionLegend=Connexion -date-pattern=dd/MM/yyyy HH\:mm -editEmail-regexp=^([a-zA-Z0-9_.+-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$ -editEmail-regexp-message=Adresse email invalide. email-label=Email -email-regexp=^([a-zA-Z0-9_.+-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$ -email-regexp-message=Adresse email invalide. firstName-label=Prénom -groupName-label=Nom du groupe lastName-label=Nom -listName-label=Nom -listSelect-label=Liste login-label=Identifiant -loginComp-label=Identifiant -loginComp-required-message=Vous devez entrer votre identifiant. -loginFailed=Mauvais identifiant ou mot de passe. -loginSubmit=Me connecter name-label=Nom -participantEmail-regexp=^([a-zA-Z0-9_.+-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$ -participantEmail-regexp-message=Adresse email invalide. -passwordComp-label=Mot de passe -passwordComp-required-message=Vous devez entrer votre mot de passe. -pollen.common.anonymous= +pollen.common.numberVote-average=Moyenne des nombres +pollen.common.numberVote-blank-votes=Nombre de votes blancs +pollen.common.numberVote-total=Somme des nombres +pollen.common.numberVote-total-votes=Nombre total de votes +pollen.common.anonymous=Vote anonyme pollen.email.createPoll.content=Vous venez de créer le sondage "%1$s".\nVous pouvez y accéder en suivant les liens ci-dessous.\n\nPage de vote \: \n%2$s\nModération des votes \: \n%3$s\nPage de modification \: \n%4$s pollen.email.createPoll.subject=[Pollen] Création d'un sondage (%1$s) pollen.email.userRegister.content=Bienvenue %1$s. Vous venez de créer un compte sur l'application de sondage en ligne Pollen.\n\nIdentifiant \: %2$s\nMot de passe \: %3$s\n\nVous pouvez dès maintenant gérer vos sondages en vous identifiant sur le site \: \n%4$s pollen.email.userRegister.subject=[Pollen] Confirmation de création du compte %s -pollen.error.context.close=Erreur lors de la fermeture de la transaction -pollen.error.context.getRootContext=Erreur lors de la récupération du contexte principale -pollen.error.context.parse=Erreur lors du parse du fichier de configuration %1$s -pollen.error.context.rollback=Erreur lors de l'annulation de la transaction -pollen.error.context.start=Erreur lors du démarrage de l'application -pollen.error.context.stop=Erreur lors de l'arrêt de l'application -pollen.error.encodePassword= -pollen.error.serviceEmail.createEmail= -pollen.error.serviceEmail.getNewEmail= -pollen.error.serviceEmail.sendEmail= -pollen.error.serviceFavorite.createFavoriteList= -pollen.error.serviceFavorite.createFavoriteParticipant= -pollen.error.serviceFavorite.deleteFavoriteList= -pollen.error.serviceFavorite.deleteFavoriteParticipant= -pollen.error.serviceFavorite.getFavoriteLists= -pollen.error.serviceFavorite.getFavoriteParticipant= -pollen.error.serviceFavorite.getFavoriteParticipants= -pollen.error.serviceFavorite.getNbFavoriteParticipants= -pollen.error.serviceFavorite.getNewFavoriteList= -pollen.error.serviceFavorite.getNewFavoriteParticipant= -pollen.error.serviceFavorite.updateFavoriteParticipant= -pollen.error.serviceList.createAccountForPersonList= -pollen.error.serviceList.deleteAccountFromPersonList= -pollen.error.serviceMail.sendEmail=Erreur lors de l'envoi de l'email sur le serveur %1$s\:%2$d pour %3$s de la part de %4$s -pollen.error.servicePoll.addComment=Impossible d'ajouter un nouveau commentaire créé par %1$s pour le sondage %2$s (%3$s) -pollen.error.servicePoll.canAdminPoll= -pollen.error.servicePoll.createChoice= -pollen.error.servicePoll.createComment= -pollen.error.servicePoll.createPoll=Impossible d'enregistrer le sondage %1$s créé par %2$s -pollen.error.servicePoll.createUpdateVote= -pollen.error.servicePoll.deleteChoice= -pollen.error.servicePoll.deleteComment=Impossible de supprimer le commentaire ayant pour identifiant "%1$s", appartenenant au sondage %2$s (%3$s) -pollen.error.servicePoll.deletePoll=Impossible de supprimer le sondage ayant pou identifiant "%1$s" -pollen.error.servicePoll.deleteVote= -pollen.error.servicePoll.getAllPolls= -pollen.error.servicePoll.getComments= -pollen.error.servicePoll.getNbComments= -pollen.error.servicePoll.getNbPollsByUser= -pollen.error.servicePoll.getNbTotalPolls= -pollen.error.servicePoll.getNewChoice= -pollen.error.servicePoll.getNewComment= -pollen.error.servicePoll.getNewPoll= -pollen.error.servicePoll.getNewPollList= -pollen.error.servicePoll.getNewPollParticipant= -pollen.error.servicePoll.getPoll= -pollen.error.servicePoll.getPollForResults= -pollen.error.servicePoll.getPollForUpdate= -pollen.error.servicePoll.getPollForVote= -pollen.error.servicePoll.getPolls= -pollen.error.servicePoll.getPollsByUser= -pollen.error.servicePoll.getRestrictedAccount=Unable to retrieve restricted account with accountUid \= %1$s and poll with uid \= %2$s -pollen.error.servicePoll.getRunningPolls= -pollen.error.servicePoll.getVotes= -pollen.error.servicePoll.savePoll= -pollen.error.servicePoll.setPollClosed= -pollen.error.servicePoll.updatePoll=Impossible de mettre à jour le sondage %1$s (%2$s) -pollen.error.serviceResults.importPoll= -pollen.error.serviceUser.connect=Impossible d'établir la connexion pour l'identifiant %1$s et le mot de passe encodé %2$s -pollen.error.serviceUser.createDefaultAdmin=Impossible de créer l'administrateur par défaut \: %1$s (%2$s) -pollen.error.serviceUser.createFavoriteList= -pollen.error.serviceUser.createFavoriteParticipant= -pollen.error.serviceUser.createList= -pollen.error.serviceUser.createUpdateList= -pollen.error.serviceUser.createUpdateUser=Impossible de créer l'utilisateur '%1$s' <%2$s> (admin \= %$3b) -pollen.error.serviceUser.createUser= -pollen.error.serviceUser.deleteFavoriteList= -pollen.error.serviceUser.deleteFavoriteParticipant= -pollen.error.serviceUser.deleteList= -pollen.error.serviceUser.deleteUser= -pollen.error.serviceUser.getAccounts= -pollen.error.serviceUser.getFavoriteLists= -pollen.error.serviceUser.getFavoriteParticipants= -pollen.error.serviceUser.getNbAccounts= -pollen.error.serviceUser.getNbFavoriteParticipants= -pollen.error.serviceUser.getNbUsers= -pollen.error.serviceUser.getNewAccount= -pollen.error.serviceUser.getNewFavoriteList= -pollen.error.serviceUser.getNewFavoriteParticipant= -pollen.error.serviceUser.getNewList= -pollen.error.serviceUser.getNewPerson= -pollen.error.serviceUser.getNewUser=Impossible d'instancier un nouvel utilisateur. -pollen.error.serviceUser.getPerson= -pollen.error.serviceUser.getUsers= -pollen.error.serviceUser.updateFavoriteParticipant= -pollen.error.serviceUser.updateUser= -pollen.error.serviceVote.canVote= -pollen.error.serviceVote.deleteVote= -pollen.error.serviceVote.findPollAccount= -pollen.error.serviceVote.getNbVotes= -pollen.error.serviceVote.getNewPollAccount= -pollen.error.serviceVote.getNewVote= -pollen.error.serviceVote.getPollAccount= -pollen.error.serviceVote.getVote= -pollen.error.serviceVote.getVotes= -pollen.error.serviceVote.getVotesByPoll= -pollen.error.serviceVote.hasAlreadyVoted= -pollen.error.serviceVote.saveVote= -pollen.exception.favorite_list_name_exist=La liste %1$s existe déjà pour l'utilisateur %2$s -pollen.exception.load_configuration=La configuration n'a pas été chargée correctement \! Veuillez vérifier le démarrage de l'application. -pollen.exception.participant_doubloons=Les doublons de la liste %1$s ont été ignorés \: %2$s -pollen.exception.participant_exist=La liste %1$s contient déjà un votant nommé %2$s avec un email %3$s -pollen.exception.participant_exist_without_email=La liste %1$s contient déjà un votant nommé %2$s avec aucun email -pollen.exception.poll_exist= -pollen.exception.poll_not_exist=Il n'y a pas de sondage à cette adresse. Veuillez verifier que vous utilisez le lien correcte et copiez-le complètement dans le champ d'adresse de votre navigateur. -pollen.exception.smtp_not_available=Impossible d'envoyer un email à %1$s. Serveur smtp indisponible pour l'envoi d'email, veuillez contacter un administrateur. -pollen.exception.user_email_exist=Un utilisateur est déjà enregistré avec cet email. -pollen.exception.user_login_exist=Un utilisateur est déjà enregistré avec cet identifiant. -pollen.exception.user_not_exist=L'identifiant '%1$s' ne correspond à aucun utilisateur connu. -pollen.exception.user_wrong_password=Le mot de passe renseigné est incorrect pour l'utilisateur '%1$s'. -pollen.exception.vote_doubloon= -pollen.exception.vote_not_allowed= pollen.feed.addChoiceContent= pollen.feed.addChoiceTitle= pollen.feed.addCommentContent=%s @@ -164,75 +23,4 @@ pollen.feed.pollTitle=Pollen \: %s pollen.info.admin.created=Le super admin a été créé avec l'identifiant %1$s. pollen.info.admin.exists=Le super admin existe déjà -pollen.info.start=Démarrage de Pollen... -pollen.info.started=Pollen a été démarré avec succès \! -pollen.info.stop=Arrêt de Pollen -pollen.page.AdminUsers.title=Gestion des utilisateurs -pollen.page.PollLinks.title=Liens d'accès au sondage -pollen.page.UserLists.title=Vos listes de votants -pollen.ui.button.add=Ajouter -pollen.ui.button.create=Créer -pollen.ui.button.ok=Ok -pollen.ui.choice.add.submit=Ajouter -pollen.ui.choice.add.title=Ajout d'un choix -pollen.ui.choice.datePattern=dd/MM/yyyy HH\:mm -pollen.ui.choice.delete.confirm=Etes-vous sûr de vouloir définitivement supprimer ce choix ? -pollen.ui.choice.delete.title=Supprimer ce choix -pollen.ui.error.upload=Une erreur s'est produite lors du transfert des fichiers. La taille maximale autorisée est de %1$s par fichier et %2$s au total. -pollen.ui.list.create.success=La liste %1$s a été créée avec succès. -pollen.ui.list.create.title=Créer une nouvelle liste -pollen.ui.list.create.weightHelp=Ce chiffre correspond au poids du vote de la personne, c'est à dire le nombre de voix que possède la personne dans le sondage. -pollen.ui.list.delete=Supprimer la liste %1$s -pollen.ui.list.delete.confirmMessage=Etes-vous sûr de vouloir définitivement supprimer cette liste et l'intégralité de ses votants ? -pollen.ui.list.delete.success=La liste et son contenu ont été supprimé avec succès. -pollen.ui.list.emptyList=Liste vide. Ajoutez des votants en saisissant leur nom et email. -pollen.ui.list.nbParticipants=%1$d votants contenus dans cette liste -pollen.ui.list.notSelected=Aucune liste sélectionnée -pollen.ui.list.update.addParticipant=Ajouter un nouveau votant à la liste -pollen.ui.list.update.addParticipant.success=Le votant %1$s a été ajouté à la liste. -pollen.ui.list.update.cancelEdition=Annuler les changements -pollen.ui.list.update.removeParticipant=Supprimer ce votant -pollen.ui.list.update.removeParticipant.confirmMessage=Etes-vous sûr de vouloir supprimer %1$s de la liste ? -pollen.ui.list.update.removeParticipant.success=Le votant a été supprimé avec succès. -pollen.ui.list.update.saveParticipant=Enregistrer les modifications -pollen.ui.list.update.saveParticipant.success=Modification enregistrée avec succès. -pollen.ui.list.update.updateParticipant=Modifier ce votant -pollen.ui.participant.add=Nouveau participant -pollen.ui.participant.email-label=Email -pollen.ui.participant.name-label=Nom -pollen.ui.participant.weight-label=Poids -pollen.ui.poll.form.confirmlistChange=Des changements ont été effectués sur la/les liste(s), un changement de restriction supprimera les modifications. Voulez-vous continuer ? -pollen.ui.poll.links.adminVotePage=Lien d'accès modérateur à la page des votes \: -pollen.ui.poll.links.creatorEmail.notDefined=Aucun email n'a été défini à la création du sondage, vous devriez enregistrer cette page dans vos favoris pour ne pas perdre les liens. -pollen.ui.poll.links.creatorEmail.success=Un email vous a été envoyé avec les liens ci-dessous. -pollen.ui.poll.links.editPage=Lien d'accès à la modification du sondage \: -pollen.ui.poll.links.myPolls=Mes sondages -pollen.ui.poll.links.notAllowed=L'url est incorrect, vous n'êtes pas autorisé à accéder aux liens du sondage. -pollen.ui.poll.links.pollName=%1$s par %2$s -pollen.ui.poll.links.register=Si vous êtes un utilisateur identifié, vous pouvez retrouver ces liens dans la page -pollen.ui.poll.links.uriNotDefined=Page inaccessible sans identifiant du sondage dans l'url \! -pollen.ui.poll.links.votePage=Lien d'accès publique à la page des votes \: -pollen.ui.tooltip.help=Aide -pollen.ui.user.create.emailFailedShowPassword=Le mot de passe généré est le suivant \: %1$s -pollen.ui.user.create.passwordGenerated=Le mot de passe du nouvel utilisateur a été généré. -pollen.ui.user.create.passwordHelp=Si vous précisez un email, un mot de passe sera généré et envoyé à l'utilisateur. Sinon le mot de passe sera identique au login. -pollen.ui.user.create.passwordSameAsLogin=Le mot de passe du nouvel utilisateur est le même que son identifiant. -pollen.ui.user.create.sendEmail=Un email a été envoyé au nouvel utilisateur %1$s à l'adresse %2$s. -pollen.ui.user.create.success=L'utilisateur %1$s a été créé avec succès. -pollen.ui.user.create.title=Créer un nouvel utilisateur -pollen.ui.user.delete=Supprimer cet utilisateur -pollen.ui.user.delete.confirmMessage=Etes-vous sûr de vouloir définitivement supprimer cet utilisateur ? -pollen.ui.user.display.notAllowed=Vous n'avez pas les droits nécessaires pour accéder à la page %1$s. -pollen.ui.user.display.notConnected=Vous devez vous connecter pour accéder à la page %1$s. -pollen.ui.user.nbUsers=%1$d utilisateurs existants -pollen.ui.user.register.autoConnection=Vous êtes maintenant connecté avec l'identifiant %1$s. -pollen.ui.user.register.sendEmail=Un email vous a été envoyé à l'adresse %1$s. -pollen.ui.user.update.cancel=Annuler les changements -pollen.ui.user.update.edit=Modifier cet utilisateur -pollen.ui.user.update.save=Enregistrer les modifications -pollen.ui.user.update.success=Modification enregistrée avec succès. -pollen.ui.user.validate.passwords=Les deux mots de passe ne correspondent pas. -pollen.ui.vote.delete.confirmMessage=Etes-vous sûr de vouloir supprimer ce vote ? -pollen.ui.vote.noPager=%1$d votes existants -pollen.ui.vote.noVote=Aucune personne n'a encore participé au sondage -weight-label=Poids + Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ResultForPoll.java =================================================================== --- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ResultForPoll.java 2012-02-28 15:32:26 UTC (rev 3151) +++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ResultForPoll.java 2012-02-28 21:34:08 UTC (rev 3152) @@ -24,6 +24,7 @@ package org.chorem.pollen.ui.actions.poll; import com.google.common.base.Preconditions; +import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -37,25 +38,19 @@ import org.chorem.pollen.bean.PollResultList; import org.chorem.pollen.business.persistence.Poll; import org.chorem.pollen.business.persistence.PollAccount; -import org.chorem.pollen.business.persistence.Result; import org.chorem.pollen.common.ChoiceType; import org.chorem.pollen.common.PollType; import org.chorem.pollen.common.VoteCountingType; import org.chorem.pollen.services.impl.PollResultsService; import org.chorem.pollen.services.impl.PollService; -import org.chorem.pollen.votecounting.business.NumberMethod; -import org.chorem.pollen.votecounting.dto.ChoiceDTO; -import org.chorem.pollen.votecounting.dto.VoteCountingResultDTO; import org.nuiton.util.StringUtil; import java.net.URL; import java.text.DateFormat; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Set; /** * Display results of a poll. @@ -70,12 +65,10 @@ /** Logger. */ private static final Log log = LogFactory.getLog(ResultForPoll.class); + private Boolean byGroup; + protected boolean userAllowed; -// protected String victoryMessage; - - protected Result result; - /** * Résultats du sondage. * <p/> @@ -83,9 +76,6 @@ */ private transient Multimap<String, String> choicesResults; -// /** Résultat courant */ -// private Map.Entry<String, List<String>> choicesResult; - /** Résultats du sondage. */ private transient Multimap<String, String> subtitles; @@ -93,7 +83,7 @@ private List<PollResult> results; - private List<PollResult> ranking; +// private List<PollResult> ranking; private List<PollResult> topRanking; @@ -110,16 +100,12 @@ return userAllowed; } - public Result getResult() { - return result; - } - public List<PollResult> getResults() { return results; } - public Date getResultNameAsDate(Result result) { - return new Date(Long.valueOf(result.getName())); + public String formatResultNameAsDate(PollResult result) { + return getDateTimeFormat().format(new Date(Long.valueOf(result.getName()))); } public Multimap<String, String> getChoicesResults() { @@ -174,6 +160,12 @@ addActionError(_("pollen.error.pollNotFound")); } else { + if (byGroup == null) { + + // default byGroup value + byGroup = isGroupPoll(); + } + setDateFormat(DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.SHORT, getLocale())); @@ -191,7 +183,7 @@ if (!userAllowed) { addActionError(_("pollen.error.userNotAllowed")); } else if (!poll.getClosed()) { - addActionError(_("pollen.error.pollNotClosed")); + addActionMessage(_("pollen.error.pollNotClosed")); loadResults(); } else { @@ -206,9 +198,9 @@ return topRanking; } - public List<PollResult> getRanking() { - return ranking; - } +// public List<PollResult> getRanking() { +// return ranking; +// } public boolean isFreePoll() { return poll.getPollType() == PollType.FREE; @@ -250,13 +242,21 @@ return poll.getVoteCountingType() == VoteCountingType.NUMBER; } + public boolean isByGroup() { + return byGroup; + } + + public void setByGroup(boolean byGroup) { + this.byGroup = byGroup; + } + protected void loadResults() { PollResultsService pollResultService = newService(PollResultsService.class); PollResultList resultListDTO; - if (isGroupPoll()) { + if (byGroup) { resultListDTO = pollResultService.getGroupResults(poll.getPollId()); } else { resultListDTO = pollResultService.getNormalResults(poll.getPollId()); @@ -275,118 +275,20 @@ if (isNumberVoteCounting()) { // resultats des choix cachés - choicesResults = LinkedHashMultimap.create(); // sous-titres des vrais choix (les choix pas cachés) - subtitles = LinkedHashMultimap.create(); + subtitles = ArrayListMultimap.create(); - /* - * liste des vrais choix (les choix pas cachés). - * cette variable sera affectée à la variable results - */ - List<PollResult> results2 = Lists.newArrayList(); - - // Ajout des résultats des choix cachés - for (PollResult result : getResults()) { - if (result.isHidden()) { - String name = result.getName(); - int indexOf = name.indexOf('#'); - String choice = name.substring( - NumberMethod.HIDDEN_PREFIX.length(), indexOf); - - String votingId = name.substring(indexOf + 1); - String value = result.getValue(); - - choicesResults.put(choice, votingId); - choicesResults.put(choice, value); - - } else { - results2.add(result); - } - } - - for (String choiceName : choicesResults.keySet()) { - Collection<String> values = choicesResults.get(choiceName); - - // Récupération du choix correspondant au résultat - VoteCountingResultDTO voteCountingResult = resultListDTO - .getVoteCountingResult(); - - for (ChoiceDTO choice : voteCountingResult.getChoices()) { - if (choiceName.equals(choice.getName())) { - subtitles.put( - choiceName, - _("pollen.common.numberVote-total")); - subtitles.put( - choiceName, - String.valueOf(choice.getValue())); - - subtitles.put( - choiceName, - _("pollen.common.numberVote-average")); - subtitles.put( - choiceName, - String.valueOf(choice.getAverage())); - - subtitles.put( - choiceName, - _("pollen.common.numberVote-blank-votes")); - subtitles.put( - choiceName, - String.valueOf(choice.getNbBlankVotes())); - - subtitles.put( - choiceName, - _("pollen.common.numberVote-total-votes")); - subtitles.put( - choiceName, - String.valueOf(values.size() / 2)); - break; - } - } - } - - results = results2; - if (results.size() == 1) { - results.remove(0); - } + results = pollResultService.createNumberVoteCountingResult( + resultListDTO, + choicesResults, + subtitles); } - ranking = Lists.newArrayList(results); + topRanking = pollResultService.getTopRanking(results); - Collections.sort(ranking, new Comparator<PollResult>() { - @Override - public int compare(PollResult o1, PollResult o2) { - Double result1 = Double.parseDouble(o1.getValue()); - Double result2 = Double.parseDouble(o2.getValue()); - int comp = 0; // résultat de la comparaison - - if (result1 > result2) { - comp = -1; - } else if (result1 < result2) { - comp = 1; - } - if (comp == 0) { - comp = o1.getName().compareTo(o2.getName()); - } - return comp; - } - }); - - topRanking = Lists.newArrayList(); - - if (CollectionUtils.isNotEmpty(ranking)) { - String winValue = ranking.get(0).getValue(); - for (PollResult r : ranking) { - if (winValue.equals(r.getValue())) { - topRanking.add(r); - } - } - } - if (log.isInfoEnabled()) { - log.info("rankings = " + ranking); log.info("topRanking = " + topRanking); } } @@ -431,6 +333,33 @@ return chartUrl; } + public Set<String> getChoicesResultNames() { + return choicesResults.keySet(); + } + + public String getChoicesResultCharUrl(int width, + int height, + String choiceName) { + + URL applicationUrl = getApplicationUrl(); + StringBuilder url = new StringBuilder(applicationUrl.toString()); + + url.append("/io/generateChart"); + + Map<String, Object> params = Maps.newHashMap(); + params.put("width", width); + params.put("height", height); + params.put("title", ""); + params.put("values", choicesResults.get(choiceName)); + params.put("subtitles", subtitles.get(choiceName)); + + UrlHelper.buildParametersString(params, url, "&"); + + String chartUrl = url.toString(); + return chartUrl; + + } + public String getChoicesAsString() { List<String> choices = getChoices(); return StringUtil.join(choices, ",", true); Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties =================================================================== --- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties 2012-02-28 15:32:26 UTC (rev 3151) +++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties 2012-02-28 21:34:08 UTC (rev 3152) @@ -64,10 +64,6 @@ pollen.common.newPassword=New password pollen.common.newPassword2=Reenter new passworsd pollen.common.normal=normal -pollen.common.numberVote-average=Average of numbers -pollen.common.numberVote-blank-votes=Number of blank votes -pollen.common.numberVote-total=Sum of numbers -pollen.common.numberVote-total-votes=Total votes pollen.common.or=or pollen.common.password=Password pollen.common.password2=Renter your password Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties =================================================================== --- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties 2012-02-28 15:32:26 UTC (rev 3151) +++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties 2012-02-28 21:34:08 UTC (rev 3152) @@ -65,10 +65,6 @@ pollen.common.newPassword=Nouveau mot de passe pollen.common.newPassword2=Répétez votre nouveau mot de passe pollen.common.normal=normal -pollen.common.numberVote-average=Moyenne des nombres -pollen.common.numberVote-blank-votes=Nombre de votes blancs -pollen.common.numberVote-total=Somme des nombres -pollen.common.numberVote-total-votes=Nombre total de votes pollen.common.or=ou pollen.common.password=Mot de passe pollen.common.password2=Répétez votre mot de passe Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/result.jsp =================================================================== --- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/result.jsp 2012-02-28 15:32:26 UTC (rev 3151) +++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/result.jsp 2012-02-28 21:34:08 UTC (rev 3152) @@ -29,14 +29,34 @@ <script type="text/javascript"> - function displayNormalChartUrl(type) { - var url = "<s:url value='%{getNormalPollResultChartUrl(400,300)}' escapeAmp='false'/>&type=" + type; - $('#normalChartImg').attr('src', url); + <%--function displayNormalChartUrl(type) {--%> + <%--var url = "<s:url value='%{getNormalPollResultChartUrl(400, 300)}' escapeAmp='false'/>&type=" + type;--%> + <%--$('#normalChartImg').attr('src', url);--%> + <%--return false;--%> + <%--}--%> + + function displayCharts(type) { + $.each(chartUrls, function (key, value) { + console.info("display url [" + key + "] : " + value); + var url = value + "&type=" + type; + $('#' + key).attr("src", url); + }); return false; } + var chartUrls = {}; + + chartUrls['chart_normal'] = "<s:url value='%{getNormalPollResultChartUrl(400, 300)}' escapeAmp='false'/>"; + <s:if test="numberVoteCounting"> + <s:iterator value="choicesResultNames" var="choicesResultName" status="status"> + chartUrls['chart_<s:property value="#status.index"/>'] = "<s:url value='%{getChoicesResultCharUrl(400,300, #choicesResultName)}' escapeAmp='false'/>"; + </s:iterator> + </s:if> + jQuery(document).ready(function () { - $('#displayChart1').click(); + + // register all chart url (without the type in it) + displayCharts(1); }); @@ -74,26 +94,24 @@ <h4><s:property value="victoryMessage"/> <br/> <s:iterator value="topRanking" var="result"> - <s:if test="textType"> - <s:property value="%{#result.name}"/> + <s:property value="name"/> </s:if> - <s:if test="dateType"> - <s:property value="%{getResultNameAsDate(#result.name)}"/> - </s:if> - <s:if test="imageType"> + <s:elseif test="dateType"> + <s:property value="%{formatResultNameAsDate(#result)}"/> + </s:elseif> + <s:elseif test="imageType"> <s:url id="imageUrl" namespace="/io" action="getPollChoiceImage" escapeAmp="false"> <s:param name="choiceId" value="name"/> <s:param name="pollId" value="poll.pollId"/> <s:param name="thumb" value="true"/> </s:url> - <img alt="<s:property value='name'/>" title="<s:property value='name'/>" src="<s:property value='imageUrl'/>"> - </s:if> + </s:elseif> <br/> </s:iterator> </h4> @@ -102,18 +120,15 @@ <!-- Diagramme --> <div id="resultChart"> <div class="chartTypeDiv"> - <sj:a id='displayChart1' href="#" - onclick="return displayNormalChartUrl(1);"> + <sj:a id='displayChart1' href="#" onclick="return displayCharts(1);"> <img src="<s:url value='/img/rep1.png'/>" title='<s:text name="pollen.common.chartType-pie"/>' alt="1"/> </sj:a> - <sj:a id='displayChart2' href="#" - onclick="return displayNormalChartUrl(2);"> + <sj:a id='displayChart2' href="#" onclick="return displayCharts(2);"> <img src="<s:url value='/img/rep2.png'/>" title='<s:text name="pollen.common.chartType-pie3d"/>' alt="2"/> </sj:a> - <sj:a id='displayChart3' href="#" - onclick="return displayNormalChartUrl(3);"> + <sj:a id='displayChart3' href="#" onclick="return displayCharts(3);"> <img src="<s:url value='/img/rep3.png'/>" title='<s:text name="pollen.common.chartType-ring"/>' alt="3"/> </sj:a> @@ -123,14 +138,15 @@ <s:if test="groupPoll"> <s:text name="pollen.common.results"/> <s:if test="byGroup"> - <s:a href="#" onclick="return false;"> + <s:a namespace="/poll" action="results/%{poll.pollId}"> + <s:param name="byGroup" value="false"/> <s:text name="pollen.common.normal"/> </s:a> - <s:text name="pollen.common.group"/> </s:if> <s:else> <s:text name="pollen.common.normal"/> - - <s:a href="#" onclick="return false;"> + <s:a namespace="/poll" action="results/%{poll.pollId}"> <s:text name="pollen.common.group"/> </s:a> </s:else> @@ -138,19 +154,17 @@ </div> <sj:div id='chartContainer'> - <img id='normalChartImg'/> + <img id='chart_normal'/> </sj:div> <!-- Diagramme par choix --> <s:if test="choicesResults != null"> <div id="resultChart"> <div> - <s:iterator value="choicesResults.entrySet()" var="choicesResult"> - <s:property value="%{#choicesResult.key}"/> - <s:property value="%{#choicesResult.value}"/> - <%--<t:chart title="${choicesResult.key}" width="400" height="300"--%> - <%--values="choicesResult.value" type="${type}"--%> - <%--t:subtitles="subtitles.get(choicesResult.key)" />--%> + <s:iterator value="choicesResultNames" var="choicesResultName" status="status"> + <img id='chart_<s:property value="#status.index"/>' alt="<s:property/>" + title="<s:property/>" + src="<s:property value='%{getChoicesResultCharUrl(400,300, #choicesResultName)}'/>"> </s:iterator> </div> </div>
participants (1)
-
tchemit@users.chorem.org