Author: fdesbois Date: 2010-06-03 19:26:56 +0200 (Thu, 03 Jun 2010) New Revision: 3028 Url: http://chorem.org/repositories/revision/pollen/3028 Log: - use PROPERTY_ prefix for entity constants - reorganize Filter (contract EntityFilter + implementation TopiaFilter) - implement some polls methods (getNbPolls, getRunningPolls, ...) Added: trunk/pollen-business/src/main/java/org/chorem/pollen/bean/TopiaFilter.java Removed: trunk/pollen-business/src/main/java/org/chorem/pollen/bean/Filter.java Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenQueryHelper.java trunk/pollen-business/src/main/java/org/chorem/pollen/entity/FavoriteParticipantDAOImpl.java trunk/pollen-business/src/main/java/org/chorem/pollen/entity/PollAccountDAOImpl.java trunk/pollen-business/src/main/java/org/chorem/pollen/entity/PollAccountImpl.java trunk/pollen-business/src/main/java/org/chorem/pollen/mail/BackgroundWorkerImpl.java trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceFavoriteImpl.java trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceVoteImpl.java trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties trunk/pollen-business/src/main/xmi/pollen.properties trunk/pollen-business/src/main/xmi/pollen.zargo trunk/pollen-business/src/test/java/org/chorem/pollen/PollenUtilsTest.java trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceFavoriteImplTest.java trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServicePollImplTest.java trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/UserListsUpdate.java trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/models/FavoriteParticipantDataSource.java trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/models/PollFormModel.java trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/models/UserAccountDataSource.java trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminPolls.java trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminUsers.java trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserLists.java Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenQueryHelper.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenQueryHelper.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenQueryHelper.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -1,17 +1,16 @@ package org.chorem.pollen; -import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.chorem.pollen.bean.Filter; +import org.chorem.pollen.bean.EntityFilter; +import org.chorem.pollen.bean.TopiaFilter; import org.chorem.pollen.entity.PollAccount; import org.chorem.pollen.entity.Vote; import org.nuiton.topia.framework.TopiaQuery; +import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; -import java.util.ArrayList; import java.util.Date; -import java.util.List; /** * Created: 21 mai 2010 @@ -32,7 +31,8 @@ public static final String ALIAS_FAVORITE_LIST = "FL"; public static final String PROPERTY_CHOICE_VOTE = - TopiaQuery.getProperty(PollAccount.CHOICE_VOTE, Vote.CHOICE); + TopiaQuery.getProperty(PollAccount.PROPERTY_CHOICE_VOTE, + Vote.PROPERTY_CHOICE); private static final Log log = LogFactory.getLog(PollenQueryHelper.class); @@ -50,80 +50,13 @@ return new TopiaQuery((Class<? extends TopiaEntity>)entityClass, alias); } - public static void prepareQuery(TopiaQuery query, - Filter filter) { - prepareQuery(query, filter, null, null); - } + public static TopiaQuery createQueryFiltered(TopiaDAO dao, + EntityFilter filter) { - /** - * Prepare a query with filter : adding startIndex and endIndex as limit - * and orderBy if defined. Need an existing query in builder. - * - * @param filter Filter to add in the query - * @see #prepareQuery(TopiaQuery, Filter, String, String) - */ - public static void prepareQuery(TopiaQuery query, - Filter filter, - String mainAlias) { - prepareQuery(query, filter, mainAlias, null); - } + TopiaQuery query = dao.createQuery(); - public static void prepareQuery(TopiaQuery query, - Filter filter, - String mainAlias, - String referenceAlias) { - if (mainAlias == null) { - mainAlias = query.getMainAlias(); - } + ((TopiaFilter)filter).applyOnQuery(query); - Integer startIndex = filter.getStartIndex(); - Integer endIndex = filter.getEndIndex(); - String orderBy = filter.getOrderBy(); - String referenceId = filter.getReferenceId(); - - if (log.isDebugEnabled()) { - log.debug("Filter added to the query : " + - "startIndex = " + startIndex + - " _ endIndex = " + endIndex + - " _ orderBy = " + orderBy + - " _ referenceId = " + referenceId); - } - - // Add limits. Only startIndex do nothing. - // startIndex + endIndex provides the limit - if (filter.getStartIndex() != null && endIndex != null) { - query.setLimit(startIndex, endIndex); - - // endIndex only provides the maxResults wanted - } else if (endIndex != null) { - query.setMaxResults(endIndex); - } - - // Add order to the main entity in the query, splitted by comma - if (orderBy != null) { - List<String> order = new ArrayList<String>(); - for (String elmt : orderBy.split(",")) { - String property = - TopiaQuery.getProperty(mainAlias, elmt.trim()); - order.add(property); - } - query.addOrder(order.toArray(new String[order.size()])); - - // Default order by creation date - } else { - query.addOrderDesc(getPropertyCreateDate(mainAlias)); - } - - if (StringUtils.isNotEmpty(referenceId) && referenceAlias != null) { - query.addEquals(getPropertyId(referenceAlias), referenceId); - } + return query; } - - public static String getPropertyId(String alias) { - return TopiaQuery.getProperty(alias, TopiaEntity.TOPIA_ID); - } - - public static String getPropertyCreateDate(String alias) { - return TopiaQuery.getProperty(alias, TopiaEntity.TOPIA_CREATE_DATE); - } } Deleted: trunk/pollen-business/src/main/java/org/chorem/pollen/bean/Filter.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/bean/Filter.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/bean/Filter.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -1,139 +0,0 @@ -package org.chorem.pollen.bean; - -import org.nuiton.topia.persistence.TopiaEntity; - -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeSupport; - -/** - * Filter - * <p/> - * Created: 23 avr. 2010 - * - * @author fdesbois - * @since 2.0 - */ -public class Filter { - - protected Integer startIndex; - - protected Integer endIndex; - - protected String orderBy; - - protected String referenceId; - - private PropertyChangeSupport propertyChangeSupport = - new PropertyChangeSupport(this); - - public static final String PROPERTY_START_INDEX = "startIndex"; - - public static final String PROPERTY_END_INDEX = "endIndex"; - - public static final String PROPERTY_ORDER_BY = "orderBy"; - - public static final String PROP_REFERENCE_ID = "referenceId"; - - /** - * Get the value of startIndex - * - * @return the value of startIndex - */ - public Integer getStartIndex() { - return startIndex; - } - - /** - * Set the value of startIndex - * - * @param startIndex new value of startIndex - */ - public void setStartIndex(Integer startIndex) { - Integer oldStartIndex = this.startIndex; - this.startIndex = startIndex; - propertyChangeSupport.firePropertyChange(PROPERTY_START_INDEX, - oldStartIndex, startIndex); - } - - /** - * Get the value of orderBy - * - * @return the value of orderBy - */ - public String getOrderBy() { - return orderBy; - } - - /** - * Set the value of orderBy - * - * @param orderBy new value of orderBy - */ - public void setOrderBy(String orderBy) { - String oldOrderBy = this.orderBy; - this.orderBy = orderBy; - propertyChangeSupport.firePropertyChange(PROPERTY_ORDER_BY, - oldOrderBy, orderBy); - } - - /** - * Get the value of endIndex - * - * @return the value of endIndex - */ - public Integer getEndIndex() { - return endIndex; - } - - /** - * Set the value of endIndex - * - * @param endIndex new value of endIndex - */ - public void setEndIndex(Integer endIndex) { - Integer oldEndIndex = this.endIndex; - this.endIndex = endIndex; - propertyChangeSupport.firePropertyChange(PROPERTY_END_INDEX, - oldEndIndex, endIndex); - } - - /** - * Get the value of referenceId - * - * @return the value of referenceId - */ - public String getReferenceId() { - return referenceId; - } - - /** - * Set the value of referenceId - * - * @param entity - */ - public void setReference(TopiaEntity entity) { - String oldReferenceId = this.referenceId; - this.referenceId = entity.getTopiaId(); - propertyChangeSupport.firePropertyChange(PROP_REFERENCE_ID, - oldReferenceId, referenceId); - } - - /** - * Add PropertyChangeListener. - * - * @param listener - */ - public void addPropertyChangeListener(PropertyChangeListener listener) { - propertyChangeSupport.addPropertyChangeListener(listener); - } - - /** - * Remove PropertyChangeListener. - * - * @param listener - */ - public void removePropertyChangeListener(PropertyChangeListener listener) { - propertyChangeSupport.removePropertyChangeListener(listener); - } - -} Copied: trunk/pollen-business/src/main/java/org/chorem/pollen/bean/TopiaFilter.java (from rev 3025, trunk/pollen-business/src/main/java/org/chorem/pollen/bean/Filter.java) =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/bean/TopiaFilter.java (rev 0) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/bean/TopiaFilter.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -0,0 +1,291 @@ +package org.chorem.pollen.bean; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaNotFoundException; +import org.nuiton.topia.framework.TopiaQuery; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.TopiaId; + +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.util.ArrayList; +import java.util.List; + +/** + * Filter + * <p/> + * Created: 23 avr. 2010 + * + * @author fdesbois + * @since 2.0 + */ +public class TopiaFilter implements EntityFilter { + + private static final Log log = LogFactory.getLog(TopiaFilter.class); + + protected Integer startIndex; + + protected Integer endIndex; + + protected String orderBy; + + protected String referenceId; + + protected String referenceProperty; + + private PropertyChangeSupport propertyChangeSupport = + new PropertyChangeSupport(this); + + @Override + public Integer getStartIndex() { + return startIndex; + } + + @Override + public void setStartIndex(Integer startIndex) { + Integer oldStartIndex = this.startIndex; + this.startIndex = startIndex; + propertyChangeSupport.firePropertyChange(PROPERTY_START_INDEX, + oldStartIndex, startIndex); + } + + @Override + public String getOrderBy() { + return orderBy; + } + + @Override + public void setOrderBy(String orderBy) { + String oldOrderBy = this.orderBy; + this.orderBy = orderBy; + propertyChangeSupport.firePropertyChange(PROPERTY_ORDER_BY, + oldOrderBy, orderBy); + } + + @Override + public Integer getEndIndex() { + return endIndex; + } + + @Override + public void setEndIndex(Integer endIndex) { + Integer oldEndIndex = this.endIndex; + this.endIndex = endIndex; + propertyChangeSupport.firePropertyChange(PROPERTY_END_INDEX, + oldEndIndex, endIndex); + } + + @Override + public String getReferenceId() { + return referenceId; + } + + @Override + public void setReferenceId(String referenceId) { + String oldReferenceId = this.referenceId; + this.referenceId = referenceId; + propertyChangeSupport.firePropertyChange(PROPERTY_REFERENCE_ID, + oldReferenceId, referenceId); + } + + @Override + public void setReference(Object entity) throws IllegalArgumentException { + + if (! (entity instanceof TopiaEntity)) { + throw new IllegalArgumentException("Can't set reference of type '" + + entity.getClass().getName() + "' need a TopiaEntity"); + } + + setReferenceId(((TopiaEntity)entity).getTopiaId()); + } + + @Override + public boolean hasReference() { + return StringUtils.isNotEmpty(referenceId); + } + + @Override + public String getReferenceProperty() { + return referenceProperty; + } + + @Override + public void setReferenceProperty(String referenceProperty) { + String oldReferenceProperty = this.referenceProperty; + this.referenceProperty = referenceProperty; + propertyChangeSupport.firePropertyChange(PROPERTY_REFERENCE_PROPERTY, + oldReferenceProperty, referenceProperty); + } + + @Override + public void addPropertyChangeListener(PropertyChangeListener listener) { + propertyChangeSupport.addPropertyChangeListener(listener); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener listener) { + propertyChangeSupport.removePropertyChangeListener(listener); + } + + /** + * Test if the {@code entityClass} is corresponding to the current reference + * in the filter. Will return false if no reference is set in the filter. + * + * @param entityClass Class reference to test + * @return true if the classReference is corresponding, false otherwise + * @see #checkReference(Class, boolean) + */ + public boolean isClassReference(Class<?> entityClass) { + + boolean result = false; + + if (hasReference()) { + try { + Class<?> referenceClass = TopiaId.getClassName(referenceId); + if (referenceClass.isAssignableFrom(entityClass)) { + result = true; + } + } catch (TopiaNotFoundException eee) { + if (log.isWarnEnabled()) { + log.warn("ReferenceId '" + referenceId + "' is not a" + + " compatible topiaId : " + eee.getMessage()); + } + } + } + return result; + } + + /** + * Use to check if {@code reference} class is supported by the current + * filter reference. The reference can be not {@code mandatory}. Exceptions + * are thrown if the check failed. If you prefer to have a boolean instead + * of exceptions, you can use {@link #isClassReference(Class)}. + * + * @param reference Class reference to check + * @param mandatory If the existence of the reference is mandatory + * @throws IllegalArgumentException for errors on check + * @see #hasReference() + * @see #isClassReference(Class) + */ + public void checkReference(Class<?> reference, boolean mandatory) + throws IllegalArgumentException { + + if (log.isTraceEnabled()) { + log.trace("referenceClass to check : " + reference.getName()); + log.trace("mandatory : " + mandatory); + log.trace("filter hasReference : " + hasReference()); + log.trace("filter isClassReference : " + isClassReference(reference)); + } + + if (mandatory && !hasReference()) { + throw new IllegalArgumentException("The filter reference" + + " of type '" + reference.getSimpleName() + "' is mandatory !"); + } + + if (hasReference() && + !isClassReference(reference)) { + throw new IllegalArgumentException("Reference filtered need to be" + + " a '" + reference.getSimpleName() + "' (referenceId = " + + referenceId + ")"); + } + + } + + /** + * Prepare a {@code query} with this filter that contains limit indexes, + * orderBy condition and referenceId if needed. The referenceProperty is + * necessary to use the referenceId of the {@code filter}. The filter will + * be applied on the main entity in the query (using the mainAlias if + * necessary). + * <p/> + * Note : the default orderBy is the topiaCreateDate ordered desc (the most + * recent in first) + * + * @param query TopiaQuery to prepare + * @see #applyOnQuery(TopiaQuery, String) + * @throws IllegalArgumentException if referenceId is defined but no + * referenceProperty was set + */ + public void applyOnQuery(TopiaQuery query) + throws IllegalArgumentException { + applyOnQuery(query, null); + } + + /** + * Prepare a {@code query} with this filter that contains limit indexes, + * orderBy condition and referenceId if needed. In some case it's necessary + * to specify explicitely the {@code propertyToFilter} in complex queries. + * The referenceProperty need to be specifie in {@code filter} to have a + * correspondance between the referenceId and it's property in the query. By + * default, the {@code propertyToFilter} is the mainAlias of the query. + * <p/> + * Note : the default orderBy is the topiaCreateDate ordered desc (the most + * recent in first) + * + * @param query TopiaQuery to prepare + * @param propertyToFilter Explicit property to filter + * @throws IllegalArgumentException if referenceId is defined but no + * referenceProperty was set + */ + public void applyOnQuery(TopiaQuery query, + String propertyToFilter) + throws IllegalArgumentException { + + if (propertyToFilter == null) { + propertyToFilter = query.getMainAlias(); + } + + if (log.isDebugEnabled()) { + log.debug("Filter added to the query : " + + "startIndex = " + startIndex + + " _ endIndex = " + endIndex + + " _ orderBy = " + orderBy + + " _ referenceId = " + referenceId); + } + + // Add limits. Only startIndex do nothing. + // startIndex + endIndex provides the limit + if (startIndex != null && endIndex != null) { + query.setLimit(startIndex, endIndex); + + // endIndex only provides the maxResults wanted + } else if (endIndex != null) { + query.setMaxResults(endIndex); + } + + // Add order to the main entity in the query, splitted by comma + if (orderBy != null) { + List<String> order = new ArrayList<String>(); + for (String elmt : orderBy.split(",")) { + String property = + TopiaQuery.getProperty(propertyToFilter, elmt.trim()); + order.add(property); + } + query.addOrder(order.toArray(new String[order.size()])); + + // Default order by creation date + } else { + query.addOrderDesc(getPropertyCreateDate(propertyToFilter)); + } + + if (hasReference()) { + if (referenceProperty == null) { + throw new IllegalArgumentException("Reference property need" + + " to be defined in filter to use referenceId = " + + referenceId); + } + query.addEquals(getPropertyId(referenceProperty), referenceId); + } + } + + protected static String getPropertyId(String alias) { + return TopiaQuery.getProperty(alias, TopiaEntity.TOPIA_ID); + } + + protected static String getPropertyCreateDate(String alias) { + return TopiaQuery.getProperty(alias, TopiaEntity.TOPIA_CREATE_DATE); + } + +} Property changes on: trunk/pollen-business/src/main/java/org/chorem/pollen/bean/TopiaFilter.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/entity/FavoriteParticipantDAOImpl.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/entity/FavoriteParticipantDAOImpl.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/entity/FavoriteParticipantDAOImpl.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -1,7 +1,8 @@ package org.chorem.pollen.entity; import org.chorem.pollen.PollenQueryHelper; -import org.chorem.pollen.bean.Filter; +import org.chorem.pollen.bean.EntityFilter; +import org.chorem.pollen.bean.TopiaFilter; import org.nuiton.topia.framework.TopiaQuery; /** @@ -15,18 +16,25 @@ extends FavoriteParticipantDAOAbstract<E> { @Override - public TopiaQuery createQueryFindAllByFavoriteList(Filter filter) { + public TopiaQuery createQueryFindAllByFavoriteList(EntityFilter input) { + TopiaFilter filter = (TopiaFilter)input; + + filter.checkReference(FavoriteList.class, true); + String participantAlias = PollenQueryHelper.ALIAS_POLL_PARTICIPANT; String listAlias = PollenQueryHelper.ALIAS_POLL_LIST; String listParticipantProperty = - TopiaQuery.getProperty(listAlias, FavoriteList.FAVORITE_PARTICIPANT); + TopiaQuery.getProperty(listAlias, + FavoriteList.PROPERTY_FAVORITE_PARTICIPANT); - TopiaQuery query = new TopiaQuery(FavoriteList.class, listAlias). + TopiaQuery query = PollenQueryHelper. + createQuery(FavoriteList.class, listAlias). setSelect(participantAlias). addJoin(listParticipantProperty, participantAlias, false); - PollenQueryHelper.prepareQuery(query, filter, listAlias, participantAlias); + filter.setReferenceProperty(listAlias); + filter.applyOnQuery(query, participantAlias); return query; } Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/entity/PollAccountDAOImpl.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/entity/PollAccountDAOImpl.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/entity/PollAccountDAOImpl.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -1,7 +1,8 @@ package org.chorem.pollen.entity; import org.chorem.pollen.PollenQueryHelper; -import org.chorem.pollen.bean.Filter; +import org.chorem.pollen.bean.EntityFilter; +import org.chorem.pollen.bean.TopiaFilter; import org.nuiton.topia.framework.TopiaQuery; /** @@ -13,23 +14,29 @@ public class PollAccountDAOImpl<E extends PollAccount> extends PollAccountDAOAbstract<E> { @Override - public TopiaQuery createQueryFindAllByPoll(Filter filter) { + public TopiaQuery createQueryFindAllByPoll(EntityFilter input) { + TopiaFilter filter = (TopiaFilter)input; + + filter.checkReference(Poll.class, true); + String pollAlias = PollenQueryHelper.ALIAS_POLL; String pollAccountProperty = - TopiaQuery.getProperty(pollAlias, Poll.POLL_ACCOUNT); + TopiaQuery.getProperty(pollAlias, Poll.PROPERTY_POLL_ACCOUNT); String participantAlias = PollenQueryHelper.ALIAS_POLL_PARTICIPANT; String participantVoteDateProperty = - TopiaQuery.getProperty(participantAlias, PollAccount.VOTE_DATE); + TopiaQuery.getProperty(participantAlias, + PollAccount.PROPERTY_VOTE_DATE); // Will return lists in case of GROUP poll - TopiaQuery query = new TopiaQuery(Poll.class, pollAlias). + TopiaQuery query = PollenQueryHelper.createQuery(Poll.class, pollAlias). setSelect(participantAlias). addJoin(pollAccountProperty, participantAlias, false). addNotNull(participantVoteDateProperty); - PollenQueryHelper.prepareQuery(query, filter, participantAlias); + filter.setReferenceProperty(pollAlias); + filter.applyOnQuery(query, participantAlias); return query; } @@ -39,11 +46,11 @@ String pollAlias = PollenQueryHelper.ALIAS_POLL; String pollAccountProperty = - TopiaQuery.getProperty(pollAlias, Poll.POLL_ACCOUNT); + TopiaQuery.getProperty(pollAlias, Poll.PROPERTY_POLL_ACCOUNT); String listAlias = PollenQueryHelper.ALIAS_POLL_LIST; String listChildProperty = - TopiaQuery.getProperty(listAlias, PollAccount.CHILD); + TopiaQuery.getProperty(listAlias, PollAccount.PROPERTY_CHILD); String participantAlias = PollenQueryHelper.ALIAS_POLL_PARTICIPANT; Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/entity/PollAccountImpl.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/entity/PollAccountImpl.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/entity/PollAccountImpl.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -66,4 +66,9 @@ public String getId() { return getTopiaId(); } + + @Override + public boolean getHasVoted() { + return voteDate != null; + } } Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/mail/BackgroundWorkerImpl.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/mail/BackgroundWorkerImpl.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/mail/BackgroundWorkerImpl.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -16,6 +16,7 @@ package org.chorem.pollen.mail; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Timer; @@ -91,7 +92,6 @@ // Récupération des sondages en cours List<Poll> polls = servicePoll.getRunningPolls(); - //servicePoll.findRunningPolls(true); for (Poll poll : polls) { Date now = new Date(); Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceFavoriteImpl.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceFavoriteImpl.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceFavoriteImpl.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -8,7 +8,8 @@ import org.chorem.pollen.PollenContext; import org.chorem.pollen.PollenDAOHelper; import org.chorem.pollen.PollenException; -import org.chorem.pollen.bean.Filter; +import org.chorem.pollen.bean.EntityFilter; +import org.chorem.pollen.bean.TopiaFilter; import org.chorem.pollen.entity.FavoriteList; import org.chorem.pollen.entity.FavoriteListDAO; import org.chorem.pollen.entity.FavoriteListImpl; @@ -130,9 +131,9 @@ FavoriteList list = participant.getFavoriteList(); TopiaQuery query = dao.createQuery(). - addEquals(FavoriteParticipant.FAVORITE_LIST, list). - addEquals(FavoriteParticipant.NAME, participant.getName()). - addEquals(FavoriteParticipant.EMAIL, participant.getEmail()); + addEquals(FavoriteParticipant.PROPERTY_FAVORITE_LIST, list). + addEquals(FavoriteParticipant.PROPERTY_NAME, participant.getName()). + addEquals(FavoriteParticipant.PROPERTY_EMAIL, participant.getEmail()); // Check only on entities different from the one in argument if (StringUtils.isNotEmpty(participant.getId())) { @@ -241,18 +242,18 @@ @Override protected Map<String, FavoriteParticipant> executeGetFavoriteParticipants( - TopiaContext transaction, Filter filter) throws TopiaException { + TopiaContext transaction, EntityFilter filter) throws TopiaException { FavoriteParticipantDAO dao = PollenDAOHelper.getFavoriteParticipantDAO(transaction); - TopiaQuery query = dao.createQueryFindAllByFavoriteList(filter); + TopiaQuery query = dao.createQueryFindAllByFavoriteList((TopiaFilter)filter); if (log.isDebugEnabled()) { log.debug("Query : " + query); } - query.addLoad(FavoriteParticipant.FAVORITE_LIST); + query.addLoad(FavoriteParticipant.PROPERTY_FAVORITE_LIST); Map<String, FavoriteParticipant> results = dao.findAllMappedByQuery(query); @@ -262,12 +263,12 @@ @Override protected int executeGetNbFavoriteParticipants(TopiaContext transaction, - Filter filter) throws TopiaException { + EntityFilter filter) throws TopiaException { FavoriteParticipantDAO dao = PollenDAOHelper.getFavoriteParticipantDAO(transaction); - TopiaQuery query = dao.createQueryFindAllByFavoriteList(filter); + TopiaQuery query = dao.createQueryFindAllByFavoriteList((TopiaFilter)filter); int result = dao.countByQuery(query); return result; Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -8,6 +8,11 @@ import org.chorem.pollen.PollenContext; import org.chorem.pollen.PollenDAOHelper; import org.chorem.pollen.PollenException; +import org.chorem.pollen.PollenQueryHelper; +import org.chorem.pollen.bean.EntityFilter; +import org.chorem.pollen.bean.TopiaFilter; +import org.chorem.pollen.bean.UserPoll; +import org.chorem.pollen.bean.UserPollImpl; import org.chorem.pollen.common.ChoiceType; import org.chorem.pollen.common.PollType; import org.chorem.pollen.common.VoteCountingType; @@ -26,11 +31,11 @@ import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaQuery; -import org.nuiton.topia.persistence.TopiaEntity; import java.util.ArrayList; import java.util.Collection; -import java.util.LinkedHashMap; +import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -153,20 +158,20 @@ // Closed (not used in this case) and Creator (managed separately) PollenBinderHelper.getSimpleTopiaBinder(Poll.class). copyExcluding(source, newPoll, - Poll.UID, - Poll.CLOSED, - Poll.CREATOR); + Poll.PROPERTY_UID, + Poll.PROPERTY_CLOSED, + Poll.PROPERTY_CREATOR); // Create creator and set him to the poll PollAccount creator = accountDAO.create(context.createPollenUrlId()); PollenBinderHelper.getSimpleTopiaBinder(PollAccount.class). copy(source.getCreator(), creator, - PollAccount.NAME, - PollAccount.EMAIL, + PollAccount.PROPERTY_NAME, + PollAccount.PROPERTY_EMAIL, // PollAccount.WEIGHT, - PollAccount.ADMIN, - PollAccount.USER_ACCOUNT); + PollAccount.PROPERTY_ADMIN, + PollAccount.PROPERTY_USER_ACCOUNT); accountDAO.update(creator); newPoll.setCreator(creator); @@ -278,103 +283,80 @@ } @Override - protected List<Poll> executeGetAllPolls(TopiaContext transaction) - throws TopiaException { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override protected List<Poll> executeGetRunningPolls(TopiaContext transaction) throws TopiaException { - throw new UnsupportedOperationException("Not supported yet."); + + PollDAO dao = PollenDAOHelper.getPollDAO(transaction); + + // isRunning : isStarted() && !isFinished() && !isClosed() + TopiaQuery query = dao.createQuery(); + + Date now = context.getCurrentDate(); + + query.addWhere(Poll.PROPERTY_BEGIN_DATE, TopiaQuery.Op.LE, now). + addWhere(Poll.PROPERTY_END_DATE, TopiaQuery.Op.GE, now). + addEquals(Poll.PROPERTY_CLOSED, Boolean.FALSE). + addOrderDesc(Poll.TOPIA_CREATE_DATE); + + List<Poll> results = dao.findAllByQuery(query); + + return results; } @Override - protected Map<PollAccount, Poll> executeGetPollsByUser(TopiaContext transaction, - UserAccount user) + protected List<UserPoll> executeGetPolls(TopiaContext transaction, + EntityFilter filter) throws TopiaException { PollDAO dao = PollenDAOHelper.getPollDAO(transaction); - Map<PollAccount, Poll> polls = new LinkedHashMap<PollAccount, Poll>(); - // Property names for poll - String pollAlias = "P"; - String pollCreatorProperty = - TopiaQuery.getProperty(pollAlias, Poll.CREATOR); - String pollAccountProperty = - TopiaQuery.getProperty(pollAlias, Poll.POLL_ACCOUNT); - String pollCreateDateProperty = - TopiaQuery.getProperty(pollAlias, TopiaEntity.TOPIA_CREATE_DATE); + // Filter can be apply on userAccount as reference + TopiaQuery query = dao.createQueryFindAllByUser(filter); - // Property names for participant - String participantAlias = "A"; - String participantUserProperty = - TopiaQuery.getProperty(participantAlias, PollAccount.USER_ACCOUNT); + query.addSelect(PollenQueryHelper.ALIAS_POLL_PARTICIPANT); - // Property names for participant list - String listAlias = "G"; - String listChildProperty = - TopiaQuery.getProperty(listAlias, PollAccount.CHILD); + log.debug("Query : " + query); - // ALGO 1 with three queries : can't keep order, need Comparator -// // Case 1 : creator -// TopiaQuery queryCreator = dao.createQuery(pollAlias). -// addSelect(participantAlias). -// addJoin(pollCreatorProperty, participantAlias). -// addEquals(participantUserProperty, user); -// -// preparePollResults(transaction, queryCreator, polls); -// -// // Case 2 : participants (direct accounts) -// TopiaQuery queryParticipants = dao.createQuery(pollAlias). -// addSelect(participantAlias). -// addJoin(pollAccountProperty, participantAlias). -// addEquals(participantUserProperty, user); -// -// preparePollResults(transaction, queryParticipants, polls); -// -// // Case 3 : by groups (child accounts) -// TopiaQuery queryGroups = dao.createQuery(pollAlias). -// addSelect(participantAlias). -// addJoin(pollAccountProperty, groupAlias). -// addJoin(groupChildProperty, participantAlias). -// addEquals(participantUserProperty, user); -// -// preparePollResults(transaction, queryGroups, polls); + List<UserPoll> results = retrieveUserPolls(transaction, query); - // ALGO 2 with one query and ordered - TopiaQuery query = dao.createQuery(pollAlias). - addDistinct(). - addSelect(participantAlias). - addLeftJoin(pollAccountProperty, listAlias, false). - addFrom(PollAccount.class, participantAlias). - addEquals(participantUserProperty, user). - addOrderDesc(pollCreateDateProperty); + return results; + } - StringBuilder orBuilder = new StringBuilder(participantAlias). - // IN poll.pollAccount (NORMAL) - append(" IN (").append(listAlias).append(')'). - append(" OR ").append(participantAlias). - // IN poll.pollAccount.child (GROUP) - append(" IN elements(").append(listChildProperty).append(')'). - append(" OR ").append(participantAlias). - // = poll.creator (CREATOR) - append(" = ").append(pollCreatorProperty); + @Override + protected int executeGetNbPollsByUser(TopiaContext transaction, + UserAccount user) + throws TopiaException { - query.addWhere(orBuilder.toString()); + PollDAO dao = PollenDAOHelper.getPollDAO(transaction); - log.debug("Query : " + query); + TopiaFilter filter = new TopiaFilter(); + filter.setReference(user); + TopiaQuery query = dao.createQueryFindAllByUser(filter); - preparePollResults(transaction, query, polls); + int result = dao.countByQuery(query); - return polls; + return result; } - protected void preparePollResults(TopiaContext transaction, - TopiaQuery query, - Map<PollAccount, Poll> results) + @Override + protected int executeGetNbTotalPolls(TopiaContext transaction) throws TopiaException { + int result = PollenDAOHelper.getPollDAO(transaction).count(); + + return result; + } + + protected List<UserPoll> retrieveUserPolls(TopiaContext transaction, + TopiaQuery query) + throws TopiaException { + + List<UserPoll> results = new ArrayList<UserPoll>(); + + Map<String, UserPoll> pollsCache = + new HashMap<String, UserPoll>(); + + List<Object[]> queryResults = transaction.findByQuery(query); for (Object[] row : queryResults) { Poll poll = (Poll) row[0]; @@ -384,13 +366,25 @@ " list(" + account.isList() + ")" + " admin(" + account.isAdmin() + ")" + " for poll " + poll.getTitle()); - results.put(account, poll); + + UserPoll userPoll = pollsCache.get(poll.getTopiaId()); + + if (userPoll == null) { + userPoll = new UserPollImpl(); + userPoll.setPoll(poll); + results.add(userPoll); + pollsCache.put(poll.getTopiaId(), userPoll); + } + + userPoll.addAccount(account); } + + return results; } @Override protected List<Comment> executeGetComments(TopiaContext transaction, - Poll poll, int startIndex, int endIndex) + EntityFilter filter) throws TopiaException { throw new UnsupportedOperationException("Not supported yet."); } @@ -429,10 +423,11 @@ // executeCount(); String creatorUidProperty = - TopiaQuery.getProperty(Poll.CREATOR, PollAccount.UID); + TopiaQuery.getProperty(Poll.PROPERTY_CREATOR, + PollAccount.PROPERTY_UID); TopiaQuery query = dao.createQuery(). - addEquals(Poll.UID, pollUid). + addEquals(Poll.PROPERTY_UID, pollUid). addEquals(creatorUidProperty, accountUid); @@ -459,7 +454,7 @@ addFetch(properties); String pollUidProperty = - TopiaQuery.getProperty(query.getMainAlias(), Poll.UID); + TopiaQuery.getProperty(query.getMainAlias(), Poll.PROPERTY_UID); query.addEquals(pollUidProperty, pollUid); Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -13,7 +13,8 @@ import org.chorem.pollen.PollenDAOHelper; import org.chorem.pollen.PollenException; import org.chorem.pollen.PollenQueryHelper; -import org.chorem.pollen.bean.Filter; +import org.chorem.pollen.bean.EntityFilter; +import org.chorem.pollen.bean.TopiaFilter; import org.chorem.pollen.entity.UserAccount; import org.chorem.pollen.entity.UserAccountDAO; import org.chorem.pollen.entity.UserAccountImpl; @@ -72,9 +73,9 @@ TopiaEntityBinder<UserAccount> binder = PollenBinderHelper.getSimpleTopiaBinder(UserAccount.class); - binder.copy(source, destination, UserAccount.ADMIN, - UserAccount.FIRST_NAME, - UserAccount.LAST_NAME); + binder.copy(source, destination, UserAccount.PROPERTY_ADMIN, + UserAccount.PROPERTY_FIRST_NAME, + UserAccount.PROPERTY_LAST_NAME); // Don't keep case for email destination.setEmail(StringUtils.lowerCase(source.getEmail())); // Manage new password if needed @@ -101,8 +102,8 @@ // add(UserAccount.PASSWORD, password). // executeCount(); // no user found - if (!dao.existByProperties(UserAccount.LOGIN, login, - UserAccount.PASSWORD, password)) { + if (!dao.existByProperties(UserAccount.PROPERTY_LOGIN, login, + UserAccount.PROPERTY_PASSWORD, password)) { throw new PollenBusinessException( PollenExceptionType.USER_WRONG_PASSWORD, login); } @@ -147,7 +148,7 @@ if (query == null) { query = dao.createQuery(); } - query.addEquals(UserAccount.EMAIL, StringUtils.lowerCase(email)); + query.addEquals(UserAccount.PROPERTY_EMAIL, StringUtils.lowerCase(email)); // existing user found if (dao.existByQuery(query)) { @@ -233,7 +234,8 @@ // the new email // FIXME-fdesbois-20100510 : replace by using id directly TopiaQuery query = dao.createQuery(). - addWhere(UserAccount.LOGIN, Op.NEQ, user.getLogin()); + addWhere(UserAccount.PROPERTY_LOGIN, + Op.NEQ, user.getLogin()); checkEmailNotExist(dao, user.getEmail(), query); // Execute update @@ -255,26 +257,24 @@ @Override protected Map<String, UserAccount> executeGetUsers(TopiaContext transaction, - Filter filter) throws TopiaException { + EntityFilter filter) throws TopiaException { UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction); - TopiaQuery query = dao.createQuery(); - PollenQueryHelper.prepareQuery(query, filter); + TopiaQuery query = PollenQueryHelper.createQueryFiltered(dao, filter); Map<String, UserAccount> results = dao.findAllMappedByQuery( - query, UserAccount.LOGIN, String.class); + query, UserAccount.PROPERTY_LOGIN, String.class); return results; } @Override protected int executeGetNbUsers(TopiaContext transaction, - Filter filter) throws TopiaException { + EntityFilter filter) throws TopiaException { UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction); - TopiaQuery query = dao.createQuery(); - PollenQueryHelper.prepareQuery(query, filter); + TopiaQuery query = PollenQueryHelper.createQueryFiltered(dao, filter); int result = dao.countByQuery(query); return result; Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceVoteImpl.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceVoteImpl.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceVoteImpl.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -9,7 +9,8 @@ import org.chorem.pollen.PollenDAOHelper; import org.chorem.pollen.PollenException; import org.chorem.pollen.PollenQueryHelper; -import org.chorem.pollen.bean.Filter; +import org.chorem.pollen.bean.EntityFilter; +import org.chorem.pollen.bean.TopiaFilter; import org.chorem.pollen.entity.Choice; import org.chorem.pollen.entity.Poll; import org.chorem.pollen.entity.PollAccount; @@ -70,7 +71,7 @@ */ protected void copyPollAccount(PollAccount source, PollAccount destination) { // Uid is the naturalId, don't copy it - String[] excludes = new String[]{PollAccount.UID}; + String[] excludes = new String[]{PollAccount.PROPERTY_UID}; // Exclude properties for anonymous account if (source.isAnonymous()) { @@ -80,10 +81,10 @@ } excludes = new String[]{ - PollAccount.UID, - PollAccount.NAME, - PollAccount.EMAIL, - PollAccount.USER_ACCOUNT}; + PollAccount.PROPERTY_UID, + PollAccount.PROPERTY_NAME, + PollAccount.PROPERTY_EMAIL, + PollAccount.PROPERTY_USER_ACCOUNT}; } TopiaEntityBinder binder = @@ -124,10 +125,11 @@ String participantAlias = PollenQueryHelper.ALIAS_POLL_PARTICIPANT; String pollCreatorProperty = - TopiaQuery.getProperty(PollenQueryHelper.ALIAS_POLL, Poll.CREATOR); + TopiaQuery.getProperty(PollenQueryHelper.ALIAS_POLL, + Poll.PROPERTY_CREATOR); query.addEquals(participantAlias, participant). - addWhere(pollCreatorProperty, TopiaQuery.Op.NEQ, participant); + addWhere(pollCreatorProperty, TopiaQuery.Op.NEQ, participant); if (log.isDebugEnabled()) { log.debug("Query : " + query); @@ -162,17 +164,17 @@ @Override protected List<PollAccount> executeGetVotes(TopiaContext transaction, - Filter filter) + EntityFilter filter) throws Exception { PollAccountDAO dao = PollenDAOHelper.getPollAccountDAO(transaction); - TopiaQuery query = dao.createQueryFindAllByPoll(filter); + TopiaQuery query = dao.createQueryFindAllByPoll((TopiaFilter)filter); String participantChoiceProperty = TopiaQuery.getProperty(PollenQueryHelper.ALIAS_POLL_PARTICIPANT, - PollAccount.CHOICE_VOTE, - Vote.CHOICE); + PollAccount.PROPERTY_CHOICE_VOTE, + Vote.PROPERTY_CHOICE); query.addDistinct().addFetch(participantChoiceProperty); @@ -186,12 +188,12 @@ } @Override - protected int executeGetNbVotes(TopiaContext transaction, Filter filter) + protected int executeGetNbVotes(TopiaContext transaction, EntityFilter filter) throws TopiaException { PollAccountDAO dao = PollenDAOHelper.getPollAccountDAO(transaction); - TopiaQuery query = dao.createQueryFindAllByPoll(filter); + TopiaQuery query = dao.createQueryFindAllByPoll((TopiaFilter)filter); int result = dao.countByQuery(query); return result; @@ -329,7 +331,8 @@ String participantAlias = PollenQueryHelper.ALIAS_POLL_PARTICIPANT; String participantNameProperty = - TopiaQuery.getProperty(participantAlias, PollAccount.NAME); + TopiaQuery.getProperty(participantAlias, + PollAccount.PROPERTY_NAME); query.addEquals(participantNameProperty, participant.getName()); Modified: trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties =================================================================== --- trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties 2010-06-03 17:26:56 UTC (rev 3028) @@ -33,6 +33,8 @@ pollen.error.servicePoll.deleteVote= pollen.error.servicePoll.getAllPolls= pollen.error.servicePoll.getComments= +pollen.error.servicePoll.getNbPollsByUser= +pollen.error.servicePoll.getNbTotalPolls= pollen.error.servicePoll.getNewPoll= pollen.error.servicePoll.getNewPollList= pollen.error.servicePoll.getNewPollParticipant= @@ -40,6 +42,7 @@ pollen.error.servicePoll.getPollForResults= pollen.error.servicePoll.getPollForUpdate= pollen.error.servicePoll.getPollForVote= +pollen.error.servicePoll.getPolls= pollen.error.servicePoll.getPollsByUser= pollen.error.servicePoll.getRestrictedAccount=Unable to retrieve restricted account with accountUid \= %1$s and poll with uid \= %2$s pollen.error.servicePoll.getRunningPolls= Modified: trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties =================================================================== --- trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties 2010-06-03 17:26:56 UTC (rev 3028) @@ -32,6 +32,8 @@ pollen.error.servicePoll.deleteVote= pollen.error.servicePoll.getAllPolls= pollen.error.servicePoll.getComments= +pollen.error.servicePoll.getNbPollsByUser= +pollen.error.servicePoll.getNbTotalPolls= pollen.error.servicePoll.getNewPoll= pollen.error.servicePoll.getNewPollList= pollen.error.servicePoll.getNewPollParticipant= @@ -39,6 +41,7 @@ pollen.error.servicePoll.getPollForResults= pollen.error.servicePoll.getPollForUpdate= pollen.error.servicePoll.getPollForVote= +pollen.error.servicePoll.getPolls= pollen.error.servicePoll.getPollsByUser= pollen.error.servicePoll.getRestrictedAccount=Unable to retrieve restricted account with accountUid \= %1$s and poll with uid \= %2$s pollen.error.servicePoll.getRunningPolls= Modified: trunk/pollen-business/src/main/xmi/pollen.properties =================================================================== --- trunk/pollen-business/src/main/xmi/pollen.properties 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/main/xmi/pollen.properties 2010-06-03 17:26:56 UTC (rev 3028) @@ -4,6 +4,9 @@ model.tagvalue.notGenerateToString=true #model.tagvalue.useLegacyDAO=true #model.tagvalue.dbSchema=Pollen +# +model.tagvalue.constantPrefix=PROPERTY_ + model.tagvalue.java.lang.String=text model.tagvalue.exceptionClass=org.chorem.pollen.PollenException Modified: trunk/pollen-business/src/main/xmi/pollen.zargo =================================================================== (Binary files differ) Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/PollenUtilsTest.java =================================================================== --- trunk/pollen-business/src/test/java/org/chorem/pollen/PollenUtilsTest.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/test/java/org/chorem/pollen/PollenUtilsTest.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -1,12 +1,9 @@ package org.chorem.pollen; -import java.io.IOException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.chorem.pollen.bean.Filter; -import org.chorem.pollen.entity.FavoriteList; -import org.chorem.pollen.entity.FavoriteParticipant; +import org.chorem.pollen.bean.TopiaFilter; import org.chorem.pollen.entity.UserAccount; import org.junit.Assert; import org.junit.Test; @@ -29,26 +26,26 @@ public void testPrepareQueryForFilter() { log.info("testPrepareQueryForFilter"); - Filter filter = new Filter(); + TopiaFilter filter = new TopiaFilter(); filter.setStartIndex(1); filter.setEndIndex(40); - filter.setOrderBy(UserAccount.LOGIN); + filter.setOrderBy(UserAccount.PROPERTY_LOGIN); // TopiaQueryBuilder builder = new TopiaQueryBuilder(); // builder.setQuery(new TopiaQuery(UserAccount.class)); TopiaQuery query = new TopiaQuery(UserAccount.class); - PollenQueryHelper.prepareQuery(query, filter); + filter.applyOnQuery(query); log.debug("Query : " + query); Assert.assertEquals(query.fullQuery(), "FROM " + UserAccount.class.getName() + - " ORDER BY " + UserAccount.LOGIN); + " ORDER BY " + UserAccount.PROPERTY_LOGIN); filter.setOrderBy(null); query = new TopiaQuery(UserAccount.class); - PollenQueryHelper.prepareQuery(query, filter); + filter.applyOnQuery(query); log.debug("Query : " + query); Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceFavoriteImplTest.java =================================================================== --- trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceFavoriteImplTest.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceFavoriteImplTest.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -81,9 +81,9 @@ String email = null; FavoriteParticipant result = dao.findByProperties( - FavoriteParticipant.NAME, "participant2", - FavoriteParticipant.EMAIL, email, - FavoriteParticipant.FAVORITE_LIST, list); + FavoriteParticipant.PROPERTY_NAME, "participant2", + FavoriteParticipant.PROPERTY_EMAIL, email, + FavoriteParticipant.PROPERTY_FAVORITE_LIST, list); Assert.assertNotNull(result); } finally { Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServicePollImplTest.java =================================================================== --- trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServicePollImplTest.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServicePollImplTest.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -4,7 +4,8 @@ import org.apache.commons.logging.LogFactory; import org.chorem.pollen.PollenBusinessException; import org.chorem.pollen.PollenDAOHelper; -import org.chorem.pollen.bean.Filter; +import org.chorem.pollen.bean.TopiaFilter; +import org.chorem.pollen.bean.UserPoll; import org.chorem.pollen.common.ChoiceType; import org.chorem.pollen.common.PollType; import org.chorem.pollen.common.VoteCountingType; @@ -28,7 +29,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.Map; /** * Created: 14 mai 2010 @@ -97,7 +97,7 @@ Participant participant2_3 = createFavoriteParticipant( "participant2_3", null, list2); - list2 = findFavoriteList(list2.getId(), FavoriteList.FAVORITE_PARTICIPANT); + list2 = findFavoriteList(list2.getId(), FavoriteList.PROPERTY_FAVORITE_PARTICIPANT); } @Test @@ -348,12 +348,24 @@ /** EXEC METHOD **/ - Map<PollAccount, Poll> polls = servicePoll.getPollsByUser(user); + TopiaFilter filter = new TopiaFilter(); + filter.setReference(user); + List<UserPoll> polls = servicePoll.getPolls(filter); - // POLL 2 : user both creator and participant (+2) - // POLL : user creator + added in each group (+3) + // POLL 2 : user both creator and participant (+2 accounts) + // POLL : user creator + added in each group (+3 accounts) - Assert.assertEquals(5, polls.size()); + Assert.assertEquals(2, polls.size()); + + UserPoll userPoll2 = polls.get(0); + Assert.assertEquals("POLL2", userPoll2.getPoll().getTitle()); + Assert.assertTrue(userPoll2.isCreator()); + Assert.assertEquals(2, userPoll2.getAccounts().size()); + + UserPoll userPoll1 = polls.get(1); + Assert.assertEquals("POLL", userPoll1.getPoll().getTitle()); + Assert.assertTrue(userPoll1.isCreator()); + Assert.assertEquals(3, userPoll1.getAccounts().size()); } @Test @@ -380,9 +392,9 @@ /** EXEC METHOD **/ - Poll pollFound = servicePoll.getPoll(poll.getUid(), Poll.CHOICE); + Poll pollFound = servicePoll.getPoll(poll.getUid(), Poll.PROPERTY_CHOICE); - Filter filter = new Filter(); + TopiaFilter filter = new TopiaFilter(); filter.setReference(pollFound); List<PollAccount> accounts = getServiceVote().getVotes(filter); Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/UserListsUpdate.java =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/UserListsUpdate.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/UserListsUpdate.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -9,7 +9,7 @@ import org.apache.tapestry5.ioc.Messages; import org.apache.tapestry5.ioc.annotations.Inject; import org.chorem.pollen.PollenBusinessException; -import org.chorem.pollen.bean.Filter; +import org.chorem.pollen.bean.TopiaFilter; import org.chorem.pollen.entity.FavoriteList; import org.chorem.pollen.entity.FavoriteParticipant; import org.chorem.pollen.service.ServiceFavorite; @@ -88,7 +88,7 @@ if (logger.isDebugEnabled()) { logger.debug("Create DATASOURCE"); } - Filter filter = new Filter(); + TopiaFilter filter = new TopiaFilter(); filter.setReference(source); participants = new FavoriteParticipantDataSource(serviceFavorite, filter); Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/models/FavoriteParticipantDataSource.java =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/models/FavoriteParticipantDataSource.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/models/FavoriteParticipantDataSource.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -2,7 +2,7 @@ import org.apache.tapestry5.grid.SortConstraint; import org.chorem.pollen.PollenException; -import org.chorem.pollen.bean.Filter; +import org.chorem.pollen.bean.TopiaFilter; import org.chorem.pollen.entity.FavoriteParticipant; import org.chorem.pollen.service.ServiceFavorite; import org.nuiton.web.tapestry5.data.AbstractMappedGridDataSource; @@ -30,10 +30,10 @@ private ServiceFavorite service; - private Filter filter; + private TopiaFilter filter; public FavoriteParticipantDataSource(ServiceFavorite service, - Filter filter) { + TopiaFilter filter) { this.service = service; this.filter = filter; } Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/models/PollFormModel.java =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/models/PollFormModel.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/models/PollFormModel.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -106,7 +106,8 @@ if (logger.isDebugEnabled()) { logger.debug("Get existing poll with pollUID = " + uid); } - poll = servicePoll.getPoll(uid, Poll.CHOICE, Poll.POLL_ACCOUNT); + poll = servicePoll.getPoll(uid, Poll.PROPERTY_CHOICE, + Poll.PROPERTY_POLL_ACCOUNT); // TODO : init advancedOptions // TODO-fdesbois-2010-05-19 : exception need to be throw if uid not correspond to an existing poll } else { Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/models/UserAccountDataSource.java =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/models/UserAccountDataSource.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/models/UserAccountDataSource.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -2,7 +2,7 @@ import org.apache.tapestry5.grid.SortConstraint; import org.chorem.pollen.PollenException; -import org.chorem.pollen.bean.Filter; +import org.chorem.pollen.bean.TopiaFilter; import org.chorem.pollen.entity.UserAccount; import org.chorem.pollen.service.ServiceUser; import org.nuiton.web.tapestry5.data.AbstractMappedGridDataSource; @@ -21,9 +21,9 @@ private ServiceUser service; - private Filter filter; + private TopiaFilter filter; - public UserAccountDataSource(ServiceUser service, Filter filter) { + public UserAccountDataSource(ServiceUser service, TopiaFilter filter) { this.service = service; this.filter = filter; } Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminPolls.java =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminPolls.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminPolls.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -75,7 +75,7 @@ @Override public void onActivate() { super.onActivate(); - polls = servicePoll.getAllPolls(); + //polls = servicePoll.getPolls(new Filter()); // Affichage des erreurs if (!isAdminConnected()) { Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminUsers.java =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminUsers.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminUsers.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -31,7 +31,7 @@ import org.apache.tapestry5.ioc.Messages; import org.apache.tapestry5.ioc.annotations.Inject; import org.chorem.pollen.PollenBusinessException; -import org.chorem.pollen.bean.Filter; +import org.chorem.pollen.bean.TopiaFilter; import org.chorem.pollen.bean.PollenEmail; import org.chorem.pollen.entity.UserAccount; import org.chorem.pollen.service.ServiceEmail; @@ -120,7 +120,7 @@ */ public UserAccountDataSource getAccounts() { if (accounts == null) { - accounts = new UserAccountDataSource(serviceUser, new Filter()); + accounts = new UserAccountDataSource(serviceUser, new TopiaFilter()); } return accounts; } Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -27,7 +27,6 @@ import org.apache.tapestry5.Block; import org.apache.tapestry5.ComponentResources; import org.apache.tapestry5.EventContext; -import org.apache.tapestry5.Link; import org.apache.tapestry5.annotations.IncludeJavaScriptLibrary; import org.apache.tapestry5.annotations.IncludeStylesheet; import org.apache.tapestry5.annotations.InjectComponent; @@ -40,7 +39,7 @@ import org.apache.tapestry5.ioc.annotations.Inject; import org.chorem.pollen.PollenBusinessException; import org.chorem.pollen.PollenProperty; -import org.chorem.pollen.bean.Filter; +import org.chorem.pollen.bean.TopiaFilter; import org.chorem.pollen.bean.PollenEmail; import org.chorem.pollen.bean.PollenEmailImpl; import org.chorem.pollen.entity.Choice; @@ -195,7 +194,7 @@ public Poll getPoll() throws PollenBusinessException { if (poll == null) { - poll = servicePoll.getPoll(uri.getPollUid(), Poll.CHOICE); + poll = servicePoll.getPoll(uri.getPollUid(), Poll.PROPERTY_CHOICE); } return poll; } @@ -520,7 +519,7 @@ public int getNbVotes() throws PollenBusinessException { if (nbVotes == null) { - Filter filter = new Filter(); + TopiaFilter filter = new TopiaFilter(); filter.setReference(getPoll()); nbVotes = serviceVote.getNbVotes(filter); } @@ -528,12 +527,12 @@ } @Log - public Filter getVoteFilter() throws PollenBusinessException { - Filter filter = new Filter(); + public TopiaFilter getVoteFilter() throws PollenBusinessException { + TopiaFilter filter = new TopiaFilter(); filter.setStartIndex(pager.getStartIndex()); filter.setEndIndex(pager.getEndIndex()); filter.setReference(getPoll()); - filter.setOrderBy(PollAccount.VOTE_DATE + " desc"); + filter.setOrderBy(PollAccount.PROPERTY_VOTE_DATE + " desc"); return filter; } Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserLists.java =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserLists.java 2010-06-02 21:38:06 UTC (rev 3027) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserLists.java 2010-06-03 17:26:56 UTC (rev 3028) @@ -116,8 +116,8 @@ favoriteListModel = new GenericSelectModel<FavoriteList>(getFavoriteLists(), FavoriteList.class, - FavoriteList.NAME, - FavoriteList.NAME, + FavoriteList.PROPERTY_NAME, + FavoriteList.PROPERTY_NAME, propertyAccess); } return favoriteListModel;