This is an automated email from the git hooks/post-receive script. New commit to branch feature/58-limitation-des-votants in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit a774bbd856377919c1326fd69e225f41d19ffc11 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Sep 26 11:21:41 2017 +0200 Limitations du nombre votants (ref #58), Déplacement des méthodes de transformation des entités en bean dans les services --- .../pollen/persistence/entity/VoteToChoices.java | 15 +- .../db/migration/h2/V3_1_0_1__add_premium.sql | 5 + .../migration/postgresql/V3_1_0_1__add_premium.sql | 5 + pollen-persistence/src/main/xmi/pollen.properties | 2 +- pollen-persistence/src/main/xmi/pollen.zargo | Bin 28355 -> 28471 bytes .../org/chorem/pollen/rest/api/AuthApiTest.java | 8 +- .../chorem/pollen/rest/api/PollenUserApiTest.java | 2 +- pollen-services/src/main/config/PollenServices.ini | 8 +- .../services/bean/ChildFavoriteListBean.java | 23 --- .../chorem/pollen/services/bean/ChoiceBean.java | 29 ---- .../chorem/pollen/services/bean/CommentBean.java | 44 ------ .../pollen/services/bean/FavoriteListBean.java | 20 --- .../services/bean/FavoriteListMemberBean.java | 24 ---- .../pollen/services/bean/LoginProviderBean.java | 23 --- .../org/chorem/pollen/services/bean/PollBean.java | 129 ++--------------- .../chorem/pollen/services/bean/PollenBean.java | 4 - .../chorem/pollen/services/bean/PollenBeans.java | 49 +------ .../pollen/services/bean/PollenUserBean.java | 63 +++----- .../chorem/pollen/services/bean/ReportBean.java | 21 --- .../pollen/services/bean/ResourceFileBean.java | 31 ---- .../pollen/services/bean/ResourceMetaBean.java | 26 ---- .../pollen/services/bean/ResourceStreamBean.java | 36 ----- .../pollen/services/bean/UserCredentialBean.java | 21 +-- .../org/chorem/pollen/services/bean/VoteBean.java | 72 +--------- .../pollen/services/bean/VoteToChoiceBean.java | 24 ---- .../chorem/pollen/services/bean/VoterListBean.java | 24 ---- .../pollen/services/bean/VoterListMemberBean.java | 34 ----- .../bean/export/ChildFavoriteListExport.java | 16 --- .../pollen/services/service/ChoiceService.java | 56 +++++--- .../pollen/services/service/CommentService.java | 45 ++++-- .../services/service/FavoriteListService.java | 73 +++++++--- .../pollen/services/service/FeedbackService.java | 3 +- .../pollen/services/service/FixturesService.java | 14 +- .../chorem/pollen/services/service/GtuService.java | 50 ++++--- .../pollen/services/service/PollService.java | 158 +++++++++++++++------ .../services/service/PollenResourceService.java | 35 ++++- .../services/service/PollenServiceSupport.java | 43 +----- .../pollen/services/service/PollenUserService.java | 116 ++++++++------- .../pollen/services/service/ReportService.java | 30 +++- .../pollen/services/service/SocialAuthService.java | 17 ++- .../services/service/VoteCountingService.java | 13 +- .../pollen/services/service/VoteService.java | 80 ++++++++--- .../pollen/services/service/VoterListService.java | 72 +++++----- .../i18n/pollen-services_en_GB.properties | 1 + .../i18n/pollen-services_fr_FR.properties | 1 + .../services/service/PollenUserServiceTest.java | 8 +- pollen-ui-riot-js/src/main/web/i18n/en.json | 4 + pollen-ui-riot-js/src/main/web/i18n/fr.json | 4 + .../src/main/web/tag/admin/UserCard.tag.html | 16 +++ .../src/main/web/tag/admin/UserEditModal.tag.html | 19 +++ .../src/main/web/tag/components/InnerHtml.tag.html | 14 ++ .../main/web/tag/components/date-picker.tag.html | 13 +- .../src/main/web/tag/poll/Poll.tag.html | 7 + 53 files changed, 678 insertions(+), 972 deletions(-) diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoteToChoices.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoteToChoices.java index f4a8498a..19720752 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoteToChoices.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoteToChoices.java @@ -21,9 +21,7 @@ package org.chorem.pollen.persistence.entity; * #L% */ -import java.io.Serializable; import java.util.Comparator; -import java.util.List; /** * Created on 5/16/14. @@ -33,18 +31,7 @@ import java.util.List; */ public class VoteToChoices { - public static void sortByChoiceOrder(List<VoteToChoice> voteToChoices) { - voteToChoices.sort(new VoteToChoiceComparator()); - } + public static Comparator<VoteToChoice> VOTE_TO_CHOICE_COMPARATOR = Comparator.comparingInt(v -> v.getChoice().getChoiceOrder()); - protected static class VoteToChoiceComparator implements Comparator<VoteToChoice>, Serializable { - - private static final long serialVersionUID = 1L; - - @Override - public int compare(VoteToChoice o1, VoteToChoice o2) { - return o1.getChoice().getChoiceOrder() - o2.getChoice().getChoiceOrder(); - } - } } diff --git a/pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_1__add_premium.sql b/pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_1__add_premium.sql new file mode 100644 index 00000000..dc4a1849 --- /dev/null +++ b/pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_1__add_premium.sql @@ -0,0 +1,5 @@ +-- add premium in poll and user +alter table poll add premium boolean; +update poll set premium = false; + +alter table pollenUser add premiumTo TIMESTAMP; diff --git a/pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_1__add_premium.sql b/pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_1__add_premium.sql new file mode 100644 index 00000000..dc4a1849 --- /dev/null +++ b/pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_1__add_premium.sql @@ -0,0 +1,5 @@ +-- add premium in poll and user +alter table poll add premium boolean; +update poll set premium = false; + +alter table pollenUser add premiumTo TIMESTAMP; diff --git a/pollen-persistence/src/main/xmi/pollen.properties b/pollen-persistence/src/main/xmi/pollen.properties index 926a53e6..d941b130 100644 --- a/pollen-persistence/src/main/xmi/pollen.properties +++ b/pollen-persistence/src/main/xmi/pollen.properties @@ -18,7 +18,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # #L% ###m -model.tagvalue.version=3.0.0.10 +model.tagvalue.version=3.1.0.1 #model.tagValue.notGenerateToString=true #model.tagValue.constantPrefix=PROPERTY_ #model.tagValue.useEnumerationName=true diff --git a/pollen-persistence/src/main/xmi/pollen.zargo b/pollen-persistence/src/main/xmi/pollen.zargo index 0da955ef..004634d3 100644 Binary files a/pollen-persistence/src/main/xmi/pollen.zargo and b/pollen-persistence/src/main/xmi/pollen.zargo differ diff --git a/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/AuthApiTest.java b/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/AuthApiTest.java index e3271e23..65f71e93 100644 --- a/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/AuthApiTest.java +++ b/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/AuthApiTest.java @@ -47,7 +47,7 @@ public class AuthApiTest extends AbstractPollenRestApiTest { URI uri = createRequest(RestApiFixtures.login()) - .addParameter("login", "admin@pollen.org") + .addParameter("login", "admin@chorem.org") .addParameter("password", "admin") .build(); @@ -63,7 +63,7 @@ public class AuthApiTest extends AbstractPollenRestApiTest { public void loginThenLogout() throws URISyntaxException, IOException { URI uri = createRequest(RestApiFixtures.login()) - .addParameter("login", "admin@pollen.org") + .addParameter("login", "admin@chorem.org") .addParameter("password", "admin") .build(); @@ -89,7 +89,7 @@ public class AuthApiTest extends AbstractPollenRestApiTest { public void badLogin() throws URISyntaxException, IOException { URI uri = createRequest(RestApiFixtures.login()) - .addParameter("login", "admin@pollen.org" + System.nanoTime()) + .addParameter("login", "admin@chorem.org" + System.nanoTime()) .addParameter("password", "admin" + System.nanoTime()) .build(); @@ -105,7 +105,7 @@ public class AuthApiTest extends AbstractPollenRestApiTest { public void badPassword() throws URISyntaxException, IOException { URI uri = createRequest(RestApiFixtures.login()) - .addParameter("login", "admin@pollen.org") + .addParameter("login", "admin@chorem.org") .addParameter("password", "admin" + System.nanoTime()) .build(); diff --git a/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/PollenUserApiTest.java b/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/PollenUserApiTest.java index 7bd1d92e..95b2e8d5 100644 --- a/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/PollenUserApiTest.java +++ b/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/PollenUserApiTest.java @@ -141,7 +141,7 @@ public class PollenUserApiTest extends AbstractPollenRestApiTest { private String login() throws URISyntaxException, IOException { URI uri = createRequest(RestApiFixtures.login()) - .addParameter("login", "admin@pollen.org") + .addParameter("login", "admin@chorem.org") .addParameter("password", "admin") .build(); Request request = Request.Post(uri); diff --git a/pollen-services/src/main/config/PollenServices.ini b/pollen-services/src/main/config/PollenServices.ini index f6a42182..0dee8b98 100644 --- a/pollen-services/src/main/config/PollenServices.ini +++ b/pollen-services/src/main/config/PollenServices.ini @@ -205,4 +205,10 @@ type = String description = pollen.configuration.feedback.locale key = pollen.feedback.locale type = String -defaultValue = en \ No newline at end of file +defaultValue = en + +[option maxVoters] +description = pollen.configuration.maxVoters +key = pollen.default.maxVoters +type = int +defaultValue = 0 \ No newline at end of file diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChildFavoriteListBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChildFavoriteListBean.java index 83c79b9e..a122fc85 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChildFavoriteListBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChildFavoriteListBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.ChildFavoriteList; -import org.chorem.pollen.persistence.entity.ChildFavoriteListImpl; /** * @author Sylvain Bavencoff - bavencoff@codelutin.com @@ -37,28 +36,6 @@ public class ChildFavoriteListBean extends PollenBean<ChildFavoriteList> { super(ChildFavoriteList.class); } - @Override - public void fromEntity(ChildFavoriteList entity) { - - setEntityId(entity.getTopiaId()); - FavoriteListBean child = new FavoriteListBean(); - child.fromEntity(entity.getChild()); - setChild(child); - setWeight(entity.getWeight()); - - - } - - @Override - public ChildFavoriteList toEntity() { - - ChildFavoriteList entity = new ChildFavoriteListImpl(); - entity.setWeight(getWeight()); - - return entity; - - } - public FavoriteListBean getChild() { return child; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChoiceBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChoiceBean.java index 7f8d42e5..40df2410 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChoiceBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChoiceBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.Choice; -import org.chorem.pollen.persistence.entity.ChoiceImpl; import org.chorem.pollen.persistence.entity.ChoiceType; /** @@ -51,34 +50,6 @@ public class ChoiceBean extends PollenBean<Choice> { super(Choice.class); } - @Override - public void fromEntity(Choice entity) { - setEntityId(entity.getTopiaId()); - if (entity.getCreator() == null || entity.getCreator().getPermission() == null) { - setPermission(null); - } else { - setPermission(entity.getCreator().getPermission().getToken()); - } - setChoiceValue(entity.getChoiceValue()); - setDescription(entity.getDescription()); - setChoiceType(entity.getChoiceType()); - setChoiceOrder(entity.getChoiceOrder()); - - } - - @Override - public Choice toEntity() { - Choice entity = new ChoiceImpl(); - entity.setTopiaId(getEntityId()); - entity.setChoiceValue(getChoiceValue()); - entity.setDescription(getDescription()); - entity.setChoiceType(getChoiceType()); - entity.setChoiceOrder(getChoiceOrder()); - - return entity; - - } - public String getPermission() { return permission; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/CommentBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/CommentBean.java index e4d235da..17b88b86 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/CommentBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/CommentBean.java @@ -22,8 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.Comment; -import org.chorem.pollen.persistence.entity.CommentImpl; -import org.chorem.pollen.persistence.entity.PollenPrincipalImpl; import java.util.Date; @@ -49,48 +47,6 @@ public class CommentBean extends PollenBean<Comment> { super(Comment.class); } - @Override - public void fromEntity(Comment entity) { - - setEntityId(entity.getTopiaId()); - - if (entity.getAuthor() == null || entity.getAuthor().getPermission() == null) { - - setPermission(null); - - } else { - - setPermission(entity.getAuthor().getPermission().getToken()); - - } - - setText(entity.getText()); - setPostDate(entity.getPostDate()); - - if (entity.getAuthor() != null) { - - setAuthorName(entity.getAuthor().getName()); - - } - - } - - @Override - public Comment toEntity() { - - Comment entity = new CommentImpl(); - - entity.setTopiaId(getEntityId()); - entity.setText(getText()); - entity.setPostDate(getPostDate()); - PollenPrincipalImpl author = new PollenPrincipalImpl(); - entity.setAuthor(author); - author.setName(getAuthorName()); - - return entity; - - } - public String getPermission() { return permission; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListBean.java index 200ee182..13398e26 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.FavoriteList; -import org.chorem.pollen.persistence.entity.FavoriteListImpl; /** * Created on 5/15/14. @@ -42,25 +41,6 @@ public class FavoriteListBean extends PollenBean<FavoriteList> { super(FavoriteList.class); } - @Override - public void fromEntity(FavoriteList entity) { - - setEntityId(entity.getTopiaId()); - setName(entity.getName()); - - } - - @Override - public FavoriteList toEntity() { - - FavoriteList entity = new FavoriteListImpl(); - entity.setTopiaId(getEntityId()); - entity.setName(getName()); - - return entity; - - } - public String getName() { return name; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListMemberBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListMemberBean.java index 1af9bcb0..bce83bc4 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListMemberBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListMemberBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.FavoriteListMember; -import org.chorem.pollen.persistence.entity.FavoriteListMemberImpl; /** * Created on 5/15/14. @@ -42,29 +41,6 @@ public class FavoriteListMemberBean extends PollenBean<FavoriteListMember> { super(FavoriteListMember.class); } - @Override - public void fromEntity(FavoriteListMember entity) { - - setEntityId(entity.getTopiaId()); - setName(entity.getName()); - setEmail(entity.getEmail()); - setWeight(entity.getWeight()); - - } - - @Override - public FavoriteListMember toEntity() { - - FavoriteListMember entity = new FavoriteListMemberImpl(); - entity.setEmail(getEmail()); - entity.setName(getName()); - entity.setWeight(getWeight()); - - return entity; - - } - - public String getName() { return name; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/LoginProviderBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/LoginProviderBean.java index c847df07..7d6725de 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/LoginProviderBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/LoginProviderBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.LoginProvider; -import org.chorem.pollen.persistence.entity.LoginProviderImpl; /** * @author Kevin Morin (Code Lutin) @@ -39,28 +38,6 @@ public class LoginProviderBean extends PollenBean<LoginProvider> { super(LoginProvider.class); } - @Override - public void fromEntity(LoginProvider entity) { - setEntityId(entity.getTopiaId()); - setName(entity.getName()); - setKey(entity.getKey()); - setSecret(entity.getSecret()); - setPermissions(entity.getPermissions()); - setActive(entity.isActive()); - } - - @Override - public LoginProvider toEntity() { - LoginProvider entity = new LoginProviderImpl(); - entity.setTopiaId(getEntityId()); - entity.setName(getName()); - entity.setKey(getKey()); - entity.setSecret(getSecret()); - entity.setPermissions(getPermissions()); - entity.setActive(isActive()); - return entity; - } - public String getName() { return name; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollBean.java index c382bafa..f7f0c2e7 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollBean.java @@ -21,23 +21,15 @@ package org.chorem.pollen.services.bean; * #L% */ -import com.google.common.base.Joiner; import org.apache.commons.collections4.CollectionUtils; import org.chorem.pollen.persistence.entity.ChoiceType; import org.chorem.pollen.persistence.entity.CommentVisibility; import org.chorem.pollen.persistence.entity.Poll; -import org.chorem.pollen.persistence.entity.PollImpl; import org.chorem.pollen.persistence.entity.PollType; -import org.chorem.pollen.persistence.entity.PollenPrincipal; -import org.chorem.pollen.persistence.entity.PollenPrincipalImpl; -import org.chorem.pollen.persistence.entity.Polls; import org.chorem.pollen.persistence.entity.ResultVisibility; import org.chorem.pollen.persistence.entity.VoteVisibility; -import java.util.Arrays; -import java.util.Collections; import java.util.Date; -import java.util.LinkedHashSet; import java.util.Objects; import java.util.Set; @@ -146,118 +138,7 @@ public class PollBean extends PollenBean<Poll> { protected boolean gtuValidated; - @Override - public void fromEntity(Poll entity) { - - setEntityId(entity.getTopiaId()); - - if (entity.getCreator() == null || entity.getCreator().getPermission() == null) { - - setPermission(null); - - } else { - - setPermission(entity.getCreator().getPermission().getToken()); - - } - - if (entity.getCreator() != null) { - - setCreatorName(entity.getCreator().getName()); - setCreatorEmail(entity.getCreator().getEmail()); - - } - - setTitle(entity.getTitle()); - setDescription(entity.getDescription()); - setCreateDate(entity.getTopiaCreateDate()); - setBeginChoiceDate(entity.getBeginChoiceDate()); - setEndChoiceDate(entity.getEndChoiceDate()); - setBeginDate(entity.getBeginDate()); - setEndDate(entity.getEndDate()); - setMaxChoiceNumber(entity.getMaxChoiceNumber()); - setChoiceAddAllowed(entity.isChoiceAddAllowed()); - setAnonymousVoteAllowed(entity.isAnonymousVoteAllowed()); - setContinuousResults(entity.isContinuousResults()); - setVoteCountingType(entity.getVoteCountingType()); - setPollType(entity.getPollType()); - setVoteVisibility(entity.getVoteVisibility()); - setCommentVisibility(entity.getCommentVisibility()); - setResultVisibility(entity.getResultVisibility()); - setParticipants(new LinkedHashSet<>(entity.getParticipants() == null ? Collections.emptyList() : Arrays.asList(entity.getParticipants().split("\\s")))); - setWithMe(entity.isWithMe()); - setChoiceType(entity.getChoiceType()); - setNotifyMeHoursBeforePollEnds(entity.getNotifyMeHoursBeforePollEnds()); - setVoteNotification(entity.isVoteNotification()); - setCommentNotification(entity.isCommentNotification()); - setNewChoiceNotification(entity.isNewChoiceNotification()); - setNotificationLocale(entity.getNotificationLocale()); - - Date now = new Date(); - if (Polls.isFinished(entity, now)) { - setStatus(PollStatus.CLOSED); - setClosed(true); - } else { - setClosed(false); - setStatus(PollStatus.CREATED); - - if (entity.isChoiceAddAllowed()) { - Date beginChoiceDate = entity.getBeginChoiceDate(); - Date endChoiceDate = entity.getEndChoiceDate(); - if ((beginChoiceDate == null || now.after(beginChoiceDate)) - && (endChoiceDate == null || now.before(endChoiceDate))) { - setStatus(PollStatus.ADDING_CHOICES); - } - } - - if (PollStatus.ADDING_CHOICES != getStatus()) { - Date beginDate = entity.getBeginDate(); - Date endDate = entity.getEndDate(); - if (beginDate != null && now.after(beginDate) && (endDate == null || now.before(endDate))) { - setStatus(PollStatus.VOTING); - } - } - } - } - - @Override - public Poll toEntity() { - - Poll entity = new PollImpl(); - entity.setTopiaId(getEntityId()); - PollenPrincipal creator = new PollenPrincipalImpl(); - creator.setName(getCreatorName()); - creator.setEmail(getCreatorEmail()); - entity.setCreator(creator); - - entity.setTitle(getTitle()); - entity.setDescription(getDescription()); - entity.setTitle(getTitle()); - entity.setDescription(getDescription()); - entity.setBeginChoiceDate(getBeginChoiceDate()); - entity.setEndChoiceDate(getEndChoiceDate()); - entity.setBeginDate(getBeginDate()); - entity.setEndDate(getEndDate()); - entity.setMaxChoiceNumber(getMaxChoiceNumber()); - entity.setChoiceAddAllowed(isChoiceAddAllowed()); - entity.setAnonymousVoteAllowed(isAnonymousVoteAllowed()); - entity.setContinuousResults(isContinuousResults()); - entity.setVoteCountingType(getVoteCountingType()); - entity.setPollType(getPollType()); - entity.setVoteVisibility(getVoteVisibility()); - entity.setCommentVisibility(getCommentVisibility()); - entity.setResultVisibility(getResultVisibility()); - entity.setParticipants(Joiner.on(' ').join(getParticipants())); - entity.setChoiceType(getChoiceType()); - entity.setWithMe(isWithMe()); - entity.setNotifyMeHoursBeforePollEnds(getNotifyMeHoursBeforePollEnds()); - entity.setVoteNotification(isVoteNotification()); - entity.setCommentNotification(isCommentNotification()); - entity.setNewChoiceNotification(isNewChoiceNotification()); - entity.setNotificationLocale(getNotificationLocale()); - return entity; - - } + protected int maxVoters; public String getPermission() { return permission; @@ -573,4 +454,12 @@ public class PollBean extends PollenBean<Poll> { public void setGtuValidated(boolean gtuValidated) { this.gtuValidated = gtuValidated; } + + public int getMaxVoters() { + return maxVoters; + } + + public void setMaxVoters(int maxVoters) { + this.maxVoters = maxVoters; + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBean.java index 9a2fe4ed..32bbd3f6 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBean.java @@ -76,10 +76,6 @@ public abstract class PollenBean<E extends TopiaEntity> { this.id.setEntityId(id); } - public abstract void fromEntity(E entity); - - public abstract E toEntity(); - @Override public boolean equals(Object o) { return this == o || o instanceof PollenBean && Objects.equals(id, ((PollenBean) o).id); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBeans.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBeans.java index 03211c99..1d245206 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBeans.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBeans.java @@ -24,12 +24,10 @@ package org.chorem.pollen.services.bean; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import org.apache.commons.collections4.CollectionUtils; -import org.chorem.pollen.services.PollenTechnicalException; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.pagination.PaginationOrder; import org.nuiton.util.pagination.PaginationResult; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.function.Function; @@ -42,30 +40,9 @@ import java.util.function.Function; */ public class PollenBeans { - public static <E extends TopiaEntity, B extends PollenBean<E>> B toBean(Class<B> beanType, E entity, Function<B, B> beanFunction) { + public static <E extends TopiaEntity, B extends PollenBean<E>> PaginationResultBean<B> toBean(PaginationResult<E> entities, Function<E, B> beanFunction) { - try { - - B bean = beanType.newInstance(); - bean.fromEntity(entity); - - if (beanFunction != null) { - - bean = beanFunction.apply(bean); - - } - - return bean; - - } catch (InstantiationException | IllegalAccessException e) { - throw new PollenTechnicalException("Could not instanciate bean", e); - } - - } - - public static <E extends TopiaEntity, B extends PollenBean<E>> PaginationResultBean<B> toBean(Class<B> beanType, PaginationResult<E> entities, Function<B, B> beanFunction) { - - ImmutableList<B> bs = toBeanList(beanType, entities.getElements(), beanFunction); + ImmutableList<B> bs = toBeanList(entities.getElements(), beanFunction); PaginationResultBean<B> result = new PaginationResultBean<>(); result.setElements(bs); @@ -88,29 +65,15 @@ public class PollenBeans { } - public static <E extends TopiaEntity, B extends PollenBean<E>> ImmutableSet<B> toBeanSet(Class<B> beanType, Collection<E> entities, Function<B, B> beanFunction) { - - Collection<B> copy = new ArrayList<>(); - - for (E entity : entities) { - B bean = toBean(beanType, entity, beanFunction); - copy.add(bean); - } + public static <E extends TopiaEntity, B extends PollenBean<E>> ImmutableSet<B> toBeanSet(Collection<E> entities, Function<E, B> beanFunction) { - return ImmutableSet.copyOf(copy); + return entities.stream().map(beanFunction).collect(ImmutableSet.toImmutableSet()); } - public static <E extends TopiaEntity, B extends PollenBean<E>> ImmutableList<B> toBeanList(Class<B> beanType, Collection<E> entities, Function<B, B> beanFunction) { - - Collection<B> copy = new ArrayList<>(); - - for (E entity : entities) { - B bean = toBean(beanType, entity, beanFunction); - copy.add(bean); - } + public static <E extends TopiaEntity, B extends PollenBean<E>> ImmutableList<B> toBeanList(Collection<E> entities, Function<E, B> beanFunction) { - return ImmutableList.copyOf(copy); + return entities.stream().map(beanFunction).collect(ImmutableList.toImmutableList()); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenUserBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenUserBean.java index d1d1ccb5..a070b2d1 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenUserBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenUserBean.java @@ -22,11 +22,10 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.PollenUser; -import org.chorem.pollen.persistence.entity.PollenUserImpl; import java.util.ArrayList; +import java.util.Date; import java.util.List; -import java.util.stream.Collectors; /** * Created on 5/15/14. @@ -56,48 +55,12 @@ public class PollenUserBean extends PollenBean<PollenUser> { protected boolean gtuValidated; - public PollenUserBean() { - super(PollenUser.class); - } - - @Override - public void fromEntity(PollenUser entity) { - - setEntityId(entity.getTopiaId()); - - setName(entity.getName()); - setAdministrator(entity.isAdministrator()); - setBanned(entity.isBanned()); - setLanguage(entity.getLanguage()); - setEmail(entity.getEmail()); - setPassword(entity.getPassword()); - setEmailIsValidate(entity.getEmailActivationToken() == null); - setWithPassword(entity.getPassword() != null); - if (entity.getUserCredential() != null) { - setCredentials(entity.getUserCredential().stream() - .map(userCredential -> { - UserCredentialBean userCredentialBean = new UserCredentialBean(); - userCredentialBean.fromEntity(userCredential); - return userCredentialBean; - }) - .collect(Collectors.toList())); - } - } - - @Override - public PollenUser toEntity() { - - PollenUser entity = new PollenUserImpl(); - - entity.setTopiaId(getEntityId()); - entity.setName(getName()); - entity.setAdministrator(isAdministrator()); - entity.setLanguage(getLanguage()); - entity.setEmail(getEmail()); - entity.setPassword(getPassword()); + protected Date premiumTo; - return entity; + protected boolean premium; + public PollenUserBean() { + super(PollenUser.class); } public String getName() { @@ -179,4 +142,20 @@ public class PollenUserBean extends PollenBean<PollenUser> { public void setGtuValidated(boolean gtuValidated) { this.gtuValidated = gtuValidated; } + + public Date getPremiumTo() { + return premiumTo; + } + + public void setPremiumTo(Date premiumTo) { + this.premiumTo = premiumTo; + } + + public boolean isPremium() { + return premium; + } + + public void setPremium(boolean premium) { + this.premium = premium; + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ReportBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ReportBean.java index c7470363..6d44ca0a 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ReportBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ReportBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.Report; -import org.chorem.pollen.persistence.entity.ReportImpl; /** * @author Sylvain Bavencoff - bavencoff@codelutin.com @@ -63,24 +62,4 @@ public class ReportBean extends PollenBean<Report> { this.ignore = ignore; } - @Override - public void fromEntity(Report entity) { - setEntityId(entity.getTopiaId()); - - setLevel(ReportLevel.of(entity.getLevel())); - setEmail(entity.getEmail()); - setIgnore(entity.isIgnore()); - } - - @Override - public Report toEntity() { - Report entity = new ReportImpl(); - - entity.setTopiaId(getEntityId()); - entity.setLevel(getLevel().getScore()); - entity.setEmail(getEmail()); - entity.setIgnore(isIgnore()); - - return entity; - } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceFileBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceFileBean.java index 526d9fa2..61ae8b07 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceFileBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceFileBean.java @@ -23,7 +23,6 @@ package org.chorem.pollen.services.bean; import org.apache.commons.io.IOUtils; import org.chorem.pollen.persistence.entity.PollenResource; -import org.chorem.pollen.persistence.entity.PollenResourceImpl; import org.chorem.pollen.persistence.entity.ResourceType; import javax.sql.rowset.serial.SerialBlob; @@ -57,36 +56,6 @@ public class ResourceFileBean extends PollenBean<PollenResource> { super(PollenResource.class); } - @Override - public void fromEntity(PollenResource entity) { - setEntityId(entity.getTopiaId()); - - setName(entity.getName()); - setSize(entity.getSize()); - setContentType(entity.getContentType()); - setResourceType(entity.getResourceType()); - } - - @Override - public PollenResource toEntity() { - PollenResource entity = new PollenResourceImpl(); - - entity.setTopiaId(getEntityId()); - - try { - entity.setResourceContent(getResourceBlob()); - } catch (IOException | SQLException e) { - e.printStackTrace(); - } - - entity.setName(getName()); - entity.setSize(getSize()); - entity.setContentType(getContentType()); - entity.setResourceType(getResourceType()); - - return entity; - } - public File getFile() { return file; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceMetaBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceMetaBean.java index eea72c85..7c6c0d9e 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceMetaBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceMetaBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.PollenResource; -import org.chorem.pollen.persistence.entity.PollenResourceImpl; import org.chorem.pollen.persistence.entity.ResourceType; import java.util.Date; @@ -48,31 +47,6 @@ public class ResourceMetaBean extends PollenBean<PollenResource> { super(PollenResource.class); } - @Override - public void fromEntity(PollenResource entity) { - setEntityId(entity.getTopiaId()); - - setName(entity.getName()); - setSize(entity.getSize()); - setContentType(entity.getContentType()); - setResourceType(entity.getResourceType()); - setUploadDate(entity.getTopiaCreateDate()); - } - - @Override - public PollenResource toEntity() { - PollenResource entity = new PollenResourceImpl(); - - entity.setTopiaId(getEntityId()); - - entity.setName(getName()); - entity.setSize(getSize()); - entity.setContentType(getContentType()); - entity.setResourceType(getResourceType()); - - return entity; - } - public String getName() { return name; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceStreamBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceStreamBean.java index 75cd147c..c2a4088d 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceStreamBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceStreamBean.java @@ -23,7 +23,6 @@ package org.chorem.pollen.services.bean; import org.apache.commons.io.IOUtils; import org.chorem.pollen.persistence.entity.PollenResource; -import org.chorem.pollen.persistence.entity.PollenResourceImpl; import javax.sql.rowset.serial.SerialBlob; import java.io.IOException; @@ -50,41 +49,6 @@ public class ResourceStreamBean extends PollenBean<PollenResource> { super(PollenResource.class); } - @Override - public void fromEntity(PollenResource entity) { - setEntityId(entity.getTopiaId()); - - try { - setResourceContent(entity.getResourceContent().getBinaryStream()); - } catch (SQLException e) { - e.printStackTrace(); - } - - setName(entity.getName()); - setSize(entity.getSize()); - setContentType(entity.getContentType()); - } - - @Override - public PollenResource toEntity() { - PollenResource entity = new PollenResourceImpl(); - - entity.setTopiaId(getEntityId()); - - try { - entity.setResourceContent(getResourceBlob()); - } catch (IOException | SQLException e) { - e.printStackTrace(); - } - - entity.setName(getName()); - entity.setSize(getSize()); - entity.setContentType(getContentType()); - - - return entity; - } - public InputStream getResourceContent() { return resourceContent; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/UserCredentialBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/UserCredentialBean.java index fb52615b..0bf393b7 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/UserCredentialBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/UserCredentialBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.UserCredential; -import org.chorem.pollen.persistence.entity.UserCredentialImpl; /** * @author Kevin Morin (Code Lutin) @@ -33,28 +32,10 @@ public class UserCredentialBean extends PollenBean<UserCredential> { protected String userName; protected String emailAddress; - protected UserCredentialBean() { + public UserCredentialBean() { super(UserCredential.class); } - @Override - public void fromEntity(UserCredential entity) { - setEntityId(entity.getTopiaId()); - setProvider(entity.getProvider()); - setUserName(entity.getUserName()); - setEmailAddress(entity.getEmail()); - } - - @Override - public UserCredential toEntity() { - UserCredential entity = new UserCredentialImpl(); - entity.setTopiaId(getEntityId()); - entity.setProvider(getProvider()); - entity.setUserName(getUserName()); - entity.setEmail(getEmailAddress()); - return entity; - } - public String getProvider() { return provider; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java index 58fd29d8..cf2ead11 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java @@ -23,17 +23,11 @@ package org.chorem.pollen.services.bean; import com.google.common.collect.Sets; 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; -import org.chorem.pollen.persistence.entity.VoteToChoices; import org.chorem.pollen.persistence.entity.VoterListMember; -import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashSet; -import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -61,74 +55,12 @@ public class VoteBean extends PollenBean<Vote> { private ReportResumeBean report; + protected boolean ignored; + public VoteBean() { super(Vote.class); } - @Override - public void fromEntity(Vote vote) { - - setEntityId(vote.getTopiaId()); - - if (vote.getVoter() == null || vote.getVoter().getPermission() == null) { - - setPermission(null); - - } else { - - setPermission(vote.getVoter().getPermission().getToken()); - - } - - setAnonymous(vote.isAnonymous()); - getVoterId().setEntityId(vote.getVoter().getTopiaId()); - setVoterName(vote.getVoter().getName()); - setWeight(vote.getWeight()); - - List<VoteToChoice> voteToChoices = new ArrayList<>(vote.getVoteToChoice()); - VoteToChoices.sortByChoiceOrder(voteToChoices); - - for (VoteToChoice voteToChoice : voteToChoices) { - - VoteToChoiceBean choiceBean = new VoteToChoiceBean(); - choiceBean.fromEntity(voteToChoice); - addChoice(choiceBean); - - } - - if (vote.getVoterListMember() != null) { - - setVoterListMembers(vote.getVoterListMember()); - - } - - } - - @Override - public Vote toEntity() { - - Vote entity = new VoteImpl(); - - entity.setTopiaId(getEntityId()); - entity.setAnonymous(getAnonymous() != null && getAnonymous()); - entity.setWeight(getWeight()); - - PollenPrincipal voter = new PollenPrincipalImpl(); - entity.setVoter(voter); - voter.setTopiaId(getVoterId().getEntityId()); - voter.setName(getVoterName()); - - for (VoteToChoiceBean choiceBean : choice) { - - VoteToChoice voteToChoice = choiceBean.toEntity(); - entity.addVoteToChoice(voteToChoice); - - } - - return entity; - - } - public String getVoterName() { return voterName; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteToChoiceBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteToChoiceBean.java index 031a5705..4f3df80f 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteToChoiceBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteToChoiceBean.java @@ -22,9 +22,7 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.Choice; -import org.chorem.pollen.persistence.entity.ChoiceImpl; import org.chorem.pollen.persistence.entity.VoteToChoice; -import org.chorem.pollen.persistence.entity.VoteToChoiceImpl; /** * Created on 5/15/14. @@ -42,28 +40,6 @@ public class VoteToChoiceBean extends PollenBean<VoteToChoice> { super(VoteToChoice.class); } - @Override - public void fromEntity(VoteToChoice entity) { - - setEntityId(entity.getTopiaId()); - setVoteValue(entity.getVoteValue()); - getChoiceId().setEntityId(entity.getChoice().getTopiaId()); - - } - - @Override - public VoteToChoice toEntity() { - - VoteToChoice entity = new VoteToChoiceImpl(); - entity.setTopiaId(getEntityId()); - entity.setVoteValue(getVoteValue()); - entity.setChoice(new ChoiceImpl()); - entity.getChoice().setTopiaId(getChoiceId().getEntityId()); - - return entity; - - } - public PollenEntityId<Choice> getChoiceId() { if (choiceId == null) { choiceId = PollenEntityId.newId(Choice.class); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java index 2eec3235..7d76b4f8 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.VoterList; -import org.chorem.pollen.persistence.entity.VoterListImpl; /** * Created on 5/15/14. @@ -46,29 +45,6 @@ public class VoterListBean extends PollenBean<VoterList> { super(VoterList.class); } - @Override - public void fromEntity(VoterList entity) { - - setEntityId(entity.getTopiaId()); - setName(entity.getName()); - setWeight(entity.getWeight()); - if (entity.getParent() != null) { - getParentId().setEntityId(entity.getParent().getTopiaId()); - } - } - - @Override - public VoterList toEntity() { - - VoterList entity = new VoterListImpl(); - entity.setTopiaId(getEntityId()); - entity.setName(getName()); - entity.setWeight(getWeight()); - - return entity; - - } - public String getName() { return name; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListMemberBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListMemberBean.java index 09825fd6..929f3a16 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListMemberBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListMemberBean.java @@ -21,11 +21,8 @@ package org.chorem.pollen.services.bean; * #L% */ -import org.chorem.pollen.persistence.entity.PollenPrincipal; -import org.chorem.pollen.persistence.entity.PollenPrincipalImpl; import org.chorem.pollen.persistence.entity.VoterList; import org.chorem.pollen.persistence.entity.VoterListMember; -import org.chorem.pollen.persistence.entity.VoterListMemberImpl; /** * Created on 5/15/14. @@ -49,37 +46,6 @@ public class VoterListMemberBean extends PollenBean<VoterListMember> { super(VoterListMember.class); } - @Override - public void fromEntity(VoterListMember entity) { - - setEntityId(entity.getTopiaId()); - if (entity.getMember() != null) { - setName(entity.getMember().getName()); - setEmail(entity.getMember().getEmail()); - } - setWeight(entity.getWeight()); - getVoterListId().setEntityId(entity.getVoterList().getTopiaId()); - - } - - @Override - public VoterListMember toEntity() { - - VoterListMember entity = new VoterListMemberImpl(); - entity.setTopiaId(getEntityId()); - - PollenPrincipal member = new PollenPrincipalImpl(); - member.setEmail(getEmail()); - member.setName(getName()); - entity.setMember(member); - - entity.setWeight(getWeight()); - - return entity; - - } - - public String getName() { return name; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/export/ChildFavoriteListExport.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/export/ChildFavoriteListExport.java index 205e5d93..c7816a76 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/export/ChildFavoriteListExport.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/export/ChildFavoriteListExport.java @@ -24,8 +24,6 @@ package org.chorem.pollen.services.bean.export; import org.chorem.pollen.persistence.entity.ChildFavoriteList; import org.chorem.pollen.persistence.entity.ChildFavoriteListImpl; import org.chorem.pollen.persistence.entity.FavoriteList; -import org.chorem.pollen.services.bean.ChildFavoriteListBean; -import org.chorem.pollen.services.bean.FavoriteListBean; import java.util.List; @@ -75,18 +73,4 @@ public class ChildFavoriteListExport { return entity; } - - public ChildFavoriteListBean toBean(List<FavoriteList> existingFavoriteLists) { - ChildFavoriteListBean bean = new ChildFavoriteListBean(); - bean.setWeight(getWeight()); - FavoriteList childEntity = existingFavoriteLists.stream() - .filter(favoriteList -> getChild().equals(favoriteList.getName())) - .findFirst() - .orElse(null); - FavoriteListBean childBean = new FavoriteListBean(); - childBean.fromEntity(childEntity); - bean.setChild(childBean); - - return bean; - } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/ChoiceService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/ChoiceService.java index 333fd53e..ae12f859 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/ChoiceService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/ChoiceService.java @@ -24,6 +24,7 @@ package org.chorem.pollen.services.service; import com.google.common.collect.Sets; import org.apache.commons.collections4.CollectionUtils; import org.chorem.pollen.persistence.entity.Choice; +import org.chorem.pollen.persistence.entity.ChoiceImpl; import org.chorem.pollen.persistence.entity.ChoiceTopiaDao; import org.chorem.pollen.persistence.entity.ChoiceType; import org.chorem.pollen.persistence.entity.Poll; @@ -37,7 +38,6 @@ import org.chorem.pollen.services.service.security.PermissionVerb; import java.util.Calendar; import java.util.List; import java.util.Set; -import java.util.function.Function; import static org.nuiton.i18n.I18n.l; @@ -50,23 +50,49 @@ import static org.nuiton.i18n.I18n.l; public class ChoiceService extends PollenServiceSupport { - protected final Function<ChoiceBean, ChoiceBean> choiceBeanFunction = input -> { - if (isNotPermitted(PermissionVerb.editChoice, input.getEntityId())) { - input.setPermission(null); + public ChoiceBean toChoiceBean(Choice entity) { + ChoiceBean bean = new ChoiceBean(); + bean.setEntityId(entity.getTopiaId()); + + if (entity.getCreator() == null + || entity.getCreator().getPermission() == null + || isNotPermitted(PermissionVerb.editChoice, entity.getTopiaId())) { + bean.setPermission(null); } else { - ReportResumeBean report = getReportService().getReport(input.getEntityId()); - input.setReport(report); + bean.setPermission(entity.getCreator().getPermission().getToken()); } - if (input.getChoiceType() == ChoiceType.RESOURCE) { - input.setChoiceValue(getPollenResourceService().getReduceIdByTopiaId(input.getChoiceValue())); + if (bean.getChoiceType() == ChoiceType.RESOURCE) { + bean.setChoiceValue(getPollenResourceService().getReduceIdByTopiaId(entity.getChoiceValue())); + } else { + bean.setChoiceValue(entity.getChoiceValue()); + } + + bean.setDescription(entity.getDescription()); + bean.setChoiceType(entity.getChoiceType()); + bean.setChoiceOrder(entity.getChoiceOrder()); + + if (isPermitted(PermissionVerb.editChoice, entity.getTopiaId())) { + ReportResumeBean report = getReportService().getReport(entity.getTopiaId()); + bean.setReport(report); } - input.setChoiceIsDeletable(isPermitted(PermissionVerb.deleteChoice, input.getEntityId())); + bean.setChoiceIsDeletable(isPermitted(PermissionVerb.deleteChoice, entity.getTopiaId())); - return input; + return bean; }; + public Choice toChoice(ChoiceBean bean) { + Choice entity = new ChoiceImpl(); + entity.setTopiaId(bean.getEntityId()); + entity.setChoiceValue(bean.getChoiceValue()); + entity.setDescription(bean.getDescription()); + entity.setChoiceType(bean.getChoiceType()); + entity.setChoiceOrder(bean.getChoiceOrder()); + + return entity; + } + public List<ChoiceBean> getChoices(String pollId) { checkNotNull(pollId); @@ -75,7 +101,7 @@ public class ChoiceService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); List<Choice> choices = getChoiceDao().findAll(poll); - return toBeanList(ChoiceBean.class, choices, choiceBeanFunction); + return toBeanList(choices, this::toChoiceBean); } @@ -88,7 +114,7 @@ public class ChoiceService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); Choice choice = getChoice(poll, choiceId); - return toBean(ChoiceBean.class, choice, choiceBeanFunction); + return toChoiceBean(choice); } @@ -135,7 +161,7 @@ public class ChoiceService extends PollenServiceSupport { getNotificationService().onChoiceEdited(poll, result); - return toBean(ChoiceBean.class, result, choiceBeanFunction); + return toChoiceBean(result); } @@ -340,9 +366,7 @@ public class ChoiceService extends PollenServiceSupport { } - public long getChoiceCount(String pollId) { - checkNotNull(pollId); - Poll poll = getPollService().getPoll0(pollId); + public long getChoiceCount(Poll poll) { return getChoiceDao().forPollEquals(poll).count(); } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/CommentService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/CommentService.java index 34f6e8a4..d7dd28b3 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/CommentService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/CommentService.java @@ -35,8 +35,6 @@ import org.chorem.pollen.services.service.security.PermissionVerb; import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; -import java.util.function.Function; - import static org.nuiton.i18n.I18n.l; /** @@ -47,14 +45,39 @@ import static org.nuiton.i18n.I18n.l; */ public class CommentService extends PollenServiceSupport { - private final Function<CommentBean, CommentBean> commentFunction = input -> { - if (isNotPermitted(PermissionVerb.editComment, input.getEntityId())) { - input.setPermission(null); + protected CommentBean toCommentBean(Comment entity) { + + CommentBean bean = new CommentBean(); + bean.setEntityId(entity.getTopiaId()); + + if (entity.getAuthor() == null + || entity.getAuthor().getPermission() == null + || isNotPermitted(PermissionVerb.editComment, entity.getTopiaId())) { + + bean.setPermission(null); + } else { - ReportResumeBean report = getReportService().getReport(input.getEntityId()); - input.setReport(report); + + bean.setPermission(entity.getAuthor().getPermission().getToken()); + + } + + bean.setText(entity.getText()); + bean.setPostDate(entity.getPostDate()); + + if (entity.getAuthor() != null) { + + bean.setAuthorName(entity.getAuthor().getName()); + + } + + if (isPermitted(PermissionVerb.editComment, entity.getTopiaId())) { + + ReportResumeBean report = getReportService().getReport(entity.getTopiaId()); + bean.setReport(report); + } - return input; + return bean; }; public PaginationResultBean<CommentBean> getComments(String pollId, PaginationParameterBean paginationParameter) { @@ -67,7 +90,7 @@ public class CommentService extends PollenServiceSupport { PaginationResult<Comment> comments = getCommentDao().find(poll, page); - return toPaginationListBean(CommentBean.class, comments, commentFunction); + return toPaginationListBean(comments, this::toCommentBean); } @@ -114,7 +137,7 @@ public class CommentService extends PollenServiceSupport { Comment comment = getComment(poll, commentId); - return toBean(CommentBean.class, comment, commentFunction); + return toCommentBean(comment); } @@ -156,7 +179,7 @@ public class CommentService extends PollenServiceSupport { getNotificationService().onCommentEdited(poll, result); getFeedService().onCommentEdited(poll, result); - return toBean(CommentBean.class, result); + return toCommentBean(result); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/FavoriteListService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/FavoriteListService.java index 8b0666f9..3127617f 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/FavoriteListService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/FavoriteListService.java @@ -72,28 +72,48 @@ import static org.nuiton.i18n.I18n.l; */ public class FavoriteListService extends PollenServiceSupport { - public FavoriteListBean favoriteListBeanFunction(FavoriteListBean input) { + public FavoriteListBean toFavoriteListBean(FavoriteList entity) { + FavoriteListBean bean = new FavoriteListBean(); + + bean.setEntityId(entity.getTopiaId()); + bean.setName(entity.getName()); long countChildren = getChildFavoriteListDao() - .forProperties(ChildFavoriteList.PROPERTY_PARENT + "." + FavoriteList.PROPERTY_TOPIA_ID, input.getEntityId()) + .forParentEquals(entity) .count(); - input.setCountChildren(countChildren); + bean.setCountChildren(countChildren); long countMembers = getFavoriteListMemberDao() - .forProperties(FavoriteListMember.PROPERTY_FAVORITE_LIST + "." + FavoriteList.PROPERTY_TOPIA_ID, input.getEntityId()) + .forFavoriteListEquals(entity) .count(); - input.setCountMembers(countMembers); + bean.setCountMembers(countMembers); - return input; + return bean; } - public ChildFavoriteListBean childFavoriteListBeanFunction(ChildFavoriteListBean input) { - input.setChild(favoriteListBeanFunction(input.getChild())); + protected ChildFavoriteListBean toChildFavoriteListBean(ChildFavoriteList entity) { + + ChildFavoriteListBean bean = new ChildFavoriteListBean(); + + bean.setEntityId(entity.getTopiaId()); + bean.setChild(toFavoriteListBean(entity.getChild())); + bean.setWeight(entity.getWeight()); - return input; + return bean; + } + + protected FavoriteListMemberBean toFavoriteListMemberBean(FavoriteListMember entity) { + FavoriteListMemberBean bean = new FavoriteListMemberBean(); + + bean.setEntityId(entity.getTopiaId()); + bean.setName(entity.getName()); + bean.setEmail(entity.getEmail()); + bean.setWeight(entity.getWeight()); + + return bean; } public PaginationResultBean<FavoriteListBean> getFavoriteLists(PaginationParameterBean paginationParameter, String search) { @@ -110,7 +130,7 @@ public class FavoriteListService extends PollenServiceSupport { favoriteLists = getFavoriteListDao().forPollenUserEquals(user).findPage(page); } - return toPaginationListBean(FavoriteListBean.class, favoriteLists, this::favoriteListBeanFunction); + return toPaginationListBean(favoriteLists, this::toFavoriteListBean); } @@ -121,7 +141,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); - return toBean(FavoriteListBean.class, favoriteList, this::favoriteListBeanFunction); + return toFavoriteListBean(favoriteList); } @@ -164,7 +184,7 @@ public class FavoriteListService extends PollenServiceSupport { getNotificationService().onFavoriteListEdited(user, result); - return toBean(FavoriteListBean.class, result, this::favoriteListBeanFunction); + return toFavoriteListBean(result); } @@ -230,7 +250,7 @@ public class FavoriteListService extends PollenServiceSupport { } - return toPaginationListBean(FavoriteListMemberBean.class, members); + return toPaginationListBean(members, this::toFavoriteListMemberBean); } @@ -243,7 +263,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); FavoriteListMember member = getFavoriteListMember0(favoriteList, memberId); - return toBean(FavoriteListMemberBean.class, member); + return toFavoriteListMemberBean(member); } @@ -289,7 +309,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteListMember result = saveFavoriteListMember(favoriteList, member); commit(); - return toBean(FavoriteListMemberBean.class, result); + return toFavoriteListMemberBean(result); } @@ -658,7 +678,7 @@ public class FavoriteListService extends PollenServiceSupport { } - return toPaginationListBean(ChildFavoriteListBean.class, children, this::childFavoriteListBeanFunction); + return toPaginationListBean(children, this::toChildFavoriteListBean); } @@ -671,7 +691,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); ChildFavoriteList child = getChildList0(favoriteList, childListId); - return toBean(ChildFavoriteListBean.class, child, this::childFavoriteListBeanFunction); + return toChildFavoriteListBean(child); } @@ -713,7 +733,7 @@ public class FavoriteListService extends PollenServiceSupport { ChildFavoriteList result = saveChildFavoriteList(favoriteList, childList); commit(); - return toBean(ChildFavoriteListBean.class, result, this::childFavoriteListBeanFunction); + return toChildFavoriteListBean(result); } @@ -774,7 +794,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteList favoriteList = importFavoriteListMembersFromVoterList(voterList, user); commit(); - return toBean(FavoriteListBean.class, favoriteList); + return toFavoriteListBean(favoriteList); } protected FavoriteList importFavoriteListMembersFromVoterList(VoterList voterList, PollenUser user) { @@ -954,7 +974,7 @@ public class FavoriteListService extends PollenServiceSupport { int childIndex = 0; for (ChildFavoriteListExport childFavoriteListExport : favoriteListExport.getChildren()) { - ErrorMap errorsChild = checkChildList(favoriteList, children, childFavoriteListExport.toBean(existingFavoriteLists)); + ErrorMap errorsChild = checkChildList(favoriteList, children, toChildFavoriteListBean(childFavoriteListExport, existingFavoriteLists)); errorsChild.copyTo(errors, "favoriteLists[" + favoriteListIndex + "].children[" + childIndex + "]"); @@ -968,6 +988,19 @@ public class FavoriteListService extends PollenServiceSupport { return errors; } + protected ChildFavoriteListBean toChildFavoriteListBean(ChildFavoriteListExport entity, List<FavoriteList> existingFavoriteLists) { + ChildFavoriteListBean bean = new ChildFavoriteListBean(); + bean.setWeight(entity.getWeight()); + FavoriteList childEntity = existingFavoriteLists.stream() + .filter(favoriteList -> entity.getChild().equals(favoriteList.getName())) + .findFirst() + .orElse(null); + FavoriteListBean childBean = toFavoriteListBean(childEntity); + bean.setChild(childBean); + + return bean; + } + public ExportBean exportFavoriteLists() { PollenUser user = checkAndGetConnectedUser(); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/FeedbackService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/FeedbackService.java index 8854e5ec..c54df79d 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/FeedbackService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/FeedbackService.java @@ -42,8 +42,7 @@ public class FeedbackService extends PollenServiceSupport { PollenUser user = getConnectedUser(); PollenUserBean userBean = null; if (user != null) { - userBean = new PollenUserBean(); - userBean.fromEntity(user); + userBean = getUserService().toPollenUserBean(user); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java index a6e5f465..970dcecf 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java @@ -38,11 +38,11 @@ import org.chorem.pollen.services.bean.PollBean; import org.chorem.pollen.services.bean.PollenEntityRef; import org.chorem.pollen.services.service.security.SecurityService; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public class FixturesService extends PollenServiceSupport { @@ -106,18 +106,14 @@ public class FixturesService extends PollenServiceSupport { Collection<Poll> polls = fixtures.fixture("polls"); List<Choice> choices = fixtures.fixture("choices"); - List<ChoiceBean> choicesBean = new ArrayList<>(); - for (Choice choice : choices) { - ChoiceBean choiceBean = new ChoiceBean(); - choiceBean.fromEntity(choice); - choicesBean.add(choiceBean); - } + List<ChoiceBean> choicesBean = choices.stream() + .map(getChoiceService()::toChoiceBean) + .collect(Collectors.toList()); for (Poll poll : polls) { try { - PollBean pollBean = new PollBean(); - pollBean.fromEntity(poll); + PollBean pollBean = getPollService().toPollBean(poll); PollenEntityRef<Poll> createdPoll = pollService.createPoll(pollBean, choicesBean, Collections.emptyList(), Collections.emptyList()); poll.setTopiaId(createdPoll.getEntityId()); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/GtuService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/GtuService.java index d129a0bf..83a01416 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/GtuService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/GtuService.java @@ -10,17 +10,18 @@ package org.chorem.pollen.services.service; * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ +import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import org.apache.commons.collections4.CollectionUtils; import org.chorem.pollen.persistence.entity.Poll; @@ -41,15 +42,24 @@ import java.util.Optional; */ public class GtuService extends PollenServiceSupport { - public ResourceStreamBean getCurrentGtu() { + public GtuMetaBean toGtuMetaBean(PollenResource entity) { + GtuMetaBean bean = new GtuMetaBean(); + bean.setEntityId(entity.getTopiaId()); - ResourceStreamBean result = null; + bean.setName(entity.getName()); + bean.setSize(entity.getSize()); + bean.setContentType(entity.getContentType()); + bean.setResourceType(entity.getResourceType()); + bean.setUploadDate(entity.getTopiaCreateDate()); - Optional<PollenResource> currentGtu = getCurrentGtu0(); - if (currentGtu.isPresent()) { - result = toBean(ResourceStreamBean.class, currentGtu.get()); - } - return result; + return bean; + } + + public ResourceStreamBean getCurrentGtu() { + + return getCurrentGtu0() + .map(getPollenResourceService()::toResourceStreamBean) + .orElse(null); } public List<GtuMetaBean> getAllGtus() { @@ -62,10 +72,14 @@ public class GtuService extends PollenServiceSupport { String currentId = CollectionUtils.isNotEmpty(gtus) ? Iterables.getLast(gtus).getTopiaId() : null; - return toBeanList(GtuMetaBean.class, gtus, input -> { - input.setCurrent(input.getEntityId().equals(currentId)); - return input; - }); + ImmutableList<GtuMetaBean> gtuMetaBeans = toBeanList(gtus, this::toGtuMetaBean); + + if (CollectionUtils.isNotEmpty(gtus)) { + Iterables.getLast(gtuMetaBeans).setCurrent(true); + } + + return gtuMetaBeans; + } public boolean isGtu() { @@ -83,16 +97,6 @@ public class GtuService extends PollenServiceSupport { .toJavaUtil(); } - protected boolean isPollGtuValidated(String pollId) { - Poll poll = getPollService().getPoll0(pollId); - return isGtuValidated(poll); - } - - protected boolean isUserGtuValidated(String userId) { - PollenUser user = getUserService().getUser0(userId); - return isGtuValidated(user); - } - public boolean isGtuValidated(PollenUser user) { return isGtuValidatedForDate(user.getGtuValidationDate()); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java index dc7f72d2..084d48b1 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java @@ -31,6 +31,7 @@ import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.PollType; import org.chorem.pollen.persistence.entity.PollenPrincipal; import org.chorem.pollen.persistence.entity.PollenUser; +import org.chorem.pollen.persistence.entity.Polls; import org.chorem.pollen.services.bean.ChoiceBean; import org.chorem.pollen.services.bean.PaginationParameterBean; import org.chorem.pollen.services.bean.PaginationResultBean; @@ -52,9 +53,9 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -import java.util.function.Function; import static org.nuiton.i18n.I18n.l; @@ -66,57 +67,136 @@ import static org.nuiton.i18n.I18n.l; */ public class PollService extends PollenServiceSupport { - private final Function<PollBean, PollBean> pollBeanFunction = input -> { - if (isNotPermitted(PermissionVerb.editPoll, input.getEntityId())) { - input.setPermission(null); - input.setCreatorEmail(null); + public PollBean toPollBean(Poll entity) { + PollBean bean = new PollBean(); + + bean.setEntityId(entity.getTopiaId()); + + if (entity.getCreator() == null || entity.getCreator().getPermission() == null) { + + bean.setPermission(null); } else { - ReportResumeBean report = getReportService().getReport(input.getEntityId()); - input.setReport(report); + + bean.setPermission(entity.getCreator().getPermission().getToken()); + } - boolean commentIsVisible = isPermitted(PermissionVerb.readComment, input.getEntityId()); - input.setCommentIsVisible(commentIsVisible); + if (entity.getCreator() != null) { + + bean.setCreatorName(entity.getCreator().getName()); + bean.setCreatorEmail(entity.getCreator().getEmail()); + + } - input.setVoteIsVisible(isPermitted(PermissionVerb.readVote, input.getEntityId())); + bean.setTitle(entity.getTitle()); + bean.setDescription(entity.getDescription()); + bean.setCreateDate(entity.getTopiaCreateDate()); + bean.setBeginChoiceDate(entity.getBeginChoiceDate()); + bean.setEndChoiceDate(entity.getEndChoiceDate()); + bean.setBeginDate(entity.getBeginDate()); + bean.setEndDate(entity.getEndDate()); + bean.setMaxChoiceNumber(entity.getMaxChoiceNumber()); + bean.setChoiceAddAllowed(entity.isChoiceAddAllowed()); + bean.setAnonymousVoteAllowed(entity.isAnonymousVoteAllowed()); + bean.setContinuousResults(entity.isContinuousResults()); + bean.setVoteCountingType(entity.getVoteCountingType()); + bean.setPollType(entity.getPollType()); + bean.setVoteVisibility(entity.getVoteVisibility()); + bean.setCommentVisibility(entity.getCommentVisibility()); + bean.setResultVisibility(entity.getResultVisibility()); + bean.setParticipants(new LinkedHashSet<>(entity.getParticipants() == null ? Collections.emptyList() : Arrays.asList(entity.getParticipants().split("\\s")))); + bean.setWithMe(entity.isWithMe()); + bean.setChoiceType(entity.getChoiceType()); + bean.setNotifyMeHoursBeforePollEnds(entity.getNotifyMeHoursBeforePollEnds()); + bean.setVoteNotification(entity.isVoteNotification()); + bean.setCommentNotification(entity.isCommentNotification()); + bean.setNewChoiceNotification(entity.isNewChoiceNotification()); + bean.setNotificationLocale(entity.getNotificationLocale()); Date now = getNow(); - boolean beforePollEndDate = input.getEndDate() == null || now.before(input.getEndDate()); + if (Polls.isFinished(entity, now)) { + bean.setStatus(PollBean.PollStatus.CLOSED); + bean.setClosed(true); + } else { + bean.setClosed(false); + bean.setStatus(PollBean.PollStatus.CREATED); + + if (entity.isChoiceAddAllowed()) { + Date beginChoiceDate = entity.getBeginChoiceDate(); + Date endChoiceDate = entity.getEndChoiceDate(); + if ((beginChoiceDate == null || now.after(beginChoiceDate)) + && (endChoiceDate == null || now.before(endChoiceDate))) { + bean.setStatus(PollBean.PollStatus.ADDING_CHOICES); + } + } - boolean resultIsVisible = (beforePollEndDate || input.isContinuousResults()) - && isPermitted(PermissionVerb.readPollResult, input.getEntityId()); + if (PollBean.PollStatus.ADDING_CHOICES != bean.getStatus()) { + Date beginDate = entity.getBeginDate(); + Date endDate = entity.getEndDate(); + if (beginDate != null && now.after(beginDate) && (endDate == null || now.before(endDate))) { + bean.setStatus(PollBean.PollStatus.VOTING); + } + } + } - input.setResultIsVisible(resultIsVisible); + if (isNotPermitted(PermissionVerb.editPoll, entity.getTopiaId())) { + bean.setPermission(null); + bean.setCreatorEmail(null); + + } else { + ReportResumeBean report = getReportService().getReport(entity.getTopiaId()); + bean.setReport(report); + } + + boolean commentIsVisible = isPermitted(PermissionVerb.readComment, entity.getTopiaId()); + bean.setCommentIsVisible(commentIsVisible); + + bean.setVoteIsVisible(isPermitted(PermissionVerb.readVote, entity.getTopiaId())); + + boolean beforePollEndDate = entity.getEndDate() == null || now.before(entity.getEndDate()); + + boolean resultIsVisible = (beforePollEndDate || entity.isContinuousResults()) + && isPermitted(PermissionVerb.readPollResult, entity.getTopiaId()); + + bean.setResultIsVisible(resultIsVisible); boolean canVote = beforePollEndDate - && (input.getBeginDate() == null || !now.before(input.getBeginDate())) - && isPermitted(PermissionVerb.addVote, input.getEntityId()); + && (entity.getBeginDate() == null || !now.before(entity.getBeginDate())) + && isPermitted(PermissionVerb.addVote, entity.getTopiaId()); - input.setCanVote(canVote); + bean.setCanVote(canVote); if (commentIsVisible) { - long commentCount = getCommentService().getCommentCount(input.getEntityId()); - input.setCommentCount(commentCount); + long commentCount = getCommentService().getCommentCount(entity.getTopiaId()); + bean.setCommentCount(commentCount); + } + if (entity.isPersisted()) { + long voteCount = getVoteService().getVoteCount(entity); + bean.setVoteCount(voteCount); + long participantCount = getVoterListService().getVoterListMemberCount(entity); + bean.setParticipantCount(participantCount); + long choiceCount = getChoiceService().getChoiceCount(entity); + bean.setChoiceCount(choiceCount); } - long voteCount = getVoteService().getVoteCount(input.getEntityId()); - input.setVoteCount(voteCount); - long participantCount = getVoterListService().getVoterListMemberCount(input.getEntityId()); - input.setParticipantCount(participantCount); - long choiceCount = getChoiceService().getChoiceCount(input.getEntityId()); - input.setChoiceCount(choiceCount); - input.setGtuValidated(getGtuService().isPollGtuValidated(input.getEntityId())); + bean.setGtuValidated(getGtuService().isGtuValidated(entity)); + bean.setMaxVoters(getMaxVoters(entity)); - return input; + return bean; }; + protected int getMaxVoters(Poll poll) { + boolean premium = poll.isPremium() || getUserService().isPremium(poll.getCreator().getPollenUser()); + return premium ? 0 : getPollenServiceConfig().getMaxVoters(); + } + public PaginationResultBean<PollBean> getPolls(PaginationParameterBean paginationParameter, String search) { checkIsAdmin(); PaginationParameter page = getPaginationParameter(paginationParameter); PaginationResult<Poll> polls = getPollDao().findAll(page, search); - return toPaginationListBean(PollBean.class, polls, pollBeanFunction); + return toPaginationListBean(polls, this::toPollBean); } @@ -126,7 +206,7 @@ public class PollService extends PollenServiceSupport { PaginationParameter page = getPaginationParameter(paginationParameter); PaginationResult<Poll> polls = getPollDao().findAllCreated(connectedUser, page, search); - return toPaginationListBean(PollBean.class, polls, pollBeanFunction); + return toPaginationListBean(polls, this::toPollBean); } @@ -136,7 +216,7 @@ public class PollService extends PollenServiceSupport { PaginationParameter page = getPaginationParameter(paginationParameter); PaginationResult<Poll> polls = getPollDao().findAllInvited(connectedUser, page, search); - return toPaginationListBean(PollBean.class, polls, pollBeanFunction); + return toPaginationListBean(polls, this::toPollBean); } @@ -146,7 +226,7 @@ public class PollService extends PollenServiceSupport { PaginationParameter page = getPaginationParameter(paginationParameter); PaginationResult<Poll> polls = getPollDao().findAllParticipated(connectedUser, page, search); - return toPaginationListBean(PollBean.class, polls, pollBeanFunction); + return toPaginationListBean(polls, this::toPollBean); } @@ -157,7 +237,7 @@ public class PollService extends PollenServiceSupport { Poll poll = getPoll0(pollId); - return toBean(PollBean.class, poll, pollBeanFunction); + return toPollBean(poll); } @@ -258,7 +338,7 @@ public class PollService extends PollenServiceSupport { getNotificationService().onPollEdited(savedPoll, newParticipants); getFeedService().onPollEdited(savedPoll, newParticipants); - return toBean(PollBean.class, savedPoll, pollBeanFunction); + return toPollBean(savedPoll); } @@ -285,7 +365,7 @@ public class PollService extends PollenServiceSupport { Poll poll = getPoll0(pollId); // Clone Poll - PollBean clonedPoll = toBean(PollBean.class, poll); + PollBean clonedPoll = toPollBean(poll); clonedPoll.setEntityId(null); clonedPoll.setPermission(null); @@ -324,9 +404,6 @@ public class PollService extends PollenServiceSupport { poll.setEndDate(getNow()); - savePoll(toBean(PollBean.class, poll), null); - - //TODO : check if correct commit(); getNotificationService().onPollClosed(poll); @@ -344,9 +421,6 @@ public class PollService extends PollenServiceSupport { poll.setEndDate(null); - savePoll(toBean(PollBean.class, poll), null); - - //TODO : check if correct commit(); getNotificationService().onPollReopened(poll); @@ -389,7 +463,7 @@ public class PollService extends PollenServiceSupport { poll.getCreator().setPollenUser(connectedUser); commit(); - return toBean(PollBean.class, poll, pollBeanFunction); + return toPollBean(poll); } public Collection<Poll> getPollsWithReminderNeeded() { @@ -580,7 +654,7 @@ public class PollService extends PollenServiceSupport { ErrorMap choiceErrors = getChoiceService().checkChoice(existingChoices, choice); choiceErrors.copyTo(errorMap, "choice[" + i + "]."); - existingChoices.add(choice.toEntity()); + existingChoices.add(getChoiceService().toChoice(choice)); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java index 158b22e9..9cdd15f3 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java @@ -26,6 +26,7 @@ import org.chorem.pollen.persistence.entity.ResourceType; import org.chorem.pollen.services.PollenService; import org.chorem.pollen.services.PollenTechnicalException; import org.chorem.pollen.services.UnitHuman; +import org.chorem.pollen.services.bean.GtuMetaBean; import org.chorem.pollen.services.bean.PollenEntityId; import org.chorem.pollen.services.bean.PollenEntityRef; import org.chorem.pollen.services.bean.ResourceFileBean; @@ -50,12 +51,42 @@ import static org.nuiton.i18n.I18n.l; */ public class PollenResourceService extends PollenServiceSupport implements PollenService { + public ResourceStreamBean toResourceStreamBean(PollenResource entity) { + ResourceStreamBean bean = new ResourceStreamBean(); + bean.setEntityId(entity.getTopiaId()); + + try { + bean.setResourceContent(entity.getResourceContent().getBinaryStream()); + } catch (SQLException e) { + throw new PollenTechnicalException(e); + } + + bean.setName(entity.getName()); + bean.setSize(entity.getSize()); + bean.setContentType(entity.getContentType()); + + return bean; + } + + public ResourceMetaBean toResourceMetaBean(PollenResource entity) { + ResourceMetaBean bean = new GtuMetaBean(); + bean.setEntityId(entity.getTopiaId()); + + bean.setName(entity.getName()); + bean.setSize(entity.getSize()); + bean.setContentType(entity.getContentType()); + bean.setResourceType(entity.getResourceType()); + bean.setUploadDate(entity.getTopiaCreateDate()); + + return bean; + } + public ResourceStreamBean getResource(String resourceId) { checkNotNull(resourceId); PollenResource resource = getResource0(resourceId); - return toBean(ResourceStreamBean.class, resource); + return toResourceStreamBean(resource); } public ResourceMetaBean getMetaResource(String resourceId) { @@ -63,7 +94,7 @@ public class PollenResourceService extends PollenServiceSupport implements Polle PollenResource resource = getResource0(resourceId); - return toBean(ResourceMetaBean.class, resource); + return toResourceMetaBean(resource); } public ResourceStreamBean getResourcePreview(String resourceId) { diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java index 586a2947..faa2887d 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java @@ -443,52 +443,21 @@ public abstract class PollenServiceSupport implements PollenService { } - protected <T extends TopiaEntity, B extends PollenBean<T>> B toBean(Class<B> beanType, T entity) { + protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableList<B> toBeanList(Collection<T> entities, Function<T, B> beanFunction) { - return toBean(beanType, entity, null); + return PollenBeans.toBeanList(entities, beanFunction); } - protected <T extends TopiaEntity, B extends PollenBean<T>> B toBean(Class<B> beanType, T entity, Function<B, B> beanFunction) { + protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableSet<B> toBeanSet(Collection<T> entities, Function<T, B> beanFunction) { - return PollenBeans.toBean(beanType, entity, beanFunction); + return PollenBeans.toBeanSet(entities, beanFunction); } - protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableList<B> toBeanList(Class<B> beanType, Collection<T> entities) { + protected <E extends TopiaEntity, B extends PollenBean<E>> PaginationResultBean<B> toPaginationListBean(PaginationResult<E> entities, Function<E, B> beanFunction) { - return toBeanList(beanType, entities, null); - - } - - - protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableList<B> toBeanList(Class<B> beanType, Collection<T> entities, Function<B, B> beanFunction) { - - return PollenBeans.toBeanList(beanType, entities, beanFunction); - - } - - protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableSet<B> toBeanSet(Class<B> beanType, Collection<T> entities) { - - return toBeanSet(beanType, entities, null); - - } - - protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableSet<B> toBeanSet(Class<B> beanType, Collection<T> entities, Function<B, B> beanFunction) { - - return PollenBeans.toBeanSet(beanType, entities, beanFunction); - - } - - protected <E extends TopiaEntity, B extends PollenBean<E>> PaginationResultBean<B> toPaginationListBean(Class<B> beanType, PaginationResult<E> entities) { - - return toPaginationListBean(beanType, entities, null); - - } - - protected <E extends TopiaEntity, B extends PollenBean<E>> PaginationResultBean<B> toPaginationListBean(Class<B> beanType, PaginationResult<E> entities, Function<B, B> beanFunction) { - - return PollenBeans.toBean(beanType, entities, beanFunction); + return PollenBeans.toBean(entities, beanFunction); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java index f911963a..9bb0ed06 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java @@ -29,22 +29,25 @@ import org.chorem.pollen.persistence.entity.PollenPrincipal; import org.chorem.pollen.persistence.entity.PollenToken; import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.persistence.entity.PollenUserTopiaDao; +import org.chorem.pollen.persistence.entity.UserCredential; import org.chorem.pollen.persistence.entity.Vote; import org.chorem.pollen.services.PollenService; import org.chorem.pollen.services.bean.PaginationParameterBean; import org.chorem.pollen.services.bean.PaginationResultBean; import org.chorem.pollen.services.bean.PollenEntityRef; import org.chorem.pollen.services.bean.PollenUserBean; +import org.chorem.pollen.services.bean.UserCredentialBean; import org.chorem.pollen.services.service.security.PollenInvalidEmailActivationTokenException; import org.chorem.pollen.services.service.security.PollenInvalidPasswordException; +import org.chorem.pollen.services.service.security.PollenSecurityContext; import org.nuiton.util.pagination.PaginationOrder; import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; -import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Objects; -import java.util.function.Function; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.l; @@ -56,12 +59,40 @@ import static org.nuiton.i18n.I18n.l; */ public class PollenUserService extends PollenServiceSupport implements PollenService { - private final Function<PollenUserBean, PollenUserBean> pollenUserFunction = input -> { - input.setPassword(null); - input.setGtuValidated(getGtuService().isUserGtuValidated(input.getEntityId())); + public PollenUserBean toPollenUserBean(PollenUser entity) { + PollenUserBean bean = new PollenUserBean(); + bean.setEntityId(entity.getTopiaId()); + + bean.setName(entity.getName()); + bean.setAdministrator(entity.isAdministrator()); + bean.setBanned(entity.isBanned()); + bean.setLanguage(entity.getLanguage()); + bean.setEmail(entity.getEmail()); + bean.setPassword(null); + bean.setEmailIsValidate(entity.getEmailActivationToken() == null); + bean.setWithPassword(entity.getPassword() != null); + if (entity.getUserCredential() != null) { + bean.setCredentials(entity.getUserCredential().stream() + .map(this::toUserCredentialBean) + .collect(Collectors.toList())); + } + bean.setPremiumTo(entity.getPremiumTo()); + - return input; - }; + bean.setGtuValidated(getGtuService().isGtuValidated(entity)); + bean.setPremium(isPremium(entity)); + + return bean; + } + + public UserCredentialBean toUserCredentialBean(UserCredential entity) { + UserCredentialBean bean = new UserCredentialBean(); + bean.setEntityId(entity.getTopiaId()); + bean.setProvider(entity.getProvider()); + bean.setUserName(entity.getUserName()); + bean.setEmailAddress(entity.getEmail()); + return bean; + } public PaginationResultBean<PollenUserBean> getUsers(PaginationParameterBean paginationParameter, String search) { @@ -73,7 +104,7 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer } PaginationResult<PollenUser> pollenUsers = getPollenUserDao().findAll(page, search); - return toPaginationListBean(PollenUserBean.class, pollenUsers, pollenUserFunction); + return toPaginationListBean(pollenUsers, this::toPollenUserBean); } @@ -86,7 +117,7 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer checkIsAdmin(); pollenUser = getUser0(userId); } - return toBean(PollenUserBean.class, pollenUser, pollenUserFunction); + return toPollenUserBean(pollenUser); } @@ -126,7 +157,7 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer getNotificationService().onUserEdited(result); - return toBean(PollenUserBean.class, result); + return toPollenUserBean(result); } @@ -218,46 +249,19 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer if (getPollenUserDao().count() == 0) { - List<PollenUserBean> listUser = new ArrayList<>(); - - { // set users - PollenUserBean user = new PollenUserBean(); - - user.setAdministrator(true); - user.setEmail("admin@pollen.org"); - user.setPassword("admin"); - user.setName("admin"); - - listUser.add(user); - - user = new PollenUserBean(); - - user.setAdministrator(false); - user.setEmail("user@pollen.org"); - user.setPassword("user"); - user.setName("user"); - - listUser.add(user); - - } - - - for (PollenUserBean user : listUser) { - - // create user - PollenEntityRef<PollenUser> newUser = createUser(user); - - // validate user - PollenUser pollenUser = getPollenUserDao().forTopiaIdEquals(newUser.getEntityId()).findUnique(); - - try { - validateUserEmail(newUser.getEntityId(), pollenUser.getEmailActivationToken().getToken()); - } catch (PollenInvalidEmailActivationTokenException e) { - e.printStackTrace(); - } + PollenUserBean adminBean = new PollenUserBean(); + adminBean.setEmail("admin@chorem.org"); + adminBean.setPassword("admin"); + adminBean.setName("admin"); + PollenUser admin = savePollenUser(adminBean); + admin.setAdministrator(true); + try { + validateUserEmail(admin.getTopiaId(), admin.getEmailActivationToken().getToken()); + } catch (PollenInvalidEmailActivationTokenException e) { + e.printStackTrace(); } - + commit(); } } @@ -354,10 +358,14 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer } - toSave.setAdministrator(user.isAdministrator()); + PollenSecurityContext securityContext = getSecurityContext(); + if (securityContext.isAdmin()) { + toSave.setAdministrator(user.isAdministrator()); + toSave.setBanned(user.isBanned()); + toSave.setPremiumTo(user.getPremiumTo()); + } toSave.setName(user.getName()); toSave.setLanguage(user.getLanguage()); - toSave.setBanned(user.isBanned()); toSave.setEmail(cleanMail); if (user.isEmailIsValidate() && toSave.getEmailActivationToken() != null) { toSave.setEmailActivationToken(null); @@ -411,4 +419,12 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer commit(); } + + public boolean isPremium(PollenUser user) { + return user != null && isPremium(user.getPremiumTo()); + } + + protected boolean isPremium(Date premiumTo) { + return premiumTo != null && premiumTo.after(getNow()); + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/ReportService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/ReportService.java index b6a13c1b..121fdb7c 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/ReportService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/ReportService.java @@ -25,8 +25,10 @@ import org.chorem.pollen.persistence.entity.Choice; import org.chorem.pollen.persistence.entity.Comment; import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.Report; +import org.chorem.pollen.persistence.entity.ReportImpl; import org.chorem.pollen.persistence.entity.ReportResume; import org.chorem.pollen.services.bean.ReportBean; +import org.chorem.pollen.services.bean.ReportLevel; import org.chorem.pollen.services.bean.ReportResumeBean; import org.chorem.pollen.services.service.security.PermissionVerb; import org.nuiton.topia.persistence.TopiaEntity; @@ -40,6 +42,19 @@ import static org.nuiton.i18n.I18n.l; */ public class ReportService extends PollenServiceSupport { + public ReportBean toReportBean(Report entity) { + ReportBean bean = new ReportBean(); + + bean.setEntityId(entity.getTopiaId()); + + bean.setLevel(ReportLevel.of(entity.getLevel())); + bean.setEmail(entity.getEmail()); + bean.setIgnore(entity.isIgnore()); + + return bean; + + } + public void addPollReport(String pollId, ReportBean reportBean) throws InvalidFormException { @@ -59,7 +74,7 @@ public class ReportService extends PollenServiceSupport { checkNotNull(pollId); checkPermission(PermissionVerb.editPoll, pollId); - return getReportService().getReports(pollId); + return getReports(pollId); } @@ -92,7 +107,7 @@ public class ReportService extends PollenServiceSupport { checkNotNull(choiceId); checkPermission(PermissionVerb.editPoll, pollId); - return getReportService().getReports(choiceId); + return getReports(choiceId); } @@ -125,7 +140,7 @@ public class ReportService extends PollenServiceSupport { checkNotNull(commentId); checkPermission(PermissionVerb.editPoll, pollId); - return getReportService().getReports(commentId); + return getReports(commentId); } @@ -142,7 +157,7 @@ public class ReportService extends PollenServiceSupport { List<Report> reports = getReportTopiaDao().forTargetIdEquals(targetId).findAll(); - return toBeanList(ReportBean.class, reports); + return toBeanList(reports, this::toReportBean); } protected Report addReport(ReportBean report, TopiaEntity target) throws InvalidFormException { @@ -156,7 +171,12 @@ public class ReportService extends PollenServiceSupport { ErrorMap errorMap = checkReport(report); errorMap.failIfNotEmpty(); - Report reportEntity = report.toEntity(); + Report reportEntity = new ReportImpl(); + + reportEntity.setTopiaId(report.getEntityId()); + reportEntity.setLevel(report.getLevel().getScore()); + reportEntity.setEmail(report.getEmail()); + reportEntity.setIgnore(report.isIgnore()); reportEntity.setTargetId(target.getTopiaId()); reportEntity = getReportTopiaDao().create(reportEntity); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java index 6997c249..8300665d 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java @@ -181,11 +181,24 @@ public class SocialAuthService extends PollenServiceSupport { return manager; } + public LoginProviderBean toLoginProviderBean(LoginProvider entity) { + LoginProviderBean bean = new LoginProviderBean(); + + bean.setEntityId(entity.getTopiaId()); + bean.setName(entity.getName()); + bean.setKey(entity.getKey()); + bean.setSecret(entity.getSecret()); + bean.setPermissions(entity.getPermissions()); + bean.setActive(entity.isActive()); + + return bean; + } + public List<LoginProviderBean> getAllLoginProviders() { checkIsAdmin(); LoginProviderTopiaDao dao = getLoginProviderDao(); List<LoginProvider> loginProviders = dao.findAll(); - return toBeanList(LoginProviderBean.class, loginProviders); + return toBeanList(loginProviders, this::toLoginProviderBean); } public List<String> getActiveLoginProviders() { @@ -238,7 +251,7 @@ public class SocialAuthService extends PollenServiceSupport { toSave.setActive(loginProvider.isActive()); commit(); - return toBean(LoginProviderBean.class, toSave); + return toLoginProviderBean(toSave); } public void deleteLoginProvider(String providerId) { diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java index 56826893..145cb25d 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java @@ -87,7 +87,7 @@ public class VoteCountingService extends PollenServiceSupport { Preconditions.checkNotNull(pollId); Poll poll = getPollService().getPoll0(pollId); - List<Vote> votes = getVoteService().getVotes0(poll); + List<Vote> votes = getVotes(poll); VoteCounting voteCounting = getVoteCounting(poll); VoteCountingStrategy strategy = voteCounting.newStrategy(); @@ -105,6 +105,15 @@ public class VoteCountingService extends PollenServiceSupport { } + protected List<Vote> getVotes(Poll poll) { + List<Vote> votes = getVoteService().getVotes0(poll); + int maxVoters = getPollService().getMaxVoters(poll); + if (maxVoters > 0 && votes.size() > maxVoters) { + votes = votes.subList(0, maxVoters); + } + return votes; + } + public ListVoteCountingResultBean getGroupResult(String pollId) { Preconditions.checkNotNull(pollId); @@ -112,7 +121,7 @@ public class VoteCountingService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); VoterList mainVoterList = getVoterListService().getMainVoterList0(poll); - List<Vote> votes = getVoteService().getVotes0(poll); + List<Vote> votes = getVotes(poll); VoteCounting voteCounting = getVoteCounting(poll); VoteCountingStrategy strategy = voteCounting.newStrategy(); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java index c2e2838e..fc907339 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java @@ -30,6 +30,7 @@ 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.persistence.entity.VoteToChoices; import org.chorem.pollen.persistence.entity.VoterList; import org.chorem.pollen.persistence.entity.VoterListMember; import org.chorem.pollen.services.bean.ChoiceBean; @@ -50,7 +51,6 @@ import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.function.Function; import static org.nuiton.i18n.I18n.l; @@ -62,19 +62,62 @@ import static org.nuiton.i18n.I18n.l; */ public class VoteService extends PollenServiceSupport { - private final Function<VoteBean, VoteBean> voteBeanFunction = input -> { - if (isNotPermitted(PermissionVerb.editVote, input.getEntityId())) { - input.setPermission(null); - if (input.isAnonymous()) { - input.setVoterName(null); + public VoteBean toVoteBean(Vote entity) { + + VoteBean bean = new VoteBean(); + + bean.setEntityId(entity.getTopiaId()); + + if (entity.getVoter() == null || entity.getVoter().getPermission() == null) { + + bean.setPermission(null); + + } else { + + bean.setPermission(entity.getVoter().getPermission().getToken()); + + } + + bean.setAnonymous(entity.isAnonymous()); + bean.getVoterId().setEntityId(entity.getVoter().getTopiaId()); + bean.setVoterName(entity.getVoter().getName()); + bean.setWeight(entity.getWeight()); + + entity.getVoteToChoice().stream() + .sorted(VoteToChoices.VOTE_TO_CHOICE_COMPARATOR) + .map(this::toVoteToChoiceBean) + .forEach(bean::addChoice); + + + if (entity.getVoterListMember() != null) { + + bean.setVoterListMembers(entity.getVoterListMember()); + + } + + if (isNotPermitted(PermissionVerb.editVote, entity.getTopiaId())) { + bean.setPermission(null); + if (entity.isAnonymous()) { + bean.setVoterName(null); } } else { - ReportResumeBean report = getReportService().getReport(input.getEntityId()); - input.setReport(report); + ReportResumeBean report = getReportService().getReport(entity.getTopiaId()); + bean.setReport(report); } - return input; + return bean; }; + public VoteToChoiceBean toVoteToChoiceBean(VoteToChoice entity) { + + VoteToChoiceBean bean = new VoteToChoiceBean(); + + bean.setEntityId(entity.getTopiaId()); + bean.setVoteValue(entity.getVoteValue()); + bean.getChoiceId().setEntityId(entity.getChoice().getTopiaId()); + + return bean; + } + public VoteBean getNewVote(String pollId) { checkPermission(PermissionVerb.addVote, pollId); @@ -113,17 +156,22 @@ public class VoteService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); List<Vote> allVotes = getVotes0(poll); + int maxVoters = getPollService().getMaxVoters(poll); + List<Vote> votes = new ArrayList<>(); + int indexVote = 0; for (Vote vote : allVotes) { - if (isPermitted(PermissionVerb.readVote, vote.getTopiaId())) { + if (isPermitted(PermissionVerb.editVote, vote.getTopiaId()) + || (isPermitted(PermissionVerb.readVote, vote.getTopiaId()) && (maxVoters == 0 || indexVote < maxVoters))) { votes.add(vote); } + indexVote++; } PaginationResult<Vote> votePaginationResult = PaginationResult.fromFullList(votes, getPaginationParameter(paginationParameter)); - return toPaginationListBean(VoteBean.class, votePaginationResult, voteBeanFunction); + return toPaginationListBean(votePaginationResult, this::toVoteBean); } @@ -136,7 +184,7 @@ public class VoteService extends PollenServiceSupport { Vote result = getVote(poll, voteId); - return toBean(VoteBean.class, result, voteBeanFunction); + return toVoteBean(result); } @@ -181,7 +229,7 @@ public class VoteService extends PollenServiceSupport { getNotificationService().onVoteEdited(poll, result); getFeedService().onVoteEdited(poll, result); - return toBean(VoteBean.class, result); + return toVoteBean(result); } @@ -423,11 +471,7 @@ public class VoteService extends PollenServiceSupport { } - public long getVoteCount(String pollId) { - checkNotNull(pollId); - - Poll poll = getPollService().getPoll0(pollId); - + public long getVoteCount(Poll poll) { return getVoteDao().forPollEquals(poll).count(); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java index 40bb172f..c9038094 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java @@ -136,30 +136,40 @@ public class VoterListService extends PollenServiceSupport { // // } - protected Function<VoterListMemberBean, VoterListMemberBean> getAddVotingField(String pollId) { - List<Vote> votes = getVoteDao().forProperties(Vote.PROPERTY_POLL + "." + Poll.PROPERTY_TOPIA_ID, pollId).findAll(); + public VoterListMemberBean toVoterListMemberBean(VoterListMember entity) { - final Set<String> memberIdVoting = votes.stream() - .map(Vote::getVoterListMember) - .flatMap(Collection::stream) - .map(VoterListMember::getTopiaId) - .collect(Collectors.toSet()); + VoterListMemberBean bean = new VoterListMemberBean(); + + bean.setEntityId(entity.getTopiaId()); + if (entity.getMember() != null) { + bean.setName(entity.getMember().getName()); + bean.setEmail(entity.getMember().getEmail()); + } + bean.setWeight(entity.getWeight()); + bean.getVoterListId().setEntityId(entity.getVoterList().getTopiaId()); + + boolean voting = getVoteDao().forVoterListMemberContains(entity).exists(); + bean.setVoting(voting); - return member -> { - member.setVoting(memberIdVoting.contains(member.getEntityId())); - return member; - }; + return bean; } - protected VoterListBean voterListBeanFunction(VoterListBean bean) { + public VoterListBean toVoterListBean(VoterList entity) { + + VoterListBean bean = new VoterListBean(); + bean.setEntityId(entity.getTopiaId()); + bean.setName(entity.getName()); + bean.setWeight(entity.getWeight()); + if (entity.getParent() != null) { + bean.getParentId().setEntityId(entity.getParent().getTopiaId()); + } - String entityId = bean.getEntityId(); long countSubLists = getVoterListDao() - .forProperties(VoterList.PROPERTY_PARENT + "." + VoterList.PROPERTY_TOPIA_ID, entityId) + .forParentEquals(entity) .count(); long countMembers = getVoterListMemberDao() - .forProperties(VoterListMember.PROPERTY_VOTER_LIST + "." + VoterList.PROPERTY_TOPIA_ID, entityId) + .forVoterListEquals(entity) .count(); bean.setCountSubLists(countSubLists); @@ -174,7 +184,7 @@ public class VoterListService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); List<VoterList> voterLists = getVoterLists0(poll, parentId); - return toBeanList(VoterListBean.class, voterLists, this::voterListBeanFunction); + return toBeanList(voterLists, this::toVoterListBean); } @@ -190,7 +200,7 @@ public class VoterListService extends PollenServiceSupport { VoterListBean result = null; if (voterList != null) { - result = toBean(VoterListBean.class, voterList, this::voterListBeanFunction); + result = toVoterListBean(voterList); } return result; @@ -203,7 +213,7 @@ public class VoterListService extends PollenServiceSupport { checkPermission(PermissionVerb.readPoll, pollId); VoterList voterList = getVoterList0(pollId, voterListId); - return toBean(VoterListBean.class, voterList, this::voterListBeanFunction); + return toVoterListBean(voterList); } @@ -239,7 +249,7 @@ public class VoterListService extends PollenServiceSupport { VoterList result = getVoterListDao().forTopiaIdEquals(voterList.getEntityId()).findUnique(); //TODO Notify - return toBean(VoterListBean.class, result, this::voterListBeanFunction); + return toVoterListBean(result); } @@ -266,7 +276,7 @@ public class VoterListService extends PollenServiceSupport { VoterList voterList = getVoterList0(pollId, voterListId); List<VoterListMember> members = getVoterListMembers0(voterList); - return toBeanSet(VoterListMemberBean.class, members, getAddVotingField(pollId)); + return toBeanSet(members, this::toVoterListMemberBean); } @@ -280,7 +290,7 @@ public class VoterListService extends PollenServiceSupport { VoterList voterList = getVoterList0(pollId, voterListId); VoterListMember member = getVoterListMember0(voterList, memberId); - return toBean(VoterListMemberBean.class, member, getAddVotingField(pollId)); + return toVoterListMemberBean(member); } @@ -295,7 +305,7 @@ public class VoterListService extends PollenServiceSupport { Collections.emptyList()); VoterListMember result = getVoterListMemberDao().forTopiaIdEquals(member.getEntityId()).findUnique(); - return toBean(VoterListMemberBean.class, result); + return toVoterListMemberBean(result); } @@ -311,7 +321,7 @@ public class VoterListService extends PollenServiceSupport { Collections.emptyList()); VoterListMember result = getVoterListMemberDao().forTopiaIdEquals(member.getEntityId()).findUnique(); - return toBean(VoterListMemberBean.class, result, getAddVotingField(pollId)); + return toVoterListMemberBean(result); } @@ -658,10 +668,10 @@ public class VoterListService extends PollenServiceSupport { VoterList oldVoterList = getVoterList0(poll, voterList.getEntityId()); sisterNames.remove(oldVoterList.getName()); - List<VoterListMember> existingVoterListMembers = getVoterListMembers0(voterList.toEntity()); - members = toBeanList(VoterListMemberBean.class, existingVoterListMembers); + List<VoterListMember> existingVoterListMembers = getVoterListMembers0(voterList.getEntityId()); + members = toBeanList(existingVoterListMembers, this::toVoterListMemberBean); List<VoterList> existingSubVoterLists = getVoterLists0(poll, voterList.getEntityId()); - subLists = toBeanList(VoterListBean.class, existingSubVoterLists); + subLists = toBeanList(existingSubVoterLists, this::toVoterListBean); } else if (listsToSave.size() == 1){ members = membersToSave; @@ -812,14 +822,8 @@ public class VoterListService extends PollenServiceSupport { return memberToSend.size(); } - public long getVoterListMemberCount(String pollId) { - checkNotNull(pollId); - checkPermission(PermissionVerb.readPoll, pollId); - - VoterList voterList = getVoterListDao() - .forProperties(VoterList.PROPERTY_POLL + "." + Poll.PROPERTY_TOPIA_ID, pollId) - .addNull(VoterList.PROPERTY_PARENT) - .findUniqueOrNull(); + public long getVoterListMemberCount(Poll poll) { + VoterList voterList = getMainVoterList0(poll); List<VoterListMember> allMembers = getVoterListDao().getAllMembers(voterList); diff --git a/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties b/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties index b41d405e..ad5f2ecd 100644 --- a/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties +++ b/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties @@ -25,6 +25,7 @@ pollen.configuration.devMode=Dev mode pollen.configuration.feedback.locale=locale to send feedback pollen.configuration.feedback.mails=mails to send feedback pollen.configuration.logConfigurationFile=Path to log configuration file +pollen.configuration.maxVoters=Maximum number of votes for standar poll pollen.configuration.registration.emailAddressPattern=Regular expression that the user email address must match for registration pollen.configuration.report.maxScore=Maximum score for reporting before administrators are notified pollen.configuration.resendEmailsCronSchedule=Time between two cron jobs of email resending diff --git a/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties b/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties index 2a17b57e..dce0f1f5 100644 --- a/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties +++ b/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties @@ -25,6 +25,7 @@ pollen.configuration.devMode=Mode développement pollen.configuration.feedback.locale=La locale pour envoyer les retours utlisateur pollen.configuration.feedback.mails=Courriel destinataires des retours utilisateur pollen.configuration.logConfigurationFile=Chemin vers le fichier de configuration des logs +pollen.configuration.maxVoters=Nombre maximum de votes pris en compte pour de sondage standard pollen.configuration.registration.emailAddressPattern=Expression régulière que doivent vérifier les adresses email des utilisateurs lors de l'inscription pollen.configuration.report.maxScore=Score maximum pour un signalement avant que les administrateurs soient avertis pollen.configuration.resendEmailsCronSchedule=Intervalle entre deux lancements de la tâche de renvoi des emails en erreur diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java index 13a97308..9314c446 100644 --- a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java +++ b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java @@ -91,15 +91,17 @@ public class PollenUserServiceTest extends AbstractPollenServiceTest { PollenUserBean user = service.getUser(this.user.getTopiaId()); Assert.assertNotNull(user); - Assert.assertEquals(this.user, user.toEntity()); + Assert.assertEquals(this.user.getName(), user.getName()); + Assert.assertEquals(this.user.isAdministrator(), user.isAdministrator()); + Assert.assertEquals(this.user.getEmail(), user.getEmail()); + Assert.assertEquals(this.user.isBanned(), user.isBanned()); } @Test public void testCreatePollenUser() throws InvalidFormException { try { - PollenUserBean u = new PollenUserBean(); - u.fromEntity(user); + PollenUserBean u = service.toPollenUserBean(user); service.createUser(u); Assert.fail(); } catch (IllegalStateException e) { diff --git a/pollen-ui-riot-js/src/main/web/i18n/en.json b/pollen-ui-riot-js/src/main/web/i18n/en.json index d14ba4ec..b96fc33b 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/en.json +++ b/pollen-ui-riot-js/src/main/web/i18n/en.json @@ -65,6 +65,8 @@ "poll_subscribers": "subscribers", "poll_participants": "participants", "poll_participation": "of participation", + "poll_maxVotersAlert": "<strong>Warnning</strong> : Strandard offers has limited to {0} voters. Users can continue to vote but only the first {0} votes are taken into account in the calculation of the resultles.", + "poll_maxVotersAlert_offers": "Read <a href=\"#home\">the offers page</a> to unlock this limit.", "poll_closedFrom": "Closing from", "poll_urlForAdmin" : "Administrate poll with this address", "poll_urlForVote" : "Invited new participants with this address", @@ -383,6 +385,8 @@ "user_deleteUserMessage": "Delete user ?", "user_name": "Name", "user_email": "Email", + "user_premiumTo": "Unlimited until ", + "user_premiumOf": "Unlimited end from", "user_cancel": "Cancel", "user_save": "Save", "userProfile_title": "My profile", diff --git a/pollen-ui-riot-js/src/main/web/i18n/fr.json b/pollen-ui-riot-js/src/main/web/i18n/fr.json index 77045106..d33dfa2f 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/fr.json +++ b/pollen-ui-riot-js/src/main/web/i18n/fr.json @@ -65,6 +65,8 @@ "poll_subscribers": "invités", "poll_participants": "participants", "poll_participation": "de participation", + "poll_maxVotersAlert": "<strong>Attention</strong> : L'offre standard est limitée à {0} votants. Les utilisateurs peuvent continuer à voter mais seul les {0} premiers votes sont pris en compte dans le calcul du résultat.", + "poll_maxVotersAlert_offers": "Cousulter <a href=\"#home\">la page des nos offres</a> pour déverrouiller cette limite.", "poll_closedFrom": "Fermé depuis le", "poll_urlForAdmin" : "Administrer ce sondage avec cette adresse", "poll_urlForVote" : "Inviter de nouveaux participants en leur envoyant cette adresse", @@ -383,6 +385,8 @@ "user_deleteUserMessage": "Supprimer l'utilisateur ?", "user_name": "Nom", "user_email": "Courriel", + "user_premiumTo": "Illimité jusqu'au", + "user_premiumOf": "Fin de l'illimité depuis le", "user_cancel": "Annuler", "user_save": "Enregistrer", "userProfile_title": "Mon profil", diff --git a/pollen-ui-riot-js/src/main/web/tag/admin/UserCard.tag.html b/pollen-ui-riot-js/src/main/web/tag/admin/UserCard.tag.html index 6bf7f5a0..72e1b301 100644 --- a/pollen-ui-riot-js/src/main/web/tag/admin/UserCard.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/admin/UserCard.tag.html @@ -27,6 +27,15 @@ require("./UserEditModal.tag.html"); onedit={edit} class="user-card"> <yield to="detail"> + <i if={parent.opts.user.premium} + class="premium winner fa fa-star" + aria-hidden="true" + title={parent.__.premiumTo + ' ' + parent.formatDate(parent.opts.user.premiumTo, 'LL')}> + </i> + <i if={!parent.opts.user.premium && parent.opts.user.premiumTo} + class="premium fa fa-star-o" + aria-hidden="true" + title={parent.__.premiumOf + ' ' + parent.formatDate(parent.opts.user.premiumTo, 'LL')}></i> <div class="user-email"> <i class="fa fa-refresh" if={!parent.opts.user.emailIsValidate} title={parent.__.emailValidate}></i> {parent.opts.user.email} @@ -127,5 +136,12 @@ require("./UserEditModal.tag.html"); justify-content: space-around; } + .premium { + position: absolute; + top: 65px; + font-size: 3em; + left: 105px; + } + </style> </UserCard> diff --git a/pollen-ui-riot-js/src/main/web/tag/admin/UserEditModal.tag.html b/pollen-ui-riot-js/src/main/web/tag/admin/UserEditModal.tag.html index 28610825..e8ccf5d2 100644 --- a/pollen-ui-riot-js/src/main/web/tag/admin/UserEditModal.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/admin/UserEditModal.tag.html @@ -47,6 +47,17 @@ require("../popup/Modal.tag.html"); <div class="c-hint c-hint--static c-hint--error" each={error in parent.errors.email}>{error}</div> </div> <div class="o-form-element"> + <label class="c-label" for="premiumTo">{parent.__.premiumTo}</label> + <date-picker class="o-field o-field--icon-left" + inputclass="c-field o-field--icon-left" + iconleftclass="calendar" + id="premiumTo" + ref="premiumTo" + date="{parent.premiumTo}"> + </date-picker> + <div class="c-hint c-hint--static c-hint--error" each={error in parent.errors.premiumTo}>{error}</div> + </div> + <div class="o-form-element"> <label class="c-toggle c-toggle--info"> {parent.__.administrator} <input type="checkbox" @@ -91,8 +102,10 @@ require("../popup/Modal.tag.html"); let Message = require("../../js/Message"); this.installBundle(session, "user"); let userService = require("../../js/UserService"); + let moment = require("moment-timezone"); this.errors = {}; + this.premiumTo = {date: moment(this.opts.user.premiumTo)}; this.open = () => { return this.refs.modal.open(); @@ -105,6 +118,7 @@ require("../popup/Modal.tag.html"); user2.administrator = this.refs.modal.refs.administrator.checked; user2.banned = this.refs.modal.refs.banned.checked; user2.emailIsValidate = this.refs.modal.refs.emailIsValidate.checked; + user2.premiumTo = this.refs.modal.refs.premiumTo.getValue(); return userService.saveUser(user2).then(() => { this.errors = {}; @@ -118,5 +132,10 @@ require("../popup/Modal.tag.html"); }; </script> + <style> + date-picker { + display: inherit; + } + </style> </UserEditModal> diff --git a/pollen-ui-riot-js/src/main/web/tag/components/InnerHtml.tag.html b/pollen-ui-riot-js/src/main/web/tag/components/InnerHtml.tag.html new file mode 100644 index 00000000..66958648 --- /dev/null +++ b/pollen-ui-riot-js/src/main/web/tag/components/InnerHtml.tag.html @@ -0,0 +1,14 @@ +<InnerHtml> + + <span ref="html"></span> + + <script> + + this.updateHtml = () => { + this.refs.html.innerHTML = this.opts.html; + }; + + this.on("update", this.updateHtml); + </script> + +</InnerHtml> diff --git a/pollen-ui-riot-js/src/main/web/tag/components/date-picker.tag.html b/pollen-ui-riot-js/src/main/web/tag/components/date-picker.tag.html index e2ba23f8..a0f93916 100644 --- a/pollen-ui-riot-js/src/main/web/tag/components/date-picker.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/components/date-picker.tag.html @@ -58,7 +58,7 @@ this.session = require("../../js/Session"); this.format = "LL"; - this.moment = require("moment"); + this.moment = require("moment-timezone"); this.moment.locale(this.session.locale); this.installBundle(this.session, "date-picker", locale => { @@ -231,6 +231,17 @@ this.refs.date.focus(); }; + this.getValue = () => { + if (this.session.dateInputSupported) { + return this.moment(this.refs.date.value).valueOf(); + } + if (!this.date.date) { + return null; + } + let selectedMoment = this.moment.tz(this.date.date, this.moment.tz.guess()); + return selectedMoment.valueOf(); + }; + </script> <style scoped> diff --git a/pollen-ui-riot-js/src/main/web/tag/poll/Poll.tag.html b/pollen-ui-riot-js/src/main/web/tag/poll/Poll.tag.html index 00f4c110..ba136545 100644 --- a/pollen-ui-riot-js/src/main/web/tag/poll/Poll.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/poll/Poll.tag.html @@ -25,6 +25,7 @@ require("./Choices.tag.html"); require("./Settings.tag.html"); require("../popup/QrCodeButton.tag.html"); require("../components/MultiLineLabel.tag.html"); +require("../components/InnerHtml.tag.html"); require("./Report.tag.html"); <Poll> @@ -131,6 +132,12 @@ require("./Report.tag.html"); <p><MultiLineLabel label="{poll.description}"></MultiLineLabel></p> </div> + <div if={poll.maxVoters > 0 && poll.voteCount > poll.maxVoters} + class="c-alert c-alert--warning"> + <InnerHtml html={_l("maxVotersAlert", poll.maxVoters)}/> + <InnerHtml if={poll.permission} html={__.maxVotersAlert_offers} /> + </div> + <Votes if={selectedTab === "votes"}/> <Results if={selectedTab === "results"}/> -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.