Author: tchemit Date: 2013-07-13 13:14:18 +0200 (Sat, 13 Jul 2013) New Revision: 2758 Url: http://nuiton.org/projects/topia/repository/revisions/2758 Log: refs #2752: Add generics support on TopiaContext#find*() methods (add also on findUnique and findByTopiaId) fix migration doc 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/TopiaContextImpl.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java Modified: trunk/src/site/rst/migrate_to_3.0.rst =================================================================== --- trunk/src/site/rst/migrate_to_3.0.rst 2013-07-12 08:40:11 UTC (rev 2757) +++ trunk/src/site/rst/migrate_to_3.0.rst 2013-07-13 11:14:18 UTC (rev 2758) @@ -38,6 +38,7 @@ ----------------------- * ToPIA utilise au minimum Eugene 2.6.4. + * ToPIA utilise au minimum Hibernate 4.2.1.Final. Renommage de variables ---------------------- @@ -69,6 +70,13 @@ Généricité ---------- -Les methodes TopiaContext#find() et TopiaContext#findAll() sont devenu génériques. Si le code -précédente réalisait un cast, il faut le supprimer car cela cause maintenant une erreur de -compilation. +Les methodes + + * TopiaContext#find(...) + * TopiaContext#findAll(...) + * TopiaContext#findUnique(...) + +sont devenu génériques. + +Si le code précédent réalisait un cast, il faut le supprimer car cela peut +causer maintenant une erreur de compilation. Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java 2013-07-12 08:40:11 UTC (rev 2757) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java 2013-07-13 11:14:18 UTC (rev 2758) @@ -169,7 +169,7 @@ * @return the entity found or null if not * @throws TopiaException for errors on retrieving the entity */ - TopiaEntity findByTopiaId(String topiaId) throws TopiaException; + <E extends TopiaEntity> E findByTopiaId(String topiaId) throws TopiaException; /** * Permet de faire une requete HQL hibernate directement sur la base. @@ -211,7 +211,7 @@ * @throws TopiaException for any error during querying or if the the query * returns more than one result. */ - Object findUnique(String jpaql, Object... paramNamesAndValues) + <E> E findUnique(String jpaql, Object... paramNamesAndValues) throws TopiaException; /** Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2013-07-12 08:40:11 UTC (rev 2757) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2013-07-13 11:14:18 UTC (rev 2758) @@ -918,13 +918,13 @@ /* -------------------- GLOBAL OPERATIONS ON SCHEMA ----------------------*/ @Override - public TopiaEntity findByTopiaId(String id) throws TopiaException { + public <E extends TopiaEntity> E findByTopiaId(String id) throws TopiaException { checkClosed(_("topia.persistence.error.unsupported.operation.on.closed.context", "findById")); - Class<TopiaEntity> entityClass = getTopiaIdFactory().getClassName(id); - TopiaDAO<TopiaEntity> dao = getDAO(entityClass); - TopiaEntity result = dao.findByTopiaId(id); + Class<E> entityClass = getTopiaIdFactory().getClassName(id); + TopiaDAO<E> dao = getDAO(entityClass); + E result = dao.findByTopiaId(id); return result; } @@ -994,12 +994,12 @@ } @Override - public Object findUnique(String hql, Object... paramNamesAndValues) + public <E> E findUnique(String hql, Object... paramNamesAndValues) throws TopiaException { checkClosed(_("topia.persistence.error.unsupported.operation.on.closed.context", "findUnique")); - List<?> results = find(hql, 0, 1, paramNamesAndValues); + List<E> results = find(hql, 0, 1, paramNamesAndValues); // If there is more than 1 result, throw an exception if (results.size() > 1) { @@ -1009,7 +1009,7 @@ } // otherwise return the first one, or null - Object result = null; + E result = null; if (!results.isEmpty()) { result = results.get(0); } 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-07-12 08:40:11 UTC (rev 2757) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java 2013-07-13 11:14:18 UTC (rev 2758) @@ -528,7 +528,7 @@ @Override public E findContains(String propertyName, Object property) throws TopiaException { - E find = (E)context.findUnique("from " + getEntityClass().getName() + + E find = context.findUnique("from " + getEntityClass().getName() + " WHERE :property in elements(" + propertyName + ")", "property", property); return find; } @@ -552,30 +552,28 @@ Object... others) throws TopiaException { Map<String, Object> properties = convertPropertiesArrayToMap(propertyName, propertyValue, others); - boolean result = false; try { Criteria criteria = createCriteria(FlushMode.AUTO); criteria.add(Restrictions.allEq(properties)); criteria.setProjection(Projections.rowCount()); Number count = (Number) criteria.uniqueResult(); - result = count.intValue() > 0; + boolean result = count.intValue() > 0; + return result; } catch (HibernateException eee) { throw new TopiaException(eee); } - return result; } @Override public long count() throws TopiaException { - long result = -1; try { Criteria criteria = createCriteria(FlushMode.AUTO); criteria.setProjection(Projections.rowCount()); - result = ((Number)criteria.uniqueResult()).longValue(); + long result = ((Number)criteria.uniqueResult()).longValue(); + return result; } catch (HibernateException eee) { throw new TopiaException(eee); } - return result; } /**