Revert "VOL-1847-Add flow only if it does not exist in device,No delete here as delete flows/groups handled now in deleteFlowsAndGroups"

This reverts commit 33f779a44ddacea9ac3312a668ebb75c143f028a.

Change-Id: Id17a9a7d43fb1d894d9fb4aa43268febc9a232f8
diff --git a/rw_core/core/device_agent.go b/rw_core/core/device_agent.go
index d9e8364..bcce15b 100755
--- a/rw_core/core/device_agent.go
+++ b/rw_core/core/device_agent.go
@@ -257,42 +257,35 @@
 
 	var updatedFlows []*ofp.OfpFlowStats
 	var flowsToDelete []*ofp.OfpFlowStats
+	var groupsToDelete []*ofp.OfpGroupEntry
 	var updatedGroups []*ofp.OfpGroupEntry
-	var flowsToAdd []*ofp.OfpFlowStats
-	var groupsToAdd []*ofp.OfpGroupEntry
 
 	// Process flows
 	for _, flow := range newFlows {
 		updatedFlows = append(updatedFlows, flow)
-		if idx := fu.FindFlows(existingFlows.Items, flow); idx == -1 { // does not exist now , add new flow
-			flowsToAdd = append(flowsToAdd, flow)
-		}
 	}
 	for _, flow := range existingFlows.Items {
 		if idx := fu.FindFlows(newFlows, flow); idx == -1 {
-			updatedFlows = append(updatedFlows, flow) // append existing flows
+			updatedFlows = append(updatedFlows, flow)
 		} else {
-			// OF-1.3.1: If a flow entry with identical match fields and priority already resides , clear old flow and add new flow
 			flowsToDelete = append(flowsToDelete, flow)
-			flowsToAdd = append(flowsToAdd, newFlows[idx])
 		}
 	}
 
 	// Process groups
 	for _, g := range newGroups {
 		updatedGroups = append(updatedGroups, g)
-		if fu.FindGroup(existingGroups.Items, g.Desc.GroupId) == -1 { // does not exist now
-			groupsToAdd = append(groupsToAdd, g)
-		}
 	}
 	for _, group := range existingGroups.Items {
-		if fu.FindGroup(newGroups, group.Desc.GroupId) == -1 {
-			updatedGroups = append(updatedGroups, group) // Add existing groups
+		if fu.FindGroup(newGroups, group.Desc.GroupId) == -1 { // does not exist now
+			updatedGroups = append(updatedGroups, group)
+		} else {
+			groupsToDelete = append(groupsToDelete, group)
 		}
 	}
 
 	// Sanity check
-	if (len(updatedFlows) | len(flowsToDelete) | len(updatedGroups)) == 0 {
+	if (len(updatedFlows) | len(flowsToDelete) | len(updatedGroups) | len(groupsToDelete)) == 0 {
 		log.Debugw("nothing-to-update", log.Fields{"deviceId": agent.deviceId, "flows": newFlows, "groups": newGroups})
 		return nil
 	}
@@ -315,12 +308,12 @@
 
 	} else {
 		flowChanges := &ofp.FlowChanges{
-			ToAdd:    &voltha.Flows{Items: flowsToAdd},
+			ToAdd:    &voltha.Flows{Items: newFlows},
 			ToRemove: &voltha.Flows{Items: flowsToDelete},
 		}
 		groupChanges := &ofp.FlowGroupChanges{
-			ToAdd:    &voltha.FlowGroups{Items: groupsToAdd},
-			ToRemove: &voltha.FlowGroups{Items: nil},
+			ToAdd:    &voltha.FlowGroups{Items: newGroups},
+			ToRemove: &voltha.FlowGroups{Items: groupsToDelete},
 			ToUpdate: &voltha.FlowGroups{Items: []*ofp.OfpGroupEntry{}},
 		}
 		go agent.sendIncrementalFlowsToAdapters(device, flowChanges, groupChanges, flowMetadata, chAdapters)