This is an automated email from the git hooks/post-receive script. New commit to branch feature/spgeed in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit e66626da6b8ebe705d33a879894a5c72c44e8f81 Author: Killian <killian.herbreteau@epitech.eu> Date: Wed Nov 27 10:33:07 2019 +0100 using pagination research with Spgeed --- .../Dao/PollenChildFavoriteListSpgeedDao.java | 2 +- .../persistence/Dao/PollenPollSpgeedDao.java | 35 ++++++++- .../persistence/Dao/PollenPrincipalSpgeedDao.java | 1 + .../persistence/Dao/PollenResourceSpgeedDao.java | 10 +-- .../pollen/persistence/Dao/PollenSpgeedDao.java | 11 +-- .../Dao/PollenUserEmailAddressSpgeedDao.java | 6 +- .../persistence/Dao/PollenUserSpgeedDao.java | 43 +++++++----- .../persistence/Dao/PollenVoteSpgeedDao.java | 14 +++- .../Dao/PollenVoterListMemberSpgeedDao.java | 28 +++++++- .../rest/api/PollenRestApiApplicationContext.java | 2 - .../chorem/pollen/services/bean/PollenBeans.java | 22 +++++- .../pollen/services/service/PollService.java | 82 +++++++++------------- .../services/service/PollenServiceSupport.java | 60 +++++++++++----- .../pollen/services/service/PollenUserService.java | 18 ++--- 14 files changed, 220 insertions(+), 114 deletions(-) diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenChildFavoriteListSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenChildFavoriteListSpgeedDao.java index 7c31dfc8..1d476f90 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenChildFavoriteListSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenChildFavoriteListSpgeedDao.java @@ -1,9 +1,9 @@ package org.chorem.pollen.persistence.Dao; import org.chorem.pollen.persistence.entity.ChildFavoriteList; +import static org.chorem.pollen.persistence.entity.ChildFavoriteList.*; public interface PollenChildFavoriteListSpgeedDao extends PollenSpgeedDao { String propertieswoForeignKey[] = {ChildFavoriteList.PROPERTY_WEIGHT, ChildFavoriteList.PROPERTY_TOPIA_ID}; - } \ No newline at end of file diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPollSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPollSpgeedDao.java index e00a4341..8aab69ff 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPollSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPollSpgeedDao.java @@ -3,6 +3,8 @@ package org.chorem.pollen.persistence.Dao; import org.chorem.pollen.persistence.PollenMapper; import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.PollenPrincipal; +import org.chorem.pollen.persistence.entity.PollenUser; +import org.nuiton.spgeed.Chunk; import org.nuiton.spgeed.annotations.Select; import org.nuiton.spgeed.annotations.Update; @@ -19,6 +21,8 @@ public interface PollenPollSpgeedDao extends PollenSpgeedDao { String pollId = pollName + "." + PROPERTY_TOPIA_ID; + String pollGrouping = " ORDER BY " + pollName + "." + PROPERTY_TITLE; + String properties = pollName + "." + PROPERTY_TOPIA_ID + pollName + "." + PROPERTY_TOPIA_VERSION + ", " + pollName + "." + PROPERTY_TOPIA_CREATE_DATE + ", " @@ -53,6 +57,7 @@ public interface PollenPollSpgeedDao extends PollenSpgeedDao { + ")"; String commands = "WITH " + + PollenResourceSpgeedDao.command + ", " + PollenUserCredentialSpgeedDao.command + ", " + PollenUserEmailAddressSpgeedDao.command + ", " + PollenUserSpgeedDao.command + ", " @@ -60,8 +65,34 @@ public interface PollenPollSpgeedDao extends PollenSpgeedDao { + PollenPollSpgeedDao.command + " SELECT * FROM " + aggName; - @Select(sql = commands, mapper = PollenMapper.class) - Poll[] getallpoll(); + String getAllPolls = commands + chunkOrdering; + + @Select(sql = getAllPolls, mapper = PollenMapper.class) + Chunk<Poll> getallpoll(Chunk previousChunk, String chunkOrder); + + String getPolls = command + " WHERE ${chunkSearch | toString()}" + chunkOrdering; + + @Select(sql = getPolls, mapper = PollenMapper.class) + Chunk<Poll> getallpoll(Chunk previousChunk, String chunkOrder, String chunkSearch); + + String getAllCreatedPolls = command + + " WHERE " + PROPERTY_CREATOR + "." + PollenPrincipal.PROPERTY_POLLEN_USER + "." + PROPERTY_TOPIA_ID + " = ${user.topiaid}"; + + @Select(sql = getAllCreatedPolls, mapper = PollenMapper.class) + Chunk<Poll> getCreatedPolls(PollenUser user, Chunk previousChunk, String chunkOrder); + + String getCreatedPolls = command + + " WHERE " + PROPERTY_CREATOR + "." + PollenPrincipal.PROPERTY_POLLEN_USER + "." + PROPERTY_TOPIA_ID + " = ${user.topiaid}" + + " AND ${chunkSearch | toString()}" + chunkOrdering; + + @Select(sql = getCreatedPolls, mapper = PollenMapper.class) + Chunk<Poll> getCreatedPolls(PollenUser user, Chunk previousChunk, String chunkOrder, String chunkSearch); + + String getPoll = command + + " WHERE " + PROPERTY_TOPIA_ID + " = ${pollId}"; + + @Select(sql = getPoll, mapper = PollenMapper.class) + Poll getPoll(String pollId); String pollProperties = PROPERTY_TOPIA_ID + ", " + PROPERTY_TOPIA_VERSION + ", " + PROPERTY_TITLE + ", " + PROPERTY_DESCRIPTION + ", " diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPrincipalSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPrincipalSpgeedDao.java index ba4502d3..76a959a7 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPrincipalSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPrincipalSpgeedDao.java @@ -26,6 +26,7 @@ public interface PollenPrincipalSpgeedDao extends PollenSpgeedDao{ + ")"; String commands = "WITH " + + PollenResourceSpgeedDao.command + ", " + PollenUserCredentialSpgeedDao.command + ", " + PollenUserEmailAddressSpgeedDao.command + ", " + PollenUserSpgeedDao.command + ", " diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenResourceSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenResourceSpgeedDao.java index ce9ede6d..979685cf 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenResourceSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenResourceSpgeedDao.java @@ -1,7 +1,6 @@ package org.chorem.pollen.persistence.Dao; import org.chorem.pollen.persistence.PollenMapper; -import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.PollenResource; import org.chorem.pollen.persistence.entity.PollenUser; import org.nuiton.spgeed.annotations.Select; @@ -11,10 +10,12 @@ import static org.chorem.pollen.persistence.entity.PollenResource.*; public interface PollenResourceSpgeedDao extends PollenSpgeedDao { - String resourceName = "uc"; + String resourceName = "re"; String aggName = "ressource_agg"; + String resourceTable = aggName + " " + resourceName; + String properties = resourceName + "." + PROPERTY_TOPIA_ID + ", " + resourceName + "." + PROPERTY_TOPIA_VERSION + ", " + resourceName + "." + PROPERTY_TOPIA_CREATE_DATE + ", " @@ -26,10 +27,11 @@ public interface PollenResourceSpgeedDao extends PollenSpgeedDao { String command = aggName + " AS (" + " SELECT " + properties - + " FROM pollenresource" + + " FROM pollenresource " + resourceName + ")"; - String commands = "WITH " + command + String commands = "WITH " + + PollenResourceSpgeedDao.command + " SELECT * FROM " + aggName; String getResource = commands + " " + resourceName diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenSpgeedDao.java index f6da0612..d2012683 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenSpgeedDao.java @@ -1,15 +1,6 @@ package org.chorem.pollen.persistence.Dao; -import org.chorem.pollen.persistence.entity.PollenUser; - -import static org.nuiton.topia.persistence.TopiaEntity.*; - public interface PollenSpgeedDao { - String createTopiaEntityProperties = "( " + PROPERTY_TOPIA_ID + ", " + PROPERTY_TOPIA_VERSION + ", " + - PROPERTY_TOPIA_CREATE_DATE + " )"; - - String createTopiaEntityVariables = "(${" + PROPERTY_TOPIA_ID + "}, ${" + PROPERTY_TOPIA_VERSION + "}, " + - "${" + PROPERTY_TOPIA_CREATE_DATE + "})"; - + String chunkOrdering = " ${chunkOrder | toString()}"; } \ No newline at end of file diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserEmailAddressSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserEmailAddressSpgeedDao.java index 8f7e0551..604d7918 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserEmailAddressSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserEmailAddressSpgeedDao.java @@ -21,10 +21,12 @@ public interface PollenUserEmailAddressSpgeedDao extends PollenSpgeedDao { String emailsForeignKey = emailsName + ".pollenuser"; - String properties = PROPERTY_EMAIL_ADDRESS + ", " + String properties = PROPERTY_TOPIA_ID + ", " + + PROPERTY_TOPIA_VERSION + ", " + + PROPERTY_TOPIA_CREATE_DATE + ", " + + PROPERTY_EMAIL_ADDRESS + ", " + PROPERTY_PGP_PUBLIC_KEY + ", " + PROPERTY_VALIDATED + ", " - + PROPERTY_TOPIA_ID + ", " + "pollenuser"; String command = aggName + " AS (" diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserSpgeedDao.java index c39bb2ad..913873f4 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserSpgeedDao.java @@ -1,16 +1,14 @@ package org.chorem.pollen.persistence.Dao; import org.chorem.pollen.persistence.PollenMapper; -import org.chorem.pollen.persistence.entity.PollenResource; -import org.chorem.pollen.persistence.entity.PollenUser; -import org.chorem.pollen.persistence.entity.PollenUserEmailAddress; -import org.chorem.pollen.persistence.entity.UserCredential; +import org.chorem.pollen.persistence.entity.*; import org.nuiton.spgeed.Chunk; import org.nuiton.spgeed.annotations.Select; import org.nuiton.spgeed.annotations.Update; import static org.chorem.pollen.persistence.entity.PollenUser.*; import static org.chorem.pollen.persistence.Dao.PollenUserEmailAddressSpgeedDao.*; +import static org.chorem.pollen.persistence.Dao.PollenResourceSpgeedDao.*; import static org.chorem.pollen.persistence.Dao.PollenUserCredentialSpgeedDao.*; public interface PollenUserSpgeedDao extends PollenSpgeedDao { @@ -21,6 +19,10 @@ public interface PollenUserSpgeedDao extends PollenSpgeedDao { String userId = userName + "." + PROPERTY_TOPIA_ID; + String userForeignKeyAvatar = userName + "." + PROPERTY_AVATAR; + + String userForeignKeyDefaultEmail = userName + "." + PROPERTY_DEFAULT_EMAIL_ADDRESS; + String propertieswoForeignKey = userName + "." + PROPERTY_TOPIA_ID + ", " + userName + "." + PROPERTY_TOPIA_VERSION + ", " + userName + "." + PROPERTY_TOPIA_CREATE_DATE + ", " @@ -36,24 +38,27 @@ public interface PollenUserSpgeedDao extends PollenSpgeedDao { String command = aggName + " AS (" + "SELECT " + propertieswoForeignKey + ", " + + "json_agg(" + resourceName + ".*)->0 AS " + PROPERTY_AVATAR + ", " + "json_agg(" + demailName + ".*)->0 AS " + PROPERTY_DEFAULT_EMAIL_ADDRESS + ", " + "COALESCE(json_agg(" + emailsName + ".*) FILTER (WHERE " + emailsForeignKey + " IS NOT NULL), null) AS " + PROPERTY_EMAIL_ADDRESSES + ", " + "COALESCE(json_agg(" + userCredentialName + ".*) FILTER (WHERE " + credentialForeignKey + " IS NOT NULL), null) AS " + PROPERTY_USER_CREDENTIAL + " FROM pollenuser " + userName - + " JOIN " + demailTable + " ON " + demailName + "." + PollenUserEmailAddress.PROPERTY_TOPIA_ID + " = " + userName + "." + PROPERTY_DEFAULT_EMAIL_ADDRESS - + " LEFT OUTER JOIN " + emailsTable + " ON " + emailsForeignKey + " = " + userName + "." + PROPERTY_TOPIA_ID - + " LEFT OUTER JOIN " + credentialTable + " ON " + credentialForeignKey + " = " + userId + + " LEFT JOIN " + resourceTable + " ON " + resourceName + "." + PollenResource.PROPERTY_TOPIA_ID + " = " + userForeignKeyAvatar + + " LEFT JOIN " + demailTable + " ON " + demailName + "." + PollenUserEmailAddress.PROPERTY_TOPIA_ID + " = " + userForeignKeyDefaultEmail + + " LEFT JOIN " + emailsTable + " ON " + emailsForeignKey + " = " + userId + + " LEFT JOIN " + credentialTable + " ON " + credentialForeignKey + " = " + userId + " GROUP BY " + userId + ")"; - String commands = "WITH " + - PollenUserCredentialSpgeedDao.command + ", " + - PollenUserEmailAddressSpgeedDao.command + ", " + - PollenUserSpgeedDao.command + - " SELECT * FROM " + aggName; + String commands = "WITH " + + PollenResourceSpgeedDao.command + ", " + + PollenUserCredentialSpgeedDao.command + ", " + + PollenUserEmailAddressSpgeedDao.command + ", " + + PollenUserSpgeedDao.command + " " + + "SELECT * FROM " + aggName; - String getUser = commands + " " + userName + " WHERE " + - userId + " = ${userId}"; + String getUser = commands + + " WHERE " + PROPERTY_TOPIA_ID + " = ${userId}"; @Select(sql = getUser, mapper = PollenMapper.class) PollenUser getUser(String userId); @@ -61,13 +66,19 @@ public interface PollenUserSpgeedDao extends PollenSpgeedDao { String findUserWithCredentialProviderAndValidatedId = commands + " " + userName + " WHERE " + userName + "." + PROPERTY_USER_CREDENTIAL + "." + UserCredential.PROPERTY_PROVIDER + " = ${provider}" + " AND " + userName + "." + PROPERTY_USER_CREDENTIAL + "." + UserCredential.PROPERTY_USER_ID + " = ${userId}"; + @Select(sql = findUserWithCredentialProviderAndValidatedId, mapper = PollenMapper.class) PollenUser findUserWithCredentialOrNull(String provider, String userId); - String getAllUsers = commands + " ORDER BY ${userOrder | toString()}"; + String getAllUsers = commands + chunkOrdering; @Select(sql = getAllUsers, mapper = PollenMapper.class) - Chunk<PollenUser> getAllUsers(Chunk previousChunk, String userOrder); + Chunk<PollenUser> getAllUsers(Chunk previousChunk, String chunkOrder); + + String getUsers = commands + " WHERE ${chunkSearch | toString()}" + chunkOrdering; + + @Select(sql = getUsers, mapper = PollenMapper.class) + Chunk<PollenUser> getAllUsers(Chunk previousChunk, String chunkOrder, String chunkSearch); String userProperties = PROPERTY_TOPIA_ID + ", " + PROPERTY_TOPIA_VERSION + ", " + PROPERTY_NAME + ", " + PROPERTY_ADMINISTRATOR + ", " diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenVoteSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenVoteSpgeedDao.java index f0554542..790cb509 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenVoteSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenVoteSpgeedDao.java @@ -1,8 +1,20 @@ package org.chorem.pollen.persistence.Dao; import org.chorem.pollen.persistence.entity.Vote; +import static org.chorem.pollen.persistence.entity.Vote.*; public interface PollenVoteSpgeedDao extends PollenSpgeedDao { - String propertieswoForeignKey[] = {Vote.PROPERTY_WEIGHT, Vote.PROPERTY_ANONYMOUS, Vote.PROPERTY_TOPIA_ID}; + String voterName = "v"; + + String aggName = "voters_agg"; + + String properties = voterName + "." + PROPERTY_TOPIA_ID + ", " + + voterName + "." + PROPERTY_TOPIA_VERSION + ", " + + voterName + "." + PROPERTY_TOPIA_CREATE_DATE + ", " + + voterName + "." + PROPERTY_WEIGHT + ", " + + voterName + "." + PROPERTY_ANONYMOUS; + + String command = aggName + " AS (" + + "SELECT " + properties + ", "; } \ No newline at end of file diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenVoterListMemberSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenVoterListMemberSpgeedDao.java index 7d190a51..0abe46bd 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenVoterListMemberSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenVoterListMemberSpgeedDao.java @@ -1,9 +1,33 @@ package org.chorem.pollen.persistence.Dao; -import org.chorem.pollen.persistence.entity.VoterListMember; +import org.chorem.pollen.persistence.entity.PollenPrincipal; + +import static org.chorem.pollen.persistence.entity.VoterListMember.*; +import static org.chorem.pollen.persistence.Dao.PollenPrincipalSpgeedDao.*; public interface PollenVoterListMemberSpgeedDao { - String propertieswoForeignKey[] = {VoterListMember.PROPERTY_WEIGHT, VoterListMember.PROPERTY_INVITATION_SENT, VoterListMember.PROPERTY_TOPIA_ID}; + String voterListMemberName = "vlm"; + + String aggName = "voterListMembers_agg"; + + String voterListMemberid = voterListMemberName + "." + PROPERTY_TOPIA_ID; + + String properties = voterListMemberName + "." + PROPERTY_TOPIA_ID + ", " + + voterListMemberName + "." + PROPERTY_TOPIA_VERSION + ", " + + voterListMemberName + "." + PROPERTY_TOPIA_CREATE_DATE + ", " + + voterListMemberName + "." + PROPERTY_WEIGHT + ", " + + voterListMemberName + "." + PROPERTY_VOTER_LIST + ", " + + voterListMemberName + "." + "vote, " + + voterListMemberName + "." + PROPERTY_INVITATION_SENT; + + String command = aggName + " AS (" + + "SELECT " + properties + ", " + + "json_agg(" + principalName + ".*)->0 AS " + PROPERTY_MEMBER + + " FROM voterlistmember" + + " JOIN " + principalTable + " ON " + principalName + "." + PollenPrincipal.PROPERTY_TOPIA_ID + " = " + voterListMemberName + "." + PROPERTY_MEMBER + + " GROUP BY " + voterListMemberid + + ")"; + } \ No newline at end of file diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiApplicationContext.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiApplicationContext.java index 4671d566..0e439037 100644 --- a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiApplicationContext.java +++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiApplicationContext.java @@ -281,8 +281,6 @@ public class PollenRestApiApplicationContext implements PollenApplicationContext PollenServiceContext serviceContext = newServiceContext(persistenceContext, Locale.FRANCE); serviceContext.setSecurityContext(new InitSecurityContext()); serviceContext.newService(PollenUserService.class).createDefaultUsers(); - } catch (InvalidFormException e) { - //Can't happen } started.set(true); 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 1d245206..268c4425 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,8 +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.nuiton.spgeed.Chunk; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.pagination.PaginationOrder; +import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; import java.util.Collection; @@ -59,10 +61,28 @@ public class PollenBeans { result.setDesc(paginationOrder.isDesc()); } + return result; + } + public static <E extends TopiaEntity, B extends PollenBean<E>> PaginationResultBean<B> toBean(Chunk<E> entities, Function<E, B> beanFunction, PaginationParameter paginationParameter) { - return result; + ImmutableList<B> bs = toBeanList(entities.getResult(), beanFunction); + + PaginationResultBean<B> result = new PaginationResultBean<>(); + result.setElements(bs); + result.setPageSize((int) entities.getFetch()); + result.setCurrentPage((int) entities.getFirst()); + result.setLastPage((int) entities.getNext()); + result.setCount((int) entities.getTotal()); + List<PaginationOrder> orderClauses = paginationParameter.getOrderClauses(); + if (CollectionUtils.isNotEmpty(orderClauses)) { + // take the first order clause + PaginationOrder paginationOrder = orderClauses.get(0); + result.setOrder(paginationOrder.getClause()); + result.setDesc(paginationOrder.isDesc()); + } + return result; } public static <E extends TopiaEntity, B extends PollenBean<E>> ImmutableSet<B> toBeanSet(Collection<E> entities, Function<E, B> beanFunction) { 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..6c014fd6 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 @@ -26,15 +26,7 @@ import com.google.common.collect.Sets; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; -import org.chorem.pollen.persistence.entity.ChoiceType; -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.persistence.entity.Question; -import org.chorem.pollen.persistence.entity.VoterList; -import org.chorem.pollen.persistence.entity.VoterListMember; +import org.chorem.pollen.persistence.entity.*; import org.chorem.pollen.services.bean.ChoiceBean; import org.chorem.pollen.services.bean.PaginationParameterBean; import org.chorem.pollen.services.bean.PaginationResultBean; @@ -47,6 +39,7 @@ import org.chorem.pollen.services.bean.VoterListMemberBean; import org.chorem.pollen.services.bean.export.ExportBean; import org.chorem.pollen.services.config.PollenServicesConfig; import org.chorem.pollen.services.service.security.PollenPermissions; +import org.nuiton.spgeed.Chunk; import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; @@ -70,6 +63,8 @@ public class PollService extends PollenServiceSupport { public static String EMAIL_SUFFIX_SEPARATOR = ";"; + private static final String PROPERTY_DEFAULT_POLL_ORDER = Poll.PROPERTY_TITLE; + public PollBean toPollBean(Poll entity) { PollBean bean = new PollBean(); @@ -198,9 +193,16 @@ public class PollService extends PollenServiceSupport { checkIsAdmin(); - PaginationParameter page = getPaginationParameter(paginationParameter); - PaginationResult<Poll> polls = getPollDao().findAll(page, search); - return toPaginationListBean(polls, this::toPollBean); + PaginationParameter page = getPaginationParameter(paginationParameter, PROPERTY_DEFAULT_POLL_ORDER); + String order = page.getOrderClauses().get(0).getClause(); + Chunk<Poll> polls; + + if (StringUtils.isNotBlank(search)) { + polls = getSpgeedPollDao().getallpoll(Chunk.init(page.getPageSize()), order, search); + } else { + polls = getSpgeedPollDao().getallpoll(Chunk.init(page.getPageSize()), order); + } + return toPaginationListBean(polls, this::toPollBean, page); } @@ -208,9 +210,15 @@ public class PollService extends PollenServiceSupport { PollenUser connectedUser = checkAndGetConnectedUser(); - PaginationParameter page = getPaginationParameter(paginationParameter); - PaginationResult<Poll> polls = getPollDao().findAllCreated(connectedUser, page, search); - return toPaginationListBean(polls, this::toPollBean); + PaginationParameter page = getPaginationParameter(paginationParameter, PROPERTY_DEFAULT_POLL_ORDER); + String order = page.getOrderClauses().get(0).getClause(); + Chunk<Poll> polls; + if (StringUtils.isNotBlank(search)) { + polls = getSpgeedPollDao().getCreatedPolls(connectedUser, Chunk.init(page.getPageSize()), order, search); + } else { + polls = getSpgeedPollDao().getCreatedPolls(connectedUser, Chunk.init(page.getPageSize()), order); + } + return toPaginationListBean(polls, this::toPollBean, page); } @@ -218,7 +226,7 @@ public class PollService extends PollenServiceSupport { PollenUser connectedUser = checkAndGetConnectedUser(); - PaginationParameter page = getPaginationParameter(paginationParameter); + PaginationParameter page = getPaginationParameter(paginationParameter, PROPERTY_DEFAULT_POLL_ORDER); PaginationResult<Poll> polls = getPollDao().findAllInvited(connectedUser, page, search); return toPaginationListBean(polls, this::toPollBean); @@ -228,8 +236,9 @@ public class PollService extends PollenServiceSupport { PollenUser connectedUser = checkAndGetConnectedUser(); - PaginationParameter page = getPaginationParameter(paginationParameter); + PaginationParameter page = getPaginationParameter(paginationParameter, PROPERTY_DEFAULT_POLL_ORDER); PaginationResult<Poll> polls = getPollDao().findAllParticipated(connectedUser, page, search); + Question q = new QuestionImpl(); return toPaginationListBean(polls, this::toPollBean); } @@ -317,8 +326,6 @@ public class PollService extends PollenServiceSupport { getVoterListService().createVoters(savedPoll, voterLists, voterListMembers); } - - commit(); getNotificationService().onPollCreated(savedPoll); getFeedService().onPollCreated(savedPoll); @@ -343,8 +350,6 @@ public class PollService extends PollenServiceSupport { Poll savedPoll = savePoll(poll); - commit(); - getNotificationService().onPollEdited(savedPoll); getFeedService().onPollEdited(savedPoll); @@ -360,12 +365,9 @@ public class PollService extends PollenServiceSupport { Poll poll = getPoll0(pollId); checkPermission(PollenPermissions.delete(poll)); - getPollDao().delete(poll); - - commit(); + getSpgeedPollDao().deletePoll(poll); getNotificationService().onPollDeleted(poll); - } public PollenEntityRef<Poll> clonePoll(String pollId) { @@ -399,8 +401,6 @@ public class PollService extends PollenServiceSupport { Poll savedPoll = savePoll(clonedPoll); - commit(); - getNotificationService().onPollCreated(savedPoll); return PollenEntityRef.of(savedPoll); @@ -420,7 +420,7 @@ public class PollService extends PollenServiceSupport { poll.setEndDate(getNow()); - commit(); + poll = savePoll(toPollBean(poll)); getNotificationService().onPollClosed(poll); getFeedService().onPollClosed(poll); @@ -441,12 +441,11 @@ public class PollService extends PollenServiceSupport { poll.setEndDate(null); - commit(); + poll = savePoll(toPollBean(poll)); getNotificationService().onPollReopened(poll); getFeedService().onPollReopened(poll); } - } @@ -482,9 +481,8 @@ public class PollService extends PollenServiceSupport { if (creator == null) { poll.getCreator().setPollenUser(connectedUser); - commit(); + getSpgeedPollDao().savePoll(poll); } - return toPollBean(poll); } @@ -595,6 +593,8 @@ public class PollService extends PollenServiceSupport { connectedUser.setGtuValidationDate(getNow()); } } + commit(); + //getSpgeedPollDao().savePoll(toSave); return toSave; @@ -602,7 +602,7 @@ public class PollService extends PollenServiceSupport { protected Poll getPoll0(String pollId) { - return getPollDao().forTopiaIdEquals(pollId).findUnique(); + return getSpgeedPollDao().getPoll(pollId); } @@ -660,22 +660,6 @@ public class PollService extends PollenServiceSupport { } } - - - protected PaginationParameter getPaginationParameter(PaginationParameterBean paginationParameter) { - - if (paginationParameter == null) { - - paginationParameter = PaginationParameterBean.of(0, PAGE_SIZE_DEFAULT); - - } - if (paginationParameter.getOrder() == null) { - paginationParameter.setOrder(Poll.PROPERTY_TITLE); - } - return paginationParameter.toPaginationParameter(); - - } - public Set<String> getInvalidEmails(String pollId) { Set<String> invalidEmails = Sets.newHashSet(); Poll poll = getPoll0(pollId); 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 4701994e..788481f3 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 @@ -49,13 +49,16 @@ import org.chorem.pollen.services.service.security.PollenSecurityContext; import org.chorem.pollen.services.service.security.SecurityService; import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider; import org.hibernate.internal.SessionFactoryImpl; +import org.nuiton.spgeed.Chunk; import org.nuiton.spgeed.SqlSession; +import org.nuiton.spgeed.query.Query; import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.persistence.TopiaIdFactory; import org.nuiton.topia.persistence.internal.ShortTopiaIdFactory; import org.nuiton.util.StringUtil; +import org.nuiton.util.pagination.PaginationOrder; import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; @@ -207,6 +210,40 @@ public abstract class PollenServiceSupport implements PollenService { return getPersistenceContext().getChoiceDao(); } + protected PaginationParameter getPaginationParameter(PaginationParameterBean paginationParameter) { + return getPaginationParameter(paginationParameter, null); + } + + protected PaginationParameter getPaginationParameter(PaginationParameterBean paginationParameter, String defaultOrder) { + + if (paginationParameter == null) { + paginationParameter = PaginationParameterBean.of(0, PAGE_SIZE_DEFAULT); + } + + if (StringUtils.isBlank(paginationParameter.getOrder())) { + if (StringUtils.isBlank(defaultOrder)) { + paginationParameter.setOrder(TopiaEntity.PROPERTY_TOPIA_CREATE_DATE); + } else { + paginationParameter.setOrder(defaultOrder); + } + } + + return paginationParameter.toPaginationParameter(); + + } + protected List<String> getOrderList(List<PaginationOrder> parameters, String defaultProperty) { + + List<String> order = new LinkedList<>(); + + if (parameters == null || parameters.size() == 0) { + order.add(defaultProperty); + } else { + for (PaginationOrder parameter : parameters) { + order.add(parameter.getClause()); + } + } + return order; + } protected PollenChoiceSpgeedDao getSpgeedChoiceDao() { return getSpgeedDao(PollenChoiceSpgeedDao.class); } @@ -219,6 +256,8 @@ public abstract class PollenServiceSupport implements PollenService { try (SqlSession session = new SqlSession(dataSource)) { spgeedSession = session; + spgeedSession.addFunction("toOrder", (Query query, Object in, Object ...args) -> + " ORDER BY " + query.addSqlParameter(String.join(args[0].toString(), (Iterable) in))); } catch(SQLException e) { throw new PollenTechnicalException("erreur lors du chargement du Dao de Spgeed", e); } @@ -246,6 +285,7 @@ public abstract class PollenServiceSupport implements PollenService { protected <E extends PollenSpgeedDao> E getSpgeedDao(Class<E> daoClass) { SqlSession session = getSpgeedSqlSession(); + PollenUser pollenUser = new PollenUserImpl() session.setDefaultMapper(PollenMapper.class); return session.getDao(daoClass); @@ -589,6 +629,10 @@ public abstract class PollenServiceSupport implements PollenService { return PollenBeans.toBean(entities, beanFunction); } + protected <E extends TopiaEntity, B extends PollenBean<E>> PaginationResultBean<B> toPaginationListBean(Chunk<E> entities, Function<E, B> beanFunction, PaginationParameter paginationParameter) { + return PollenBeans.toBean(entities, beanFunction, paginationParameter); + } + protected <E extends TopiaEntity> PollenEntityId<E> getPollenEntityId(E entity) { PollenEntityId<E> pollenEntityId = PollenEntityId.newId((Class<E>) entity.getClass()); pollenEntityId.setEntityId(entity.getTopiaId()); @@ -624,20 +668,4 @@ public abstract class PollenServiceSupport implements PollenService { token); } - protected PaginationParameter getPaginationParameter(PaginationParameterBean paginationParameter) { - - if (paginationParameter == null) { - - paginationParameter = PaginationParameterBean.of( - 0, - PAGE_SIZE_DEFAULT, - TopiaEntity.PROPERTY_TOPIA_CREATE_DATE, - true); - - } - - return paginationParameter.toPaginationParameter(); - - } - } 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 2fb19b93..e6984563 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 @@ -59,6 +59,8 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer /** Logger. */ private static final Log log = LogFactory.getLog(PollenUserService.class); + private static final String PROPERTY_DEFAULT_USER_ORDER = PollenUser.PROPERTY_NAME; + public PollenUserBean toPollenUserBean(PollenUser entity) { PollenUserBean bean = new PollenUserBean(); bean.setEntityId(entity.getTopiaId()); @@ -116,17 +118,17 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer checkIsAdmin(); - PaginationParameter page = getPaginationParameter(paginationParameter); - PaginationOrder order = page.getOrderClauses().get(0); + PaginationParameter page = getPaginationParameter(paginationParameter, PROPERTY_DEFAULT_USER_ORDER); + String order = page.getOrderClauses().get(0).getClause(); + Chunk<PollenUser> pollenUsers; - if (order.getClause() == null) { - order.setClause(PollenUser.PROPERTY_NAME); + if (StringUtils.isNotBlank(search)) { + pollenUsers = getSpgeedUserDao().getAllUsers(Chunk.init(page.getPageSize()), order, search); + } else { + pollenUsers = getSpgeedUserDao().getAllUsers(Chunk.init(page.getPageSize()), order); } - Chunk<PollenUser> users = getSpgeedUserDao().getAllUsers(Chunk.init(page.getPageSize()), order.getClause()); - PaginationResult<PollenUser> pollenUsers = getPollenUserDao().findAll(page, search); - checkNotNull(users); - return toPaginationListBean(pollenUsers, this::toPollenUserBean); + return toPaginationListBean(pollenUsers, this::toPollenUserBean, page); } public PollenUserBean getUser() { -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.