Refactored code in an attempt to break dependency cycles
diff --git a/core/net/src/main/java/org/onlab/onos/cluster/impl/MastershipManager.java b/core/net/src/main/java/org/onlab/onos/cluster/impl/MastershipManager.java
index b9c6ae8..7637478 100644
--- a/core/net/src/main/java/org/onlab/onos/cluster/impl/MastershipManager.java
+++ b/core/net/src/main/java/org/onlab/onos/cluster/impl/MastershipManager.java
@@ -18,10 +18,10 @@
 import org.onlab.onos.event.AbstractListenerRegistry;
 import org.onlab.onos.event.EventDeliveryService;
 import org.onlab.onos.net.DeviceId;
-import org.onlab.onos.net.MastershipRole;
 import org.onlab.onos.net.device.DeviceMastershipAdminService;
 import org.onlab.onos.net.device.DeviceMastershipEvent;
 import org.onlab.onos.net.device.DeviceMastershipListener;
+import org.onlab.onos.net.device.DeviceMastershipRole;
 import org.onlab.onos.net.device.DeviceMastershipService;
 import org.onlab.onos.net.device.DeviceMastershipStore;
 import org.onlab.onos.net.device.DeviceMastershipStoreDelegate;
@@ -73,13 +73,13 @@
     }
 
     @Override
