Remove host location when port down or device down

Also refactor Host Location Provider

Change-Id: I57d682ee51e80ddd7e141883521a12da705a336d
diff --git a/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java b/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
index b1c661c..b642458 100644
--- a/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
+++ b/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
@@ -256,12 +256,12 @@
         Device device = new DefaultDevice(ProviderId.NONE, deviceId(DEV1), SWITCH,
                                           "m", "h", "s", "n", new ChassisId(0L));
         deviceService.listener.event(new DeviceEvent(DEVICE_REMOVED, device));
-        assertEquals("incorrect remove count", 2, providerService.removeCount);
+        assertEquals("incorrect remove count", 2, providerService.locationRemoveCount);
 
         device = new DefaultDevice(ProviderId.NONE, deviceId(DEV4), SWITCH,
                                           "m", "h", "s", "n", new ChassisId(0L));
         deviceService.listener.event(new DeviceEvent(DEVICE_REMOVED, device));
-        assertEquals("incorrect remove count", 3, providerService.removeCount);
+        assertEquals("incorrect remove count", 3, providerService.locationRemoveCount);
     }
 
     @Test
@@ -273,12 +273,12 @@
         Device device = new DefaultDevice(ProviderId.NONE, deviceId(DEV1), SWITCH,
                                           "m", "h", "s", "n", new ChassisId(0L));
         deviceService.listener.event(new DeviceEvent(DEVICE_AVAILABILITY_CHANGED, device));
-        assertEquals("incorrect remove count", 2, providerService.removeCount);
+        assertEquals("incorrect remove count", 2, providerService.locationRemoveCount);
 
         device = new DefaultDevice(ProviderId.NONE, deviceId(DEV4), SWITCH,
                                           "m", "h", "s", "n", new ChassisId(0L));
         deviceService.listener.event(new DeviceEvent(DEVICE_AVAILABILITY_CHANGED, device));
-        assertEquals("incorrect remove count", 3, providerService.removeCount);
+        assertEquals("incorrect remove count", 3, providerService.locationRemoveCount);
     }
 
     @Test
@@ -291,13 +291,13 @@
                                           "m", "h", "s", "n", new ChassisId(0L));
         deviceService.listener.event(new DeviceEvent(PORT_UPDATED, device,
                 new DefaultPort(device, portNumber(INPORT), false)));
-        assertEquals("incorrect remove count", 1, providerService.removeCount);
+        assertEquals("incorrect remove count", 1, providerService.locationRemoveCount);
 
         device = new DefaultDevice(ProviderId.NONE, deviceId(DEV4), SWITCH,
                                           "m", "h", "s", "n", new ChassisId(0L));
         deviceService.listener.event(new DeviceEvent(PORT_UPDATED, device,
                 new DefaultPort(device, portNumber(INPORT), false)));
-        assertEquals("incorrect remove count", 2, providerService.removeCount);
+        assertEquals("incorrect remove count", 2, providerService.locationRemoveCount);
     }
 
     /**
@@ -483,11 +483,15 @@
             implements HostProviderService {
 
         List<HostDescription> descriptions = Lists.newArrayList();
-        int removeCount;
+        int hostRemoveCount;
+        int ipRemoveCount;
+        int locationRemoveCount;
 
         public void clear() {
             descriptions.clear();
-            removeCount = 0;
+            hostRemoveCount = 0;
+            ipRemoveCount = 0;
+            locationRemoveCount = 0;
         }
 
         protected TestHostProviderService(HostProvider provider) {
@@ -501,11 +505,17 @@
 
         @Override
         public void hostVanished(HostId hostId) {
-            removeCount++;
+            hostRemoveCount++;
         }
 
         @Override
         public void removeIpFromHost(HostId hostId, IpAddress ipAddress) {
+            ipRemoveCount++;
+        }
+
+        @Override
+        public void removeLocationFromHost(HostId hostId, HostLocation location) {
+            locationRemoveCount++;
         }
 
     }