Author: scooter
Date: 2012-04-11 13:17:39 -0700 (Wed, 11 Apr 2012)
New Revision: 28797

Modified:
   
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/BooleanAggregator.java
   
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/DoubleAggregator.java
   
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/FloatAggregator.java
   
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/IntegerAggregator.java
   
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/LongAggregator.java
   
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/StringAggregator.java
Log:
Handle missing data without throwing an NPE


Modified: 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/BooleanAggregator.java
===================================================================
--- 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/BooleanAggregator.java
 2012-04-11 19:22:42 UTC (rev 28796)
+++ 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/BooleanAggregator.java
 2012-04-11 20:17:39 UTC (rev 28797)
@@ -44,7 +44,9 @@
 
                        // Loop processing
                        for (CyNode node: group.getNodeList()) {
-                               boolean value = 
table.getRow(node.getSUID()).get(column.getName(), 
Boolean.class).booleanValue();
+                               Boolean v = 
table.getRow(node.getSUID()).get(column.getName(), Boolean.class);
+                               if (v == null) continue;
+                               boolean value = v.booleanValue();
                                if (first) {
                                        aggregation = value;
                                        first = false;

Modified: 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/DoubleAggregator.java
===================================================================
--- 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/DoubleAggregator.java
  2012-04-11 19:22:42 UTC (rev 28796)
+++ 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/DoubleAggregator.java
  2012-04-11 20:17:39 UTC (rev 28797)
@@ -44,6 +44,7 @@
 
                public Double aggregate(CyTable table, CyGroup group, CyColumn 
column) {
                        double aggregation = 0.0;
+                       int count = 0;
                        List<Double> valueList = null;
 
                        if (type == AttributeHandlingType.NONE) return null;
@@ -63,7 +64,10 @@
 
                        // Loop processing
                        for (CyNode node: group.getNodeList()) {
-                               double value = 
table.getRow(node.getSUID()).get(column.getName(), Double.class).doubleValue();
+                               Double v = 
table.getRow(node.getSUID()).get(column.getName(), Double.class);
+                               if (v == null) continue;
+                               double value = v.doubleValue();
+                               count++;
                                switch (type) {
                                case MAX:
                                        if (aggregation < value) aggregation = 
value;
@@ -75,7 +79,7 @@
                                        aggregation += value;
                                        break;
                                case AVG:
-                                       aggregation += 
value/(double)group.getNodeList().size();
+                                       aggregation += value;
                                        break;
                                case MEDIAN:
                                        valueList.add(value);
@@ -93,6 +97,8 @@
                                else
                                        aggregation = 
(vArray[(vArray.length/2)-1] + vArray[(vArray.length/2)]) / 2;
 
+                       } else if (type == AttributeHandlingType.AVG) {
+                               aggregation = aggregation/(double)count;
                        }
 
                        Double v = new Double(aggregation);

Modified: 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/FloatAggregator.java
===================================================================
--- 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/FloatAggregator.java
   2012-04-11 19:22:42 UTC (rev 28796)
+++ 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/FloatAggregator.java
   2012-04-11 20:17:39 UTC (rev 28797)
@@ -40,6 +40,7 @@
 
                public Float aggregate(CyTable table, CyGroup group, CyColumn 
column) {
                        float aggregation = 0.0f;
+                       int count = 0;
                        List<Float> valueList = null;
 
                        if (type == AttributeHandlingType.NONE) return null;
@@ -59,7 +60,10 @@
 
                        // Loop processing
                        for (CyNode node: group.getNodeList()) {
-                               float value = 
table.getRow(node.getSUID()).get(column.getName(), Float.class).floatValue();
+                               Float v = 
table.getRow(node.getSUID()).get(column.getName(), Float.class);
+                               if (v == null) continue;
+                               float value = v.floatValue();
+                               count++;
                                switch (type) {
                                case MAX:
                                        if (aggregation < value) aggregation = 
value;
@@ -71,7 +75,7 @@
                                        aggregation += value;
                                        break;
                                case AVG:
-                                       aggregation += 
value/(float)group.getNodeList().size();
+                                       aggregation += value;
                                        break;
                                case MEDIAN:
                                        valueList.add(value);
@@ -89,6 +93,8 @@
                                else
                                        aggregation = 
(vArray[(vArray.length/2)-1] + vArray[(vArray.length/2)]) / 2;
 
+                       } else if (type == AttributeHandlingType.AVG) {
+                               aggregation = aggregation / (float)count;
                        }
 
                        Float v = new Float(aggregation);

Modified: 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/IntegerAggregator.java
===================================================================
--- 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/IntegerAggregator.java
 2012-04-11 19:22:42 UTC (rev 28796)
+++ 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/IntegerAggregator.java
 2012-04-11 20:17:39 UTC (rev 28797)
@@ -40,6 +40,7 @@
 
                public Integer aggregate(CyTable table, CyGroup group, CyColumn 
column) {
                        double aggregation = 0.0;
+                       int count = 0;
                        List<Integer> valueList = null;
 
                        if (type == AttributeHandlingType.NONE) return null;
@@ -59,7 +60,9 @@
 
                        // Loop processing
                        for (CyNode node: group.getNodeList()) {
-                               double value = 
table.getRow(node.getSUID()).get(column.getName(), Integer.class).doubleValue();
+                               Integer v = 
table.getRow(node.getSUID()).get(column.getName(), Integer.class);
+                               if (v == null) continue;
+                               double value = v.doubleValue();
                                switch (type) {
                                case MAX:
                                        if (aggregation < value) aggregation = 
value;
@@ -71,7 +74,7 @@
                                        aggregation += value;
                                        break;
                                case AVG:
-                                       aggregation += 
value/(double)group.getNodeList().size();
+                                       aggregation += value;
                                        break;
                                case MEDIAN:
                                        valueList.add((int)value);
@@ -88,6 +91,8 @@
                                        aggregation = 
vArray[(vArray.length-1)/2];
                                else
                                        aggregation = 
(vArray[(vArray.length/2)-1] + vArray[(vArray.length/2)]) / 2;
+                       } else if (type == AttributeHandlingType.AVG) {
+                               aggregation = aggregation/(double)count;
                        }
 
                        Integer v = new Integer((int)aggregation);

Modified: 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/LongAggregator.java
===================================================================
--- 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/LongAggregator.java
    2012-04-11 19:22:42 UTC (rev 28796)
+++ 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/LongAggregator.java
    2012-04-11 20:17:39 UTC (rev 28797)
@@ -40,6 +40,7 @@
 
                public Long aggregate(CyTable table, CyGroup group, CyColumn 
column) {
                        double aggregation = 0.0;
+                       int count = 0;
                        List<Long> valueList = null;
 
                        if (type == AttributeHandlingType.NONE) return null;
@@ -59,7 +60,10 @@
 
                        // Loop processing
                        for (CyNode node: group.getNodeList()) {
-                               double value = 
table.getRow(node.getSUID()).get(column.getName(), Long.class).doubleValue();
+                               Long v = 
table.getRow(node.getSUID()).get(column.getName(), Long.class);
+                               if (v == null) continue;
+                               count++;
+                               double value = v.doubleValue();
                                switch (type) {
                                case MAX:
                                        if (aggregation < value) aggregation = 
value;
@@ -71,7 +75,7 @@
                                        aggregation += value;
                                        break;
                                case AVG:
-                                       aggregation += 
value/(double)group.getNodeList().size();
+                                       aggregation += value;
                                        break;
                                case MEDIAN:
                                        valueList.add((long)value);
@@ -89,6 +93,8 @@
                                else
                                        aggregation = 
(vArray[(vArray.length/2)-1] + vArray[(vArray.length/2)]) / 2;
 
+                       } else if (type == AttributeHandlingType.AVG) {
+                               aggregation = aggregation / (double)count;
                        }
 
                        Long v = new Long((long)aggregation);

Modified: 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/StringAggregator.java
===================================================================
--- 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/StringAggregator.java
  2012-04-11 19:22:42 UTC (rev 28796)
+++ 
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/StringAggregator.java
  2012-04-11 20:17:39 UTC (rev 28797)
@@ -48,6 +48,8 @@
                        // Loop processing
                        for (CyNode node: group.getNodeList()) {
                                String value = 
table.getRow(node.getSUID()).get(column.getName(), String.class);
+                               if (value == null) continue;
+
                                switch (type) {
                                case CSV:
                                        if (aggregation == null)

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to