This is an automated email from the git hooks/post-receive script. New commit to branch devel in repository Pollen. See http://git.None/Pollen.git commit b7b3409aa55e63dc5528b10715fa1c0d1cc26ecd Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue May 27 22:15:35 2014 +0200 Use pagination list for comments, polls, favoriteLists and users + improve PollenBeans API --- .../pollen/persistence/entity/CommentTopiaDao.java | 10 ++- .../pollen/persistence/entity/PollTopiaDao.java | 18 +++-- .../rest/api/converter/JsonArrayConverter.java | 6 +- .../org/chorem/pollen/rest/api/v1/CommentApi.java | 8 +- .../chorem/pollen/rest/api/v1/FavoriteListApi.java | 7 +- .../org/chorem/pollen/rest/api/v1/PollApi.java | 19 ++--- .../chorem/pollen/rest/api/v1/PollenUserApi.java | 8 +- .../org/chorem/pollen/rest/api/v1/VoteApi.java | 7 ++ .../pollen/services/TopiaEntityCopyVisitor.java | 2 +- .../pollen/services/bean/ChoiceScoreBean.java | 1 - .../chorem/pollen/services/bean/PollenBeans.java | 86 ++++++++++++++++++++ .../pollen/services/bean/PollenPaginationList.java | 53 +++++++++++++ .../services/bean/PollenPaginationParameter.java | 52 ++++++++++++ .../services/config/PollenServiceConfig.java | 24 ++++++ .../services/config/PollenServiceConfigOption.java | 47 ++++++++++- .../pollen/services/service/ChoiceService.java | 63 +++++++-------- .../pollen/services/service/CommentService.java | 52 ++++++++---- .../services/service/FavoriteListService.java | 37 +++++++-- .../pollen/services/service/PollService.java | 92 ++++++++++++++-------- .../services/service/PollenServiceSupport.java | 72 +++++++++-------- .../pollen/services/service/PollenUserService.java | 53 ++++++++++--- .../pollen/services/service/VoteService.java | 45 ++++++++--- .../pollen/services/service/VoterListService.java | 16 ++-- .../test/FakePollenApplicationContext.java | 2 +- .../i18n/pollen-services_en_GB.properties | 4 + .../i18n/pollen-services_fr_FR.properties | 4 + .../services/service/PollenUserServiceTest.java | 7 +- 27 files changed, 594 insertions(+), 201 deletions(-) diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/CommentTopiaDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/CommentTopiaDao.java index 6ee2722..c314ee3 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/CommentTopiaDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/CommentTopiaDao.java @@ -21,15 +21,17 @@ package org.chorem.pollen.persistence.entity; * #L% */ -import java.util.List; +import org.nuiton.util.pagination.PaginationParameter; +import org.nuiton.util.pagination.PaginationResult; public class CommentTopiaDao extends AbstractCommentTopiaDao<Comment> { - public List<Comment> findAll(Poll poll) { + public PaginationResult<Comment> find(Poll poll, PaginationParameter paginationParameter) { - List<Comment> comments = forPollEquals(poll) + PaginationResult<Comment> comments = forPollEquals(poll) .setOrderByArguments(Comment.PROPERTY_TOPIA_CREATE_DATE) - .findAll(); + .findPage(paginationParameter); + return comments; } diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollTopiaDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollTopiaDao.java index f1f4089..55ac87a 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollTopiaDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollTopiaDao.java @@ -24,8 +24,10 @@ package org.chorem.pollen.persistence.entity; */ import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Sets; +import org.nuiton.util.pagination.PaginationParameter; +import org.nuiton.util.pagination.PaginationResult; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -35,19 +37,19 @@ import java.util.Set; */ public class PollTopiaDao extends AbstractPollTopiaDao<Poll> { - public Set<Poll> findAllCreated(PollenUser user) { - List<Poll> polls = forEquals(Poll.PROPERTY_CREATOR + "." + PollenPrincipal.PROPERTY_POLLEN_USER, user).findAll(); - return ImmutableSet.copyOf(polls); + public PaginationResult<Poll> findAllCreated(PollenUser user, PaginationParameter paginationParameter) { + PaginationResult<Poll> polls = forEquals(Poll.PROPERTY_CREATOR + "." + PollenPrincipal.PROPERTY_POLLEN_USER, user).findPage(paginationParameter); + return polls; } - public Set<Poll> findAllInvited(PollenUser user) { + public PaginationResult<Poll> findAllInvited(PollenUser user, PaginationParameter paginationParameter) { //TODO - return Sets.newHashSet(); + return PaginationResult.of(new ArrayList<Poll>(), 0, paginationParameter); } - public Set<Poll> findAllParticipated(PollenUser user) { + public PaginationResult<Poll> findAllParticipated(PollenUser user, PaginationParameter paginationParameter) { //TODO - return Sets.newHashSet(); + return PaginationResult.of(new ArrayList<Poll>(), 0, paginationParameter); } public Set<Poll> findAllFreePolls() { diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/converter/JsonArrayConverter.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/converter/JsonArrayConverter.java index 598a4ab..8bc1cb4 100644 --- a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/converter/JsonArrayConverter.java +++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/converter/JsonArrayConverter.java @@ -45,8 +45,10 @@ public class JsonArrayConverter<O> extends AbstractConverter { public JsonArrayConverter(TopiaIdFactory topiaIdFactory, Class<O> entityType) { - this.arrayType = (Class<O[]>) new TypeToken<O[]>() {} - .where(new TypeParameter<O>() {}, entityType) + this.arrayType = (Class<O[]>) new TypeToken<O[]>() { + } + .where(new TypeParameter<O>() { + }, entityType) .getType(); this.jsonHelper = new JsonHelper(topiaIdFactory, false); } diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/CommentApi.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/CommentApi.java index 7113148..cfbcdfd 100644 --- a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/CommentApi.java +++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/CommentApi.java @@ -28,12 +28,12 @@ import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.services.bean.CommentBean; import org.chorem.pollen.services.bean.PollenEntityId; import org.chorem.pollen.services.bean.PollenEntityRef; +import org.chorem.pollen.services.bean.PollenPaginationList; +import org.chorem.pollen.services.bean.PollenPaginationParameter; import org.chorem.pollen.services.service.CommentService; import org.chorem.pollen.services.service.InvalidFormException; import org.debux.webmotion.server.WebMotionController; -import java.util.List; - /** * TODO @@ -43,9 +43,9 @@ import java.util.List; */ public class CommentApi extends WebMotionController { - public List<CommentBean> getComments(CommentService commentService, PollenEntityId<Poll> pollId) { + public PollenPaginationList<CommentBean> getComments(CommentService commentService, PollenEntityId<Poll> pollId, PollenPaginationParameter paginationParameter) { - List<CommentBean> comments = commentService.getComments(pollId.getEntityId()); + PollenPaginationList<CommentBean> comments = commentService.getComments(pollId.getEntityId(), paginationParameter); return comments; } diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/FavoriteListApi.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/FavoriteListApi.java index 17d0e0f..101e4d8 100644 --- a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/FavoriteListApi.java +++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/FavoriteListApi.java @@ -29,13 +29,14 @@ import org.chorem.pollen.services.bean.FavoriteListBean; import org.chorem.pollen.services.bean.FavoriteListMemberBean; import org.chorem.pollen.services.bean.PollenEntityId; import org.chorem.pollen.services.bean.PollenEntityRef; +import org.chorem.pollen.services.bean.PollenPaginationList; +import org.chorem.pollen.services.bean.PollenPaginationParameter; import org.chorem.pollen.services.service.FavoriteListImportException; import org.chorem.pollen.services.service.FavoriteListService; import org.chorem.pollen.services.service.InvalidFormException; import org.debux.webmotion.server.WebMotionController; import java.io.File; -import java.util.List; import java.util.Set; /** @@ -46,9 +47,9 @@ import java.util.Set; */ public class FavoriteListApi extends WebMotionController { - public List<FavoriteListBean> getFavoriteLists(FavoriteListService favoriteListService) { + public PollenPaginationList<FavoriteListBean> getFavoriteLists(FavoriteListService favoriteListService, PollenPaginationParameter paginationParameter) { - List<FavoriteListBean> favoriteLists = favoriteListService.getFavoriteLists(); + PollenPaginationList<FavoriteListBean> favoriteLists = favoriteListService.getFavoriteLists(paginationParameter); return favoriteLists; } diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollApi.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollApi.java index 2ca20ab..a1937b5 100644 --- a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollApi.java +++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollApi.java @@ -29,6 +29,8 @@ import org.chorem.pollen.services.bean.ChoiceBean; import org.chorem.pollen.services.bean.PollBean; import org.chorem.pollen.services.bean.PollenEntityId; import org.chorem.pollen.services.bean.PollenEntityRef; +import org.chorem.pollen.services.bean.PollenPaginationList; +import org.chorem.pollen.services.bean.PollenPaginationParameter; import org.chorem.pollen.services.bean.VoterListBean; import org.chorem.pollen.services.service.InvalidFormException; import org.chorem.pollen.services.service.PollService; @@ -36,7 +38,6 @@ import org.debux.webmotion.server.WebMotionController; import java.io.File; import java.util.List; -import java.util.Set; /** * TODO @@ -53,30 +54,30 @@ public class PollApi extends WebMotionController { } - public Set<PollBean> getPolls(PollService pollService) { + public PollenPaginationList<PollBean> getPolls(PollService pollService, PollenPaginationParameter paginationParameter) { - Set<PollBean> polls = pollService.getPolls(); + PollenPaginationList<PollBean> polls = pollService.getPolls(paginationParameter); return polls; } - public Set<PollBean> getCreatedPolls(PollService pollService) { + public PollenPaginationList<PollBean> getCreatedPolls(PollService pollService, PollenPaginationParameter paginationParameter) { - Set<PollBean> polls = pollService.getCreatedPolls(); + PollenPaginationList<PollBean> polls = pollService.getCreatedPolls(paginationParameter); return polls; } - public Set<PollBean> getInvitedPolls(PollService pollService) { + public PollenPaginationList<PollBean> getInvitedPolls(PollService pollService, PollenPaginationParameter paginationParameter) { - Set<PollBean> polls = pollService.getInvitedPolls(); + PollenPaginationList<PollBean> polls = pollService.getInvitedPolls(paginationParameter); return polls; } - public Set<PollBean> getParticipatedPolls(PollService pollService) { + public PollenPaginationList<PollBean> getParticipatedPolls(PollService pollService, PollenPaginationParameter paginationParameter) { - Set<PollBean> polls = pollService.getParticipatedPolls(); + PollenPaginationList<PollBean> polls = pollService.getParticipatedPolls(paginationParameter); return polls; } diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollenUserApi.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollenUserApi.java index 4d42c3b..5be41ec 100644 --- a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollenUserApi.java +++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollenUserApi.java @@ -26,6 +26,8 @@ package org.chorem.pollen.rest.api.v1; import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.services.bean.PollenEntityId; import org.chorem.pollen.services.bean.PollenEntityRef; +import org.chorem.pollen.services.bean.PollenPaginationList; +import org.chorem.pollen.services.bean.PollenPaginationParameter; import org.chorem.pollen.services.bean.PollenUserBean; import org.chorem.pollen.services.service.InvalidFormException; import org.chorem.pollen.services.service.PollenUserService; @@ -33,8 +35,6 @@ import org.chorem.pollen.services.service.security.PollenInvalidEmailActivationT import org.chorem.pollen.services.service.security.PollenInvalidPasswordException; import org.debux.webmotion.server.WebMotionController; -import java.util.List; - /** * TODO * @@ -43,9 +43,9 @@ import java.util.List; */ public class PollenUserApi extends WebMotionController { - public List<PollenUserBean> getUsers(PollenUserService pollenUserService) { + public PollenPaginationList<PollenUserBean> getUsers(PollenUserService pollenUserService, PollenPaginationParameter paginationParameter) { - List<PollenUserBean> users = pollenUserService.getUsers(); + PollenPaginationList<PollenUserBean> users = pollenUserService.getUsers(paginationParameter); return users; } diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoteApi.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoteApi.java index 072e758..938bccd 100644 --- a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoteApi.java +++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoteApi.java @@ -42,6 +42,13 @@ import java.util.List; */ public class VoteApi extends WebMotionController { + public VoteBean getNewVote(VoteService voteService) { + + VoteBean newVote = voteService.getNewVote(); + return newVote; + + } + public List<VoteBean> getVotes(VoteService voteService, PollenEntityId<Poll> pollId) { List<VoteBean> votes = voteService.getVotes(pollId.getEntityId()); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/TopiaEntityCopyVisitor.java b/pollen-services/src/main/java/org/chorem/pollen/services/TopiaEntityCopyVisitor.java index e42f3a7..4261f6e 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/TopiaEntityCopyVisitor.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/TopiaEntityCopyVisitor.java @@ -168,7 +168,7 @@ public class TopiaEntityCopyVisitor<T extends TopiaApplicationContext> implement current.setTopiaId(source.getTopiaId()); current.setTopiaCreateDate(source.getTopiaCreateDate()); current.setTopiaVersion(source.getTopiaVersion()); - if (source.isDeleted()){ + if (source.isDeleted()) { current.notifyDeleted(); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChoiceScoreBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChoiceScoreBean.java index 0f07a0d..cf4032b 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChoiceScoreBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChoiceScoreBean.java @@ -24,7 +24,6 @@ package org.chorem.pollen.services.bean; import com.google.common.base.Preconditions; import org.chorem.pollen.persistence.entity.Choice; import org.chorem.pollen.votecounting.model.ChoiceScore; -import org.chorem.pollen.votecounting.model.VoteCountingResult; import java.math.BigDecimal; 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 new file mode 100644 index 0000000..773ca1b --- /dev/null +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBeans.java @@ -0,0 +1,86 @@ +package org.chorem.pollen.services.bean; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import org.chorem.pollen.services.PollenTechnicalException; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.pagination.PaginationResult; + +import java.util.ArrayList; +import java.util.Collection; + +/** + * Created on 5/27/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.0 + */ +public class PollenBeans { + + public static <E extends TopiaEntity, B extends PollenBean<E>> B toBean(Class<B> beanType, E entity, Function<B, 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>> PollenPaginationList<B> toPaginationListBean(Class<B> beanType, PaginationResult<E> entities, Function<B, B> beanFunction) { + + ImmutableList<B> bs = toBeanList(beanType, entities.getElements(), beanFunction); + + PollenPaginationList<B> result = new PollenPaginationList<>(); + result.setElements(bs); + result.setPageSize(entities.getCurrentPage().getPageSize()); + result.setCurrentPage(entities.getCurrentPage().getPageNumber()); + result.setLastPage(entities.getLastPage().getPageNumber()); + + return result; + + } + + 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); + } + + ImmutableSet<B> result = ImmutableSet.copyOf(copy); + + return result; + + } + + 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); + } + + ImmutableList<B> result = ImmutableList.copyOf(copy); + + return result; + + } + +} diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenPaginationList.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenPaginationList.java new file mode 100644 index 0000000..e263a16 --- /dev/null +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenPaginationList.java @@ -0,0 +1,53 @@ +package org.chorem.pollen.services.bean; + +import java.util.List; + +/** + * Created on 5/27/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.0 + */ +public class PollenPaginationList<O extends PollenBean> { + + protected List<O> elements; + + protected int currentPage; + + protected int lastPage; + + protected int pageSize; + + public List<O> getElements() { + return elements; + } + + public void setElements(List<O> elements) { + this.elements = elements; + } + + public int getCurrentPage() { + return currentPage; + } + + public void setCurrentPage(int currentPage) { + this.currentPage = currentPage; + } + + public int getLastPage() { + return lastPage; + } + + public void setLastPage(int lastPage) { + this.lastPage = lastPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + +} diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenPaginationParameter.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenPaginationParameter.java new file mode 100644 index 0000000..2afc6f1 --- /dev/null +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenPaginationParameter.java @@ -0,0 +1,52 @@ +package org.chorem.pollen.services.bean; + +import org.nuiton.util.pagination.PaginationParameter; + +/** + * Created on 5/27/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.0 + */ +public class PollenPaginationParameter { + + /** + * 0-based page number + */ + protected int pageNumber; + + /** + * The size of each page. Value can be -1 (for infinite pageSize) or greater than 0 + */ + protected int pageSize; + + public static PollenPaginationParameter of(int pageNumber, int pageSize) { + PollenPaginationParameter result = new PollenPaginationParameter(); + result.setPageNumber(pageNumber); + result.setPageSize(pageSize); + return result; + } + + public PaginationParameter toPaginationParameter() { + + PaginationParameter paginationParameter = PaginationParameter.of(pageNumber, pageSize); + return paginationParameter; + + } + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } +} diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/config/PollenServiceConfig.java b/pollen-services/src/main/java/org/chorem/pollen/services/config/PollenServiceConfig.java index 706bb94..a7c6b8b 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/config/PollenServiceConfig.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/config/PollenServiceConfig.java @@ -165,6 +165,30 @@ public class PollenServiceConfig { return result; } + public int getDefaultPollPaginationSize() { + int result = applicationConfig.getOptionAsInt( + PollenServiceConfigOption.DEFAULT_POLLS_PAGE_SIZE.key); + return result; + } + + public int getDefaultCommentPaginationSize() { + int result = applicationConfig.getOptionAsInt( + PollenServiceConfigOption.DEFAULT_COMMENTS_PAGE_SIZE.key); + return result; + } + + public int getDefaultFavoriteListPaginationSize() { + int result = applicationConfig.getOptionAsInt( + PollenServiceConfigOption.DEFAULT_FAVORITE_LISTS_PAGE_SIZE.key); + return result; + } + + public int getDefaultPollenUserPaginationSize() { + int result = applicationConfig.getOptionAsInt( + PollenServiceConfigOption.DEFAULT_POLLEN_USERS_PAGE_SIZE.key); + return result; + } + public int getSessionTimeoutDelay() { int result = applicationConfig.getOptionAsInt( PollenServiceConfigOption.SESSION_TIMEOUT_DELAY.key); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/config/PollenServiceConfigOption.java b/pollen-services/src/main/java/org/chorem/pollen/services/config/PollenServiceConfigOption.java index 58c4623..d47629f 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/config/PollenServiceConfigOption.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/config/PollenServiceConfigOption.java @@ -121,6 +121,50 @@ public enum PollenServiceConfigOption implements ConfigOptionDef { ChoiceType.class), /** + * Default polls pagination page size. + * + * @since 2.0 + */ + DEFAULT_POLLS_PAGE_SIZE( + "pollen.default.pollPageSize", + n("pollen.configuration.defaultPollPageSize"), + "10", + int.class), + + /** + * Default comments pagination page size. + * + * @since 2.0 + */ + DEFAULT_COMMENTS_PAGE_SIZE( + "pollen.default.commentPageSize", + n("pollen.configuration.defaultCommentPageSize"), + "10", + int.class), + + /** + * Default favorite lists pagination page size. + * + * @since 2.0 + */ + DEFAULT_FAVORITE_LISTS_PAGE_SIZE( + "pollen.default.favoriteListPageSize", + n("pollen.configuration.defaultFavoriteListPageSize"), + "10", + int.class), + /** + * Default pollen users pagination page size. + * + * @since 2.0 + */ + DEFAULT_POLLEN_USERS_PAGE_SIZE( + "pollen.default.pollenUserPageSize", + n("pollen.configuration.defaultPollenUserPageSize"), + "10", + int.class), + + + /** * Default poll choice type to use at a new choice creation. * * @since 2.0 @@ -161,8 +205,7 @@ public enum PollenServiceConfigOption implements ConfigOptionDef { "pollen.version", "Version de l'application", null, - Version.class), - ; + Version.class),; protected final String key; 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 11a7f02..2514e88 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 @@ -23,13 +23,13 @@ package org.chorem.pollen.services.service; * #L% */ +import com.google.common.base.Function; 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.ChoiceTopiaDao; import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.PollenPrincipal; -import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.services.bean.ChoiceBean; import org.chorem.pollen.services.bean.PollenEntityRef; import org.chorem.pollen.services.service.security.PermissionVerb; @@ -45,6 +45,16 @@ import java.util.Set; */ public class ChoiceService extends PollenServiceSupport { + protected Function<ChoiceBean, ChoiceBean> choiceBeanFunction = new Function<ChoiceBean, ChoiceBean>() { + @Override + public ChoiceBean apply(ChoiceBean input) { + if (isNotPermitted(PermissionVerb.editChoice, input.getEntityId())) { + input.setPermission(null); + } + return input; + } + }; + public List<ChoiceBean> getChoices(String pollId) { checkNotNull(pollId); @@ -52,16 +62,7 @@ public class ChoiceService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); List<Choice> choices = getChoiceDao().findAll(poll); - List<ChoiceBean> choiceBeans = copyAsList(ChoiceBean.class, choices); - - for (ChoiceBean choiceBean : choiceBeans) { - - if (isNotPermitted(PermissionVerb.editChoice, choiceBean.getEntityId())) { - choiceBean.setPermission(null); - } - - } - + List<ChoiceBean> choiceBeans = toBeanList(ChoiceBean.class, choices, choiceBeanFunction); return choiceBeans; } @@ -75,38 +76,30 @@ public class ChoiceService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); Choice choice = getChoice(poll, choiceId); - ChoiceBean choiceBean = copy(ChoiceBean.class, choice); - - if (isNotPermitted(PermissionVerb.editChoice, choiceBean.getEntityId())) { - choiceBean.setPermission(null); - } - + ChoiceBean choiceBean = toBean(ChoiceBean.class, choice, choiceBeanFunction); return choiceBean; } public ChoiceBean getNewChoice() { - Choice result = getChoiceDao().newInstance(); + ChoiceBean choiceBean = new ChoiceBean(); // -- default values -- // - result.setChoiceType(getPollenServiceConfig().getDefaultChoiceType()); - - // -- creator -- // - - PollenPrincipal creator = getPollenPrincipalDao().newInstance(); - result.setCreator(creator); - - PollenUser connectedUser = getConnectedUser(); - - if (connectedUser != null) { - - creator.setName(connectedUser.getName()); - creator.setEmail(connectedUser.getEmail()); - } - - ChoiceBean choiceBean = copy(ChoiceBean.class, result); + choiceBean.setChoiceType(getPollenServiceConfig().getDefaultChoiceType()); + +// // -- creator -- // +// +// PollenUser connectedUser = getConnectedUser(); +// +// if (connectedUser != null) { +// +// creator.setName(connectedUser.getName()); +// creator.setEmail(connectedUser.getEmail()); +// } +// +// ChoiceBean choiceBean = toBean(ChoiceBean.class, choiceBean ); return choiceBean; } @@ -154,7 +147,7 @@ public class ChoiceService extends PollenServiceSupport { getNotificationService().onChoiceEdited(poll, result); - return copy(ChoiceBean.class, result); + return toBean(ChoiceBean.class, result); } 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 8e20a02..bceb5ba 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 @@ -23,14 +23,17 @@ package org.chorem.pollen.services.service; * #L% */ +import com.google.common.base.Function; import org.chorem.pollen.persistence.entity.Comment; import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.PollenPrincipal; import org.chorem.pollen.services.bean.CommentBean; import org.chorem.pollen.services.bean.PollenEntityRef; +import org.chorem.pollen.services.bean.PollenPaginationList; +import org.chorem.pollen.services.bean.PollenPaginationParameter; import org.chorem.pollen.services.service.security.PermissionVerb; - -import java.util.List; +import org.nuiton.util.pagination.PaginationParameter; +import org.nuiton.util.pagination.PaginationResult; /** * TODO @@ -40,19 +43,26 @@ import java.util.List; */ public class CommentService extends PollenServiceSupport { - public List<CommentBean> getComments(String pollId) { + private Function<CommentBean, CommentBean> commentFunction = new Function<CommentBean, CommentBean>() { + @Override + public CommentBean apply(CommentBean input) { + if (isNotPermitted(PermissionVerb.readComment, input.getEntityId())) { + input.setPermission(null); + } + return input; + } + }; + + public PollenPaginationList<CommentBean> getComments(String pollId, PollenPaginationParameter paginationParameter) { checkNotNull(pollId); Poll poll = getPollService().getPoll0(pollId); - List<Comment> comments = getCommentDao().findAll(poll); - List<CommentBean> commentBeans = copyAsList(CommentBean.class, comments); + PaginationParameter page = getPaginationParameter(paginationParameter); - for (CommentBean commentBean : commentBeans) { - if (isNotPermitted(PermissionVerb.readComment, commentBean.getEntityId())) { - commentBean.setPermission(null); - } - } + PaginationResult<Comment> comments = getCommentDao().find(poll, page); + + PollenPaginationList<CommentBean> commentBeans = toPaginationListBean(CommentBean.class, comments, commentFunction); return commentBeans; @@ -67,11 +77,7 @@ public class CommentService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); Comment comment = getComment(poll, commentId); - CommentBean commentBean = copy(CommentBean.class, comment); - - if (isNotPermitted(PermissionVerb.readComment, commentBean.getEntityId())) { - commentBean.setPermission(null); - } + CommentBean commentBean = toBean(CommentBean.class, comment, commentFunction); return commentBean; @@ -114,7 +120,7 @@ public class CommentService extends PollenServiceSupport { getNotificationService().onCommentEdited(poll, result); - CommentBean commentBean = copy(CommentBean.class, result); + CommentBean commentBean = toBean(CommentBean.class, result); return commentBean; } @@ -199,4 +205,18 @@ public class CommentService extends PollenServiceSupport { } + protected PaginationParameter getPaginationParameter(PollenPaginationParameter paginationParameter) { + + if (paginationParameter == null) { + + int pageSize = getPollenServiceConfig().getDefaultCommentPaginationSize(); + paginationParameter = PollenPaginationParameter.of(0, pageSize); + + } + + PaginationParameter parameter = paginationParameter.toPaginationParameter(); + return parameter; + + } + } 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 48c1641..ba9a07b 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 @@ -36,7 +36,11 @@ import org.chorem.pollen.services.PollenTechnicalException; import org.chorem.pollen.services.bean.FavoriteListBean; import org.chorem.pollen.services.bean.FavoriteListMemberBean; import org.chorem.pollen.services.bean.PollenEntityRef; +import org.chorem.pollen.services.bean.PollenPaginationList; +import org.chorem.pollen.services.bean.PollenPaginationParameter; import org.nuiton.util.StringUtil; +import org.nuiton.util.pagination.PaginationParameter; +import org.nuiton.util.pagination.PaginationResult; import javax.naming.NamingEnumeration; import javax.naming.NamingException; @@ -65,13 +69,16 @@ import static org.nuiton.i18n.I18n.l; */ public class FavoriteListService extends PollenServiceSupport { - public List<FavoriteListBean> getFavoriteLists() { + public PollenPaginationList<FavoriteListBean> getFavoriteLists(PollenPaginationParameter paginationParameter) { checkIsConnected(); + PollenUser user = getConnectedUser(); - List<FavoriteList> favoriteLists = getFavoriteLists0(user); - List<FavoriteListBean> favoriteListBeans = copyAsList(FavoriteListBean.class, favoriteLists); + PaginationParameter page = getPaginationParameter(paginationParameter); + + PaginationResult<FavoriteList> favoriteLists = getFavoriteListDao().forPollenUserEquals(user).findPage(page); + PollenPaginationList<FavoriteListBean> favoriteListBeans = toPaginationListBean(FavoriteListBean.class, favoriteLists); return favoriteListBeans; } @@ -84,7 +91,7 @@ public class FavoriteListService extends PollenServiceSupport { PollenUser user = getConnectedUser(); FavoriteList favoriteList = getFavoriteList(user, favoriteListId); - FavoriteListBean favoriteListBean = copy(FavoriteListBean.class, favoriteList); + FavoriteListBean favoriteListBean = toBean(FavoriteListBean.class, favoriteList); return favoriteListBean; } @@ -130,7 +137,7 @@ public class FavoriteListService extends PollenServiceSupport { getNotificationService().onFavoriteListEdited(user, result); - FavoriteListBean favoriteListBean = copy(FavoriteListBean.class, result); + FavoriteListBean favoriteListBean = toBean(FavoriteListBean.class, result); return favoriteListBean; } @@ -161,7 +168,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteList favoriteList = getFavoriteList(user, favoriteListId); Set<FavoriteListMember> members = favoriteList.getMember(); - Set<FavoriteListMemberBean> memberBeans = copyAsSet(FavoriteListMemberBean.class, members); + Set<FavoriteListMemberBean> memberBeans = toBeanSet(FavoriteListMemberBean.class, members); return memberBeans; } @@ -177,7 +184,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteList favoriteList = getFavoriteList(user, favoriteListId); FavoriteListMember member = getFavoriteListMember(favoriteList, memberId); - FavoriteListMemberBean memberBean = copy(FavoriteListMemberBean.class, member); + FavoriteListMemberBean memberBean = toBean(FavoriteListMemberBean.class, member); return memberBean; } @@ -227,7 +234,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteListMember result = saveFavoriteListMember(favoriteList, member); commit(); - FavoriteListMemberBean memberBean = copy(FavoriteListMemberBean.class, result); + FavoriteListMemberBean memberBean = toBean(FavoriteListMemberBean.class, result); return memberBean; } @@ -633,4 +640,18 @@ public class FavoriteListService extends PollenServiceSupport { } + protected PaginationParameter getPaginationParameter(PollenPaginationParameter paginationParameter) { + + if (paginationParameter == null) { + + int pageSize = getPollenServiceConfig().getDefaultFavoriteListPaginationSize(); + paginationParameter = PollenPaginationParameter.of(0, pageSize); + + } + + PaginationParameter parameter = paginationParameter.toPaginationParameter(); + return parameter; + + } + } 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 ceed97b..af9f7a1 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 @@ -23,6 +23,7 @@ package org.chorem.pollen.services.service; * #L% */ +import com.google.common.base.Function; import org.apache.commons.collections4.CollectionUtils; import org.chorem.pollen.persistence.entity.Choice; import org.chorem.pollen.persistence.entity.Poll; @@ -32,13 +33,16 @@ import org.chorem.pollen.persistence.entity.VoterList; import org.chorem.pollen.services.bean.ChoiceBean; import org.chorem.pollen.services.bean.PollBean; import org.chorem.pollen.services.bean.PollenEntityRef; +import org.chorem.pollen.services.bean.PollenPaginationList; +import org.chorem.pollen.services.bean.PollenPaginationParameter; import org.chorem.pollen.services.bean.VoterListBean; import org.chorem.pollen.services.service.security.PermissionVerb; +import org.nuiton.util.pagination.PaginationParameter; +import org.nuiton.util.pagination.PaginationResult; import java.io.File; import java.util.ArrayList; import java.util.List; -import java.util.Set; import static org.nuiton.i18n.I18n.l; @@ -50,49 +54,65 @@ import static org.nuiton.i18n.I18n.l; */ public class PollService extends PollenServiceSupport { - public Set<PollBean> getPolls() { + private Function<PollBean, PollBean> pollBeanFunction = new Function<PollBean, PollBean>() { + @Override + public PollBean apply(PollBean input) { + if (isNotPermitted(PermissionVerb.editPoll, input.getEntityId())) { + input.setPermission(null); + input.setCreatorEmail(null); + input.setCreatorName(null); + } + return input; + } + }; + + public PollenPaginationList<PollBean> getPolls(PollenPaginationParameter paginationParameter) { checkIsConnected(); checkIsAdmin(); - List<Poll> polls = getPollDao().findAll(); - Set<PollBean> pollBeans = copyAsSet(PollBean.class, polls); + PaginationParameter page = getPaginationParameter(paginationParameter); + PaginationResult<Poll> polls = getPollDao().forAll().findPage(page); + PollenPaginationList<PollBean> pollBeans = toPaginationListBean(PollBean.class, polls); return pollBeans; } - public Set<PollBean> getCreatedPolls() { + public PollenPaginationList<PollBean> getCreatedPolls(PollenPaginationParameter paginationParameter) { checkIsConnected(); PollenUser connectedUser = getConnectedUser(); - Set<Poll> polls = getPollDao().findAllCreated(connectedUser); - Set<PollBean> pollBeans = copyAsSet(PollBean.class, polls); + PaginationParameter page = getPaginationParameter(paginationParameter); + PaginationResult<Poll> polls = getPollDao().findAllCreated(connectedUser, page); + PollenPaginationList<PollBean> pollBeans = toPaginationListBean(PollBean.class, polls); return pollBeans; } - public Set<PollBean> getInvitedPolls() { + public PollenPaginationList<PollBean> getInvitedPolls(PollenPaginationParameter paginationParameter) { checkIsConnected(); PollenUser connectedUser = getConnectedUser(); - Set<Poll> polls = getPollDao().findAllInvited(connectedUser); - Set<PollBean> pollBeans = copyAsSet(PollBean.class, polls); + PaginationParameter page = getPaginationParameter(paginationParameter); + PaginationResult<Poll> polls = getPollDao().findAllInvited(connectedUser, page); + PollenPaginationList<PollBean> pollBeans = toPaginationListBean(PollBean.class, polls); return pollBeans; } - public Set<PollBean> getParticipatedPolls() { + public PollenPaginationList<PollBean> getParticipatedPolls(PollenPaginationParameter paginationParameter) { checkIsConnected(); PollenUser connectedUser = getConnectedUser(); - Set<Poll> polls = getPollDao().findAllParticipated(connectedUser); - Set<PollBean> pollBeans = copyAsSet(PollBean.class, polls); + PaginationParameter page = getPaginationParameter(paginationParameter); + PaginationResult<Poll> polls = getPollDao().findAllParticipated(connectedUser, page); + PollenPaginationList<PollBean> pollBeans = toPaginationListBean(PollBean.class, polls); return pollBeans; } @@ -103,13 +123,8 @@ public class PollService extends PollenServiceSupport { checkPermission(PermissionVerb.readPoll, pollId); Poll poll = getPoll0(pollId); - PollBean pollBean = copy(PollBean.class, poll); - if (isNotPermitted(PermissionVerb.editPoll, pollBean.getEntityId())) { - pollBean.setPermission(null); - pollBean.setCreatorEmail(null); - pollBean.setCreatorName(null); - } + PollBean pollBean = toBean(PollBean.class, poll, pollBeanFunction); return pollBean; @@ -117,32 +132,28 @@ public class PollService extends PollenServiceSupport { public PollBean getNewPoll() { - Poll result = getPollDao().newInstance(); + PollBean pollBean = new PollBean(); // -- default values -- // - result.setVoteCountingType(getPollenServiceConfig().getDefaultVoteCountingType()); - result.setPollType(getPollenServiceConfig().getDefaultPollType()); - result.setVoteVisibility(getPollenServiceConfig().getDefaultVoteVisibility()); - result.setCommentVisibility(getPollenServiceConfig().getDefaultCommentVisibility()); - result.setResultVisibility(getPollenServiceConfig().getDefaultResultVisibility()); - result.setBeginDate(serviceContext.getNow()); + pollBean.setVoteCountingType(getPollenServiceConfig().getDefaultVoteCountingType()); + pollBean.setPollType(getPollenServiceConfig().getDefaultPollType()); + pollBean.setVoteVisibility(getPollenServiceConfig().getDefaultVoteVisibility()); + pollBean.setCommentVisibility(getPollenServiceConfig().getDefaultCommentVisibility()); + pollBean.setResultVisibility(getPollenServiceConfig().getDefaultResultVisibility()); + pollBean.setBeginDate(serviceContext.getNow()); // -- creator -- // - PollenPrincipal creator = getPollenPrincipalDao().newInstance(); - result.setCreator(creator); - PollenUser connectedUser = getConnectedUser(); if (connectedUser != null) { - creator.setName(connectedUser.getName()); - creator.setEmail(connectedUser.getEmail()); + pollBean.setCreatorName(connectedUser.getName()); + pollBean.setCreatorEmail(connectedUser.getEmail()); } - PollBean pollBean = copy(PollBean.class, result); return pollBean; } @@ -182,7 +193,7 @@ public class PollService extends PollenServiceSupport { getNotificationService().onPollEdited(savedPoll); - PollBean pollBean = copy(PollBean.class, savedPoll); + PollBean pollBean = toBean(PollBean.class, savedPoll); return pollBean; } @@ -213,7 +224,7 @@ public class PollService extends PollenServiceSupport { getNotificationService().onPollCreated(poll); - return copy(PollBean.class, poll); + return toBean(PollBean.class, poll); } @@ -420,4 +431,17 @@ public class PollService extends PollenServiceSupport { } + protected PaginationParameter getPaginationParameter(PollenPaginationParameter paginationParameter) { + + if (paginationParameter == null) { + + int pageSize = getPollenServiceConfig().getDefaultPollPaginationSize(); + paginationParameter = PollenPaginationParameter.of(0, pageSize); + + } + + return paginationParameter.toPaginationParameter(); + + } + } 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 daab70b..b4ceb4d 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 @@ -23,6 +23,7 @@ package org.chorem.pollen.services.service; * #L% */ +import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -45,8 +46,9 @@ import org.chorem.pollen.persistence.entity.VoterListMemberTopiaDao; import org.chorem.pollen.persistence.entity.VoterListTopiaDao; import org.chorem.pollen.services.PollenService; import org.chorem.pollen.services.PollenServiceContext; -import org.chorem.pollen.services.PollenTechnicalException; import org.chorem.pollen.services.bean.PollenBean; +import org.chorem.pollen.services.bean.PollenBeans; +import org.chorem.pollen.services.bean.PollenPaginationList; import org.chorem.pollen.services.config.PollenServiceConfig; import org.chorem.pollen.services.service.mail.EmailService; import org.chorem.pollen.services.service.security.PermissionVerb; @@ -54,8 +56,8 @@ import org.chorem.pollen.services.service.security.PollenSecurityContext; import org.chorem.pollen.services.service.security.SecurityService; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.StringUtil; +import org.nuiton.util.pagination.PaginationResult; -import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Locale; @@ -384,61 +386,61 @@ public abstract class PollenServiceSupport implements PollenService { } - protected <T extends TopiaEntity, B extends PollenBean<T>> B copy(Class<B> beanType, T entity) { + protected <T extends TopiaEntity, B extends PollenBean<T>> B toBean(Class<B> beanType, T entity) { - try { + B bean = toBean(beanType, entity, null); + return bean; - B bean = beanType.newInstance(); - bean.fromEntity(entity); - return bean; + } - } catch (InstantiationException | IllegalAccessException e) { - throw new PollenTechnicalException(e); - } + protected <T extends TopiaEntity, B extends PollenBean<T>> B toBean(Class<B> beanType, T entity, Function<B, B> beanFunction) { + + B bean = PollenBeans.toBean(beanType, entity, beanFunction); + return bean; } - protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableList<B> copyAsList(Class<B> beanType, Collection<T> entities) { + protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableList<B> toBeanList(Class<B> beanType, Collection<T> entities) { + + ImmutableList<B> list = toBeanList(beanType, entities, null); + return list; - Collection<B> copy = new ArrayList<>(); + } - for (T entity : entities) { - try { + protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableList<B> toBeanList(Class<B> beanType, Collection<T> entities, Function<B, B> beanFunction) { - B bean = beanType.newInstance(); - bean.fromEntity(entity); - copy.add(bean); + ImmutableList<B> list = PollenBeans.toBeanList(beanType, entities, beanFunction); + return list; - } catch (InstantiationException | IllegalAccessException e) { - throw new PollenTechnicalException(e); - } - } + } - ImmutableList<B> result = ImmutableList.copyOf(copy); + protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableSet<B> toBeanSet(Class<B> beanType, Collection<T> entities) { - return result; + ImmutableSet<B> set = toBeanSet(beanType, entities, null); + return set; } - protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableSet<B> copyAsSet(Class<B> beanType, Collection<T> entities) { + protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableSet<B> toBeanSet(Class<B> beanType, Collection<T> entities, Function<B, B> beanFunction) { - Collection<B> copy = new ArrayList<>(); + ImmutableSet<B> set = PollenBeans.toBeanSet(beanType, entities, beanFunction); + return set; - for (T entity : entities) { + } - try { - B bean = beanType.newInstance(); - bean.fromEntity(entity); - copy.add(bean); - } catch (InstantiationException | IllegalAccessException e) { - throw new PollenTechnicalException(e); - } - } + protected <E extends TopiaEntity, B extends PollenBean<E>> PollenPaginationList<B> toPaginationListBean(Class<B> beanType, PaginationResult<E> entities) { - ImmutableSet<B> result = ImmutableSet.copyOf(copy); + PollenPaginationList<B> result = toPaginationListBean(beanType, entities, null); + return result; + } + + protected <E extends TopiaEntity, B extends PollenBean<E>> PollenPaginationList<B> toPaginationListBean(Class<B> beanType, PaginationResult<E> entities, Function<B, B> beanFunction) { + + PollenPaginationList<B> result = PollenBeans.toPaginationListBean(beanType, entities, beanFunction); return result; } + } 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 dce5eca..f5d011e 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 @@ -23,17 +23,21 @@ package org.chorem.pollen.services.service; * #L% */ +import com.google.common.base.Function; import org.apache.commons.lang3.ObjectUtils; 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.services.PollenService; import org.chorem.pollen.services.bean.PollenEntityRef; +import org.chorem.pollen.services.bean.PollenPaginationList; +import org.chorem.pollen.services.bean.PollenPaginationParameter; import org.chorem.pollen.services.bean.PollenUserBean; import org.chorem.pollen.services.service.security.PollenInvalidEmailActivationTokenException; import org.chorem.pollen.services.service.security.PollenInvalidPasswordException; +import org.nuiton.util.pagination.PaginationParameter; +import org.nuiton.util.pagination.PaginationResult; -import java.util.List; import java.util.Objects; /** @@ -44,13 +48,24 @@ import java.util.Objects; */ public class PollenUserService extends PollenServiceSupport implements PollenService { - public List<PollenUserBean> getUsers() { + private Function<PollenUserBean, PollenUserBean> pollenUserFunction = new Function<PollenUserBean, PollenUserBean>() { + @Override + public PollenUserBean apply(PollenUserBean input) { + input.setPassword(null); + return input; + } + }; + + public PollenPaginationList<PollenUserBean> getUsers(PollenPaginationParameter paginationParameter) { checkIsConnected(); checkIsAdmin(); - List<PollenUser> pollenUsers = getPollenUserDao().findAll(); - List<PollenUserBean> pollenUserBeans = copyAsList(PollenUserBean.class, pollenUsers); + PaginationParameter page = getPaginationParameter(paginationParameter); + PaginationResult<PollenUser> pollenUsers = getPollenUserDao().forAll().findPage(page); + + PollenPaginationList<PollenUserBean> pollenUserBeans = toPaginationListBean(PollenUserBean.class, pollenUsers, pollenUserFunction); + return pollenUserBeans; } @@ -61,16 +76,12 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer checkNotNull(userId); PollenUser pollenUser = getUser0(userId); - PollenUserBean pollenUserBean = copy(PollenUserBean.class, pollenUser); + PollenUserBean pollenUserBean = toBean(PollenUserBean.class, pollenUser, pollenUserFunction); return pollenUserBean; } - protected PollenUser getUser0(String userId) { - return getPollenUserDao().findByTopiaId(userId); - } - public PollenEntityRef<PollenUser> createUser(PollenUserBean user, boolean generatePassword) throws InvalidFormException { checkNotNull(user); @@ -102,7 +113,7 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer getNotificationService().onUserEdited(result); - PollenUserBean pollenUserBean = copy(PollenUserBean.class, result); + PollenUserBean pollenUserBean = toBean(PollenUserBean.class, result); return pollenUserBean; } @@ -308,4 +319,26 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer } + protected PollenUser getUser0(String userId) { + + PollenUser pollenUser = getPollenUserDao().findByTopiaId(userId); + return pollenUser; + + } + + protected PaginationParameter getPaginationParameter(PollenPaginationParameter paginationParameter) { + + if (paginationParameter == null) { + + int pageSize = getPollenServiceConfig().getDefaultPollenUserPaginationSize(); + paginationParameter = PollenPaginationParameter.of(0, pageSize); + + } + + PaginationParameter parameter = paginationParameter.toPaginationParameter(); + return parameter; + + } + + } 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 a753379..90c6331 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 @@ -23,10 +23,12 @@ package org.chorem.pollen.services.service; * #L% */ +import com.google.common.base.Function; import org.apache.commons.lang3.StringUtils; import org.chorem.pollen.persistence.entity.Choice; import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.PollenPrincipal; +import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.persistence.entity.Polls; import org.chorem.pollen.persistence.entity.Vote; import org.chorem.pollen.persistence.entity.VoteToChoice; @@ -49,20 +51,41 @@ import java.util.Set; */ public class VoteService extends PollenServiceSupport { + private Function<VoteBean, VoteBean> voteBeanFunction = new Function<VoteBean, VoteBean>() { + @Override + public VoteBean apply(VoteBean input) { + if (isNotPermitted(PermissionVerb.editVote, input.getEntityId())) { + input.setPermission(null); + } + return input; + } + }; + + public VoteBean getNewVote() { + + VoteBean voteBean = new VoteBean(); + + PollenUser connectedUser = getConnectedUser(); + + if (connectedUser != null) { + + voteBean.setVoterName(connectedUser.getName()); + voteBean.setVoterId(connectedUser.getTopiaId()); + + } + + return voteBean; + + } + public List<VoteBean> getVotes(String pollId) { checkNotNull(pollId); Poll poll = getPollService().getPoll0(pollId); List<Vote> votes = getVotes0(poll); - List<VoteBean> voteBeans = copyAsList(VoteBean.class, votes); - for (VoteBean voteBean : voteBeans) { - if (isNotPermitted(PermissionVerb.editVote, voteBean.getEntityId())) { - voteBean.setPermission(null); - } - - } + List<VoteBean> voteBeans = toBeanList(VoteBean.class, votes, voteBeanFunction); return voteBeans; } @@ -75,12 +98,8 @@ public class VoteService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); Vote result = getVote(poll, voteId); - VoteBean voteBean = copy(VoteBean.class, result); - - if (isNotPermitted(PermissionVerb.editVote, voteBean.getEntityId())) { - voteBean.setPermission(null); - } + VoteBean voteBean = toBean(VoteBean.class, result, voteBeanFunction); return voteBean; } @@ -123,7 +142,7 @@ public class VoteService extends PollenServiceSupport { getNotificationService().onVoteEdited(poll, result); - VoteBean voteBean = copy(VoteBean.class, result); + VoteBean voteBean = toBean(VoteBean.class, result); return voteBean; } 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 fc91907..4d72516 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 @@ -79,7 +79,7 @@ public class VoterListService extends PollenServiceSupport { commit(); - return copy(VoterListBean.class, result); + return toBean(VoterListBean.class, result); } @@ -89,7 +89,7 @@ public class VoterListService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); List<VoterList> voterLists = getVoterLists0(poll); - List<VoterListBean> voterListBeans = copyAsList(VoterListBean.class, voterLists); + List<VoterListBean> voterListBeans = toBeanList(VoterListBean.class, voterLists); return voterListBeans; } @@ -100,7 +100,7 @@ public class VoterListService extends PollenServiceSupport { checkNotNull(voterListId); VoterList voterList = getVoterList0(pollId, voterListId); - VoterListBean voterListBean = copy(VoterListBean.class, voterList); + VoterListBean voterListBean = toBean(VoterListBean.class, voterList); return voterListBean; } @@ -146,7 +146,7 @@ public class VoterListService extends PollenServiceSupport { commit(); //TODO Notify - VoterListBean voterListBean = copy(VoterListBean.class, result); + VoterListBean voterListBean = toBean(VoterListBean.class, result); return voterListBean; } @@ -172,7 +172,7 @@ public class VoterListService extends PollenServiceSupport { VoterList voterList = getVoterList0(pollId, voterListId); Set<VoterListMember> members = voterList.getMember(); - Set<VoterListMemberBean> memberBeans = copyAsSet(VoterListMemberBean.class, members); + Set<VoterListMemberBean> memberBeans = toBeanSet(VoterListMemberBean.class, members); return memberBeans; } @@ -186,7 +186,7 @@ public class VoterListService extends PollenServiceSupport { VoterList voterList = getVoterList0(pollId, voterListId); VoterListMember member = getVoterListMember(voterList, memberId); - VoterListMemberBean memberBean = copy(VoterListMemberBean.class, member); + VoterListMemberBean memberBean = toBean(VoterListMemberBean.class, member); return memberBean; } @@ -208,7 +208,7 @@ public class VoterListService extends PollenServiceSupport { VoterListMember result = saveVoterListMember(voterList, member); commit(); - VoterListMemberBean memberBean = copy(VoterListMemberBean.class, result); + VoterListMemberBean memberBean = toBean(VoterListMemberBean.class, result); return memberBean; } @@ -230,7 +230,7 @@ public class VoterListService extends PollenServiceSupport { VoterListMember result = saveVoterListMember(voterList, member); commit(); - VoterListMemberBean memberBean = copy(VoterListMemberBean.class, result); + VoterListMemberBean memberBean = toBean(VoterListMemberBean.class, result); return memberBean; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java index eba5700..867b5cb 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java @@ -188,7 +188,7 @@ public class FakePollenApplicationContext extends TestWatcher implements PollenA } return voteCountingFactory; - + } @Override 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 15216c2..241b5fb 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 @@ -1,9 +1,13 @@ pollen.configuration.data.directory=Directory where Pollen stores his data +pollen.configuration.defaultCommentPageSize= +pollen.configuration.defaultFavoriteListPageSize= pollen.configuration.defaultPollChoiceType=Default choice type used when creating a new poll pollen.configuration.defaultPollCommentVisibility=Default Poll comment visibility used when creating a new poll +pollen.configuration.defaultPollPageSize= pollen.configuration.defaultPollResultVisibility=Default Result vsibility used when creating a new poll pollen.configuration.defaultPollType=Default Poll type used when creating a new poll pollen.configuration.defaultPollVoteVisibility=Default Poll vote visibility used when creating a new poll +pollen.configuration.defaultPollenUserPageSize= pollen.configuration.defaultVoteCountingType=Default vote counting type used when creating a new poll pollen.configuration.sessionTimeoutDelay=Inactivity delay before invalidate the session of a user (in seconds) pollen.error.favoriteList.import.csv.already.used.email= 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 1d2afbe..3f8f499 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 @@ -1,9 +1,13 @@ pollen.configuration.data.directory=Répertoire de données de l'application +pollen.configuration.defaultCommentPageSize= +pollen.configuration.defaultFavoriteListPageSize= pollen.configuration.defaultPollChoiceType=Type de choix par défaut lors de la création d'un nouveau sondage pollen.configuration.defaultPollCommentVisibility=Visibilité des commentaires par défaut lors de la création d'un nouveau sondage +pollen.configuration.defaultPollPageSize= pollen.configuration.defaultPollResultVisibility=Visibilité des résultats par défaut lors de la création d'un nouveau sondage pollen.configuration.defaultPollType=Type de sondage par défaut lors de la création d'un nouveau sondage pollen.configuration.defaultPollVoteVisibility=Visibilité des votes par défaut lors de la création d'un nouveau sondage +pollen.configuration.defaultPollenUserPageSize= pollen.configuration.defaultVoteCountingType=Type de dépouillement par défaut lors de la création d'un nouveau sondage pollen.configuration.sessionTimeoutDelay=Temps autorisé d'inactivité avant d'invalider une session utilisateur (en secondes) pollen.error.favoriteList.import.csv.already.used.email= 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 43cb7e8..6f964d1 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 @@ -27,6 +27,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.services.AbstractPollenServiceTest; import org.chorem.pollen.services.bean.PollenEntityRef; +import org.chorem.pollen.services.bean.PollenPaginationList; import org.chorem.pollen.services.bean.PollenUserBean; import org.chorem.pollen.services.service.security.PollenAuthenticationException; import org.chorem.pollen.services.service.security.PollenInvalidSessionTokenException; @@ -37,7 +38,6 @@ import org.nuiton.topia.persistence.TopiaNoResultException; import java.text.ParseException; import java.util.Date; -import java.util.List; /** * TODO @@ -68,10 +68,10 @@ public class PollenUserServiceTest extends AbstractPollenServiceTest { login("jean", "fake"); - List<PollenUserBean> users = service.getUsers(); + PollenPaginationList<PollenUserBean> users = service.getUsers(null); Assert.assertNotNull(users); - Assert.assertTrue(CollectionUtils.isNotEmpty(users)); + Assert.assertTrue(CollectionUtils.isNotEmpty(users.getElements())); } @@ -148,6 +148,7 @@ public class PollenUserServiceTest extends AbstractPollenServiceTest { login("jean", "fake"); PollenUserBean user = service.getUser(this.user.getTopiaId()); + user.setPassword("password"); Assert.assertNotNull(user); // Assert.assertNull(user.getEmailActivationToken()); -- To stop receiving notification emails like this one, please contact Chorem.org SCM administrator <admin+scm@chorem.org>.