From 814e7b506442dc2df387672dd51cb090d73ab648 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Fri, 20 Dec 2013 10:39:07 +0100 Subject: [PATCH] OO-917: implement a count method pendant to the list of properties --- .../auditing/UserNodeAuditManagerImpl.java | 7 +- .../properties/CoursePropertyManager.java | 10 +++ .../PersistingCoursePropertyManager.java | 7 ++ .../preview/PreviewCoursePropertyManager.java | 5 ++ .../properties/NarrowedPropertyManager.java | 4 ++ .../org/olat/properties/PropertyManager.java | 66 ++++++++++++++++--- .../org/olat/properties/PropertyTest.java | 3 + 7 files changed, 89 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/olat/course/auditing/UserNodeAuditManagerImpl.java b/src/main/java/org/olat/course/auditing/UserNodeAuditManagerImpl.java index a57441599de..db58d52d9e9 100644 --- a/src/main/java/org/olat/course/auditing/UserNodeAuditManagerImpl.java +++ b/src/main/java/org/olat/course/auditing/UserNodeAuditManagerImpl.java @@ -26,7 +26,6 @@ package org.olat.course.auditing; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.List; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; @@ -102,17 +101,19 @@ public class UserNodeAuditManagerImpl extends UserNodeAuditManager { /** * @see org.olat.course.auditing.AuditManager#hasUserNodeLogs(org.olat.course.nodes.CourseNode) */ + @Override public boolean hasUserNodeLogs(CourseNode node) { ICourse course = CourseFactory.loadCourse(ores); CoursePropertyManager cpm = course.getCourseEnvironment().getCoursePropertyManager(); - List<?> logsProperties = cpm.listCourseNodeProperties(node, null, null, LOG_IDENTIFYER); - return logsProperties.size() == 0 ? false : true; + int numOfProperties = cpm.countCourseNodeProperties(node, null, null, LOG_IDENTIFYER); + return numOfProperties > 0; } /** * @see org.olat.course.auditing.AuditManager#getUserNodeLog(org.olat.course.nodes.CourseNode, * org.olat.core.id.Identity) */ + @Override public String getUserNodeLog(CourseNode courseNode, Identity identity) { ICourse course = CourseFactory.loadCourse(ores); CoursePropertyManager cpm = course.getCourseEnvironment().getCoursePropertyManager(); diff --git a/src/main/java/org/olat/course/properties/CoursePropertyManager.java b/src/main/java/org/olat/course/properties/CoursePropertyManager.java index fcd5a442580..58eae4067d7 100644 --- a/src/main/java/org/olat/course/properties/CoursePropertyManager.java +++ b/src/main/java/org/olat/course/properties/CoursePropertyManager.java @@ -87,6 +87,16 @@ public interface CoursePropertyManager extends IdentityAnonymizerCallback { */ public List<Property> listCourseNodeProperties(CourseNode node, Identity identity, BusinessGroup grp, String name); + /** + * Same as above but only count the properties + * @param node + * @param identity + * @param grp + * @param name + * @return + */ + public int countCourseNodeProperties(CourseNode node, Identity identity, BusinessGroup grp, String name); + /** * Find course node properties (exact match. I.e. null values are taken into account) * @param node diff --git a/src/main/java/org/olat/course/properties/PersistingCoursePropertyManager.java b/src/main/java/org/olat/course/properties/PersistingCoursePropertyManager.java index aecac3a8dc4..81619b54a12 100644 --- a/src/main/java/org/olat/course/properties/PersistingCoursePropertyManager.java +++ b/src/main/java/org/olat/course/properties/PersistingCoursePropertyManager.java @@ -125,11 +125,18 @@ public class PersistingCoursePropertyManager extends BasicManager implements Cou * org.olat.core.id.Identity, org.olat.group.BusinessGroup, * java.lang.String) */ + @Override public List<Property> listCourseNodeProperties(CourseNode node, Identity identity, BusinessGroup grp, String name) { String myCategory = buildCourseNodePropertyCategory(node); return pm.listProperties(identity, grp, myCategory, name); } + @Override + public int countCourseNodeProperties(CourseNode node, Identity identity, BusinessGroup grp, String name) { + String myCategory = buildCourseNodePropertyCategory(node); + return pm.countProperties(identity, grp, myCategory, name); + } + /** * @see org.olat.course.properties.CoursePropertyManager#findCourseNodeProperties(org.olat.course.nodes.CourseNode, * org.olat.core.id.Identity, org.olat.group.BusinessGroup, diff --git a/src/main/java/org/olat/course/run/preview/PreviewCoursePropertyManager.java b/src/main/java/org/olat/course/run/preview/PreviewCoursePropertyManager.java index fda347cd63e..a7c41451a64 100644 --- a/src/main/java/org/olat/course/run/preview/PreviewCoursePropertyManager.java +++ b/src/main/java/org/olat/course/run/preview/PreviewCoursePropertyManager.java @@ -124,6 +124,11 @@ final class PreviewCoursePropertyManager extends BasicManager implements CourseP throw new AssertException("Not implemented for preview."); } + @Override + public int countCourseNodeProperties(CourseNode node, Identity identity, BusinessGroup grp, String name) { + return 0; + } + /** * @see org.olat.course.properties.CoursePropertyManager#findCourseNodeProperties(org.olat.course.nodes.CourseNode, org.olat.core.id.Identity, org.olat.group.BusinessGroup, java.lang.String) */ diff --git a/src/main/java/org/olat/properties/NarrowedPropertyManager.java b/src/main/java/org/olat/properties/NarrowedPropertyManager.java index 58099d16644..5aed6555919 100644 --- a/src/main/java/org/olat/properties/NarrowedPropertyManager.java +++ b/src/main/java/org/olat/properties/NarrowedPropertyManager.java @@ -118,6 +118,10 @@ public class NarrowedPropertyManager { return pm.listProperties(identity, grp, resourceable, category, name); } + public int countProperties(Identity identity, BusinessGroup grp, String category, String name) { + return pm.countProperties(identity, grp, resourceable, category, name); + } + /** * Generic find method. Returns a list of Property objects. This is an exact match i.e. if you pass-on null values, * null values will be included in the query. diff --git a/src/main/java/org/olat/properties/PropertyManager.java b/src/main/java/org/olat/properties/PropertyManager.java index a8ae2569dfb..b049e17db6f 100644 --- a/src/main/java/org/olat/properties/PropertyManager.java +++ b/src/main/java/org/olat/properties/PropertyManager.java @@ -181,10 +181,19 @@ public class PropertyManager extends BasicManager implements UserDataDeletable { * @return a list of Property objects */ public List<Property> listProperties(Identity identity, BusinessGroup grp, OLATResourceable resourceable, String category, String name) { - if (resourceable == null) + if (resourceable == null) { return listProperties(identity, grp, null, null, category, name); - else + } else { return listProperties(identity, grp, resourceable.getResourceableTypeName(), resourceable.getResourceableId(), category, name); + } + } + + public int countProperties(Identity identity, BusinessGroup grp, OLATResourceable resourceable, String category, String name) { + if (resourceable == null) { + return countProperties(identity, grp, null, null, category, name, null, null); + } else { + return countProperties(identity, grp, resourceable.getResourceableTypeName(), resourceable.getResourceableId(), category, name, null, null); + } } /** @@ -201,6 +210,13 @@ public class PropertyManager extends BasicManager implements UserDataDeletable { return listProperties(identity, grp, resourceTypeName, resourceTypeId, category, name, null, null); } + public int countProperties(Identity identity, BusinessGroup grp, String resourceTypeName, Long resourceTypeId, + String category, String name, Long longValue, String stringValue) { + TypedQuery<Number> query = createQueryListProperties(identity, grp, resourceTypeName, resourceTypeId, + category, name, longValue, stringValue, Number.class); + return query.getSingleResult().intValue(); + } + /** * Only to use if no OLATResourceable Object is available. * @param identity @@ -215,14 +231,44 @@ public class PropertyManager extends BasicManager implements UserDataDeletable { */ public List<Property> listProperties(Identity identity, BusinessGroup grp, String resourceTypeName, Long resourceTypeId, String category, String name, Long longValue, String stringValue) { + TypedQuery<Property> query = createQueryListProperties(identity, grp, resourceTypeName, resourceTypeId, + category, name, longValue, stringValue, Property.class); + return query.getResultList(); + } + + /** + * + * @param identity + * @param grp + * @param resourceTypeName + * @param resourceTypeId + * @param category + * @param name + * @param longValue + * @param stringValue + * @param resultClass Only Number and Property are acceptable + * @return + */ + private <U> TypedQuery<U> createQueryListProperties(Identity identity, BusinessGroup grp, String resourceTypeName, Long resourceTypeId, + String category, String name, Long longValue, String stringValue, Class<U> resultClass) { StringBuilder sb = new StringBuilder(); - sb.append("select v from ").append(Property.class.getName()).append(" as v "); - if (identity != null) { - sb.append(" inner join fetch v.identity identity "); - } - if (grp != null) { - sb.append(" inner join fetch v.grp grp "); + if(Number.class.equals(resultClass)) { + sb.append("select count(v) from ").append(Property.class.getName()).append(" as v "); + if (identity != null) { + sb.append(" inner join v.identity identity "); + } + if (grp != null) { + sb.append(" inner join v.grp grp "); + } + } else { + sb.append("select v from ").append(Property.class.getName()).append(" as v "); + if (identity != null) { + sb.append(" inner join fetch v.identity identity "); + } + if (grp != null) { + sb.append(" inner join fetch v.grp grp "); + } } sb.append(" where "); @@ -260,7 +306,7 @@ public class PropertyManager extends BasicManager implements UserDataDeletable { sb.append("v.stringValue=:string"); } - TypedQuery<Property> queryProps = DBFactory.getInstance().getCurrentEntityManager().createQuery(sb.toString(), Property.class); + TypedQuery<U> queryProps = DBFactory.getInstance().getCurrentEntityManager().createQuery(sb.toString(), resultClass); if (identity != null) { queryProps.setParameter("identityKey", identity.getKey()); } @@ -285,7 +331,7 @@ public class PropertyManager extends BasicManager implements UserDataDeletable { if (stringValue != null) { queryProps.setParameter("string", stringValue); } - return queryProps.getResultList(); + return queryProps; } /** diff --git a/src/test/java/org/olat/properties/PropertyTest.java b/src/test/java/org/olat/properties/PropertyTest.java index 75bab137531..cb49d236bee 100644 --- a/src/test/java/org/olat/properties/PropertyTest.java +++ b/src/test/java/org/olat/properties/PropertyTest.java @@ -196,6 +196,9 @@ public class PropertyTest extends OlatTestCase { Property prop = (Property) entries.get(0); assertEquals(ores.getResourceableTypeName(), prop.getResourceTypeName()); assertEquals(ores.getResourceableId(), prop.getResourceTypeId()); + + int numOfEntries = PropertyManager.getInstance().countProperties(identity, group, ores.getResourceableTypeName(), ores.getResourceableId(), "cat", "TestProperty", null, null); + Assert.assertEquals(entries.size(), numOfEntries); } /** -- GitLab