This is an automated email from the git hooks/post-receive script. New commit to branch feature/refonte-ui in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit 271a14a70c41ba8817a7772419563fe71cf926ea Author: Cécilia Bossard <bossard@codelutin.com> Date: Wed May 6 14:59:29 2020 +0200 Refonte ui : ajout de nouveaux filtres pour la récupération des sondages --- .../pollen/persistence/entity/PollTopiaDao.java | 84 +++++++++++++++++++++- .../org/chorem/pollen/rest/api/v1/PollApi.java | 21 ++++-- .../pollen/services/service/PollService.java | 22 ++++-- 3 files changed, 111 insertions(+), 16 deletions(-) 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 72c0a479..54e218af 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 @@ -58,7 +58,20 @@ public class PollTopiaDao extends AbstractPollTopiaDao<Poll> { } - public PaginationResult<Poll> findAllCreated(PollenUser user, PaginationParameter page, String search) { + public PaginationResult<Poll> findAllUserPolls(PollenUser user, PaginationParameter page, String search, String filter) { + + Map<String, Object> parameters = Maps.newHashMap(); + parameters.put("user", user); + + String hqlCondition = ""; + if (StringUtils.isNotEmpty(filter)) { + hqlCondition += filterCondition(filter, parameters); + } + + return findAllUserPollsWithConditions(user, page, search, parameters, hqlCondition); + } + + public PaginationResult<Poll> findAllCreated(PollenUser user, PaginationParameter page, String search, String filter) { Map<String, Object> parameters = Maps.newHashMap(); parameters.put("user", user); @@ -69,10 +82,14 @@ public class PollTopiaDao extends AbstractPollTopiaDao<Poll> { hql += " AND " + DaoUtils.getSearchClause("poll", parameters, Poll.PROPERTY_TITLE, search); } + if (StringUtils.isNotEmpty(filter)) { + hql +=" AND " + filterCondition(filter, parameters); + } + return findPage(hql, parameters, page); } - public PaginationResult<Poll> findAllInvited(PollenUser user, PaginationParameter page, String search) { + public PaginationResult<Poll> findAllInvited(PollenUser user, PaginationParameter page, String search, String filter) { Map<String, Object> parameters = Maps.newHashMap(); parameters.put("user", user); @@ -84,6 +101,10 @@ public class PollTopiaDao extends AbstractPollTopiaDao<Poll> { hql += " AND " + DaoUtils.getSearchClause("poll", parameters, Poll.PROPERTY_TITLE, search); } + if (StringUtils.isNotEmpty(filter)) { + hql +=" AND " + filterCondition(filter, parameters); + } + PaginationOrder order = page.getOrderClauses().get(0); PaginationParameter page2 = PaginationParameter.of(page.getPageNumber(), page.getPageSize(), "poll." + order.getClause(), order.isDesc()); @@ -94,7 +115,7 @@ public class PollTopiaDao extends AbstractPollTopiaDao<Poll> { } - public PaginationResult<Poll> findAllParticipated(PollenUser user, PaginationParameter page, String search) { + public PaginationResult<Poll> findAllParticipated(PollenUser user, PaginationParameter page, String search, String filter) { Map<String, Object> parameters = Maps.newHashMap(); parameters.put("user", user); @@ -107,6 +128,62 @@ public class PollTopiaDao extends AbstractPollTopiaDao<Poll> { hql += " AND " + DaoUtils.getSearchClause("poll", parameters, Poll.PROPERTY_TITLE, search); } + if (StringUtils.isNotEmpty(filter)) { + hql +=" AND " + filterCondition(filter, parameters); + } + + PaginationOrder order = page.getOrderClauses().get(0); + + PaginationParameter page2 = PaginationParameter.of(page.getPageNumber(), page.getPageSize(), "poll." + order.getClause(), order.isDesc()); + + List<Poll> polls = find("SELECT poll " + hql, parameters, page2); + long count = count("SELECT COUNT(poll.topiaId) " + hql, parameters); + return PaginationResult.of(polls, count, page); + } + + private String filterCondition(String filter, Map<String, Object> parameters) { + switch (filter) { + case "PAST": + parameters.put("today", new Date()); + return "poll." + Poll.PROPERTY_END_DATE + " IS NOT NULL " + + " AND poll." + Poll.PROPERTY_END_DATE + " >= :today "; + + case "CURRENT": + parameters.put("today", new Date()); + return "(poll." + Poll.PROPERTY_BEGIN_DATE+ " IS NULL OR poll." + Poll.PROPERTY_BEGIN_DATE + " <= :today) " + + " AND ( poll." + Poll.PROPERTY_END_DATE + " IS NULL OR poll." + Poll.PROPERTY_END_DATE + ">= :today)"; + + case "UPCOMING": + parameters.put("today", new Date()); + return "poll." + Poll.PROPERTY_BEGIN_DATE + " IS NOT NULL " + + " AND poll." + Poll.PROPERTY_BEGIN_DATE + " >= :today "; + + default: + return ""; + } + } + + private PaginationResult<Poll> findAllUserPollsWithConditions(PollenUser user, PaginationParameter page, String search, Map<String, Object> parameters, String hqlCondition) { + + + String hql = "FROM " + Poll.class.getName() + " as poll " + + " WHERE (poll." + Poll.PROPERTY_CREATOR + "." + PollenPrincipal.PROPERTY_POLLEN_USER + " = :user" + + " OR EXISTS (SELECT 1 FROM " + VoterListMember.class.getName() + " memb" + + " WHERE memb." + VoterListMember.PROPERTY_VOTER_LIST + "." + VoterList.PROPERTY_POLL + "." + Poll.PROPERTY_TOPIA_ID + " = poll." + Poll.PROPERTY_TOPIA_ID + + " AND memb." + VoterListMember.PROPERTY_MEMBER + "." + PollenPrincipal.PROPERTY_POLLEN_USER + " = :user )" + + " OR EXISTS (SELECT 1 FROM " + Vote.class.getName() + " vote" + + " WHERE vote." + Vote.PROPERTY_VOTER + "." + PollenPrincipal.PROPERTY_POLLEN_USER + " = :user " + + " AND vote." + Vote.PROPERTY_QUESTION + "." + Question.PROPERTY_POLL + "." + Poll.PROPERTY_TOPIA_ID + " = poll." + Poll.PROPERTY_TOPIA_ID +")" + + ")"; + + if(StringUtils.isNotBlank(hqlCondition)) { + hql += " AND " + hqlCondition; + } + + if (StringUtils.isNotBlank(search)) { + hql += " AND " + DaoUtils.getSearchClause("poll", parameters, Poll.PROPERTY_TITLE, search); + } + PaginationOrder order = page.getOrderClauses().get(0); PaginationParameter page2 = PaginationParameter.of(page.getPageNumber(), page.getPageSize(), "poll." + order.getClause(), order.isDesc()); @@ -116,6 +193,7 @@ public class PollTopiaDao extends AbstractPollTopiaDao<Poll> { return PaginationResult.of(polls, count, page); } + public Set<Poll> findAllFreePolls() { List<Poll> polls = forPollTypeEquals(PollType.FREE).findAll(); 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 4c64188b..da55f175 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 @@ -71,16 +71,23 @@ public class PollApi { public PaginationResultBean<PollBean> getPolls(@Context PollService pollService, @BeanParam PaginationParameterBean paginationParameter, @QueryParam("search") String search, - @QueryParam("use") String context) { + @QueryParam("use") String context, + @QueryParam("filter") String filter) { if (StringUtils.isBlank(context)) { + // Connection as admin return pollService.getPolls(paginationParameter, search); - } else if ("invited".equals(context)) { - return pollService.getInvitedPolls(paginationParameter, search); - } else if ("participated".equals(context)) { - return pollService.getParticipatedPolls(paginationParameter, search); - } else /*if ("created".equals(context))*/ { - return pollService.getCreatedPolls(paginationParameter, search); + } else { + switch (context) { + case "invited" : + return pollService.getInvitedPolls(paginationParameter, search, filter); + case "participated" : + return pollService.getParticipatedPolls(paginationParameter, search, filter); + case "created" : + return pollService.getCreatedPolls(paginationParameter, search, filter); + default : + return pollService.getAllPolls(paginationParameter, search, filter); + } } } 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 af67afe4..3f3e5940 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 @@ -204,32 +204,42 @@ public class PollService extends PollenServiceSupport { } - public PaginationResultBean<PollBean> getCreatedPolls(PaginationParameterBean paginationParameter, String search) { + public PaginationResultBean<PollBean> getAllPolls(PaginationParameterBean paginationParameter, String search, String filter) { PollenUser connectedUser = checkAndGetConnectedUser(); PaginationParameter page = getPaginationParameter(paginationParameter); - PaginationResult<Poll> polls = getPollDao().findAllCreated(connectedUser, page, search); + PaginationResult<Poll> polls = getPollDao().findAllUserPolls(connectedUser, page, search, filter); return toPaginationListBean(polls, this::toPollBean); } - public PaginationResultBean<PollBean> getInvitedPolls(PaginationParameterBean paginationParameter, String search) { + public PaginationResultBean<PollBean> getCreatedPolls(PaginationParameterBean paginationParameter, String search, String filter) { PollenUser connectedUser = checkAndGetConnectedUser(); PaginationParameter page = getPaginationParameter(paginationParameter); - PaginationResult<Poll> polls = getPollDao().findAllInvited(connectedUser, page, search); + PaginationResult<Poll> polls = getPollDao().findAllCreated(connectedUser, page, search, filter); return toPaginationListBean(polls, this::toPollBean); } - public PaginationResultBean<PollBean> getParticipatedPolls(PaginationParameterBean paginationParameter, String search) { + public PaginationResultBean<PollBean> getInvitedPolls(PaginationParameterBean paginationParameter, String search, String filter) { PollenUser connectedUser = checkAndGetConnectedUser(); PaginationParameter page = getPaginationParameter(paginationParameter); - PaginationResult<Poll> polls = getPollDao().findAllParticipated(connectedUser, page, search); + PaginationResult<Poll> polls = getPollDao().findAllInvited(connectedUser, page, search, filter); + return toPaginationListBean(polls, this::toPollBean); + + } + + public PaginationResultBean<PollBean> getParticipatedPolls(PaginationParameterBean paginationParameter, String search, String filter) { + + PollenUser connectedUser = checkAndGetConnectedUser(); + + PaginationParameter page = getPaginationParameter(paginationParameter); + PaginationResult<Poll> polls = getPollDao().findAllParticipated(connectedUser, page, search, filter); return toPaginationListBean(polls, this::toPollBean); } -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.