-    public void setRole(NodeId nodeId, DeviceId deviceId, MastershipRole role) {
+    public void setRole(NodeId nodeId, DeviceId deviceId, DeviceMastershipRole role) {
         checkNotNull(nodeId, NODE_ID_NULL);
         checkNotNull(deviceId, DEVICE_ID_NULL);
         checkNotNull(role, ROLE_NULL);
 
         DeviceMastershipEvent event = null;
-        if (role.equals(MastershipRole.MASTER)) {
+        if (role.equals(DeviceMastershipRole.MASTER)) {
             event = store.setMaster(nodeId, deviceId);
         } else {
             event = store.setStandby(nodeId, deviceId);
@@ -91,7 +91,7 @@
     }
 
     @Override
-    public MastershipRole getLocalRole(DeviceId deviceId) {
+    public DeviceMastershipRole getLocalRole(DeviceId deviceId) {
         checkNotNull(deviceId, DEVICE_ID_NULL);
         return store.getRole(clusterService.getLocalNode().id(), deviceId);
     }
@@ -108,7 +108,7 @@
     }
 
     @Override
-    public MastershipRole requestRoleFor(DeviceId deviceId) {
+    public DeviceMastershipRole requestRoleFor(DeviceId deviceId) {
         checkNotNull(deviceId, DEVICE_ID_NULL);
         return store.requestRole(deviceId);
     }
diff --git a/core/net/src/main/java/org/onlab/onos/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onlab/onos/net/device/impl/DeviceManager.java
index d4b8889..741ebf3 100644
--- a/core/net/src/main/java/org/onlab/onos/net/device/impl/DeviceManager.java
+++ b/core/net/src/main/java/org/onlab/onos/net/device/impl/DeviceManager.java
@@ -18,13 +18,14 @@
 import org.onlab.onos.event.EventDeliveryService;
 import org.onlab.onos.net.Device;
 import org.onlab.onos.net.DeviceId;
-import org.onlab.onos.net.MastershipRole;
 import org.onlab.onos.net.Port;
 import org.onlab.onos.net.PortNumber;
 import org.onlab.onos.net.device.DeviceAdminService;
+import org.onlab.onos.net.device.DeviceClockProviderService;
 import org.onlab.onos.net.device.DeviceDescription;
 import org.onlab.onos.net.device.DeviceEvent;
 import org.onlab.onos.net.device.DeviceListener;
+import org.onlab.onos.net.device.DeviceMastershipRole;
 import org.onlab.onos.net.device.DeviceProvider;
 import org.onlab.onos.net.device.DeviceProviderRegistry;
 import org.onlab.onos.net.device.DeviceProviderService;
@@ -39,7 +40,6 @@
 import org.onlab.onos.net.device.PortDescription;
 import org.onlab.onos.net.provider.AbstractProviderRegistry;
 import org.onlab.onos.net.provider.AbstractProviderService;
-import org.onlab.onos.store.ClockProviderService;
 import org.slf4j.Logger;
 
 /**
@@ -81,7 +81,7 @@
     protected DeviceMastershipTermService termService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected ClockProviderService clockProviderService;
+    protected DeviceClockProviderService clockProviderService;
 
     @Activate
     public void activate() {
@@ -117,7 +117,7 @@
     }
 
     @Override
-    public MastershipRole getRole(DeviceId deviceId) {
+    public DeviceMastershipRole getRole(DeviceId deviceId) {
         checkNotNull(deviceId, DEVICE_ID_NULL);
         return mastershipService.getLocalRole(deviceId);
     }
@@ -142,8 +142,8 @@
     }
 
     // Applies the specified role to the device; ignores NONE
-    private void applyRole(DeviceId deviceId, MastershipRole newRole) {
-        if (newRole.equals(MastershipRole.NONE)) {
+    private void applyRole(DeviceId deviceId, DeviceMastershipRole newRole) {
+        if (newRole.equals(DeviceMastershipRole.NONE)) {
             Device device = store.getDevice(deviceId);
             // FIXME: Device might not be there yet. (eventual consistent)
             if (device == null) {
@@ -201,9 +201,9 @@
 
             log.info("Device {} connected", deviceId);
             // check my Role
-            MastershipRole role = mastershipService.requestRoleFor(deviceId);
+            DeviceMastershipRole role = mastershipService.requestRoleFor(deviceId);
 
-            if (role != MastershipRole.MASTER) {
+            if (role != DeviceMastershipRole.MASTER) {
                 // TODO: Do we need to explicitly tell the Provider that
                 // this instance is no longer the MASTER? probably not
                 return;
@@ -216,7 +216,7 @@
                 return;
             }
             // tell clock provider if this instance is the master
-            clockProviderService.setMastershipTerm(deviceId, term);
+            clockProviderService.setDeviceMastershipTerm(deviceId, term);
 
             DeviceEvent event = store.createOrUpdateDevice(provider().id(),
                     deviceId, deviceDescription);
@@ -255,7 +255,7 @@
             // but if I was the last STANDBY connection, etc. and no one else
             // was there to mark the device offline, this instance may need to
             // temporarily request for Master Role and mark offline.
-            if (!mastershipService.getLocalRole(deviceId).equals(MastershipRole.MASTER)) {
+            if (!mastershipService.getLocalRole(deviceId).equals(DeviceMastershipRole.MASTER)) {
                 log.debug("Device {} disconnected, but I am not the master", deviceId);
                 //let go of any role anyways
                 mastershipService.relinquishMastership(deviceId);
@@ -302,11 +302,11 @@
         }
 
         @Override
-        public void unableToAssertRole(DeviceId deviceId, MastershipRole role) {
+        public void unableToAssertRole(DeviceId deviceId, DeviceMastershipRole role) {
             // FIXME: implement response to this notification
             log.warn("Failed to assert role [{}] onto Device {}", role,
                     deviceId);
-            if (role == MastershipRole.MASTER) {
+            if (role == DeviceMastershipRole.MASTER) {
                 mastershipService.relinquishMastership(deviceId);
             }
         }
@@ -333,16 +333,16 @@
 
                     if (term.master().equals(myNodeId)) {
                         // only set the new term if I am the master
-                        clockProviderService.setMastershipTerm(did, term);
+                        clockProviderService.setDeviceMastershipTerm(did, term);
                     }
-                    applyRole(did, MastershipRole.MASTER);
+                    applyRole(did, DeviceMastershipRole.MASTER);
                 } else {
-                    applyRole(did, MastershipRole.STANDBY);
+                    applyRole(did, DeviceMastershipRole.STANDBY);
                 }
             } else {
                 //device dead to node, give up
                 mastershipService.relinquishMastership(did);
-                applyRole(did, MastershipRole.STANDBY);
+                applyRole(did, DeviceMastershipRole.STANDBY);
             }
         }
     }
diff --git a/core/net/src/test/java/org/onlab/onos/cluster/impl/MastershipManagerTest.java b/core/net/src/test/java/org/onlab/onos/cluster/impl/MastershipManagerTest.java
index 84ca891..d4cabba 100644
--- a/core/net/src/test/java/org/onlab/onos/cluster/impl/MastershipManagerTest.java
+++ b/core/net/src/test/java/org/onlab/onos/cluster/impl/MastershipManagerTest.java
@@ -20,7 +20,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
-import static org.onlab.onos.net.MastershipRole.*;
+import static org.onlab.onos.net.device.DeviceMastershipRole.*;
 
 /**
  * Test codifying the mastership service contracts.
diff --git a/core/net/src/test/java/org/onlab/onos/net/device/impl/DeviceManagerTest.java b/core/net/src/test/java/org/onlab/onos/net/device/impl/DeviceManagerTest.java
index bc4e353..0dc77e1 100644
--- a/core/net/src/test/java/org/onlab/onos/net/device/impl/DeviceManagerTest.java
+++ b/core/net/src/test/java/org/onlab/onos/net/device/impl/DeviceManagerTest.java
@@ -17,15 +17,16 @@
 import org.onlab.onos.event.impl.TestEventDispatcher;
 import org.onlab.onos.net.Device;
 import org.onlab.onos.net.DeviceId;
-import org.onlab.onos.net.MastershipRole;
 import org.onlab.onos.net.Port;
 import org.onlab.onos.net.PortNumber;
 import org.onlab.onos.net.device.DefaultDeviceDescription;
 import org.onlab.onos.net.device.DefaultPortDescription;
 import org.onlab.onos.net.device.DeviceAdminService;
+import org.onlab.onos.net.device.DeviceClockProviderService;
 import org.onlab.onos.net.device.DeviceDescription;
 import org.onlab.onos.net.device.DeviceEvent;
 import org.onlab.onos.net.device.DeviceListener;
+import org.onlab.onos.net.device.DeviceMastershipRole;
 import org.onlab.onos.net.device.DeviceProvider;
 import org.onlab.onos.net.device.DeviceProviderRegistry;
 import org.onlab.onos.net.device.DeviceProviderService;
@@ -35,7 +36,6 @@
 import org.onlab.onos.net.device.PortDescription;
 import org.onlab.onos.net.provider.AbstractProvider;
 import org.onlab.onos.net.provider.ProviderId;
-import org.onlab.onos.store.ClockProviderService;
 import org.onlab.onos.store.trivial.impl.SimpleDeviceStore;
 import org.onlab.packet.IpPrefix;
 
@@ -161,7 +161,7 @@
     @Test
     public void getRole() {
         connectDevice(DID1, SW1);
-        assertEquals("incorrect role", MastershipRole.MASTER, service.getRole(DID1));
+        assertEquals("incorrect role", DeviceMastershipRole.MASTER, service.getRole(DID1));
     }
 
     @Ignore("disabled until we settle the device-mastership wiring")
@@ -169,9 +169,9 @@
     public void setRole() throws InterruptedException {
         connectDevice(DID1, SW1);
         validateEvents(DEVICE_ADDED, DEVICE_MASTERSHIP_CHANGED);
-        assertEquals("incorrect role", MastershipRole.STANDBY, service.getRole(DID1));
+        assertEquals("incorrect role", DeviceMastershipRole.STANDBY, service.getRole(DID1));
         assertEquals("incorrect device", DID1, provider.deviceReceived.id());
-        assertEquals("incorrect role", MastershipRole.STANDBY, provider.roleReceived);
+        assertEquals("incorrect role", DeviceMastershipRole.STANDBY, provider.roleReceived);
     }
 
     @Test
@@ -246,7 +246,7 @@
 
     private class TestProvider extends AbstractProvider implements DeviceProvider {
         private Device deviceReceived;
-        private MastershipRole roleReceived;
+        private DeviceMastershipRole roleReceived;
 
         public TestProvider() {
             super(PID);
@@ -257,7 +257,7 @@
         }
 
         @Override
-        public void roleChanged(Device device, MastershipRole newRole) {
+        public void roleChanged(Device device, DeviceMastershipRole newRole) {
             deviceReceived = device;
             roleReceived = newRole;
         }
@@ -275,8 +275,8 @@
     private static class TestMastershipService
             extends MastershipServiceAdapter {
         @Override
-        public MastershipRole getLocalRole(DeviceId deviceId) {
-            return MastershipRole.MASTER;
+        public DeviceMastershipRole getLocalRole(DeviceId deviceId) {
+            return DeviceMastershipRole.MASTER;
         }
 
         @Override
@@ -285,8 +285,8 @@
         }
 
         @Override
-        public MastershipRole requestRoleFor(DeviceId deviceId) {
-            return MastershipRole.MASTER;
+        public DeviceMastershipRole requestRoleFor(DeviceId deviceId) {
+            return DeviceMastershipRole.MASTER;
         }
 
         @Override
@@ -336,10 +336,10 @@
     }
 
     private final class TestClockProviderService implements
-            ClockProviderService {
+            DeviceClockProviderService {
 
         @Override
-        public void setMastershipTerm(DeviceId deviceId, DeviceMastershipTerm term) {
+        public void setDeviceMastershipTerm(DeviceId deviceId, DeviceMastershipTerm term) {
             // TODO Auto-generated method stub
         }
     }
diff --git a/core/net/src/test/java/org/onlab/onos/net/flow/impl/FlowRuleManagerTest.java b/core/net/src/test/java/org/onlab/onos/net/flow/impl/FlowRuleManagerTest.java
index fb579ea..d8b3160 100644
--- a/core/net/src/test/java/org/onlab/onos/net/flow/impl/FlowRuleManagerTest.java
+++ b/core/net/src/test/java/org/onlab/onos/net/flow/impl/FlowRuleManagerTest.java
@@ -24,10 +24,10 @@
 import org.onlab.onos.net.Device;
 import org.onlab.onos.net.Device.Type;
 import org.onlab.onos.net.DeviceId;
-import org.onlab.onos.net.MastershipRole;
 import org.onlab.onos.net.Port;
 import org.onlab.onos.net.PortNumber;
 import org.onlab.onos.net.device.DeviceListener;
+import org.onlab.onos.net.device.DeviceMastershipRole;
 import org.onlab.onos.net.device.DeviceService;
 import org.onlab.onos.net.flow.CompletedBatchOperation;
 import org.onlab.onos.net.flow.DefaultFlowEntry;
@@ -364,7 +364,7 @@
         }
 
         @Override
-        public MastershipRole getRole(DeviceId deviceId) {
+        public DeviceMastershipRole getRole(DeviceId deviceId) {
             return null;
         }
 
diff --git a/core/net/src/test/java/org/onlab/onos/net/host/impl/HostMonitorTest.java b/core/net/src/test/java/org/onlab/onos/net/host/impl/HostMonitorTest.java
index d8ddfbe..7191a8f 100644
--- a/core/net/src/test/java/org/onlab/onos/net/host/impl/HostMonitorTest.java
+++ b/core/net/src/test/java/org/onlab/onos/net/host/impl/HostMonitorTest.java
@@ -19,10 +19,10 @@
 import org.onlab.onos.net.Device;
 import org.onlab.onos.net.DeviceId;
 import org.onlab.onos.net.Host;
-import org.onlab.onos.net.MastershipRole;
 import org.onlab.onos.net.Port;
 import org.onlab.onos.net.PortNumber;
 import org.onlab.onos.net.device.DeviceListener;
+import org.onlab.onos.net.device.DeviceMastershipRole;
 import org.onlab.onos.net.device.DeviceService;
 import org.onlab.onos.net.flow.instructions.Instruction;
 import org.onlab.onos.net.flow.instructions.Instructions.OutputInstruction;
@@ -189,7 +189,7 @@
         }
 
         @Override
-        public MastershipRole getRole(DeviceId deviceId) {
+        public DeviceMastershipRole getRole(DeviceId deviceId) {
             return null;
         }
 
diff --git a/core/net/src/test/java/org/onlab/onos/net/link/impl/LinkManagerTest.java b/core/net/src/test/java/org/onlab/onos/net/link/impl/LinkManagerTest.java
index 1d52ba3..927278a 100644
--- a/core/net/src/test/java/org/onlab/onos/net/link/impl/LinkManagerTest.java
+++ b/core/net/src/test/java/org/onlab/onos/net/link/impl/LinkManagerTest.java
@@ -1,6 +1,7 @@
 package org.onlab.onos.net.link.impl;
 
 import com.google.common.collect.ImmutableSet;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -9,7 +10,6 @@
 import org.onlab.onos.net.Device;
 import org.onlab.onos.net.DeviceId;
 import org.onlab.onos.net.Link;
-import org.onlab.onos.net.MastershipRole;
 import org.onlab.onos.net.PortNumber;
 import org.onlab.onos.net.link.DefaultLinkDescription;
 import org.onlab.onos.net.link.LinkAdminService;
@@ -22,6 +22,7 @@
 import org.onlab.onos.net.provider.AbstractProvider;
 import org.onlab.onos.net.provider.ProviderId;
 import org.onlab.onos.event.impl.TestEventDispatcher;
+import org.onlab.onos.net.device.DeviceMastershipRole;
 import org.onlab.onos.net.device.impl.DeviceManager;
 import org.onlab.onos.store.trivial.impl.SimpleLinkStore;
 
@@ -243,7 +244,7 @@
 
     private class TestProvider extends AbstractProvider implements LinkProvider {
         private Device deviceReceived;
-        private MastershipRole roleReceived;
+        private DeviceMastershipRole roleReceived;
 
         public TestProvider() {
             super(PID);