Author: scooter
Date: 2012-03-16 11:25:36 -0700 (Fri, 16 Mar 2012)
New Revision: 28562
Added:
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/
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/ListAggregator.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:
Sheesh -- that's what I get for working so late at night. Added the
aggregators package.
Added:
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
(rev 0)
+++
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/BooleanAggregator.java
2012-03-16 18:25:36 UTC (rev 28562)
@@ -0,0 +1,57 @@
+package org.cytoscape.group.data.internal.aggregators;
+
+import org.cytoscape.group.CyGroup;
+import org.cytoscape.group.data.Aggregator;
+import org.cytoscape.group.data.AttributeHandlingType;
+import org.cytoscape.model.CyColumn;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyTable;
+
+public class BooleanAggregator implements Aggregator {
+ static AttributeHandlingType[] supportedTypes = {
+ AttributeHandlingType.NONE,
+ AttributeHandlingType.AND,
+ AttributeHandlingType.OR
+ };
+
+ static public AttributeHandlingType[] getSupportedTypes() {
return supportedTypes; }
+
+ AttributeHandlingType type;
+
+ public BooleanAggregator(AttributeHandlingType type) {
+ this.type = type;
+ }
+
+ public Boolean aggregate(CyTable table, CyGroup group, CyColumn
column) {
+ if (type == AttributeHandlingType.NONE) return null;
+
+ // Initialization
+ boolean aggregation = false;
+ boolean first = true;
+
+ // Loop processing
+ for (CyNode node: group.getNodeList()) {
+ boolean value =
table.getRow(node.getSUID()).get(column.getName(),
Boolean.class).booleanValue();
+ if (first) {
+ aggregation = value;
+ first = false;
+ continue;
+ }
+
+ switch (type) {
+ case AND:
+ aggregation = aggregation & value;
+ break;
+ case OR:
+ aggregation = aggregation | value;
+ break;
+ }
+ }
+
+ // Post processing
+
+ Boolean v = new Boolean(aggregation);
+
table.getRow(group.getGroupNode().getSUID()).set(column.getName(), v);
+ return v;
+ }
+}
Added:
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
(rev 0)
+++
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/DoubleAggregator.java
2012-03-16 18:25:36 UTC (rev 28562)
@@ -0,0 +1,89 @@
+package org.cytoscape.group.data.internal.aggregators;
+
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cytoscape.group.CyGroup;
+import org.cytoscape.group.data.Aggregator;
+import org.cytoscape.group.data.AttributeHandlingType;
+import org.cytoscape.model.CyColumn;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyTable;
+
+public class DoubleAggregator implements Aggregator {
+ static AttributeHandlingType[] supportedTypes = {
+ AttributeHandlingType.NONE,
+ AttributeHandlingType.AVG,
+ AttributeHandlingType.MIN,
+ AttributeHandlingType.MAX,
+ AttributeHandlingType.MEDIAN,
+ AttributeHandlingType.SUM
+ };
+
+ static public AttributeHandlingType[] getSupportedTypes() {
return supportedTypes; }
+
+ AttributeHandlingType type;
+
+ public DoubleAggregator(AttributeHandlingType type) {
+ this.type = type;
+ }
+
+ public Double aggregate(CyTable table, CyGroup group, CyColumn
column) {
+ double aggregation = 0.0;
+ List<Double> valueList = null;
+
+ if (type == AttributeHandlingType.NONE) return null;
+
+ // Initialization
+ switch(type) {
+ case MAX:
+ aggregation = Double.MIN_VALUE;
+ break;
+ case MIN:
+ aggregation = Double.MAX_VALUE;
+ break;
+ case MEDIAN:
+ valueList = new ArrayList<Double>();
+ break;
+ }
+
+ // Loop processing
+ for (CyNode node: group.getNodeList()) {
+ double value =
table.getRow(node.getSUID()).get(column.getName(), Double.class).doubleValue();
+ switch (type) {
+ case MAX:
+ if (aggregation < value) aggregation =
value;
+ break;
+ case MIN:
+ if (aggregation > value) aggregation =
value;
+ break;
+ case SUM:
+ aggregation += value;
+ break;
+ case AVG:
+ aggregation +=
value/(double)group.getNodeList().size();
+ break;
+ case MEDIAN:
+ valueList.add(value);
+ break;
+ }
+ }
+
+ // Post processing
+ if (type == AttributeHandlingType.MEDIAN) {
+ Double[] vArray = new Double[valueList.size()];
+ vArray = valueList.toArray(vArray);
+ Arrays.sort(vArray);
+ if (vArray.length % 2 == 1)
+ aggregation =
vArray[(vArray.length-1)/2];
+ else
+ aggregation =
(vArray[(vArray.length/2)-1] + vArray[(vArray.length/2)]) / 2;
+
+ }
+
+ Double v = new Double(aggregation);
+
table.getRow(group.getGroupNode().getSUID()).set(column.getName(), v);
+ return v;
+ }
+}
Added:
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
(rev 0)
+++
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/FloatAggregator.java
2012-03-16 18:25:36 UTC (rev 28562)
@@ -0,0 +1,89 @@
+package org.cytoscape.group.data.internal.aggregators;
+
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cytoscape.group.CyGroup;
+import org.cytoscape.group.data.Aggregator;
+import org.cytoscape.group.data.AttributeHandlingType;
+import org.cytoscape.model.CyColumn;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyTable;
+
+public class FloatAggregator implements Aggregator {
+ static AttributeHandlingType[] supportedTypes = {
+ AttributeHandlingType.NONE,
+ AttributeHandlingType.AVG,
+ AttributeHandlingType.MIN,
+ AttributeHandlingType.MAX,
+ AttributeHandlingType.MEDIAN,
+ AttributeHandlingType.SUM
+ };
+
+ static public AttributeHandlingType[] getSupportedTypes() {
return supportedTypes; }
+
+ AttributeHandlingType type;
+
+ public FloatAggregator(AttributeHandlingType type) {
+ this.type = type;
+ }
+
+ public Float aggregate(CyTable table, CyGroup group, CyColumn
column) {
+ float aggregation = 0.0f;
+ List<Float> valueList = null;
+
+ if (type == AttributeHandlingType.NONE) return null;
+
+ // Initialization
+ switch(type) {
+ case MAX:
+ aggregation = Float.MIN_VALUE;
+ break;
+ case MIN:
+ aggregation = Float.MAX_VALUE;
+ break;
+ case MEDIAN:
+ valueList = new ArrayList<Float>();
+ break;
+ }
+
+ // Loop processing
+ for (CyNode node: group.getNodeList()) {
+ float value =
table.getRow(node.getSUID()).get(column.getName(), Float.class).floatValue();
+ switch (type) {
+ case MAX:
+ if (aggregation < value) aggregation =
value;
+ break;
+ case MIN:
+ if (aggregation > value) aggregation =
value;
+ break;
+ case SUM:
+ aggregation += value;
+ break;
+ case AVG:
+ aggregation +=
value/(float)group.getNodeList().size();
+ break;
+ case MEDIAN:
+ valueList.add(value);
+ break;
+ }
+ }
+
+ // Post processing
+ if (type == AttributeHandlingType.MEDIAN) {
+ Float[] vArray = new Float[valueList.size()];
+ vArray = valueList.toArray(vArray);
+ Arrays.sort(vArray);
+ if (vArray.length % 2 == 1)
+ aggregation =
vArray[(vArray.length-1)/2];
+ else
+ aggregation =
(vArray[(vArray.length/2)-1] + vArray[(vArray.length/2)]) / 2;
+
+ }
+
+ Float v = new Float(aggregation);
+
table.getRow(group.getGroupNode().getSUID()).set(column.getName(), v);
+ return v;
+ }
+}
Added:
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
(rev 0)
+++
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/IntegerAggregator.java
2012-03-16 18:25:36 UTC (rev 28562)
@@ -0,0 +1,88 @@
+package org.cytoscape.group.data.internal.aggregators;
+
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cytoscape.group.CyGroup;
+import org.cytoscape.group.data.Aggregator;
+import org.cytoscape.group.data.AttributeHandlingType;
+import org.cytoscape.model.CyColumn;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyTable;
+
+public class IntegerAggregator implements Aggregator {
+ static AttributeHandlingType[] supportedTypes = {
+ AttributeHandlingType.NONE,
+ AttributeHandlingType.AVG,
+ AttributeHandlingType.MIN,
+ AttributeHandlingType.MAX,
+ AttributeHandlingType.MEDIAN,
+ AttributeHandlingType.SUM
+ };
+
+ static public AttributeHandlingType[] getSupportedTypes() {
return supportedTypes; }
+
+ AttributeHandlingType type;
+
+ public IntegerAggregator(AttributeHandlingType type) {
+ this.type = type;
+ }
+
+ public Integer aggregate(CyTable table, CyGroup group, CyColumn
column) {
+ double aggregation = 0.0;
+ List<Integer> valueList = null;
+
+ if (type == AttributeHandlingType.NONE) return null;
+
+ // Initialization
+ switch(type) {
+ case MAX:
+ aggregation = Integer.MIN_VALUE;
+ break;
+ case MIN:
+ aggregation = Integer.MAX_VALUE;
+ break;
+ case MEDIAN:
+ valueList = new ArrayList<Integer>();
+ break;
+ }
+
+ // Loop processing
+ for (CyNode node: group.getNodeList()) {
+ double value =
table.getRow(node.getSUID()).get(column.getName(), Integer.class).doubleValue();
+ switch (type) {
+ case MAX:
+ if (aggregation < value) aggregation =
value;
+ break;
+ case MIN:
+ if (aggregation > value) aggregation =
value;
+ break;
+ case SUM:
+ aggregation += value;
+ break;
+ case AVG:
+ aggregation +=
value/(double)group.getNodeList().size();
+ break;
+ case MEDIAN:
+ valueList.add((int)value);
+ break;
+ }
+ }
+
+ // Post processing
+ if (type == AttributeHandlingType.MEDIAN) {
+ Integer[] vArray = new
Integer[valueList.size()];
+ vArray = valueList.toArray(vArray);
+ Arrays.sort(vArray);
+ if (vArray.length % 2 == 1)
+ aggregation =
vArray[(vArray.length-1)/2];
+ else
+ aggregation =
(vArray[(vArray.length/2)-1] + vArray[(vArray.length/2)]) / 2;
+ }
+
+ Integer v = new Integer((int)aggregation);
+
table.getRow(group.getGroupNode().getSUID()).set(column.getName(), v);
+ return v;
+ }
+}
Added:
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/ListAggregator.java
===================================================================
---
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/ListAggregator.java
(rev 0)
+++
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/ListAggregator.java
2012-03-16 18:25:36 UTC (rev 28562)
@@ -0,0 +1,66 @@
+package org.cytoscape.group.data.internal.aggregators;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.cytoscape.group.CyGroup;
+import org.cytoscape.group.data.Aggregator;
+import org.cytoscape.group.data.AttributeHandlingType;
+import org.cytoscape.model.CyColumn;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyTable;
+
+public class ListAggregator implements Aggregator {
+ static AttributeHandlingType[] supportedTypes = {
+ AttributeHandlingType.NONE,
+ AttributeHandlingType.CONCAT,
+ AttributeHandlingType.UNIQUE
+ };
+
+ static public AttributeHandlingType[] getSupportedTypes() {
return supportedTypes; }
+
+ AttributeHandlingType type;
+
+ public ListAggregator(AttributeHandlingType type) {
+ this.type = type;
+ }
+
+ public List aggregate(CyTable table, CyGroup group, CyColumn
column) {
+ Class listType = column.getListElementType();
+ List <Object> agg = new ArrayList<Object>();
+ Set <Object> aggset = new HashSet<Object>();
+ List <?> aggregation = null;
+
+ if (type == AttributeHandlingType.NONE) return null;
+
+ // Initialization
+
+ // Loop processing
+ for (CyNode node: group.getNodeList()) {
+ List<Object> list =
table.getRow(node.getSUID()).getList(column.getName(), listType);
+ if (list == null) continue;
+ for (Object value: list) {
+ switch (type) {
+ case CONCAT:
+ agg.add(value);
+ break;
+ case UNIQUE:
+ aggset.add(value);
+ break;
+ }
+ }
+ }
+
+ if (type == AttributeHandlingType.CONCAT)
+ aggregation = agg;
+ else if (type == AttributeHandlingType.UNIQUE)
+ aggregation = new ArrayList<Object>(aggset);
+
+ if (aggregation != null)
+
table.getRow(group.getGroupNode().getSUID()).set(column.getName(), aggregation);
+
+ return aggregation;
+ }
+}
Added:
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
(rev 0)
+++
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/LongAggregator.java
2012-03-16 18:25:36 UTC (rev 28562)
@@ -0,0 +1,89 @@
+package org.cytoscape.group.data.internal.aggregators;
+
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cytoscape.group.CyGroup;
+import org.cytoscape.group.data.Aggregator;
+import org.cytoscape.group.data.AttributeHandlingType;
+import org.cytoscape.model.CyColumn;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyTable;
+
+public class LongAggregator implements Aggregator {
+ static AttributeHandlingType[] supportedTypes = {
+ AttributeHandlingType.NONE,
+ AttributeHandlingType.AVG,
+ AttributeHandlingType.MIN,
+ AttributeHandlingType.MAX,
+ AttributeHandlingType.MEDIAN,
+ AttributeHandlingType.SUM
+ };
+
+ static public AttributeHandlingType[] getSupportedTypes() {
return supportedTypes; }
+
+ AttributeHandlingType type;
+
+ public LongAggregator(AttributeHandlingType type) {
+ this.type = type;
+ }
+
+ public Long aggregate(CyTable table, CyGroup group, CyColumn
column) {
+ double aggregation = 0.0;
+ List<Long> valueList = null;
+
+ if (type == AttributeHandlingType.NONE) return null;
+
+ // Initialization
+ switch(type) {
+ case MAX:
+ aggregation = Long.MIN_VALUE;
+ break;
+ case MIN:
+ aggregation = Long.MAX_VALUE;
+ break;
+ case MEDIAN:
+ valueList = new ArrayList<Long>();
+ break;
+ }
+
+ // Loop processing
+ for (CyNode node: group.getNodeList()) {
+ double value =
table.getRow(node.getSUID()).get(column.getName(), Long.class).doubleValue();
+ switch (type) {
+ case MAX:
+ if (aggregation < value) aggregation =
value;
+ break;
+ case MIN:
+ if (aggregation > value) aggregation =
value;
+ break;
+ case SUM:
+ aggregation += value;
+ break;
+ case AVG:
+ aggregation +=
value/(double)group.getNodeList().size();
+ break;
+ case MEDIAN:
+ valueList.add((long)value);
+ break;
+ }
+ }
+
+ // Post processing
+ if (type == AttributeHandlingType.MEDIAN) {
+ Long[] vArray = new Long[valueList.size()];
+ vArray = valueList.toArray(vArray);
+ Arrays.sort(vArray);
+ if (vArray.length % 2 == 1)
+ aggregation =
vArray[(vArray.length-1)/2];
+ else
+ aggregation =
(vArray[(vArray.length/2)-1] + vArray[(vArray.length/2)]) / 2;
+
+ }
+
+ Long v = new Long((long)aggregation);
+
table.getRow(group.getGroupNode().getSUID()).set(column.getName(), v);
+ return v;
+ }
+}
Added:
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
(rev 0)
+++
core3/impl/trunk/group-data-impl/src/main/java/org/cytoscape/group/data/internal/aggregators/StringAggregator.java
2012-03-16 18:25:36 UTC (rev 28562)
@@ -0,0 +1,80 @@
+package org.cytoscape.group.data.internal.aggregators;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.cytoscape.group.CyGroup;
+import org.cytoscape.group.data.Aggregator;
+import org.cytoscape.group.data.AttributeHandlingType;
+import org.cytoscape.model.CyColumn;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyTable;
+
+public class StringAggregator implements Aggregator {
+ static AttributeHandlingType[] supportedTypes = {
+ AttributeHandlingType.NONE,
+ AttributeHandlingType.CSV,
+ AttributeHandlingType.TSV,
+ AttributeHandlingType.MCV
+ };
+
+ static public AttributeHandlingType[] getSupportedTypes() {
return supportedTypes; }
+
+ AttributeHandlingType type;
+
+ public StringAggregator(AttributeHandlingType type) {
+ this.type = type;
+ }
+
+ public String aggregate(CyTable table, CyGroup group, CyColumn
column) {
+ String aggregation = null;
+ Map<String, Integer> histo = null;
+
+ if (type == AttributeHandlingType.NONE) return null;
+
+ // Initialization
+
+ // Loop processing
+ for (CyNode node: group.getNodeList()) {
+ String value =
table.getRow(node.getSUID()).get(column.getName(), String.class);
+ switch (type) {
+ case CSV:
+ if (aggregation == null)
+ aggregation = value;
+ else
+ aggregation = aggregation + ","
+ value;
+ break;
+ case TSV:
+ if (aggregation == null)
+ aggregation = value;
+ else
+ aggregation = aggregation +
"\t" + value;
+ break;
+ case MCV:
+ if (histo == null)
+ histo = new HashMap<String,
Integer>();
+ if (histo.containsKey(value))
+ histo.put(value,
histo.get(value).intValue()+1);
+ else
+ histo.put(value, 1);
+ break;
+ }
+ }
+
+ // Post processing
+ if (type == AttributeHandlingType.MCV) {
+ int maxValue = -1;
+ for (String key: histo.keySet()) {
+ int count = histo.get(key);
+ if (count > maxValue) {
+ aggregation = key;
+ maxValue = count;
+ }
+ }
+ if (aggregation == null) aggregation = "";
+ }
+
+
table.getRow(group.getGroupNode().getSUID()).set(column.getName(), aggregation);
+ return aggregation;
+ }
+}
--
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.