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.