Imporvement in Group/flow Stats (notComplete)
diff --git a/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java b/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
index ead1aff..d9095d6 100644
--- a/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
+++ b/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
@@ -1,10 +1,11 @@
 package net.floodlightcontroller.core.web;
 
+import net.floodlightcontroller.core.web.serializers.OFFlowStatsEntryModSerializer;
+
 import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
 
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
-//@JsonSerialize(using = OFFlowStatsEntryModSerializer.class)
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+@JsonSerialize(using = OFFlowStatsEntryModSerializer.class)
 public class OFFlowStatsEntryMod {
     private OFFlowStatsEntry FlowStatsEntry = null;
 
@@ -15,7 +16,7 @@
         this.FlowStatsEntry = FlowStatsEntry;
     }
 
-    public OFFlowStatsEntry getFlowStatsEntr() {
+    public OFFlowStatsEntry getFlowStatsEntry() {
         return this.FlowStatsEntry;
     }
 
diff --git a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
index def6a7d..8e4208c 100644
--- a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
+++ b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
@@ -27,6 +27,7 @@
 import net.floodlightcontroller.core.annotations.LogMessageDoc;
 
 import org.projectfloodlight.openflow.protocol.OFFeaturesReply;
+import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsEntry;
 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsReply;
 import org.projectfloodlight.openflow.protocol.OFGroupStatsEntry;
@@ -34,6 +35,7 @@
 import org.projectfloodlight.openflow.protocol.OFMatchV3;
 import org.projectfloodlight.openflow.protocol.OFOxmList;
 import org.projectfloodlight.openflow.protocol.OFPortStatsEntry;
+import org.projectfloodlight.openflow.protocol.OFFlowStatsReply;
 import org.projectfloodlight.openflow.protocol.OFPortStatsReply;
 import org.projectfloodlight.openflow.protocol.OFPortStatsRequest;
 import org.projectfloodlight.openflow.protocol.OFStatsReply;
@@ -96,6 +98,21 @@
                         .setOutPort(OFPort.ANY)
                         .setTableId(TableId.ALL)
                         .setXid(sw.getNextTransactionId()).build();
+                List<OFFlowStatsEntryMod> flowStats = new ArrayList<OFFlowStatsEntryMod>();
+                try {
+                    future = sw.getStatistics(req);
+                    values = future.get(10, TimeUnit.SECONDS);
+                    System.out.println("value\n\n\n"+ values);
+                    for (OFFlowStatsEntry entry : ((OFFlowStatsReply)values.get(0)).getEntries()) {
+                        OFFlowStatsEntryMod entryMod = new OFFlowStatsEntryMod(entry);
+                        flowStats.add(entryMod);
+                    }
+                    log.debug("Switch flow Stats Entries from switch {} are {}",
+                            sw.getStringId(), flowStats);
+                } catch (Exception e) {
+                    log.error("Failure retrieving statistics from switch " + sw, e);
+                }
+                return flowStats;
             } 
             else if (statType == OFStatsType.PORT){
                 log.debug("Switch Port 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
index 2cce2d8..f1936c2 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
@@ -1,6 +1,8 @@
 package net.floodlightcontroller.core.web.serializers;
 
 import java.io.IOException;
+import java.util.Iterator;
+import java.util.Set;
 
 import net.floodlightcontroller.core.web.OFFlowStatsEntryMod;
 
@@ -8,6 +10,13 @@
 import org.codehaus.jackson.JsonGenerator;
 import org.codehaus.jackson.map.SerializerProvider;
 import org.codehaus.jackson.map.ser.std.SerializerBase;
+import org.projectfloodlight.openflow.protocol.OFFlowModFlags;
+import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
+import org.projectfloodlight.openflow.protocol.OFMatchV3;
+import org.projectfloodlight.openflow.protocol.OFOxmList;
+import org.projectfloodlight.openflow.protocol.match.MatchFields;
+import org.projectfloodlight.openflow.protocol.oxm.OFOxm;
+import org.projectfloodlight.openflow.protocol.oxm.OFOxmIpv4DstMasked;
 
 public class OFFlowStatsEntryModSerializer extends SerializerBase<OFFlowStatsEntryMod> {
     
@@ -19,7 +28,38 @@
     public void serialize(OFFlowStatsEntryMod FlowStatsEntryMod, JsonGenerator jGen,
             SerializerProvider sp) throws IOException,
             JsonGenerationException {
+        OFFlowStatsEntry flowStatsEntry = FlowStatsEntryMod.getFlowStatsEntry();
+        OFOxmList matches = ((OFMatchV3)flowStatsEntry.getMatch()).getOxmList();
+        Set<OFFlowModFlags> flags = flowStatsEntry.getFlags();
+        jGen.writeStartObject();
         
+        jGen.writeNumberField("byteCount", flowStatsEntry.getByteCount().getValue());
+        jGen.writeNumberField("cookie", flowStatsEntry.getCookie().getValue());
+        jGen.writeNumberField("durationNsec", flowStatsEntry.getDurationNsec());
+        jGen.writeNumberField("durationSec", flowStatsEntry.getDurationSec());
+        jGen.writeArrayFieldStart("flags");
+        for (OFFlowModFlags flag: flags){
+            jGen.writeNullField(flag.name());;
+        }
+        jGen.writeEndArray();
+        jGen.writeNumberField("hardTimeout", flowStatsEntry.getHardTimeout());
+        jGen.writeNumberField("idleTimeout", flowStatsEntry.getIdleTimeout());
+        jGen.writeArrayFieldStart("match");
+        //jGen.writeStartObject();
+        Iterator<OFOxm<?>> match= matches.iterator();
+        while(match.hasNext()){
+            OFOxm<?> matchGeneric = match.next();
+            if (matchGeneric.getMatchField().id == MatchFields.IPV4_DST){
+                
+                //jGen.writeObjectField("networkDestination", ((OFOxmIpv4DstVer13) matchGeneric).getValue());
+            }
+            
+            
+        }
+        jGen.writeEndArray();
+
+        jGen.writeEndObject();
     }
+    
 
 }
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
index 918a12f..91f1262 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -312,6 +312,9 @@
 
             IOF13Switch sw = (IOF13Switch) floodlightProvider.getMasterSwitch(
                     getSwId(port.getDpid().toString()));
+            if (sw == null){
+                return;
+            }
             sw.addPortToGroups(port.getPortNumber());
 
             log.debug("Add port {} to switch {}", port, dpid);