Author: athimel Date: 2013-10-30 12:16:15 +0100 (Wed, 30 Oct 2013) New Revision: 2851 Url: http://nuiton.org/projects/topia/repository/revisions/2851 Log: Fix behavior when using new Dao with foreign TopiaContext Modified: trunk/src/site/rst/migrate_to_3.0.rst trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/AbstractTopiaContext.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDaoTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/AbstractTopiaDao.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/LegacyTopiaDao.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaQueryBuilderRunQueryStep.java Modified: trunk/src/site/rst/migrate_to_3.0.rst =================================================================== --- trunk/src/site/rst/migrate_to_3.0.rst 2013-10-30 01:17:00 UTC (rev 2850) +++ trunk/src/site/rst/migrate_to_3.0.rst 2013-10-30 11:16:15 UTC (rev 2851) @@ -178,6 +178,39 @@ - Expected class declaration is : public class AbstractZoneTopiaDao<E extends Zone> extends GeneratedZoneTopiaDao<E> { +Méthodes findAll, find et findUnique sur TopiaContext +----------------------------------------------------- +|MANDATORY| + +Si vous utilisiez ces méthodes, il est désormais recommandé de les utiliser méthodes sur le Dao associé à votre éntité +ou par l'intermédiare du **TopiaJpaSupport**. + +Depuis un Dao surchargé +~~~~~~~~~~~~~~~~~~~~~~~ + +Pour faciliter la migration, ces méthodes ont été portées sur l'interface deprecated **TopiaDAO**. Donc si dans votre +Dao vous faisiez : + +:: + + List<Zone> zones = context.find("FROM Zone WHERE name=:name" , startIndex, endIndex, "name", "Principale"); + +Il vous suffit de retirer le "context." : + +:: + + List<Zone> zones = find("FROM Zone WHERE name=:name" , startIndex, endIndex, "name", "Principale"); + +Dans tous les cas +~~~~~~~~~~~~~~~~~ + +Dans tous les cas, ces méthodes étant dépréciées, vous devriez consulter leur Javadoc pour savoir par quels appels de +méthodes les remplacer. + + + + + .. |RECOMMENDED| image:: recommended.png .. |MANDATORY| image:: mandatory.png Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java 2013-10-30 01:17:00 UTC (rev 2850) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java 2013-10-30 11:16:15 UTC (rev 2851) @@ -53,6 +53,7 @@ * @author athimel <thimel@codelutin.com> * @version $Id$ */ +@Deprecated public interface TopiaContext extends TopiaTransaction, TopiaListenableSupport, TopiaSqlSupport, TopiaJpaSupport, TopiaPersistenceContext, TopiaServiceSupport, TopiaReplicationSupport, TopiaReplicationDestination, TopiaHibernateSupport { Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/AbstractTopiaContext.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/AbstractTopiaContext.java 2013-10-30 01:17:00 UTC (rev 2850) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/AbstractTopiaContext.java 2013-10-30 11:16:15 UTC (rev 2851) @@ -737,7 +737,7 @@ // looking for specialized DAO // normalement il en existe un car il est généré automatiquement // si on utilise la génération - String daoClassname = entityClass.getName() + "DAO"; + String daoClassname = entityClass.getName() + "TopiaDao"; try { Class<TopiaDAO<E>> daoClass = (Class<TopiaDAO<E>>) Class.forName(daoClassname); @@ -763,7 +763,9 @@ @Override public <E extends TopiaEntity, D extends TopiaDAO<E>> D getDao(Class<E> entityClass, Class<D> daoClass) throws TopiaException { - return (D) getDao(entityClass); + TopiaDAO<E> dao = getDao(entityClass); + D result = (D) dao; + return result; } @Override Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDaoTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDaoTransformer.java 2013-10-30 01:17:00 UTC (rev 2850) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDaoTransformer.java 2013-10-30 11:16:15 UTC (rev 2851) @@ -599,9 +599,11 @@ body.append("" /*{ { - List<<%=attrSimpleType%>> list = topiaDaoSupplier - .getDao(<%=attrSimpleType%>.class, <%=attrConcreteDaoClassName%>.class) - .forProperties(<%=attrSimpleType%>.<%=getConstantName(reverseAttrName)%>, entity).findAll(); + <%=attrConcreteDaoClassName%> dao = topiaDaoSupplier + .getDao(<%=attrSimpleType%>.class, <%=attrConcreteDaoClassName%>.class); + List<<%=attrSimpleType%>> list = dao + .forProperties(<%=attrSimpleType%>.<%=getConstantName(reverseAttrName)%>, entity) + .findAll(); for (<%=attrSimpleType%> item : list) { // sletellier : Set null only if target is concerned by deletion Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/AbstractTopiaDao.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/AbstractTopiaDao.java 2013-10-30 01:17:00 UTC (rev 2850) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/AbstractTopiaDao.java 2013-10-30 11:16:15 UTC (rev 2851) @@ -81,7 +81,7 @@ * @author bpoussin <poussin@codelutin.com> * @version $Id$ */ -public abstract class AbstractTopiaDao<E extends TopiaEntity> extends LegacyTopiaDao<E> { +public abstract class AbstractTopiaDao<E extends TopiaEntity> extends LegacyTopiaDao<E> implements TopiaDao<E> { /** to use log facility, just put in your code: log.info(\"...\"); */ private static Log log = LogFactory.getLog(AbstractTopiaDao.class); @@ -863,8 +863,8 @@ } @Override - public List<E> findAll(int startIndex, int endIndex) { - return getNextStep().findAll(startIndex, endIndex); + public List<E> find(int startIndex, int endIndex) { + return getNextStep().find(startIndex, endIndex); } @Override @@ -878,8 +878,8 @@ } @Override - public List<String> findAllIds(int startIndex, int endIndex) { - return getNextStep().findAllIds(startIndex, endIndex); + public List<String> findIds(int startIndex, int endIndex) { + return getNextStep().findIds(startIndex, endIndex); } @Override @@ -977,7 +977,7 @@ } @Override - public List<E> findAll(int startIndex, int endIndex) { + public List<E> find(int startIndex, int endIndex) { return topiaDAO.findAll(hql, hqlParameters, startIndex, endIndex); } @@ -989,7 +989,7 @@ } @Override - public List<String> findAllIds(int startIndex, int endIndex) { + public List<String> findIds(int startIndex, int endIndex) { // XXX brendan 30/09/13 does this truely work ? String hqlWithSelectClause = "select topiaId " + hql; return topiaDAO.findAll(hqlWithSelectClause, hqlParameters, String.class, startIndex, endIndex); Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/LegacyTopiaDao.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/LegacyTopiaDao.java 2013-10-30 01:17:00 UTC (rev 2850) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/LegacyTopiaDao.java 2013-10-30 11:16:15 UTC (rev 2851) @@ -3,6 +3,7 @@ import com.google.common.base.Preconditions; import org.apache.commons.lang3.StringUtils; import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.topia.framework.TopiaUtil; import org.nuiton.topia.persistence.pager.TopiaPagerBean; @@ -15,6 +16,7 @@ /** * Implements deprecated method from {@link TopiaDAO}, should be deleted. */ +@Deprecated public abstract class LegacyTopiaDao<E extends TopiaEntity> implements TopiaDAO<E> { @Override @@ -61,7 +63,7 @@ @Deprecated public <R> R findByQuery(Class<R> type, String hql, Object... propertyNamesAndValues) { Map<String, Object> properties = TopiaUtil.convertPropertiesArrayToMap(propertyNamesAndValues); - return findAny(hql, properties, type); + return findAnyOrNull(hql, properties, type); } @Override @@ -145,8 +147,7 @@ Preconditions.checkNotNull(StringUtils.isNotBlank(hql)); Preconditions.checkArgument(hql.toUpperCase().trim().startsWith("SELECT COUNT(")); Map<String, Object> hqlParameters = TopiaUtil.convertPropertiesArrayToMap(propertyNamesAndValues); - // FIXME AThimel 30/10/13 This cannot work : the final query will be "select count(topiaId) select count(...) ..." - long count = forHql(hql, hqlParameters).count(); + long count = findAny(hql, hqlParameters, Long.class); return count; } @@ -297,6 +298,8 @@ protected abstract <R> R findAny(String hql, Map<String, Object> properties, Class<R> type); + protected abstract <R> R findAnyOrNull(String hql, Map<String, Object> hqlParameters, Class<R> type); + protected abstract TopiaQueryBuilderRunQueryStep<E> forHql(String hql, Map<String, Object> hqlParameters); protected abstract <R> List<R> findAll(String hql, Map<String, Object> hqlParameters, Class<R> type); @@ -305,6 +308,27 @@ protected abstract <R> List<R> findAll(String hql, Map<String, Object> hqlParameters, Class<R> type, int startIndex, int endIndex); + protected abstract <R> R findUnique(String hql, Map<String, Object> hqlParameters, Class<R> type); + protected abstract boolean exists(String hql, Map<String, Object> hqlParameters); + @Override + @Deprecated + public <E1> List<E1> findAll(String hql, Object... propertyNamesAndValues) throws TopiaException { + return (List<E1>) findAllByQuery(hql, propertyNamesAndValues); + } + + @Override + @Deprecated + public <E1> List<E1> find(String hql, int startIndex, int endIndex, Object... propertyNamesAndValues) throws TopiaException { + return (List<E1>) findAllByQueryWithBound(hql, startIndex, endIndex, propertyNamesAndValues); + } + + @Override + @Deprecated + public <E1> E1 findUnique(String hql, Object... propertyNamesAndValues) throws TopiaException { + Map<String, Object> hqlParameters = TopiaUtil.convertPropertiesArrayToMap(propertyNamesAndValues); + return (E1) findUnique(hql, hqlParameters, Object.class); + } + } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java 2013-10-30 01:17:00 UTC (rev 2850) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java 2013-10-30 11:16:15 UTC (rev 2851) @@ -618,5 +618,69 @@ List<Permission> getRequestPermission(String topiaId, int actions) throws TopiaException; + // The next 3 methods are copied from TopiaContext in order to facilitate migration + + /** + * Allow to do some HQL query + * <p/> + * WARNING : Depending on the registered service, this method may not + * support something else than queries on TopiaEntity + * + * @param hql the HQL query + * @param propertyNamesAndValues the query parameters. Arguments are key-value paired : + * [propertyName;value;propertyName;value;...] + * @return The result list + * @throws TopiaException for any error during querying + * @deprecated use method from {@link org.nuiton.topia.TopiaJpaSupport} + */ + @Deprecated + <E> List<E> findAll(String hql, + Object... propertyNamesAndValues) throws TopiaException; + + /** + * Allow to do some JPA-QL query using the given bounds. + * <p/> + * No lower bound : <code>startIndex</code> = 0.<br/> + * No upper bound : <code>endIndex</code> = -1. + * <p/> + * WARNING : Depending on the registered service, this method may not + * support something else than queries on TopiaEntity + * + * @param hql the HQL query + * @param startIndex first index of entity to return + * @param endIndex last index of entity to return + * @param propertyNamesAndValues the query parameters. Arguments are key-value paired : + * [propertyName;value;propertyName;value;...] + * @return The result list + * @throws TopiaException for any error during querying + * @deprecated use method from {@link org.nuiton.topia.TopiaJpaSupport} + */ + @Deprecated + <E> List<E> find(String hql, + int startIndex, + int endIndex, + Object... propertyNamesAndValues) throws TopiaException; + + /** + * Allow to do some HQL query and return an unique result. If nothing if + * found by the query, will return null. If more than one result is found, + * will throw an exception. + * <p/> + * WARNING : Depending on the registered service, this method may not + * support something else than queries on TopiaEntity + * + * @param hql the HQL query + * @param propertyNamesAndValues the query parameters. Arguments are key-value paired : + * [propertyName;value;propertyName;value;...] + * @return The result instance or null + * @throws TopiaException for any error during querying or if the the query + * returns more than one result. + * @deprecated use method from {@link org.nuiton.topia.TopiaJpaSupport} + */ + @Deprecated + <E> E findUnique(String hql, + Object... propertyNamesAndValues) throws TopiaException; + + } //TopiaDAO Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java 2013-10-30 01:17:00 UTC (rev 2850) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java 2013-10-30 11:16:15 UTC (rev 2851) @@ -1041,4 +1041,19 @@ return entities; } + @Override + public <E1> List<E1> findAll(String hql, Object... propertyNamesAndValues) throws TopiaException { + throw new UnsupportedOperationException("Do not use this DAO implementation"); + } + + @Override + public <E1> List<E1> find(String hql, int startIndex, int endIndex, Object... propertyNamesAndValues) throws TopiaException { + throw new UnsupportedOperationException("Do not use this DAO implementation"); + } + + @Override + public <E1> E1 findUnique(String hql, Object... propertyNamesAndValues) throws TopiaException { + throw new UnsupportedOperationException("Do not use this DAO implementation"); + } + } //TopiaDAOImpl Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaQueryBuilderRunQueryStep.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaQueryBuilderRunQueryStep.java 2013-10-30 01:17:00 UTC (rev 2850) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaQueryBuilderRunQueryStep.java 2013-10-30 11:16:15 UTC (rev 2851) @@ -35,10 +35,10 @@ Iterable<E> findAllLazy(); - List<E> findAll(int startIndex, int endIndex); + List<E> find(int startIndex, int endIndex); List<String> findAllIds(); - List<String> findAllIds(int startIndex, int endIndex); + List<String> findIds(int startIndex, int endIndex); }