group stats improvement
diff --git a/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java b/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
new file mode 100644
index 0000000..ead1aff
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
@@ -0,0 +1,22 @@
+package net.floodlightcontroller.core.web;
+
+import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+
+//@JsonSerialize(using = OFFlowStatsEntryModSerializer.class)
+public class OFFlowStatsEntryMod {
+    private OFFlowStatsEntry FlowStatsEntry = null;
+
+    public  OFFlowStatsEntryMod() {
+    }
+
+    public  OFFlowStatsEntryMod(OFFlowStatsEntry FlowStatsEntry) {
+        this.FlowStatsEntry = FlowStatsEntry;
+    }
+
+    public OFFlowStatsEntry getFlowStatsEntr() {
+        return this.FlowStatsEntry;
+    }
+
+}
diff --git a/src/main/java/net/floodlightcontroller/core/web/OFGroupStatsEntryMod.java b/src/main/java/net/floodlightcontroller/core/web/OFGroupStatsEntryMod.java
new file mode 100644
index 0000000..6ddb430
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/core/web/OFGroupStatsEntryMod.java
@@ -0,0 +1,21 @@
+package net.floodlightcontroller.core.web;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+import org.projectfloodlight.openflow.protocol.OFGroupStatsEntry;
+import net.floodlightcontroller.core.web.serializers.OFGroupStatsEntryModSerializer;
+
+@JsonSerialize(using = OFGroupStatsEntryModSerializer.class)
+public class OFGroupStatsEntryMod {
+    private OFGroupStatsEntry GroupStatsEntry = null;
+
+    public  OFGroupStatsEntryMod() {
+    }
+
+    public  OFGroupStatsEntryMod(OFGroupStatsEntry GroupStatsEntry) {
+        this.GroupStatsEntry = GroupStatsEntry;
+    }
+
+    public OFGroupStatsEntry getGroupStatsEntry() {
+        return this.GroupStatsEntry;
+    }
+}
diff --git a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
index c7dd69a..def6a7d 100644
--- a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
+++ b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
@@ -29,6 +29,8 @@
 import org.projectfloodlight.openflow.protocol.OFFeaturesReply;
 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsEntry;
 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsReply;
+import org.projectfloodlight.openflow.protocol.OFGroupStatsEntry;
+import org.projectfloodlight.openflow.protocol.OFGroupStatsReply;
 import org.projectfloodlight.openflow.protocol.OFMatchV3;
 import org.projectfloodlight.openflow.protocol.OFOxmList;
 import org.projectfloodlight.openflow.protocol.OFPortStatsEntry;
@@ -123,6 +125,20 @@
                         + "ports in switch {}", sw.getStringId());
                 req = sw.getFactory().buildGroupStatsRequest().setXid
                         (sw.getNextTransactionId()).build();
