Author: tchemit Date: 2014-05-15 13:04:07 +0200 (Thu, 15 May 2014) New Revision: 3946 Url: http://forge.chorem.org/projects/pollen/repository/revisions/3946 Log: can now vote Modified: trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoteBean.java trunk/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java trunk/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java Modified: trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoteBean.java =================================================================== --- trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoteBean.java 2014-05-15 10:35:46 UTC (rev 3945) +++ trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoteBean.java 2014-05-15 11:04:07 UTC (rev 3946) @@ -1,6 +1,7 @@ package org.chorem.pollen.rest.api.v1; import org.chorem.pollen.persistence.entity.PollenPrincipal; +import org.chorem.pollen.persistence.entity.PollenPrincipalImpl; import org.chorem.pollen.persistence.entity.Vote; import org.chorem.pollen.persistence.entity.VoteImpl; import org.chorem.pollen.persistence.entity.VoteToChoice; @@ -68,6 +69,7 @@ Vote vote = new VoteImpl(); vote.setAnonymous(getAnonymous() != null && getAnonymous()); + vote.setVoter(getVoter()); for (VoteToChoiceBean choiceBean : choice) { VoteToChoice voteToChoice = choiceBean.toEntity(); Modified: trunk/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java =================================================================== --- trunk/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java 2014-05-15 10:35:46 UTC (rev 3945) +++ trunk/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java 2014-05-15 11:04:07 UTC (rev 3946) @@ -24,13 +24,20 @@ */ import com.google.common.collect.ImmutableList; +import org.apache.commons.lang3.StringUtils; +import org.chorem.pollen.persistence.entity.Choice; import org.chorem.pollen.persistence.entity.Poll; +import org.chorem.pollen.persistence.entity.PollenPrincipal; import org.chorem.pollen.persistence.entity.Polls; import org.chorem.pollen.persistence.entity.Vote; +import org.chorem.pollen.persistence.entity.VoteToChoice; +import org.chorem.pollen.persistence.entity.VoteToChoiceTopiaDao; import org.chorem.pollen.services.service.security.PermissionVerb; import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * TODO @@ -159,20 +166,37 @@ // -- author -- // -// PollenPrincipal author = getSecurityService().generatePollenPrincipal(); -// toSave.setAuthor(author); + PollenPrincipal author = getSecurityService().generatePollenPrincipal(); + toSave.setVoter(author); toSave.setPoll(poll); } + toSave.setAnonymous(vote.isAnonymous()); + // toSave.setText(vote.getText()); // -// // -- author -- // -// -// toSave.getAuthor().setName(vote.getAuthor().getName()); -// if (StringUtils.isNotBlank(vote.getAuthor().getEmail())) { -// toSave.getAuthor().setEmail(StringUtils.lowerCase(vote.getAuthor().getEmail())); -// } + // -- author -- // + toSave.getVoter().setName(vote.getVoter().getName()); + if (StringUtils.isNotBlank(vote.getVoter().getEmail())) { + toSave.getVoter().setEmail(getCleanMail(vote.getVoter().getEmail())); + } + + // -- List of VoteToChoice -- // + + Set<VoteToChoice> choicesToSave = new HashSet<>(); + for (VoteToChoice input : vote.getVoteToChoice()) { + + Double value = input.getVoteValue(); + if (value != null) { + VoteToChoice voteToChoice = createVoteToChoice(toSave, input); + choicesToSave.add(voteToChoice); + } + + } + + toSave.setVoteToChoice(choicesToSave); + return toSave; } @@ -191,4 +215,47 @@ } + protected VoteToChoice getVoteToChoice(Vote vote, String voteToChoiceId) { + + VoteToChoice result = getVoteToChoiceDao().findByTopiaId(voteToChoiceId); + + if (!vote.containsVoteToChoice(result)) { + + throw new InvalidEntityLinkException(Vote.PROPERTY_VOTE_TO_CHOICE, result, vote); + + } + + return result; + + } + + + protected VoteToChoice createVoteToChoice(Vote vote, VoteToChoice source) { + + VoteToChoiceTopiaDao voteToChoiceDao = getVoteToChoiceDao(); + + VoteToChoice result; + + if (source.isPersisted()) { + + result = getVoteToChoice(vote, source.getTopiaId()); + + } else { + + result = voteToChoiceDao.create(); + + String choiceId = source.getChoice().getTopiaId(); + + Choice choiceLoaded = getChoiceDao().findByTopiaId(choiceId); + + result.setChoice(choiceLoaded); + + vote.addVoteToChoice(result); + + } + + result.setVoteValue(source.getVoteValue()); + + return result; + } } Modified: trunk/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java =================================================================== --- trunk/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java 2014-05-15 10:35:46 UTC (rev 3945) +++ trunk/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java 2014-05-15 11:04:07 UTC (rev 3946) @@ -281,7 +281,7 @@ for (Poll poll : polls) { permissions.add(createSubjectPermission(PermissionVerb.readPoll, poll)); - permissions.add(createSubjectPermission(PermissionVerb.readPoll, poll)); + permissions.add(createSubjectPermission(PermissionVerb.addVote, poll)); // add choices permissions