Author: tchemit Date: 2012-02-01 14:17:42 +0100 (Wed, 01 Feb 2012) New Revision: 3128 Url: http://chorem.org/repositories/revision/pollen/3128 Log: fix polls queries Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/PollenPagerBean.java branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/UserService.java Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/PollenPagerBean.java =================================================================== --- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/PollenPagerBean.java 2012-02-01 13:11:41 UTC (rev 3127) +++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/PollenPagerBean.java 2012-02-01 13:17:42 UTC (rev 3128) @@ -27,6 +27,9 @@ import org.nuiton.topia.framework.TopiaQuery; import org.nuiton.util.PagerUtil; +import java.util.ArrayList; +import java.util.List; + /** * Override nuiton pager while adding sort informations. * <p/> @@ -61,9 +64,9 @@ this.sortColumn = sortColumn; } - public static void addPagerToQuery(PollenPagerBean pager, - TopiaQuery query) { - + public static TopiaQuery addPagerToQuery(TopiaQuery query, + PollenPagerBean pager) { + PagerUtil.computeRecordIndexesAndPagesNumber(pager); query.setLimit(pager.getRecordStartIndex(), pager.getRecordEndIndex() - 1); @@ -74,6 +77,18 @@ query.addOrderDesc(pager.getSortColumn()); } } + return query; } + public static <E> List<E> getPageFromList(List<E> elements, + PollenPagerBean pager) { + + PagerUtil.computeRecordIndexesAndPagesNumber(pager); + List<E> subList = elements.subList(pager.getRecordStartIndex(), + pager.getRecordEndIndex()); + List<E> result = new ArrayList<E>(subList); + + return result; + } + } Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java =================================================================== --- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java 2012-02-01 13:11:41 UTC (rev 3127) +++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java 2012-02-01 13:17:42 UTC (rev 3128) @@ -23,22 +23,26 @@ */ package org.chorem.pollen.services.impl; +import com.google.common.collect.Lists; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.pollen.PollenConfiguration; import org.chorem.pollen.PollenTechnicalException; +import org.chorem.pollen.business.persistence.PersonToList; import org.chorem.pollen.business.persistence.Poll; import org.chorem.pollen.business.persistence.PollAccount; import org.chorem.pollen.business.persistence.PollAccountImpl; import org.chorem.pollen.business.persistence.PollDAO; import org.chorem.pollen.business.persistence.PollImpl; import org.chorem.pollen.business.persistence.UserAccount; +import org.chorem.pollen.business.persistence.Vote; +import org.chorem.pollen.business.persistence.VoteDAO; +import org.chorem.pollen.business.persistence.VotingList; import org.chorem.pollen.entities.PollenDAOHelper; import org.chorem.pollen.services.PollenPagerBean; import org.chorem.pollen.services.PollenServiceSupport; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaQuery; -import org.nuiton.util.PagerUtil; import java.util.List; @@ -86,9 +90,9 @@ long records = dao.count(); pager.setRecords((int) records); - PagerUtil.computeRecordIndexesAndPagesNumber(pager); + TopiaQuery query = dao.createQuery("e"); - PollenPagerBean.addPagerToQuery(pager, query); + PollenPagerBean.addPagerToQuery(query, pager); List<Poll> result = dao.findAllByQuery(query); return result; @@ -107,10 +111,7 @@ long records = dao.countByQuery(countQuery); pager.setRecords((int) records); - PagerUtil.computeRecordIndexesAndPagesNumber(pager); - TopiaQuery query = dao.createQuery("e"); - PollenPagerBean.addPagerToQuery(pager, query); - query.addWhere("e." + Poll.PROPERTY_CREATOR + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, user); + TopiaQuery query = PollenPagerBean.addPagerToQuery(countQuery, pager); List<Poll> result = dao.findAllByQuery(query); return result; @@ -121,49 +122,109 @@ public List<Poll> getInvitedPolls(PollenPagerBean pager, UserAccount user) { - try { - PollDAO dao = PollenDAOHelper.getPollDAO(getTransaction()); + UserService userService = newService(UserService.class); + UserAccount userToUse = userService.getEntityById(UserAccount.class, user.getTopiaId()); - TopiaQuery countQuery = dao.createQuery("e"); - countQuery.addWhere("e." + Poll.PROPERTY_CREATOR + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, user); - long records = dao.countByQuery(countQuery); - pager.setRecords((int) records); + //FIXME Use a query to do this to avoid in memory pagination + String email = userToUse.getEmail(); - PagerUtil.computeRecordIndexesAndPagesNumber(pager); - TopiaQuery query = dao.createQuery("e"); - PollenPagerBean.addPagerToQuery(pager, query); - query.addWhere("e." + Poll.PROPERTY_CREATOR + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, user); + List<Poll> polls = userService.getEntities(Poll.class); + List<Poll> allPolls = Lists.newLinkedList(); + for (Poll poll : polls) { + for (VotingList votingList : poll.getVotingList()) { + for (PersonToList personToList : votingList + .getPollAccountPersonToList()) { + if (!personToList.getHasVoted()) { + PollAccount pollAccount = personToList + .getPollAccount(); - List<Poll> result = dao.findAllByQuery(query); - return result; - } catch (TopiaException e) { - throw new PollenTechnicalException(e); + if (pollAccount != null + && pollAccount.getEmail() != null + && pollAccount.getEmail().equals( + email)) { + allPolls.add(poll); + } + } + } + } } + + int records = allPolls.size(); + pager.setRecords(records); + + List<Poll> result = PollenPagerBean.getPageFromList(allPolls, pager); + return result; + +// try { +// PollDAO dao = PollenDAOHelper.getPollDAO(getTransaction()); +// TopiaQuery countQuery = dao.createQuery("e"); +// countQuery.addWhere("e." + Poll.PROPERTY_CREATOR + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, user); +// long records = dao.countByQuery(countQuery); +// pager.setRecords((int) records); +// +// PagerUtil.computeRecordIndexesAndPagesNumber(pager); +// TopiaQuery query = dao.createQuery("e"); +// PollenPagerBean.addPagerToQuery(pager, query); +// query.addWhere("e." + Poll.PROPERTY_CREATOR + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, user); +// +// List<Poll> result = dao.findAllByQuery(query); +// return result; +// } catch (TopiaException e) { +// throw new PollenTechnicalException(e); +// } } - public List<Poll> getParticipatedPolls(PollenPagerBean pager, UserAccount user) { + public List<Poll> getParticipatedPolls(PollenPagerBean pager, + UserAccount user) { + //FIXME Use a query to do this to avoid in memory pagination + + UserService userService = newService(UserService.class); + UserAccount userToUse = + userService.getEntityById(UserAccount.class, user.getTopiaId()); + +// List<Poll> allPolls = Lists.newArraPagerUtil.computeRecordIndexesAndPagesNumber(pager);yList(); +// for (PollAccount pollAccount : userToUse.getPollAccount()) { +// for (Vote vote : pollAccount.getVote()) { +// Poll poll = vote.getPoll(); +// if (!allPolls.contains(poll)) { +// allPolls.add(poll); +// } +// } +// } +// int records = allPolls.size(); +// pager.setRecords(records); +// PagerUtil.computeRecordIndexesAndPagesNumber(pager); +// List<Poll> result = PollenPagerBean.getPageFromList(allPolls, pager); +// return result; + + try { - PollDAO dao = PollenDAOHelper.getPollDAO(getTransaction()); + PollDAO pollDao = PollenDAOHelper.getPollDAO(getTransaction()); + VoteDAO voteDao = PollenDAOHelper.getVoteDAO(getTransaction()); - TopiaQuery countQuery = dao.createQuery("e"); - countQuery.addWhere("e." + Poll.PROPERTY_CREATOR + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, user); - long records = dao.countByQuery(countQuery); + TopiaQuery countQuery = voteDao.createQuery("e"). + addDistinct(). + setSelect("e." + Vote.PROPERTY_POLL). + addWhere("e." + Vote.PROPERTY_POLL_ACCOUNT + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, userToUse); + + long records = pollDao.countByQuery(countQuery); pager.setRecords((int) records); - PagerUtil.computeRecordIndexesAndPagesNumber(pager); - TopiaQuery query = dao.createQuery("e"); - PollenPagerBean.addPagerToQuery(pager, query); - query.addWhere("e." + Poll.PROPERTY_CREATOR + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, user); + TopiaQuery query = PollenPagerBean.addPagerToQuery(countQuery, pager); - List<Poll> result = dao.findAllByQuery(query); +// query.addDistinct(); +// query.setSelect("e." + Vote.PROPERTY_POLL); +// query.addWhere("e." + Vote.PROPERTY_POLL_ACCOUNT + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, userToUse); + + List<Poll> result = pollDao.findAllByQuery(query); return result; } catch (TopiaException e) { throw new PollenTechnicalException(e); } + } - /* @Override public List<PollDTO> findParticipatedPolls(String userId) { Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/UserService.java =================================================================== --- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/UserService.java 2012-02-01 13:11:41 UTC (rev 3127) +++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/UserService.java 2012-02-01 13:17:42 UTC (rev 3128) @@ -55,7 +55,6 @@ import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaQuery; import org.nuiton.topia.persistence.util.TopiaEntityBinder; -import org.nuiton.util.PagerUtil; import org.nuiton.util.StringUtil; import org.nuiton.util.beans.Binder; @@ -229,9 +228,8 @@ long records = dao.count(); pager.setRecords((int) records); - PagerUtil.computeRecordIndexesAndPagesNumber(pager); TopiaQuery query = dao.createQuery("e"); - PollenPagerBean.addPagerToQuery(pager, query); + PollenPagerBean.addPagerToQuery(query, pager); List<UserAccount> result = dao.findAllByQuery(query); return result; @@ -254,10 +252,7 @@ pager.setRecords((int) records); - PagerUtil.computeRecordIndexesAndPagesNumber(pager); - TopiaQuery query = dao.createQuery("e"); - query.addWhere("e." + PersonList.PROPERTY_OWNER, TopiaQuery.Op.EQ, user); - PollenPagerBean.addPagerToQuery(pager, query); + TopiaQuery query = PollenPagerBean.addPagerToQuery(countQuery, pager); List<PersonList> result = dao.findAllByQuery(query); return result; @@ -316,16 +311,15 @@ int records = favoriteList.sizePollAccount(); pager.setRecords(records); - PagerUtil.computeRecordIndexesAndPagesNumber(pager); - PollAccountDAO pollAccountDAO = + PollAccountDAO dao = PollenDAOHelper.getPollAccountDAO(getTransaction()); - TopiaQuery query = pollAccountDAO.createQuery("e"); + TopiaQuery query = dao.createQuery("e"); + PollenPagerBean.addPagerToQuery(query, pager); query.addWhere("e." + PollAccount.PROPERTY_PERSON_LIST, TopiaQuery.Op.EQ, favoriteList); - PollenPagerBean.addPagerToQuery(pager, query); - List<PollAccount> result = pollAccountDAO.findAllByQuery(query); + List<PollAccount> result = dao.findAllByQuery(query); return result; } catch (TopiaException e) {