+                List<OFGroupStatsEntryMod> groupStats = new ArrayList<OFGroupStatsEntryMod>();
+                try {
+                    future = sw.getStatistics(req);
+                    values = future.get(10, TimeUnit.SECONDS);
+                    for (OFGroupStatsEntry entry : ((OFGroupStatsReply)values.get(0)).getEntries()) {
+                        OFGroupStatsEntryMod entryMod = new OFGroupStatsEntryMod(entry);
+                        groupStats.add(entryMod);
+                    }
+                    log.debug("Switch Group Stats Entries from switch {} are {}",
+                            sw.getStringId(), groupStats);
+                } catch (Exception e) {
+                    log.error("Failure retrieving statistics from switch " + sw, e);
+                }
+                return groupStats;
             }
             else if (statType == OFStatsType.GROUP_DESC){
                 log.debug("Switch Group Desc Stats: req sent for all "
diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
new file mode 100644
index 0000000..2cce2d8
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
@@ -0,0 +1,25 @@
+package net.floodlightcontroller.core.web.serializers;
+
+import java.io.IOException;
+
+import net.floodlightcontroller.core.web.OFFlowStatsEntryMod;
+
+import org.codehaus.jackson.JsonGenerationException;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.SerializerProvider;
+import org.codehaus.jackson.map.ser.std.SerializerBase;
+
+public class OFFlowStatsEntryModSerializer extends SerializerBase<OFFlowStatsEntryMod> {
+    
+    protected OFFlowStatsEntryModSerializer(){
+        super(OFFlowStatsEntryMod.class);
+    }
+
+    @Override
+    public void serialize(OFFlowStatsEntryMod FlowStatsEntryMod, JsonGenerator jGen,
+            SerializerProvider sp) throws IOException,
+            JsonGenerationException {
+        
+    }
+
+}
diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
index 097290b..b4bddc7 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
@@ -22,15 +22,17 @@
     }
 
     @Override
-    public void serialize(OFGroupDescStatsEntryMod GroupDescStatsModEntry, JsonGenerator jGen,
+    public void serialize(OFGroupDescStatsEntryMod groupDescStatsModEntry, JsonGenerator jGen,
             SerializerProvider sp) throws IOException,
             JsonGenerationException {
-        OFGroupDescStatsEntry GroupStatsEntryMod = GroupDescStatsModEntry.getGroupDescStatsEntry();
-        List<OFBucket> Buckets = GroupStatsEntryMod.getBuckets();
+        OFGroupDescStatsEntry groupDescStatsEntryMod = groupDescStatsModEntry.getGroupDescStatsEntry();
+        List<OFBucket> Buckets = groupDescStatsEntryMod.getBuckets();
         jGen.writeStartObject();
-        jGen.writeNumberField("groupId", GroupStatsEntryMod.getGroup().getGroupNumber());
-        jGen.writeStringField("groupType", GroupStatsEntryMod.getGroupType().name());
+        jGen.writeNumberField("groupId", groupDescStatsEntryMod.getGroup().getGroupNumber());
+        jGen.writeStringField("groupType", groupDescStatsEntryMod.getGroupType().name());
+        jGen.writeArrayFieldStart("bucketsActions");
         for (OFBucket bucket : Buckets){
+            jGen.writeStartObject();
             List<OFAction> actions = bucket.getActions();
             for (OFAction action : actions ){
                 if(action.getType().compareTo(OFActionType.SET_FIELD) == 0){
@@ -46,7 +48,9 @@
                     jGen.writeNumberField("OUTPPUT", ((OFActionOutput)action).getPort().getPortNumber());
                 }
             }
+            jGen.writeEndObject();
         }
+        jGen.writeEndArray();
         jGen.writeEndObject();
         
     }
diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupStatsEntryModSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupStatsEntryModSerializer.java
new file mode 100644
index 0000000..8b2bb72
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupStatsEntryModSerializer.java
@@ -0,0 +1,43 @@
+package net.floodlightcontroller.core.web.serializers;
+import java.io.IOException;
+import java.util.List;
+
+import net.floodlightcontroller.core.web.OFGroupStatsEntryMod;
+
+import org.codehaus.jackson.JsonGenerationException;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.SerializerProvider;
+import org.codehaus.jackson.map.ser.std.SerializerBase;
+import org.projectfloodlight.openflow.protocol.OFBucketCounter;
+import org.projectfloodlight.openflow.protocol.OFGroupStatsEntry;
+
+public class OFGroupStatsEntryModSerializer extends SerializerBase<OFGroupStatsEntryMod>{
+    
+    protected OFGroupStatsEntryModSerializer(){
+        super(OFGroupStatsEntryMod.class);
+    }
+
+    @Override
+    public void serialize(OFGroupStatsEntryMod groupStatsEntryMod, JsonGenerator jGen,
+            SerializerProvider sp) throws IOException,
+            JsonGenerationException {
+        OFGroupStatsEntry groupStatsModEntry = groupStatsEntryMod.getGroupStatsEntry();
+        List<OFBucketCounter> bucketCounters = groupStatsModEntry.getBucketStats();
+        jGen.writeStartObject();
+        jGen.writeNumberField("groupId", groupStatsModEntry.getGroup().getGroupNumber());
+        jGen.writeNumberField("packetCount", groupStatsModEntry.getPacketCount().getValue());
+        jGen.writeNumberField("byteCount", groupStatsModEntry.getByteCount().getValue());
+        jGen.writeNumberField("durationNsec", groupStatsModEntry.getDurationNsec());
+        jGen.writeNumberField("durationSec", groupStatsModEntry.getDurationSec());
+        jGen.writeArrayFieldStart("bucketStats");
+        for (OFBucketCounter bucketCouter : bucketCounters){
+            jGen.writeStartObject();
+            jGen.writeNumberField("pktCount", bucketCouter.getPacketCount().getValue());
+            jGen.writeNumberField("byteCount", bucketCouter.getByteCount().getValue());
+            jGen.writeEndObject();
+        }
+        jGen.writeEndArray();
+        jGen.writeEndObject();
+    }
+
+}