Formalized LinkStore in preparation for separating managers and stores.
diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/link/impl/SimpleLinkManager.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/link/impl/LinkManager.java
similarity index 97%
rename from core/trivial/src/main/java/org/onlab/onos/net/trivial/link/impl/SimpleLinkManager.java
rename to core/trivial/src/main/java/org/onlab/onos/net/trivial/link/impl/LinkManager.java
index 7242642..13cb546 100644
--- a/core/trivial/src/main/java/org/onlab/onos/net/trivial/link/impl/SimpleLinkManager.java
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/link/impl/LinkManager.java
@@ -27,6 +27,7 @@
import org.onlab.onos.net.link.LinkProviderRegistry;
import org.onlab.onos.net.link.LinkProviderService;
import org.onlab.onos.net.link.LinkService;
+import org.onlab.onos.net.link.LinkStore;
import org.onlab.onos.net.provider.AbstractProviderRegistry;
import org.onlab.onos.net.provider.AbstractProviderService;
import org.slf4j.Logger;
@@ -38,7 +39,7 @@
*/
@Component(immediate = true)
@Service
-public class SimpleLinkManager
+public class LinkManager
extends AbstractProviderRegistry<LinkProvider, LinkProviderService>
implements LinkService, LinkAdminService, LinkProviderRegistry {
@@ -51,10 +52,12 @@
protected final AbstractListenerRegistry<LinkEvent, LinkListener>
listenerRegistry = new AbstractListenerRegistry<>();
- private final SimpleLinkStore store = new SimpleLinkStore();
private final DeviceListener deviceListener = new InnerDeviceListener();
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected LinkStore store;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected DeviceService deviceService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/link/impl/SimpleLinkStore.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/link/impl/SimpleLinkStore.java
index 2ba7a30..1dd724c 100644
--- a/core/trivial/src/main/java/org/onlab/onos/net/trivial/link/impl/SimpleLinkStore.java
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/link/impl/SimpleLinkStore.java
@@ -3,12 +3,15 @@
import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
import org.onlab.onos.net.ConnectPoint;
import org.onlab.onos.net.DefaultLink;
import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.Link;
import org.onlab.onos.net.link.LinkDescription;
import org.onlab.onos.net.link.LinkEvent;
+import org.onlab.onos.net.link.LinkStore;
import org.onlab.onos.net.provider.ProviderId;
import java.util.Collections;
@@ -20,15 +23,15 @@
import static org.onlab.onos.net.Link.Type.DIRECT;
import static org.onlab.onos.net.Link.Type.INDIRECT;
-import static org.onlab.onos.net.link.LinkEvent.Type.LINK_ADDED;
-import static org.onlab.onos.net.link.LinkEvent.Type.LINK_REMOVED;
-import static org.onlab.onos.net.link.LinkEvent.Type.LINK_UPDATED;
+import static org.onlab.onos.net.link.LinkEvent.Type.*;
/**
* Manages inventory of infrastructure links using trivial in-memory structures
* implementation.
*/
-class SimpleLinkStore {
+@Component(immediate = true)
+@Service
+public class SimpleLinkStore implements LinkStore {
// Link inventory
private final Map<LinkKey, DefaultLink> links = new ConcurrentHashMap<>();
@@ -39,62 +42,33 @@
private static final Set<Link> EMPTY = ImmutableSet.copyOf(new Link[]{});
- /**
- * Returns the number of links in the store.
- *
- * @return number of links
- */
- int getLinkCount() {
+ @Override
+ public int getLinkCount() {
return links.size();
}
- /**
- * Returns an iterable collection of all links in the inventory.
- *
- * @return collection of all links
- */
- Iterable<Link> getLinks() {
+ @Override
+ public Iterable<Link> getLinks() {
return Collections.unmodifiableSet(new HashSet<Link>(links.values()));
}
- /**
- * Returns all links egressing from the specified device.
- *
- * @param deviceId device identifier
- * @return set of device links
- */
- Set<Link> getDeviceEgressLinks(DeviceId deviceId) {
+ @Override
+ public Set<Link> getDeviceEgressLinks(DeviceId deviceId) {
return ImmutableSet.copyOf(srcLinks.get(deviceId));
}
- /**
- * Returns all links ingressing from the specified device.
- *
- * @param deviceId device identifier
- * @return set of device links
- */
- Set<Link> getDeviceIngressLinks(DeviceId deviceId) {
+ @Override
+ public Set<Link> getDeviceIngressLinks(DeviceId deviceId) {
return ImmutableSet.copyOf(dstLinks.get(deviceId));
}
- /**
- * Returns the link between the two end-points.
- *
- * @param src source connection point
- * @param dst destination connection point
- * @return link or null if one not found between the end-points
- */
- Link getLink(ConnectPoint src, ConnectPoint dst) {
+ @Override
+ public Link getLink(ConnectPoint src, ConnectPoint dst) {
return links.get(new LinkKey(src, dst));
}
- /**
- * Returns all links egressing from the specified connection point.
- *
- * @param src source connection point
- * @return set of connection point links
- */
- Set<Link> getEgressLinks(ConnectPoint src) {
+ @Override
+ public Set<Link> getEgressLinks(ConnectPoint src) {
Set<Link> egress = new HashSet<>();
for (Link link : srcLinks.get(src.deviceId())) {
if (link.src().equals(src)) {
@@ -104,13 +78,8 @@
return egress;
}
- /**
- * Returns all links ingressing to the specified connection point.
- *
- * @param dst destination connection point
- * @return set of connection point links
- */
- Set<Link> getIngressLinks(ConnectPoint dst) {
+ @Override
+ public Set<Link> getIngressLinks(ConnectPoint dst) {
Set<Link> ingress = new HashSet<>();
for (Link link : dstLinks.get(dst.deviceId())) {
if (link.dst().equals(dst)) {
@@ -120,14 +89,7 @@
return ingress;
}
- /**
- * Creates a new link, or updates an existing one, based on the given
- * information.
- *
- * @param providerId provider identity
- * @param linkDescription link description
- * @return create or update link event, or null if no change resulted
- */
+ @Override
public LinkEvent createOrUpdateLink(ProviderId providerId,
LinkDescription linkDescription) {
LinkKey key = new LinkKey(linkDescription.src(), linkDescription.dst());
@@ -171,14 +133,8 @@
return null;
}
- /**
- * Removes the link based on the specified information.
- *
- * @param src link source
- * @param dst link destination
- * @return remove link event, or null if no change resulted
- */
- LinkEvent removeLink(ConnectPoint src, ConnectPoint dst) {
+ @Override
+ public LinkEvent removeLink(ConnectPoint src, ConnectPoint dst) {
synchronized (this) {
Link link = links.remove(new LinkKey(src, dst));
if (link != null) {