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.

Reply via email to