01/01: review favorite list member and voter list member association
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 ba448681789e773fae7ba3864408fb22698a1572 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu May 29 18:17:22 2014 +0200 review favorite list member and voter list member association --- .../persistence/entity/FavoriteListTopiaDao.java | 41 ++ .../persistence/entity/VoterListTopiaDao.java | 41 ++ pollen-persistence/src/main/xmi/pollen.properties | 9 - pollen-persistence/src/main/xmi/pollen.zargo | Bin 18454 -> 18462 bytes .../chorem/pollen/rest/api/v1/FavoriteListApi.java | 15 +- .../org/chorem/pollen/rest/api/v1/PollApi.java | 10 +- .../pollen/services/bean/FavoriteListBean.java | 38 -- .../chorem/pollen/services/bean/VoterListBean.java | 29 - .../services/config/PollenServiceConfig.java | 6 + .../services/config/PollenServiceConfigOption.java | 12 + .../services/service/FavoriteListService.java | 183 ++++--- .../pollen/services/service/FixturesService.java | 2 +- .../pollen/services/service/PollService.java | 62 +-- .../services/service/VoteCountingService.java | 3 +- .../pollen/services/service/VoterListService.java | 112 ++-- .../i18n/pollen-services_en_GB.properties | 1 + .../i18n/pollen-services_fr_FR.properties | 1 + .../services/service/FavoriteListServiceTest.java | 323 +++++++++++ .../pollen/services/service/PollServiceTest.java | 604 ++++++++++----------- .../services/service/VoteCountingServiceTest.java | 2 +- pom.xml | 2 +- src/site/rst/restApi.rst | 21 + 22 files changed, 915 insertions(+), 602 deletions(-) diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/FavoriteListTopiaDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/FavoriteListTopiaDao.java new file mode 100644 index 0000000..8705347 --- /dev/null +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/FavoriteListTopiaDao.java @@ -0,0 +1,41 @@ +package org.chorem.pollen.persistence.entity; + +/* + * #%L + * Pollen :: Persistence + * %% + * Copyright (C) 2009 - 2014 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import java.util.List; + +public class FavoriteListTopiaDao extends AbstractFavoriteListTopiaDao<FavoriteList> { + + @Override + public void delete(FavoriteList entity) { + + // --- Delete members --- // + + FavoriteListMemberTopiaDao dao = topiaDaoSupplier + .getDao(FavoriteListMember.class, FavoriteListMemberTopiaDao.class); + List<FavoriteListMember> list = dao.forFavoriteListEquals(entity).findAll(); + dao.deleteAll(list); + + super.delete(entity); + + } +} diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoterListTopiaDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoterListTopiaDao.java new file mode 100644 index 0000000..506eb9e --- /dev/null +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoterListTopiaDao.java @@ -0,0 +1,41 @@ +package org.chorem.pollen.persistence.entity; + +/* + * #%L + * Pollen :: Persistence + * %% + * Copyright (C) 2009 - 2014 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import java.util.List; + +public class VoterListTopiaDao extends AbstractVoterListTopiaDao<VoterList> { + + @Override + public void delete(VoterList entity) { + + // --- Delete members --- // + + VoterListMemberTopiaDao dao = topiaDaoSupplier + .getDao(VoterListMember.class, VoterListMemberTopiaDao.class); + List<VoterListMember> list = dao.forVoterListEquals(entity).findAll(); + dao.deleteAll(list); + + super.delete(entity); + + } +} diff --git a/pollen-persistence/src/main/xmi/pollen.properties b/pollen-persistence/src/main/xmi/pollen.properties index 0b63cf7..0b26c1f 100644 --- a/pollen-persistence/src/main/xmi/pollen.properties +++ b/pollen-persistence/src/main/xmi/pollen.properties @@ -32,15 +32,6 @@ org.chorem.pollen.persistence.entity.Poll.attribute.description.tagValue.hiberna org.chorem.pollen.persistence.entity.Choice.attribute.description.tagValue.hibernateAttributeType=text org.chorem.pollen.persistence.entity.Comment.attribute.text.tagValue.hibernateAttributeType=text -# Ordered -org.chorem.pollen.persistence.entity.Poll.attribute.choice.stereotype=ordered -org.chorem.pollen.persistence.entity.Poll.attribute.voterList.stereotype=ordered -org.chorem.pollen.persistence.entity.Poll.attribute.vote.stereotype=ordered -org.chorem.pollen.persistence.entity.Poll.attribute.comment.stereotype=ordered -org.chorem.pollen.persistence.entity.PollenUser.attribute.favoriteList.stereotype=ordered -org.chorem.pollen.persistence.entity.FavoriteList.attribute.member.stereotype=ordered, unique -org.chorem.pollen.persistence.entity.VoterList.attribute.member.stereotype=unique - # clef naturelle non modifiable sur PollenToken.token org.chorem.pollen.persistence.entity.PollenToken.class.tagValue.naturalIdMutable=true org.chorem.pollen.persistence.entity.PollenToken.attribute.token.stereotype=unique diff --git a/pollen-persistence/src/main/xmi/pollen.zargo b/pollen-persistence/src/main/xmi/pollen.zargo index 271cc74..7d095e4 100644 Binary files a/pollen-persistence/src/main/xmi/pollen.zargo and b/pollen-persistence/src/main/xmi/pollen.zargo differ diff --git a/pollen-rest-api/src/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 76e7d8f..8295bd1 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 @@ -37,7 +37,6 @@ import org.chorem.pollen.services.service.InvalidFormException; import org.debux.webmotion.server.WebMotionController; import java.io.File; -import java.util.Set; /** * TODO @@ -81,23 +80,21 @@ public class FavoriteListApi extends WebMotionController { } - public int importFavoriteListMembersFromCsv(FavoriteListService favoriteListService, PollenEntityId<FavoriteList> favoriteListId, File csvFile) throws FavoriteListImportException { + public void importFavoriteListMembersFromCsv(FavoriteListService favoriteListService, PollenEntityId<FavoriteList> favoriteListId, File csvFile) throws FavoriteListImportException { - int i = favoriteListService.importFavoriteListMembersFromCsv(favoriteListId.getEntityId(), csvFile); - return i; + favoriteListService.importFavoriteListMembersFromCsv(favoriteListId.getEntityId(), csvFile); } - public int importFavoriteListMembersFromLdap(FavoriteListService favoriteListService, PollenEntityId<FavoriteList> favoriteListId, String ldap) throws FavoriteListImportException { + public void importFavoriteListMembersFromLdap(FavoriteListService favoriteListService, PollenEntityId<FavoriteList> favoriteListId, String ldap) throws FavoriteListImportException { - int i = favoriteListService.importFavoriteListMembersFromLdap(favoriteListId.getEntityId(), ldap); - return i; + favoriteListService.importFavoriteListMembersFromLdap(favoriteListId.getEntityId(), ldap); } - public Set<FavoriteListMemberBean> getMembers(FavoriteListService favoriteListService, PollenEntityId<FavoriteList> favoriteListId) { + public PaginationResultBean<FavoriteListMemberBean> getMembers(FavoriteListService favoriteListService, PollenEntityId<FavoriteList> favoriteListId) { - Set<FavoriteListMemberBean> members = favoriteListService.getFavoriteListMembers(favoriteListId.getEntityId()); + PaginationResultBean<FavoriteListMemberBean> members = favoriteListService.getFavoriteListMembers(favoriteListId.getEntityId(), null); return members; } 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 ece5097..9a6f671 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 @@ -27,11 +27,10 @@ import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.rest.api.PollenRestApiUtil; import org.chorem.pollen.services.bean.ChoiceBean; import org.chorem.pollen.services.bean.PaginationParameterBean; +import org.chorem.pollen.services.bean.PaginationResultBean; 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.PaginationResultBean; -import org.chorem.pollen.services.bean.VoterListBean; import org.chorem.pollen.services.service.InvalidFormException; import org.chorem.pollen.services.service.PollService; import org.debux.webmotion.server.WebMotionController; @@ -91,14 +90,11 @@ public class PollApi extends WebMotionController { public PollenEntityRef<Poll> createPoll(PollService pollService, PollBean poll, - ChoiceBean[] choices, - VoterListBean[] voterLists) throws InvalidFormException { + ChoiceBean[] choices) throws InvalidFormException { List<ChoiceBean> choiceList = PollenRestApiUtil.toList(choices); - List<VoterListBean> voterListList = PollenRestApiUtil.toList(voterLists); - - PollenEntityRef<Poll> principalRef = pollService.createPoll(poll, choiceList, voterListList); + PollenEntityRef<Poll> principalRef = pollService.createPoll(poll, choiceList); return principalRef; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListBean.java index 14ac766..c1057be 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListBean.java @@ -23,10 +23,6 @@ package org.chorem.pollen.services.bean; import org.chorem.pollen.persistence.entity.FavoriteList; import org.chorem.pollen.persistence.entity.FavoriteListImpl; -import org.chorem.pollen.persistence.entity.FavoriteListMember; - -import java.util.HashSet; -import java.util.Set; /** * Created on 5/15/14. @@ -38,10 +34,6 @@ public class FavoriteListBean extends PollenBean<FavoriteList> { protected String name; - protected double weight; - - protected Set<FavoriteListMemberBean> member = new HashSet<>(); - public FavoriteListBean() { super(FavoriteList.class); } @@ -52,14 +44,6 @@ public class FavoriteListBean extends PollenBean<FavoriteList> { setEntityId(entity.getTopiaId()); setName(entity.getName()); - member.clear(); - - for (FavoriteListMember voterListMemberEntity : entity.getMember()) { - - FavoriteListMemberBean voterListMemberBean = new FavoriteListMemberBean(); - voterListMemberBean.fromEntity(voterListMemberEntity); - addMember(voterListMemberBean); - } } @Override @@ -69,13 +53,6 @@ public class FavoriteListBean extends PollenBean<FavoriteList> { entity.setTopiaId(getEntityId()); entity.setName(getName()); - for (FavoriteListMemberBean voterListMemberBean : member) { - - FavoriteListMember voterListMember = voterListMemberBean.toEntity(); - entity.addMember(voterListMember); - - } - return entity; } @@ -89,19 +66,4 @@ public class FavoriteListBean extends PollenBean<FavoriteList> { this.name = name; } - public double getWeight() { - return weight; - } - - public void setWeight(double weight) { - this.weight = weight; - } - - public Set<FavoriteListMemberBean> getMember() { - return member; - } - - public void addMember(FavoriteListMemberBean member) { - this.member.add(member); - } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java index f31ffe5..0ed7f5e 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java @@ -23,10 +23,6 @@ package org.chorem.pollen.services.bean; import org.chorem.pollen.persistence.entity.VoterList; import org.chorem.pollen.persistence.entity.VoterListImpl; -import org.chorem.pollen.persistence.entity.VoterListMember; - -import java.util.HashSet; -import java.util.Set; /** * Created on 5/15/14. @@ -40,8 +36,6 @@ public class VoterListBean extends PollenBean<VoterList> { protected double weight; - protected Set<VoterListMemberBean> member = new HashSet<>(); - public VoterListBean() { super(VoterList.class); } @@ -53,14 +47,6 @@ public class VoterListBean extends PollenBean<VoterList> { setName(entity.getName()); setWeight(entity.getWeight()); - member.clear(); - - for (VoterListMember voterListMemberEntity : entity.getMember()) { - - VoterListMemberBean voterListMemberBean = new VoterListMemberBean(); - voterListMemberBean.fromEntity(voterListMemberEntity); - addMember(voterListMemberBean); - } } @Override @@ -71,13 +57,6 @@ public class VoterListBean extends PollenBean<VoterList> { entity.setName(getName()); entity.setWeight(getWeight()); - for (VoterListMemberBean voterListMemberBean : member) { - - VoterListMember voterListMember = voterListMemberBean.toEntity(); - entity.addMember(voterListMember); - - } - return entity; } @@ -86,7 +65,6 @@ public class VoterListBean extends PollenBean<VoterList> { return name; } - public void setName(String name) { this.name = name; } @@ -99,11 +77,4 @@ public class VoterListBean extends PollenBean<VoterList> { this.weight = weight; } - public Set<VoterListMemberBean> getMember() { - return member; - } - - public void addMember(VoterListMemberBean member) { - this.member.add(member); - } } 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 a7c6b8b..5834964 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 @@ -183,6 +183,12 @@ public class PollenServiceConfig { return result; } + public int getDefaultFavoriteListMemberPaginationSize() { + int result = applicationConfig.getOptionAsInt( + PollenServiceConfigOption.DEFAULT_FAVORITE_LIST_MEMBERS_PAGE_SIZE.key); + return result; + } + public int getDefaultPollenUserPaginationSize() { int result = applicationConfig.getOptionAsInt( PollenServiceConfigOption.DEFAULT_POLLEN_USERS_PAGE_SIZE.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 d47629f..3193322 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 @@ -152,6 +152,18 @@ public enum PollenServiceConfigOption implements ConfigOptionDef { n("pollen.configuration.defaultFavoriteListPageSize"), "10", int.class), + + /** + * Default favorite list members pagination page size. + * + * @since 2.0 + */ + DEFAULT_FAVORITE_LIST_MEMBERS_PAGE_SIZE( + "pollen.default.favoriteListMemberPageSize", + n("pollen.configuration.defaultFavoriteListMemberPageSize"), + "10", + int.class), + /** * Default pollen users pagination page size. * 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 4c14481..aabf7af 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 @@ -27,6 +27,8 @@ import com.google.common.collect.Sets; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.chorem.pollen.persistence.entity.FavoriteList; import org.chorem.pollen.persistence.entity.FavoriteListMember; import org.chorem.pollen.persistence.entity.FavoriteListMemberTopiaDao; @@ -53,7 +55,6 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Properties; @@ -69,13 +70,16 @@ import static org.nuiton.i18n.I18n.l; */ public class FavoriteListService extends PollenServiceSupport { + /** Logger. */ + private static final Log log = LogFactory.getLog(FavoriteListService.class); + public PaginationResultBean<FavoriteListBean> getFavoriteLists(PaginationParameterBean paginationParameter) { checkIsConnected(); PollenUser user = getConnectedUser(); - PaginationParameter page = getPaginationParameter(paginationParameter); + PaginationParameter page = getFavoriteListPaginationParameter(paginationParameter); PaginationResult<FavoriteList> favoriteLists = getFavoriteListDao().forPollenUserEquals(user).findPage(page); PaginationResultBean<FavoriteListBean> favoriteListBeans = toPaginationListBean(FavoriteListBean.class, favoriteLists); @@ -90,7 +94,7 @@ public class FavoriteListService extends PollenServiceSupport { PollenUser user = getConnectedUser(); - FavoriteList favoriteList = getFavoriteList(user, favoriteListId); + FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); FavoriteListBean favoriteListBean = toBean(FavoriteListBean.class, favoriteList); return favoriteListBean; @@ -129,6 +133,7 @@ public class FavoriteListService extends PollenServiceSupport { List<FavoriteList> existingFavoriteLists = getFavoriteLists0(user); + ErrorMap errorMap = checkFavoriteList(existingFavoriteLists, favoriteList); errorMap.failIfNotEmpty(); @@ -149,7 +154,7 @@ public class FavoriteListService extends PollenServiceSupport { PollenUser user = getConnectedUser(); - FavoriteList favoriteList = getFavoriteList(user, favoriteListId); + FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); getFavoriteListDao().delete(favoriteList); commit(); @@ -158,17 +163,20 @@ public class FavoriteListService extends PollenServiceSupport { } - public Set<FavoriteListMemberBean> getFavoriteListMembers(String favoriteListId) { + public PaginationResultBean<FavoriteListMemberBean> getFavoriteListMembers(String favoriteListId, + PaginationParameterBean paginationParameter) { checkIsConnected(); checkNotNull(favoriteListId); PollenUser user = getConnectedUser(); - FavoriteList favoriteList = getFavoriteList(user, favoriteListId); + FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); + + PaginationParameter page = getFavoriteListPaginationParameter(paginationParameter); - Set<FavoriteListMember> members = favoriteList.getMember(); - Set<FavoriteListMemberBean> memberBeans = toBeanSet(FavoriteListMemberBean.class, members); + PaginationResult<FavoriteListMember> members = getFavoriteListMemberDao().forFavoriteListEquals(favoriteList).findPage(page); + PaginationResultBean<FavoriteListMemberBean> memberBeans = toPaginationListBean(FavoriteListMemberBean.class, members); return memberBeans; } @@ -181,9 +189,9 @@ public class FavoriteListService extends PollenServiceSupport { PollenUser user = getConnectedUser(); - FavoriteList favoriteList = getFavoriteList(user, favoriteListId); + FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); - FavoriteListMember member = getFavoriteListMember(favoriteList, memberId); + FavoriteListMember member = getFavoriteListMember0(favoriteList, memberId); FavoriteListMemberBean memberBean = toBean(FavoriteListMemberBean.class, member); return memberBean; @@ -199,9 +207,9 @@ public class FavoriteListService extends PollenServiceSupport { PollenUser user = getConnectedUser(); - FavoriteList favoriteList = getFavoriteList(user, favoriteListId); + FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); - List<FavoriteListMember> existingFavorliteListMembers = new ArrayList<>(); + List<FavoriteListMember> existingFavorliteListMembers = getFavoriteListMembers0(favoriteList); ErrorMap errorMap = checkFavoriteListMember(existingFavorliteListMembers, member); errorMap.failIfNotEmpty(); @@ -224,9 +232,9 @@ public class FavoriteListService extends PollenServiceSupport { PollenUser user = getConnectedUser(); - FavoriteList favoriteList = getFavoriteList(user, favoriteListId); + FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); - List<FavoriteListMember> existingFavorliteListMembers = new ArrayList<>(); + List<FavoriteListMember> existingFavorliteListMembers = getFavoriteListMembers0(favoriteList); ErrorMap errorMap = checkFavoriteListMember(existingFavorliteListMembers, member); errorMap.failIfNotEmpty(); @@ -248,19 +256,17 @@ public class FavoriteListService extends PollenServiceSupport { PollenUser user = getConnectedUser(); - FavoriteList favoriteList = getFavoriteList(user, favoriteListId); + FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); - FavoriteListMember member = getFavoriteListMember(favoriteList, memberId); + FavoriteListMember member = getFavoriteListMember0(favoriteList, memberId); - favoriteList.removeMember(member); - - getFavoriteListDao().update(favoriteList); + getFavoriteListMemberDao().delete(member); commit(); } - public int importFavoriteListMembersFromCsv(String favoriteListId, - File file) throws FavoriteListImportException { + public void importFavoriteListMembersFromCsv(String favoriteListId, + File file) throws FavoriteListImportException { checkIsConnected(); checkNotNull(favoriteListId); @@ -268,15 +274,17 @@ public class FavoriteListService extends PollenServiceSupport { PollenUser user = getConnectedUser(); - FavoriteList favoriteList = getFavoriteList(user, favoriteListId); + FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); Locale locale = serviceContext.getLocale(); Set<String> usedName = Sets.newHashSet(); Set<String> usedEmail = Sets.newHashSet(); - if (!favoriteList.isMemberEmpty()) { - for (FavoriteListMember member : favoriteList.getMember()) { + List<FavoriteListMember> favoriteListMembers = getFavoriteListMembers0(favoriteList); + + if (CollectionUtils.isNotEmpty(favoriteListMembers)) { + for (FavoriteListMember member : favoriteListMembers) { usedName.add(member.getName()); usedEmail.add(member.getEmail()); } @@ -335,8 +343,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteListMember member = getFavoriteListMemberDao().newInstance(); member.setName(memberName); member.setEmail(email); - - favoriteList.addMember(member); + member.setFavoriteList(favoriteList); } reader.close(); @@ -348,15 +355,16 @@ public class FavoriteListService extends PollenServiceSupport { IOUtils.closeQuietly(reader); } - getFavoriteListDao().update(favoriteList); + if (log.isInfoEnabled()) { + log.info("Imported members: " + result); + } commit(); - return result; } - public int importFavoriteListMembersFromLdap(String favoriteListId, - String ldap) throws FavoriteListImportException { + public void importFavoriteListMembersFromLdap(String favoriteListId, + String ldap) throws FavoriteListImportException { checkIsConnected(); checkNotNull(favoriteListId); @@ -364,15 +372,17 @@ public class FavoriteListService extends PollenServiceSupport { PollenUser user = getConnectedUser(); - FavoriteList favoriteList = getFavoriteList(user, favoriteListId); + FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); Locale locale = serviceContext.getLocale(); Set<String> usedName = Sets.newHashSet(); Set<String> usedEmail = Sets.newHashSet(); - if (!favoriteList.isMemberEmpty()) { - for (FavoriteListMember member : favoriteList.getMember()) { + List<FavoriteListMember> favoriteListMembers = getFavoriteListMembers0(favoriteList); + + if (CollectionUtils.isNotEmpty(favoriteListMembers)) { + for (FavoriteListMember member : favoriteListMembers) { usedName.add(member.getName()); usedEmail.add(member.getEmail()); } @@ -429,25 +439,29 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteListMember member = getFavoriteListMemberDao().newInstance(); member.setName(memberName); member.setEmail(email); - - favoriteList.addMember(member); + member.setFavoriteList(favoriteList); } } } catch (NamingException ex) { throw new FavoriteListImportException("LDAP", ex); } - getFavoriteListDao().update(favoriteList); + if (log.isInfoEnabled()) { + log.info("Imported members: " + result); + } commit(); - return result; + } protected List<FavoriteList> getFavoriteLists0(PollenUser user) { - return getFavoriteListDao().forPollenUserEquals(user).findAll(); + + List<FavoriteList> favoriteLists = getFavoriteListDao().forPollenUserEquals(user).findAll(); + return favoriteLists; + } - protected FavoriteList getFavoriteList(PollenUser user, String favoriteListId) { + protected FavoriteList getFavoriteList0(PollenUser user, String favoriteListId) { FavoriteList result = getFavoriteListDao().findByTopiaId(favoriteListId); @@ -461,13 +475,20 @@ public class FavoriteListService extends PollenServiceSupport { } - protected FavoriteListMember getFavoriteListMember(FavoriteList favoriteList, String memberId) { + protected List<FavoriteListMember> getFavoriteListMembers0(FavoriteList favoriteList) { + + List<FavoriteListMember> members = getFavoriteListMemberDao().forFavoriteListEquals(favoriteList).findAll(); + return members; + + } + + protected FavoriteListMember getFavoriteListMember0(FavoriteList favoriteList, String memberId) { FavoriteListMember result = getFavoriteListMemberDao().findByTopiaId(memberId); - if (!favoriteList.containsMember(result)) { + if (!favoriteList.equals(result.getFavoriteList())) { - throw new InvalidEntityLinkException(FavoriteList.PROPERTY_MEMBER, favoriteList, result); + throw new InvalidEntityLinkException(FavoriteListMember.PROPERTY_FAVORITE_LIST, favoriteList, result); } @@ -486,7 +507,7 @@ public class FavoriteListService extends PollenServiceSupport { if (persisted) { // get existing favorite list - toSave = getFavoriteList(user, favoriteList.getEntityId()); + toSave = getFavoriteList0(user, favoriteList.getEntityId()); } else { @@ -513,19 +534,18 @@ public class FavoriteListService extends PollenServiceSupport { if (persisted) { // get existing favorite list - toSave = getFavoriteListMember(favoriteList, favoriteListMember.getEntityId()); + toSave = getFavoriteListMember0(favoriteList, favoriteListMember.getEntityId()); } else { // create a new favorite list toSave = favoriteListDao.create(); - - favoriteList.addMember(toSave); + toSave.setFavoriteList(favoriteList); } toSave.setName(favoriteListMember.getName()); - toSave.setEmail(StringUtils.lowerCase(favoriteListMember.getEmail())); + toSave.setEmail(getCleanMail(favoriteListMember.getEmail())); return toSave; } @@ -536,57 +556,42 @@ public class FavoriteListService extends PollenServiceSupport { String favoriteListName = favoriteList.getName(); - checkNotBlank(errors, "name", favoriteListName, "name can not be empty"); + boolean nameNotBlank = checkNotBlank(errors, "name", favoriteListName, "name can not be empty"); boolean favoriteListExists = favoriteList.isPersisted(); - Set<String> favoriteListNames = Sets.newHashSet(); - - if (CollectionUtils.isNotEmpty(existingFavoriteLists)) { - - // get all used names - - for (FavoriteList favoriteList1 : existingFavoriteLists) { - - if (favoriteListExists && - favoriteList1.getTopiaId().equals(favoriteList.getEntityId())) { + if (nameNotBlank) { - continue; + Set<String> favoriteListNames = Sets.newHashSet(); - } + if (CollectionUtils.isNotEmpty(existingFavoriteLists)) { - favoriteListNames.add(favoriteList1.getName()); + // get all used names - } + for (FavoriteList favoriteList1 : existingFavoriteLists) { - } + if (favoriteListExists && + favoriteList1.getTopiaId().equals(favoriteList.getEntityId())) { - boolean nameAdded = favoriteListNames.add(favoriteListName); - check(errors, "name", nameAdded, "name already used by another favorite list"); + continue; - if (CollectionUtils.isNotEmpty(favoriteList.getMember())) { + } - int memberIndex = 0; + favoriteListNames.add(favoriteList1.getName()); - List<FavoriteListMember> existingFavoriteListMembers = new ArrayList<>(); + } - for (FavoriteListMemberBean existingFavoriteListMember : favoriteList.getMember()) { - existingFavoriteListMembers.add(existingFavoriteListMember.toEntity()); } - for (FavoriteListMemberBean member : favoriteList.getMember()) { - - ErrorMap favoriteListMemberErrors = checkFavoriteListMember(existingFavoriteListMembers, member); - favoriteListMemberErrors.copyTo(errors, "favoriteListMember[" + (memberIndex++) + "]."); - - } + boolean nameAdded = favoriteListNames.add(favoriteListName); + check(errors, "name", nameAdded, "name already used by another favorite list"); } return errors; } - protected ErrorMap checkFavoriteListMember(List<FavoriteListMember> existingFavoriteListMember, FavoriteListMemberBean favoriteListMember) { + protected ErrorMap checkFavoriteListMember(List<FavoriteListMember> existingFavoriteListMembers, FavoriteListMemberBean favoriteListMember) { ErrorMap errors = new ErrorMap(); @@ -595,14 +600,14 @@ public class FavoriteListService extends PollenServiceSupport { Set<String> memberNames = Sets.newHashSet(); Set<String> memberEmails = Sets.newHashSet(); - if (CollectionUtils.isNotEmpty(existingFavoriteListMember)) { + if (CollectionUtils.isNotEmpty(existingFavoriteListMembers)) { // get all used names / emails - for (FavoriteListMember favoriteListMember1 : existingFavoriteListMember) { + for (FavoriteListMember favoriteListMember1 : existingFavoriteListMembers) { if (voterListMemberExists && - favoriteListMember1.getTopiaId().equals(favoriteListMember1.getTopiaId())) { + favoriteListMember1.getTopiaId().equals(favoriteListMember.getEntityId())) { continue; } @@ -615,8 +620,10 @@ public class FavoriteListService extends PollenServiceSupport { boolean nameNotBlank = checkNotBlank(errors, "name", favoriteListMember.getName(), "member name can not be empty"); if (nameNotBlank) { + boolean added = memberNames.add(favoriteListMember.getName()); check(errors, "name", added, "member name already used"); + } String memberEmail = getCleanMail(favoriteListMember.getEmail()); @@ -640,7 +647,7 @@ public class FavoriteListService extends PollenServiceSupport { } - protected PaginationParameter getPaginationParameter(PaginationParameterBean paginationParameter) { + protected PaginationParameter getFavoriteListPaginationParameter(PaginationParameterBean paginationParameter) { if (paginationParameter == null) { @@ -654,4 +661,18 @@ public class FavoriteListService extends PollenServiceSupport { } + protected PaginationParameter getFavoriteListMemberPaginationParameter(PaginationParameterBean paginationParameter) { + + if (paginationParameter == null) { + + int pageSize = getPollenServiceConfig().getDefaultFavoriteListMemberPaginationSize(); + paginationParameter = PaginationParameterBean.of(0, pageSize); + + } + + PaginationParameter parameter = paginationParameter.toPaginationParameter(); + return parameter; + + } + } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java index 87eab73..dfd53e8 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java @@ -122,7 +122,7 @@ public class FixturesService extends PollenServiceSupport { try { PollBean pollBean = new PollBean(); pollBean.fromEntity(poll); - PollenEntityRef<Poll> createdPoll = pollService.createPoll(pollBean, choicesBean, null); + PollenEntityRef<Poll> createdPoll = pollService.createPoll(pollBean, choicesBean); poll.setTopiaId(createdPoll.getEntityId()); PollenPrincipal principal = securityService.getPollenPrincipalByPermissionToken(createdPoll.getPermission()); 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 3212d22..a86ad15 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 @@ -29,13 +29,11 @@ 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.VoterList; import org.chorem.pollen.services.bean.ChoiceBean; import org.chorem.pollen.services.bean.PaginationParameterBean; import org.chorem.pollen.services.bean.PaginationResultBean; import org.chorem.pollen.services.bean.PollBean; import org.chorem.pollen.services.bean.PollenEntityRef; -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; @@ -158,17 +156,16 @@ public class PollService extends PollenServiceSupport { } - public PollenEntityRef<Poll> createPoll(PollBean poll, List<ChoiceBean> choices, List<VoterListBean> voterLists) throws InvalidFormException { + public PollenEntityRef<Poll> createPoll(PollBean poll, List<ChoiceBean> choices) throws InvalidFormException { checkNotNull(poll); checkIsNotPersisted(poll); ErrorMap errorMap = checkPoll(poll); checkChoices(errorMap, choices); - checkVoterLists(errorMap, poll, voterLists); errorMap.failIfNotEmpty(); - Poll savedPoll = savePoll(poll, choices, voterLists); + Poll savedPoll = savePoll(poll, choices); commit(); getNotificationService().onPollCreated(savedPoll); @@ -188,7 +185,7 @@ public class PollService extends PollenServiceSupport { ErrorMap errorMap = checkPoll(poll); errorMap.failIfNotEmpty(); - Poll savedPoll = savePoll(poll, null, null); + Poll savedPoll = savePoll(poll, null); commit(); getNotificationService().onPollEdited(savedPoll); @@ -254,7 +251,7 @@ public class PollService extends PollenServiceSupport { } - protected Poll savePoll(PollBean poll, List<ChoiceBean> choices, List<VoterListBean> voterLists) { + protected Poll savePoll(PollBean poll, List<ChoiceBean> choices) { boolean pollExists = poll.isPersisted(); @@ -330,19 +327,6 @@ public class PollService extends PollenServiceSupport { } } - // -- voter list -- // - - if (CollectionUtils.isNotEmpty(voterLists)) { - - VoterListService voterListService = getVoterListService(); - - for (VoterListBean voterList : voterLists) { - - voterListService.saveVoterList(toSave, voterList); - - } - } - return toSave; } @@ -393,44 +377,6 @@ public class PollService extends PollenServiceSupport { } } - protected void checkVoterLists(ErrorMap errorMap, PollBean poll, List<VoterListBean> voterLists) { - - boolean voterListsNotEmpty = CollectionUtils.isNotEmpty(voterLists); - - if (PollBean.isPollFree(poll)) { - - checkEmpty(errorMap, "voterList", voterLists, l(getLocale(), "pollen.error.poll.voterList.mismatch.freePoll")); - - } else if (PollBean.isPollRestricted(poll)) { - - check(errorMap, "voterList", voterListsNotEmpty && 1 == voterLists.size(), l(getLocale(), "pollen.error.poll.unique.voterList.mandatory.for.restrictedPoll")); - - } else if (PollBean.isPollGroup(poll)) { - - check(errorMap, "voterList", voterListsNotEmpty, l(getLocale(), "pollen.error.poll.voterList.mandatory.for.groupedPoll")); - - } - - if (voterListsNotEmpty) { - - List<VoterList> existingVoterLists = new ArrayList<>(); - - for (int i = 0; i < voterLists.size(); i++) { - - VoterListBean voterList = voterLists.get(i); - - ErrorMap voterListErrors = getVoterListService().checkVoterList(existingVoterLists, voterList); - - voterListErrors.copyTo(errorMap, "voterList[" + (i++) + "]."); - - existingVoterLists.add(voterList.toEntity()); - - } - - } - - } - protected PaginationParameter getPaginationParameter(PaginationParameterBean paginationParameter) { if (paginationParameter == null) { diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java index 90fb857..e5ca3cb 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java @@ -196,7 +196,8 @@ public class VoteCountingService extends PollenServiceSupport { builder.newGroupVoter(voterList.getTopiaId(), voterList.getWeight()); - for (VoterListMember voterListMember : voterList.getMember()) { + List<VoterListMember> voterListMembers = getVoterListService().getVoterListMembers0(voterList); + for (VoterListMember voterListMember : voterListMembers) { Vote vote = voteByVoterListMember.get(voterListMember); 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 4d72516..42f9558 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 @@ -25,18 +25,18 @@ package org.chorem.pollen.services.service; import com.google.common.collect.Sets; import org.apache.commons.collections4.CollectionUtils; +import org.chorem.pollen.persistence.entity.FavoriteList; +import org.chorem.pollen.persistence.entity.FavoriteListMember; import org.chorem.pollen.persistence.entity.Poll; +import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.persistence.entity.VoterList; import org.chorem.pollen.persistence.entity.VoterListMember; import org.chorem.pollen.persistence.entity.VoterListMemberTopiaDao; import org.chorem.pollen.persistence.entity.VoterListTopiaDao; -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.VoterListBean; import org.chorem.pollen.services.bean.VoterListMemberBean; -import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -57,7 +57,9 @@ public class VoterListService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); - FavoriteListBean favoriteList = getFavoriteListService().getFavoriteList(favoriteListId); + PollenUser user = getConnectedUser(); + + FavoriteList favoriteList = getFavoriteListService().getFavoriteList0(user, favoriteListId); VoterListTopiaDao dao = getVoterListDao(); VoterList result = dao.create(); @@ -68,13 +70,17 @@ public class VoterListService extends PollenServiceSupport { VoterListMemberTopiaDao voterListMemberDao = getVoterListMemberDao(); - for (FavoriteListMemberBean favoriteListMember : favoriteList.getMember()) { + List<FavoriteListMember> favoriteListMembers = getFavoriteListService().getFavoriteListMembers0(favoriteList); + + for (FavoriteListMember favoriteListMember : favoriteListMembers) { - VoterListMember voterListMember = voterListMemberDao.newInstance(); + VoterListMember voterListMember = voterListMemberDao.create(); voterListMember.setWeight(1d); voterListMember.setEmail(favoriteListMember.getEmail()); - result.addMember(voterListMember); + voterListMember.setVoterList(result); + } + result.setPoll(poll); commit(); @@ -105,7 +111,9 @@ public class VoterListService extends PollenServiceSupport { } - public PollenEntityRef<VoterList> addVoterList(String pollId, VoterListBean voterList) throws InvalidFormException { + public PollenEntityRef<VoterList> addVoterList(String pollId, + VoterListBean voterList, + List<VoterListMemberBean> members) throws InvalidFormException { checkNotNull(pollId); checkNotNull(voterList); @@ -115,11 +123,25 @@ public class VoterListService extends PollenServiceSupport { List<VoterList> existingVoterLists = getVoterLists0(poll); - ErrorMap errorMap = checkVoterList(existingVoterLists, voterList); - errorMap.failIfNotEmpty(); + VoterList existingVoterList = getVoterList0(pollId, voterList.getEntityId()); + List<VoterListMember> existingVoterListMembers = getVoterListMembers0(existingVoterList); + + ErrorMap errorMap = checkVoterList(existingVoterLists, voterList, existingVoterListMembers, members); + errorMap.failIfNotEmpty(); VoterList result = saveVoterList(poll, voterList); + + if (CollectionUtils.isNotEmpty(members)) { + + for (VoterListMemberBean member : members) { + + saveVoterListMember(result, member); + + } + + } + commit(); //TODO Notify @@ -139,7 +161,7 @@ public class VoterListService extends PollenServiceSupport { List<VoterList> existingVoterLists = getVoterLists0(poll); - ErrorMap errorMap = checkVoterList(existingVoterLists, voterList); + ErrorMap errorMap = checkVoterList(existingVoterLists, voterList, null, null); errorMap.failIfNotEmpty(); VoterList result = saveVoterList(poll, voterList); @@ -158,7 +180,7 @@ public class VoterListService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); - VoterList voterList = getVoterList(poll, voterListId); + VoterList voterList = getVoterList0(poll, voterListId); getVoterListDao().delete(voterList); commit(); @@ -171,7 +193,7 @@ public class VoterListService extends PollenServiceSupport { VoterList voterList = getVoterList0(pollId, voterListId); - Set<VoterListMember> members = voterList.getMember(); + List<VoterListMember> members = getVoterListMembers0(voterList); Set<VoterListMemberBean> memberBeans = toBeanSet(VoterListMemberBean.class, members); return memberBeans; @@ -185,7 +207,7 @@ public class VoterListService extends PollenServiceSupport { VoterList voterList = getVoterList0(pollId, voterListId); - VoterListMember member = getVoterListMember(voterList, memberId); + VoterListMember member = getVoterListMember0(voterList, memberId); VoterListMemberBean memberBean = toBean(VoterListMemberBean.class, member); return memberBean; @@ -200,7 +222,7 @@ public class VoterListService extends PollenServiceSupport { VoterList voterList = getVoterList0(pollId, voterListId); - List<VoterListMember> existingVoterListMembers = new ArrayList<>(voterList.getMember()); + List<VoterListMember> existingVoterListMembers = getVoterListMembers0(voterList); ErrorMap errorMap = checkVoterListMember(existingVoterListMembers, member); errorMap.failIfNotEmpty(); @@ -222,7 +244,7 @@ public class VoterListService extends PollenServiceSupport { VoterList voterList = getVoterList0(pollId, voterListId); - List<VoterListMember> existingVoterListMembers = new ArrayList<>(voterList.getMember()); + List<VoterListMember> existingVoterListMembers = getVoterListMembers0(voterList); ErrorMap errorMap = checkVoterListMember(existingVoterListMembers, member); errorMap.failIfNotEmpty(); @@ -244,8 +266,8 @@ public class VoterListService extends PollenServiceSupport { VoterList voterList = getVoterList0(pollId, voterListId); - VoterListMember member = getVoterListMember(voterList, memberId); - voterList.removeMember(member); + VoterListMember member = getVoterListMember0(voterList, memberId); + getVoterListMemberDao().delete(member); commit(); } @@ -257,7 +279,7 @@ public class VoterListService extends PollenServiceSupport { } - protected VoterList getVoterList(Poll poll, String voterListId) { + protected VoterList getVoterList0(Poll poll, String voterListId) { VoterList result = getVoterListDao().findByTopiaId(voterListId); @@ -278,18 +300,25 @@ public class VoterListService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); - VoterList result = getVoterList(poll, voterListId); + VoterList result = getVoterList0(poll, voterListId); return result; } - protected VoterListMember getVoterListMember(VoterList voterList, String memberId) { + protected List<VoterListMember> getVoterListMembers0(VoterList voterList) { + + List<VoterListMember> members = getVoterListMemberDao().forVoterListEquals(voterList).findAll(); + return members; + + } + + protected VoterListMember getVoterListMember0(VoterList voterList, String memberId) { VoterListMember result = getVoterListMemberDao().findByTopiaId(memberId); - if (!voterList.containsMember(result)) { + if (!voterList.equals(result.getVoterList())) { - throw new InvalidEntityLinkException(VoterList.PROPERTY_MEMBER, voterList, result); + throw new InvalidEntityLinkException(VoterListMember.PROPERTY_VOTER_LIST, voterList, result); } @@ -305,7 +334,7 @@ public class VoterListService extends PollenServiceSupport { if (voterListExists) { - toSave = getVoterList(poll, voterList.getEntityId()); + toSave = getVoterList0(poll, voterList.getEntityId()); } else { @@ -317,12 +346,6 @@ public class VoterListService extends PollenServiceSupport { toSave.setName(voterList.getName()); toSave.setWeight(voterList.getWeight()); - for (VoterListMemberBean voterListMember : voterList.getMember()) { - - saveVoterListMember(toSave, voterListMember); - - } - return toSave; } @@ -336,12 +359,12 @@ public class VoterListService extends PollenServiceSupport { if (voterListMemberExists) { - toSave = getVoterListMember(voterList, voterListMember.getEntityId()); + toSave = getVoterListMember0(voterList, voterListMember.getEntityId()); } else { toSave = getVoterListMemberDao().create(); - voterList.addMember(toSave); + toSave.setVoterList(voterList); } @@ -353,7 +376,7 @@ public class VoterListService extends PollenServiceSupport { } - protected ErrorMap checkVoterList(List<VoterList> existingVoterLists, VoterListBean voterList) { + protected ErrorMap checkVoterList(List<VoterList> existingVoterLists, VoterListBean voterList, List<VoterListMember> existingVoterListMembers, List<VoterListMemberBean> members) { ErrorMap errors = new ErrorMap(); @@ -380,7 +403,7 @@ public class VoterListService extends PollenServiceSupport { checkNotBlank(errors, VoterList.PROPERTY_NAME, voterList.getName(), "voterList name can not be empty"); check(errors, VoterList.PROPERTY_WEIGHT, voterList.getWeight() > 0, "voterList weight must be greater than 0"); - checkNotEmpty(errors, VoterList.PROPERTY_MEMBER, voterList.getMember(), "voterList must contains at least one member"); + checkNotEmpty(errors, "member", members, "voterList must contains at least one member"); boolean added = voterListNames.add(voterList.getName()); @@ -388,26 +411,9 @@ public class VoterListService extends PollenServiceSupport { int voterListMemberIndex = 0; - if (CollectionUtils.isNotEmpty(voterList.getMember())) { - - List<VoterListMember> existingVoterListMembers; - - if (voterListExists) { - - existingVoterListMembers = new ArrayList<>(); - for (VoterListMemberBean existingVoterListMember : voterList.getMember()) { - - existingVoterListMembers.add(existingVoterListMember.toEntity()); - - } - - } else { - - existingVoterListMembers = new ArrayList<>(); - - } + if (CollectionUtils.isNotEmpty(members)) { - for (VoterListMemberBean voterListMember : voterList.getMember()) { + for (VoterListMemberBean voterListMember : members) { ErrorMap voterListMemberErrors = checkVoterListMember(existingVoterListMembers, voterListMember); voterListMemberErrors.copyTo(errors, "member[" + (voterListMemberIndex++) + "]."); 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 241b5fb..13c2595 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,5 +1,6 @@ pollen.configuration.data.directory=Directory where Pollen stores his data pollen.configuration.defaultCommentPageSize= +pollen.configuration.defaultFavoriteListMemberPageSize= 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 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 3f8f499..572583b 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,5 +1,6 @@ pollen.configuration.data.directory=Répertoire de données de l'application pollen.configuration.defaultCommentPageSize= +pollen.configuration.defaultFavoriteListMemberPageSize= 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 diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/service/FavoriteListServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/service/FavoriteListServiceTest.java new file mode 100644 index 0000000..d637524 --- /dev/null +++ b/pollen-services/src/test/java/org/chorem/pollen/services/service/FavoriteListServiceTest.java @@ -0,0 +1,323 @@ +package org.chorem.pollen.services.service; + +/* + * #%L + * Pollen :: Service + * %% + * Copyright (C) 2009 - 2014 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import org.chorem.pollen.persistence.entity.FavoriteList; +import org.chorem.pollen.persistence.entity.FavoriteListMember; +import org.chorem.pollen.persistence.entity.PollenUser; +import org.chorem.pollen.services.AbstractPollenServiceTest; +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.service.security.PollenAuthenticationException; +import org.chorem.pollen.services.service.security.PollenInvalidSessionTokenException; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.text.ParseException; +import java.util.Date; + +/** + * Created on 5/29/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.0 + */ +public class FavoriteListServiceTest extends AbstractPollenServiceTest { + + + protected PollenUserService userService; + + protected FavoriteListService service; + + protected PollenUser user; + + @Before + public void setUp() throws ParseException { + + loadFixtures("fixtures"); + + userService = newService(PollenUserService.class); + service = newService(FavoriteListService.class); + + getServiceContext().setDate(new Date(1363948427576l)); + + user = application.fixture("user_jean"); + } + + @Test + public void createFavoriteList() throws PollenInvalidSessionTokenException, PollenAuthenticationException, InvalidFormException { + + login("jean@pollen.fake", "fake"); + + // create a first list + + FavoriteListBean favoriteListBean1 = new FavoriteListBean(); + + try { + service.createFavoriteList(favoriteListBean1); + Assert.fail(); + } catch (InvalidFormException e) { + // no name + assertErrorKeyFound(e, "name"); + } + + favoriteListBean1.setName("list1"); + PollenEntityRef<FavoriteList> savedList1 = service.createFavoriteList(favoriteListBean1); + Assert.assertNotNull(savedList1); + Assert.assertNotNull(savedList1.getEntityId()); + + // create a first member + + FavoriteListMemberBean memberBean1 = new FavoriteListMemberBean(); + try { + service.addFavoriteListMember(savedList1.getEntityId(), memberBean1); + Assert.fail(); + } catch (InvalidFormException e) { + // no name + // no email + assertErrorKeyFound(e, "name", "email"); + } + + memberBean1.setName("member1"); + try { + service.addFavoriteListMember(savedList1.getEntityId(), memberBean1); + Assert.fail(); + } catch (InvalidFormException e) { + // no email + assertErrorKeyFound(e, "email"); + } + + memberBean1.setEmail("member1@"); + try { + service.addFavoriteListMember(savedList1.getEntityId(), memberBean1); + Assert.fail(); + } catch (InvalidFormException e) { + // invalid email + assertErrorKeyFound(e, "email"); + } + + memberBean1.setEmail("member1@pollen.org"); + PollenEntityRef<FavoriteListMember> savedMmember1 = service.addFavoriteListMember(savedList1.getEntityId(), memberBean1); + Assert.assertNotNull(savedMmember1); + Assert.assertNotNull(savedMmember1.getEntityId()); + + // create a second member + + FavoriteListMemberBean memberBean2 = new FavoriteListMemberBean(); + + memberBean2.setName("member1"); + memberBean2.setEmail("member1@pollen.org"); + try { + service.addFavoriteListMember(savedList1.getEntityId(), memberBean2); + Assert.fail(); + } catch (InvalidFormException e) { + // duplicated name + // duplicated email + assertErrorKeyFound(e, "name", "email"); + } + + memberBean2.setName("member2"); + try { + service.addFavoriteListMember(savedList1.getEntityId(), memberBean2); + Assert.fail(); + } catch (InvalidFormException e) { + // duplicated email + assertErrorKeyFound(e, "email"); + } + + memberBean2.setEmail("member2@pollen.org"); + + PollenEntityRef<FavoriteListMember> savedMmember2 = service.addFavoriteListMember(savedList1.getEntityId(), memberBean2); + Assert.assertNotNull(savedMmember2); + Assert.assertNotNull(savedMmember2.getEntityId()); + + + // create a second list + + FavoriteListBean favoriteListBean2 = new FavoriteListBean(); + favoriteListBean2.setName("list1"); + try { + service.createFavoriteList(favoriteListBean2); + Assert.fail(); + } catch (InvalidFormException e) { + // same name + assertErrorKeyFound(e, "name"); + } + + favoriteListBean2.setName("list2"); + PollenEntityRef<FavoriteList> savedList2 = service.createFavoriteList(favoriteListBean2); + Assert.assertNotNull(savedList2); + Assert.assertNotNull(savedList2.getEntityId()); + + } + + @Test + public void editFavoriteList() throws PollenInvalidSessionTokenException, PollenAuthenticationException, InvalidFormException { + + login("jean@pollen.fake", "fake"); + + // create a first list + + FavoriteListBean favoriteListBean1 = new FavoriteListBean(); + + favoriteListBean1.setName("list1"); + PollenEntityRef<FavoriteList> savedList1 = service.createFavoriteList(favoriteListBean1); + Assert.assertNotNull(savedList1); + Assert.assertNotNull(savedList1.getEntityId()); + + // create a first member + + FavoriteListMemberBean memberBean1 = new FavoriteListMemberBean(); + memberBean1.setName("member1"); + memberBean1.setEmail("member1@pollen.org"); + PollenEntityRef<FavoriteListMember> savedMmember1 = service.addFavoriteListMember(savedList1.getEntityId(), memberBean1); + Assert.assertNotNull(savedMmember1); + Assert.assertNotNull(savedMmember1.getEntityId()); + + // create a second member + + FavoriteListMemberBean memberBean2 = new FavoriteListMemberBean(); + memberBean2.setName("member2"); + memberBean2.setEmail("member2@pollen.org"); + PollenEntityRef<FavoriteListMember> savedMmember2 = service.addFavoriteListMember(savedList1.getEntityId(), memberBean2); + Assert.assertNotNull(savedMmember2); + Assert.assertNotNull(savedMmember2.getEntityId()); + + // create a second list + + FavoriteListBean favoriteListBean2 = new FavoriteListBean(); + favoriteListBean2.setName("list2"); + PollenEntityRef<FavoriteList> savedList2 = service.createFavoriteList(favoriteListBean2); + Assert.assertNotNull(savedList2); + Assert.assertNotNull(savedList2.getEntityId()); + + // edit first list + + try { + service.editFavoriteList(favoriteListBean1); + Assert.fail(); + } catch (IllegalStateException e) { + // Should having id + Assert.assertTrue(true); + } + + favoriteListBean1.setEntityId(savedList1.getEntityId()); + service.editFavoriteList(favoriteListBean1); + + favoriteListBean1.setName("list2"); + try { + service.editFavoriteList(favoriteListBean1); + Assert.fail(); + } catch (InvalidFormException e) { + // duplicated name + assertErrorKeyFound(e, "name"); + } + + favoriteListBean1.setName("list3"); + service.editFavoriteList(favoriteListBean1); + + } + + @Test + public void editFavoriteListMember() throws PollenInvalidSessionTokenException, PollenAuthenticationException, InvalidFormException { + + login("jean@pollen.fake", "fake"); + + // create a first list + + FavoriteListBean favoriteListBean1 = new FavoriteListBean(); + + favoriteListBean1.setName("list1"); + PollenEntityRef<FavoriteList> savedList1 = service.createFavoriteList(favoriteListBean1); + Assert.assertNotNull(savedList1); + Assert.assertNotNull(savedList1.getEntityId()); + + // create a first member + + FavoriteListMemberBean memberBean1 = new FavoriteListMemberBean(); + memberBean1.setName("member1"); + memberBean1.setEmail("member1@pollen.org"); + PollenEntityRef<FavoriteListMember> savedMmember1 = service.addFavoriteListMember(savedList1.getEntityId(), memberBean1); + Assert.assertNotNull(savedMmember1); + Assert.assertNotNull(savedMmember1.getEntityId()); + + // create a second member + + FavoriteListMemberBean memberBean2 = new FavoriteListMemberBean(); + memberBean2.setName("member2"); + memberBean2.setEmail("member2@pollen.org"); + PollenEntityRef<FavoriteListMember> savedMmember2 = service.addFavoriteListMember(savedList1.getEntityId(), memberBean2); + Assert.assertNotNull(savedMmember2); + Assert.assertNotNull(savedMmember2.getEntityId()); + + // edit first member + + try { + service.editFavoriteListMember(savedList1.getEntityId(), memberBean1); + Assert.fail(); + } catch (IllegalStateException e) { + // Should having id + Assert.assertTrue(true); + } + + memberBean1.setEntityId(savedMmember1.getEntityId()); + service.editFavoriteListMember(savedList1.getEntityId(), memberBean1); + + memberBean1.setName("member2"); + memberBean1.setEmail("member2[pollen.org"); + try { + service.editFavoriteListMember(savedList1.getEntityId(), memberBean1); + Assert.fail(); + } catch (InvalidFormException e) { + // duplicated name + // invalid email + assertErrorKeyFound(e, "name", "email"); + } + + memberBean1.setName("member3"); + try { + service.editFavoriteListMember(savedList1.getEntityId(), memberBean1); + Assert.fail(); + } catch (InvalidFormException e) { + // invalid email + assertErrorKeyFound(e, "email"); + } + + memberBean1.setEmail("member2@pollen.org"); + try { + service.editFavoriteListMember(savedList1.getEntityId(), memberBean1); + Assert.fail(); + } catch (InvalidFormException e) { + // duplicated email + assertErrorKeyFound(e, "email"); + } + + memberBean1.setEmail("member1@pollen.org"); + service.editFavoriteListMember(savedList1.getEntityId(), memberBean1); + + memberBean1.setEmail("member3@pollen.org"); + service.editFavoriteListMember(savedList1.getEntityId(), memberBean1); + + } +} diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollServiceTest.java index 6679ee8..ce07c29 100644 --- a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollServiceTest.java +++ b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollServiceTest.java @@ -26,14 +26,10 @@ package org.chorem.pollen.services.service; 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.services.AbstractPollenServiceTest; 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.VoterListBean; -import org.chorem.pollen.services.bean.VoterListMemberBean; -import org.chorem.pollen.services.service.security.PollenInvalidPermissionException; import org.chorem.pollen.services.service.security.SecurityService; import org.chorem.pollen.services.test.FakePollenSecurityContext; import org.junit.Assert; @@ -99,7 +95,7 @@ public class PollServiceTest extends AbstractPollenServiceTest { choice2.setDescription("Choice B"); choices.add(choice2); - PollenEntityRef<Poll> createdPoll = service.createPoll(poll, choices, null); + PollenEntityRef<Poll> createdPoll = service.createPoll(poll, choices); Assert.assertNotNull(createdPoll); String createdPollId = createdPoll.getEntityId(); Assert.assertNotNull(createdPollId); @@ -145,7 +141,7 @@ public class PollServiceTest extends AbstractPollenServiceTest { poll.setPollType(PollType.FREE); try { - service.createPoll(poll, null, null); + service.createPoll(poll, null); Assert.fail(); } catch (InvalidFormException e) { // missing title @@ -160,7 +156,7 @@ public class PollServiceTest extends AbstractPollenServiceTest { choices.add(choice1); try { - service.createPoll(poll, choices, null); + service.createPoll(poll, choices); Assert.fail(); } catch (InvalidFormException e) { // missing choice type @@ -169,7 +165,7 @@ public class PollServiceTest extends AbstractPollenServiceTest { choice1.setChoiceType(ChoiceType.TEXT); try { - service.createPoll(poll, choices, null); + service.createPoll(poll, choices); Assert.fail(); } catch (InvalidFormException e) { // missing choice name @@ -187,7 +183,7 @@ public class PollServiceTest extends AbstractPollenServiceTest { choices.add(choice2); try { - service.createPoll(poll, choices, null); + service.createPoll(poll, choices); Assert.fail(); } catch (InvalidFormException e) { // duplicated choice name @@ -197,7 +193,7 @@ public class PollServiceTest extends AbstractPollenServiceTest { choice2.setName("B"); - PollenEntityRef<Poll> createdPoll = service.createPoll(poll, choices, null); + PollenEntityRef<Poll> createdPoll = service.createPoll(poll, choices); Assert.assertNotNull(createdPoll); String createdPollId = createdPoll.getEntityId(); Assert.assertNotNull(createdPollId); @@ -243,316 +239,296 @@ public class PollServiceTest extends AbstractPollenServiceTest { } - - @Test - public void createSafeRestrictedPoll() throws InvalidFormException { - - PollBean poll = service.getNewPoll(); - - poll.setPollType(PollType.GROUP); - poll.setTitle("poll1"); - - List<ChoiceBean> choices = new ArrayList<>(); - - ChoiceBean choice1 = new ChoiceBean(); - choices.add(choice1); - choice1.setChoiceType(ChoiceType.TEXT); - choice1.setName("A"); - choice1.setDescription("Choice A"); - - - ChoiceBean choice2 = new ChoiceBean(); - choice2.setChoiceType(ChoiceType.TEXT); - choice2.setName("B"); - choice2.setDescription("Choice B"); - choices.add(choice2); - - List<VoterListBean> voterLists = new ArrayList<>(); - - // add voter list - VoterListBean voterList = new VoterListBean(); - - voterLists.add(voterList); - voterList.setName("voterList1"); - voterList.setWeight(1); - - VoterListMemberBean voterListMember1 = new VoterListMemberBean(); - voterList.addMember(voterListMember1); - - voterListMember1.setName("voter1"); - voterListMember1.setWeight(0.3); - voterListMember1.setEmail("voter1@pollen.org"); - - VoterListMemberBean voterListMember2 = new VoterListMemberBean(); - voterList.addMember(voterListMember2); - voterListMember2.setName("voter2"); - voterListMember2.setEmail("voter2@pollen.org"); - voterListMember2.setWeight(0.7); - - PollenEntityRef<Poll> createdPoll = service.createPoll(poll, choices, voterLists); - Assert.assertNotNull(createdPoll); - String createdPollId = createdPoll.getEntityId(); - Assert.assertNotNull(createdPollId); - - try { - service.getPoll(createdPollId); - Assert.fail(); - } catch (PollenInvalidPermissionException e) { - Assert.assertTrue(true); - } - - FakePollenSecurityContext securityContext = serviceContext.getSecurityContext(); - - PollenPrincipal principal = securityService.getPollenPrincipalByPermissionToken(createdPoll.getPermission()); - securityContext.setMainPrincipal(principal); - - PollBean reloadedPoll = service.getPoll(createdPollId); -// Assert.assertEquals(createdPoll, reloadedPoll); - - Assert.assertEquals(getServiceContext().getNow(), reloadedPoll.getBeginDate()); - -// Assert.assertNotNull(createdPoll.getCreator()); -// Assert.assertNotNull(createdPoll.getCreator().getTopiaId()); -// Assert.assertNull(createdPoll.getCreator().getName()); -// Assert.assertNull(createdPoll.getCreator().getEmail()); - - List<ChoiceBean> createdChoices = choiceService.getChoices(createdPollId); - - Assert.assertNotNull(createdChoices); - Assert.assertEquals(2, createdChoices.size()); - - ChoiceBean createdChoice1 = createdChoices.get(0); - Assert.assertNotNull(createdChoice1); - Assert.assertNotNull(createdChoice1.getEntityId()); - - ChoiceBean reloadedChoice1 = choiceService.getChoice(createdPollId, createdChoice1.getEntityId()); - Assert.assertEquals(createdChoice1, reloadedChoice1); - - Assert.assertEquals(choice1.getName(), createdChoice1.getName()); - Assert.assertEquals(choice1.getDescription(), createdChoice1.getDescription()); -// Assert.assertEquals(createdPoll.getCreator(), createdChoice1.getCreator()); - - ChoiceBean createdChoice2 = createdChoices.get(1); - Assert.assertNotNull(createdChoice2); - Assert.assertNotNull(createdChoice2.getEntityId()); - - ChoiceBean reloadedChoice2 = choiceService.getChoice(createdPollId, createdChoice2.getEntityId()); - Assert.assertEquals(createdChoice2, reloadedChoice2); - - Assert.assertEquals(choice2.getName(), createdChoice2.getName()); - Assert.assertEquals(choice2.getDescription(), createdChoice2.getDescription()); -// Assert.assertEquals(createdPoll.getCreator(), createdChoice2.getCreator()); - - List<VoterListBean> createdVoterLists = voterListService.getVoterLists(createdPollId); - - Assert.assertNotNull(createdVoterLists); - Assert.assertEquals(1, createdVoterLists.size()); - VoterListBean createdVoterList = createdVoterLists.get(0); - Assert.assertNotNull(createdVoterList); - Assert.assertNotNull(createdVoterList.getEntityId()); - - VoterListBean reloadedVoterList = voterListService.getVoterList(createdPollId, createdVoterList.getEntityId()); - Assert.assertEquals(createdVoterList, reloadedVoterList); - - Assert.assertEquals(voterList.getName(), createdVoterList.getName()); - Assert.assertEquals(voterList.getWeight(), createdVoterList.getWeight(), 0); - - Assert.assertNotNull(createdVoterList.getMember()); - Assert.assertEquals(2, createdVoterList.getMember().size()); - - } - - @Test - public void testCreateRestrictedPoll() throws InvalidFormException { - - PollBean poll = service.getNewPoll(); - poll.setPollType(PollType.RESTRICTED); - - poll.setTitle("poll1"); - - List<ChoiceBean> choices = new ArrayList<>(); - - ChoiceBean choice1 = new ChoiceBean(); - choice1.setChoiceType(ChoiceType.TEXT); - choice1.setName("A"); - choice1.setDescription("Choice A"); - - choices.add(choice1); - - ChoiceBean choice2 = new ChoiceBean(); - choice2.setChoiceType(ChoiceType.TEXT); - choice2.setName("B"); - choice2.setDescription("Choice B"); - - choices.add(choice2); - - try { - service.createPoll(poll, choices, null); - Assert.fail(); - } catch (InvalidFormException e) { - // missing voterList - assertErrorKeyFound(e, "voterList"); - } - - List<VoterListBean> voterLists = new ArrayList<>(); - - // add voter list - VoterListBean voterList = new VoterListBean(); - - voterLists.add(voterList); - - try { - service.createPoll(poll, choices, voterLists); - Assert.fail(); - } catch (InvalidFormException e) { - // missing name - // missing weight - // missing voterListMember - assertErrorKeyFound(e, "voterList[0].name", "voterList[0].weight", "voterList[0].member"); - } - - voterList.setName("voterList1"); - voterList.setWeight(1); - - VoterListMemberBean voterListMember1 = new VoterListMemberBean(); - voterList.addMember(voterListMember1); - - try { - service.createPoll(poll, choices, voterLists); - Assert.fail(); - } catch (InvalidFormException e) { - // missing member name - // missing member email - assertErrorKeyFound(e, "voterList[0].member[0].name", "voterList[0].member[0].email", "voterList[0].member[0].weight"); - } - - voterListMember1.setName("voter1"); - voterListMember1.setWeight(0.3); - voterListMember1.setEmail("voter1_pollen.org"); - - try { - service.createPoll(poll, choices, voterLists); - Assert.fail(); - } catch (InvalidFormException e) { - // invalid member email - assertErrorKeyFound(e, "voterList[0].member[0].email"); - } - - voterListMember1.setEmail("voter1@pollen.org"); - - VoterListMemberBean voterListMember2 = new VoterListMemberBean(); - voterListMember2.setName("voter1"); - voterListMember2.setWeight(0.7); - voterListMember2.setEmail("voter1@pollen.org"); - voterList.addMember(voterListMember2); - - try { - service.createPoll(poll, choices, voterLists); - Assert.fail(); - } catch (InvalidFormException e) { - // same name - // same email - assertErrorKeyFound(e, "voterList[0].member[1].name", "voterList[0].member[1].email"); - } - - voterListMember2.setName("voter2"); - voterListMember2.setEmail("voter2@pollen.org"); - - PollenEntityRef<Poll> createdPoll = service.createPoll(poll, choices, voterLists); - Assert.assertNotNull(createdPoll); - String createdPollId = createdPoll.getEntityId(); - Assert.assertNotNull(createdPollId); - - try { - service.getPoll(createdPollId); - Assert.fail(); - } catch (PollenInvalidPermissionException e) { - Assert.assertTrue(true); - } - - PollenPrincipal principal = securityService.getPollenPrincipalByPermissionToken(createdPoll.getPermission()); - FakePollenSecurityContext securityContext = (FakePollenSecurityContext) serviceContext.getSecurityContext(); - securityContext.setMainPrincipal(principal); - - PollBean reloadedPoll = service.getPoll(createdPollId); -// Assert.assertEquals(createdPoll, reloadedPoll); - - Assert.assertEquals(getServiceContext().getNow(), reloadedPoll.getBeginDate()); - -// Assert.assertNotNull(createdPoll.getCreator()); -// Assert.assertNotNull(createdPoll.getCreator().getTopiaId()); -// Assert.assertNull(createdPoll.getCreator().getName()); -// Assert.assertNull(createdPoll.getCreator().getEmail()); -// Assert.assertNull(createdPoll.getComment()); -// Assert.assertNull(createdPoll.getVote()); - - List<ChoiceBean> createdChoices = choiceService.getChoices(createdPollId); - - Assert.assertNotNull(createdChoices); - Assert.assertEquals(2, createdChoices.size()); - - ChoiceBean createdChoice1 = createdChoices.get(0); - Assert.assertNotNull(createdChoice1); - Assert.assertNotNull(createdChoice1.getEntityId()); - - ChoiceBean reloadedChoice1 = choiceService.getChoice(createdPollId, createdChoice1.getEntityId()); - Assert.assertEquals(createdChoice1, reloadedChoice1); - - Assert.assertEquals(choice1.getName(), createdChoice1.getName()); - Assert.assertEquals(choice1.getDescription(), createdChoice1.getDescription()); -// Assert.assertEquals(createdPoll.getCreator(), createdChoice1.getCreator()); - - ChoiceBean createdChoice2 = createdChoices.get(1); - Assert.assertNotNull(createdChoice2); - Assert.assertNotNull(createdChoice2.getEntityId()); - - ChoiceBean reloadedChoice2 = choiceService.getChoice(createdPollId, createdChoice2.getEntityId()); - Assert.assertEquals(createdChoice2, reloadedChoice2); - - Assert.assertEquals(choice2.getName(), createdChoice2.getName()); - Assert.assertEquals(choice2.getDescription(), createdChoice2.getDescription()); -// Assert.assertEquals(createdPoll.getCreator(), createdChoice2.getCreator()); - - List<VoterListBean> createdVoterLists = voterListService.getVoterLists(createdPollId); - - Assert.assertNotNull(createdVoterLists); - Assert.assertEquals(1, createdVoterLists.size()); - VoterListBean createdVoterList = createdVoterLists.get(0); - Assert.assertNotNull(createdVoterList); - Assert.assertNotNull(createdVoterList.getEntityId()); - - VoterListBean reloadedVoterList = voterListService.getVoterList(createdPollId, createdVoterList.getEntityId()); - Assert.assertEquals(createdVoterList, reloadedVoterList); - - Assert.assertEquals(voterList.getName(), createdVoterList.getName()); - Assert.assertEquals(voterList.getWeight(), createdVoterList.getWeight(), 0); - - Assert.assertNotNull(createdVoterList.getMember()); - Assert.assertEquals(2, createdVoterList.getMember().size()); - -// VoterListMember createdVoterListMember1 = Iterables.get(createdVoterList.getMember(), 0); + //FIXME Review how to validate restricted poll +// @Test +// public void createSafeRestrictedPoll() throws InvalidFormException { +// +// PollBean poll = service.getNewPoll(); +// +// poll.setPollType(PollType.GROUP); +// poll.setTitle("poll1"); +// +// List<ChoiceBean> choices = new ArrayList<>(); // -// Assert.assertNotNull(createdVoterListMember1); -// Assert.assertNotNull(createdVoterListMember1.getTopiaId()); -// VoterListMember reloadedVoterListMember1 = voterListService.getMember(createdPoll.getTopiaId(), createdVoterList.getTopiaId(), createdVoterListMember1.getTopiaId()); -// Assert.assertEquals(createdVoterListMember1, reloadedVoterListMember1); +// ChoiceBean choice1 = new ChoiceBean(); +// choices.add(choice1); +// choice1.setChoiceType(ChoiceType.TEXT); +// choice1.setName("A"); +// choice1.setDescription("Choice A"); // -// Assert.assertEquals(reloadedVoterListMember1.getName(), createdVoterListMember1.getName()); -// Assert.assertEquals(reloadedVoterListMember1.getEmail(), createdVoterListMember1.getEmail()); -// Assert.assertEquals(reloadedVoterListMember1.getWeight(), createdVoterListMember1.getWeight(), 0); // -// VoterListMember createdVoterListMember2 = Iterables.get(createdVoterList.getMember(), 1); +// ChoiceBean choice2 = new ChoiceBean(); +// choice2.setChoiceType(ChoiceType.TEXT); +// choice2.setName("B"); +// choice2.setDescription("Choice B"); +// choices.add(choice2); // -// Assert.assertNotNull(createdVoterListMember2); -// Assert.assertNotNull(createdVoterListMember2.getTopiaId()); +// List<VoterListBean> voterLists = new ArrayList<>(); // -// VoterListMember reloadedVoterListMember2 = voterListService.getMember(createdPoll.getTopiaId(), createdVoterList.getTopiaId(), createdVoterListMember2.getTopiaId()); -// Assert.assertEquals(createdVoterListMember2, reloadedVoterListMember2); +// PollenEntityRef<Poll> createdPoll = service.createPoll(poll, choices); +// Assert.assertNotNull(createdPoll); +// String createdPollId = createdPoll.getEntityId(); +// Assert.assertNotNull(createdPollId); // -// Assert.assertEquals(reloadedVoterListMember2.getName(), createdVoterListMember2.getName()); -// Assert.assertEquals(reloadedVoterListMember2.getEmail(), createdVoterListMember2.getEmail()); -// Assert.assertEquals(reloadedVoterListMember2.getWeight(), createdVoterListMember2.getWeight(), 0); +// try { +// service.getPoll(createdPollId); +// Assert.fail(); +// } catch (PollenInvalidPermissionException e) { +// Assert.assertTrue(true); +// } +// +// FakePollenSecurityContext securityContext = serviceContext.getSecurityContext(); +// +// PollenPrincipal principal = securityService.getPollenPrincipalByPermissionToken(createdPoll.getPermission()); +// securityContext.setMainPrincipal(principal); +// +// PollBean reloadedPoll = service.getPoll(createdPollId); +//// Assert.assertEquals(createdPoll, reloadedPoll); +// +// Assert.assertEquals(getServiceContext().getNow(), reloadedPoll.getBeginDate()); +// +//// Assert.assertNotNull(createdPoll.getCreator()); +//// Assert.assertNotNull(createdPoll.getCreator().getTopiaId()); +//// Assert.assertNull(createdPoll.getCreator().getName()); +//// Assert.assertNull(createdPoll.getCreator().getEmail()); +// +// List<ChoiceBean> createdChoices = choiceService.getChoices(createdPollId); +// +// Assert.assertNotNull(createdChoices); +// Assert.assertEquals(2, createdChoices.size()); +// +// ChoiceBean createdChoice1 = createdChoices.get(0); +// Assert.assertNotNull(createdChoice1); +// Assert.assertNotNull(createdChoice1.getEntityId()); +// +// ChoiceBean reloadedChoice1 = choiceService.getChoice(createdPollId, createdChoice1.getEntityId()); +// Assert.assertEquals(createdChoice1, reloadedChoice1); +// +// Assert.assertEquals(choice1.getName(), createdChoice1.getName()); +// Assert.assertEquals(choice1.getDescription(), createdChoice1.getDescription()); +//// Assert.assertEquals(createdPoll.getCreator(), createdChoice1.getCreator()); +// +// ChoiceBean createdChoice2 = createdChoices.get(1); +// Assert.assertNotNull(createdChoice2); +// Assert.assertNotNull(createdChoice2.getEntityId()); +// +// ChoiceBean reloadedChoice2 = choiceService.getChoice(createdPollId, createdChoice2.getEntityId()); +// Assert.assertEquals(createdChoice2, reloadedChoice2); +// +// Assert.assertEquals(choice2.getName(), createdChoice2.getName()); +// Assert.assertEquals(choice2.getDescription(), createdChoice2.getDescription()); +//// Assert.assertEquals(createdPoll.getCreator(), createdChoice2.getCreator()); +// +// List<VoterListBean> createdVoterLists = voterListService.getVoterLists(createdPollId); +// +// Assert.assertNotNull(createdVoterLists); +// Assert.assertEquals(1, createdVoterLists.size()); +// VoterListBean createdVoterList = createdVoterLists.get(0); +// Assert.assertNotNull(createdVoterList); +// Assert.assertNotNull(createdVoterList.getEntityId()); +// +// VoterListBean reloadedVoterList = voterListService.getVoterList(createdPollId, createdVoterList.getEntityId()); +// Assert.assertEquals(createdVoterList, reloadedVoterList); +// +// Assert.assertEquals(voterList.getName(), createdVoterList.getName()); +// Assert.assertEquals(voterList.getWeight(), createdVoterList.getWeight(), 0); +// +// Assert.assertNotNull(createdVoterList.getMember()); +// Assert.assertEquals(2, createdVoterList.getMember().size()); +// +// } - } +// @Test +// public void testCreateRestrictedPoll() throws InvalidFormException { +// +// PollBean poll = service.getNewPoll(); +// poll.setPollType(PollType.RESTRICTED); +// +// poll.setTitle("poll1"); +// +// List<ChoiceBean> choices = new ArrayList<>(); +// +// ChoiceBean choice1 = new ChoiceBean(); +// choice1.setChoiceType(ChoiceType.TEXT); +// choice1.setName("A"); +// choice1.setDescription("Choice A"); +// +// choices.add(choice1); +// +// ChoiceBean choice2 = new ChoiceBean(); +// choice2.setChoiceType(ChoiceType.TEXT); +// choice2.setName("B"); +// choice2.setDescription("Choice B"); +// +// choices.add(choice2); +// +// try { +// service.createPoll(poll, choices); +// Assert.fail(); +// } catch (InvalidFormException e) { +// // missing voterList +// assertErrorKeyFound(e, "voterList"); +// } +// +// List<VoterListBean> voterLists = new ArrayList<>(); +// +// // add voter list +// VoterListBean voterList = new VoterListBean(); +// +// voterLists.add(voterList); +// +// try { +// service.createPoll(poll, choices); +// Assert.fail(); +// } catch (InvalidFormException e) { +// // missing name +// // missing weight +// // missing voterListMember +// assertErrorKeyFound(e, "voterList[0].name", "voterList[0].weight", "voterList[0].member"); +// } +// +// voterList.setName("voterList1"); +// voterList.setWeight(1); +// +// VoterListMemberBean voterListMember1 = new VoterListMemberBean(); +// voterList.addMember(voterListMember1); +// +// try { +// service.createPoll(poll, choices); +// Assert.fail(); +// } catch (InvalidFormException e) { +// // missing member name +// // missing member email +// assertErrorKeyFound(e, "voterList[0].member[0].name", "voterList[0].member[0].email", "voterList[0].member[0].weight"); +// } +// +// voterListMember1.setName("voter1"); +// voterListMember1.setWeight(0.3); +// voterListMember1.setEmail("voter1_pollen.org"); +// +// try { +// service.createPoll(poll, choices); +// Assert.fail(); +// } catch (InvalidFormException e) { +// // invalid member email +// assertErrorKeyFound(e, "voterList[0].member[0].email"); +// } +// +// voterListMember1.setEmail("voter1@pollen.org"); +// +// VoterListMemberBean voterListMember2 = new VoterListMemberBean(); +// voterListMember2.setName("voter1"); +// voterListMember2.setWeight(0.7); +// voterListMember2.setEmail("voter1@pollen.org"); +// voterList.addMember(voterListMember2); +// +// try { +// service.createPoll(poll, choices); +// Assert.fail(); +// } catch (InvalidFormException e) { +// // same name +// // same email +// assertErrorKeyFound(e, "voterList[0].member[1].name", "voterList[0].member[1].email"); +// } +// +// voterListMember2.setName("voter2"); +// voterListMember2.setEmail("voter2@pollen.org"); +// +// PollenEntityRef<Poll> createdPoll = service.createPoll(poll, choices); +// Assert.assertNotNull(createdPoll); +// String createdPollId = createdPoll.getEntityId(); +// Assert.assertNotNull(createdPollId); +// +// try { +// service.getPoll(createdPollId); +// Assert.fail(); +// } catch (PollenInvalidPermissionException e) { +// Assert.assertTrue(true); +// } +// +// PollenPrincipal principal = securityService.getPollenPrincipalByPermissionToken(createdPoll.getPermission()); +// FakePollenSecurityContext securityContext = (FakePollenSecurityContext) serviceContext.getSecurityContext(); +// securityContext.setMainPrincipal(principal); +// +// PollBean reloadedPoll = service.getPoll(createdPollId); +//// Assert.assertEquals(createdPoll, reloadedPoll); +// +// Assert.assertEquals(getServiceContext().getNow(), reloadedPoll.getBeginDate()); +// +//// Assert.assertNotNull(createdPoll.getCreator()); +//// Assert.assertNotNull(createdPoll.getCreator().getTopiaId()); +//// Assert.assertNull(createdPoll.getCreator().getName()); +//// Assert.assertNull(createdPoll.getCreator().getEmail()); +//// Assert.assertNull(createdPoll.getComment()); +//// Assert.assertNull(createdPoll.getVote()); +// +// List<ChoiceBean> createdChoices = choiceService.getChoices(createdPollId); +// +// Assert.assertNotNull(createdChoices); +// Assert.assertEquals(2, createdChoices.size()); +// +// ChoiceBean createdChoice1 = createdChoices.get(0); +// Assert.assertNotNull(createdChoice1); +// Assert.assertNotNull(createdChoice1.getEntityId()); +// +// ChoiceBean reloadedChoice1 = choiceService.getChoice(createdPollId, createdChoice1.getEntityId()); +// Assert.assertEquals(createdChoice1, reloadedChoice1); +// +// Assert.assertEquals(choice1.getName(), createdChoice1.getName()); +// Assert.assertEquals(choice1.getDescription(), createdChoice1.getDescription()); +//// Assert.assertEquals(createdPoll.getCreator(), createdChoice1.getCreator()); +// +// ChoiceBean createdChoice2 = createdChoices.get(1); +// Assert.assertNotNull(createdChoice2); +// Assert.assertNotNull(createdChoice2.getEntityId()); +// +// ChoiceBean reloadedChoice2 = choiceService.getChoice(createdPollId, createdChoice2.getEntityId()); +// Assert.assertEquals(createdChoice2, reloadedChoice2); +// +// Assert.assertEquals(choice2.getName(), createdChoice2.getName()); +// Assert.assertEquals(choice2.getDescription(), createdChoice2.getDescription()); +//// Assert.assertEquals(createdPoll.getCreator(), createdChoice2.getCreator()); +// +// List<VoterListBean> createdVoterLists = voterListService.getVoterLists(createdPollId); +// +// Assert.assertNotNull(createdVoterLists); +// Assert.assertEquals(1, createdVoterLists.size()); +// VoterListBean createdVoterList = createdVoterLists.get(0); +// Assert.assertNotNull(createdVoterList); +// Assert.assertNotNull(createdVoterList.getEntityId()); +// +// VoterListBean reloadedVoterList = voterListService.getVoterList(createdPollId, createdVoterList.getEntityId()); +// Assert.assertEquals(createdVoterList, reloadedVoterList); +// +// Assert.assertEquals(voterList.getName(), createdVoterList.getName()); +// Assert.assertEquals(voterList.getWeight(), createdVoterList.getWeight(), 0); +// +// Assert.assertNotNull(createdVoterList.getMember()); +// Assert.assertEquals(2, createdVoterList.getMember().size()); +// +//// VoterListMember createdVoterListMember1 = Iterables.get(createdVoterList.getMember(), 0); +//// +//// Assert.assertNotNull(createdVoterListMember1); +//// Assert.assertNotNull(createdVoterListMember1.getTopiaId()); +//// VoterListMember reloadedVoterListMember1 = voterListService.getMember(createdPoll.getTopiaId(), createdVoterList.getTopiaId(), createdVoterListMember1.getTopiaId()); +//// Assert.assertEquals(createdVoterListMember1, reloadedVoterListMember1); +//// +//// Assert.assertEquals(reloadedVoterListMember1.getName(), createdVoterListMember1.getName()); +//// Assert.assertEquals(reloadedVoterListMember1.getEmail(), createdVoterListMember1.getEmail()); +//// Assert.assertEquals(reloadedVoterListMember1.getWeight(), createdVoterListMember1.getWeight(), 0); +//// +//// VoterListMember createdVoterListMember2 = Iterables.get(createdVoterList.getMember(), 1); +//// +//// Assert.assertNotNull(createdVoterListMember2); +//// Assert.assertNotNull(createdVoterListMember2.getTopiaId()); +//// +//// VoterListMember reloadedVoterListMember2 = voterListService.getMember(createdPoll.getTopiaId(), createdVoterList.getTopiaId(), createdVoterListMember2.getTopiaId()); +//// Assert.assertEquals(createdVoterListMember2, reloadedVoterListMember2); +//// +//// Assert.assertEquals(reloadedVoterListMember2.getName(), createdVoterListMember2.getName()); +//// Assert.assertEquals(reloadedVoterListMember2.getEmail(), createdVoterListMember2.getEmail()); +//// Assert.assertEquals(reloadedVoterListMember2.getWeight(), createdVoterListMember2.getWeight(), 0); +// +// } } diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteCountingServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteCountingServiceTest.java index 5210f86..e06ce45 100644 --- a/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteCountingServiceTest.java +++ b/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteCountingServiceTest.java @@ -93,7 +93,7 @@ public class VoteCountingServiceTest extends AbstractPollenServiceTest { choice2.setDescription("Choice B"); choices.add(choice2); - PollenEntityRef<Poll> createdPollRef = pollService.createPoll(poll, choices, null); + PollenEntityRef<Poll> createdPollRef = pollService.createPoll(poll, choices); String pollId = createdPollRef.getEntityId(); diff --git a/pom.xml b/pom.xml index 8d48b76..a00355d 100644 --- a/pom.xml +++ b/pom.xml @@ -163,7 +163,7 @@ <webmotionVersion>2.4.1-SNAPSHOT</webmotionVersion> <nuitonI18nVersion>3.1</nuitonI18nVersion> - <eugenePluginVersion>2.9</eugenePluginVersion> + <eugenePluginVersion>2.10-SNAPSHOT</eugenePluginVersion> <topiaVersion>3.0-SNAPSHOT</topiaVersion> <nuitonWebVersion>1.16</nuitonWebVersion> diff --git a/src/site/rst/restApi.rst b/src/site/rst/restApi.rst index 31eb228..fe4591b 100644 --- a/src/site/rst/restApi.rst +++ b/src/site/rst/restApi.rst @@ -1,3 +1,24 @@ +.. - +.. * #%L +.. * Pollen +.. * %% +.. * Copyright (C) 2009 - 2014 CodeLutin +.. * %% +.. * This program is free software: you can redistribute it and/or modify +.. * it under the terms of the GNU Affero General Public License as published by +.. * the Free Software Foundation, either version 3 of the License, or +.. * (at your option) any later version. +.. * +.. * This program is distributed in the hope that it will be useful, +.. * but WITHOUT ANY WARRANTY; without even the implied warranty of +.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.. * GNU General Public License for more details. +.. * +.. * You should have received a copy of the GNU Affero General Public License +.. * along with this program. If not, see <http://www.gnu.org/licenses/>. +.. * #L% +.. - + ~~~~~~~~~~~~~~~ Pollen Rest API ~~~~~~~~~~~~~~~ -- To stop receiving notification emails like this one, please contact Chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
Chorem.org scm