← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 10117: Analytics, handling situations where no filters have any items

 

------------------------------------------------------------
revno: 10117
committer: Lars Helge Øverland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Sun 2013-03-10 15:26:48 +0100
message:
  Analytics, handling situations where no filters have any items
modified:
  dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java
  dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/JdbcAnalyticsManager.java


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java'
--- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java	2013-03-10 14:13:41 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java	2013-03-10 14:26:48 +0000
@@ -142,7 +142,8 @@
     }
     
     /**
-     * Creates a mapping between dimension identifiers and filter dimensions.
+     * Creates a mapping between dimension identifiers and filter dimensions. Filters 
+     * are guaranteed not to be null.
      */
     public ListMap<String, Dimension> getDimensionFilterMap()
     {
@@ -150,7 +151,10 @@
         
         for ( Dimension filter : filters )
         {
-            map.putValue( filter.getDimension(), filter );
+            if ( filter != null )
+            {
+                map.putValue( filter.getDimension(), filter );
+            }
         }
         
         return map;
@@ -643,6 +647,28 @@
         return map;
     }
     
+    /**
+     * Indicates whether at least one of the given dimenions has at least one
+     * item.
+     */
+    public static boolean anyDimensionHasItems( Collection<Dimension> dimensions )
+    {
+        if ( dimensions == null || dimensions.isEmpty() )
+        {
+            return false;
+        }
+        
+        for ( Dimension dim : dimensions )
+        {
+            if ( dim.hasItems() )
+            {
+                return true;
+            }
+        }
+        
+        return false;
+    }
+    
     // -------------------------------------------------------------------------
     // Supportive methods
     // -------------------------------------------------------------------------

=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/JdbcAnalyticsManager.java'
--- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/JdbcAnalyticsManager.java	2013-03-10 13:51:37 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/JdbcAnalyticsManager.java	2013-03-10 14:26:48 +0000
@@ -131,19 +131,22 @@
             }
         }
 
-        ListMap<String, Dimension> filters = params.getDimensionFilterMap();
-        
-        //TODO check if any items for all filters
-        
-        for ( String dimension : filters.keySet() )
+        ListMap<String, Dimension> filterMap = params.getDimensionFilterMap();
+        
+        for ( String dimension : filterMap.keySet() )
         {
-            sql += sqlHelper.whereAnd() + " (";
+            List<Dimension> filters = filterMap.get( dimension );
             
-            for ( Dimension filter : filters.get( dimension ) )
+            if ( DataQueryParams.anyDimensionHasItems( filters ) )
             {
-                if ( filter != null && filter.hasItems() )
+                sql += sqlHelper.whereAnd() + " (";
+                
+                for ( Dimension filter : filters )
                 {
-                    sql += filter.getDimensionName() + " in (" + getQuotedCommaDelimitedString( getUids( filter.getItems() ) ) + ") or ";
+                    if ( filter.hasItems() )
+                    {
+                        sql += filter.getDimensionName() + " in (" + getQuotedCommaDelimitedString( getUids( filter.getItems() ) ) + ") or ";
+                    }
                 }
             }