Merge branch 'master' of ssh://gerrit.onlab.us:29418/onos-next
better with files
Change-Id: Ifb62a2c9a8e394fe3190582d7236eaea942ee3fc
diff --git a/core/api/src/main/java/org/onlab/onos/ApplicationId.java b/core/api/src/main/java/org/onlab/onos/ApplicationId.java
new file mode 100644
index 0000000..f345607
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/ApplicationId.java
@@ -0,0 +1,59 @@
+package org.onlab.onos;
+
+import java.util.Objects;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Application id generator class.
+ */
+public final class ApplicationId {
+
+ private static AtomicInteger idDispenser;
+ private final Integer id;
+
+ // Ban public construction
+ private ApplicationId(Integer id) {
+ this.id = id;
+ }
+
+ public Integer id() {
+ return id;
+ }
+
+ public static ApplicationId valueOf(Integer id) {
+ return new ApplicationId(id);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof ApplicationId)) {
+ return false;
+ }
+ ApplicationId other = (ApplicationId) obj;
+ return Objects.equals(this.id, other.id);
+ }
+
+ /**
+ * Returns a new application id.
+ *
+ * @return app id
+ */
+ public static ApplicationId getAppId() {
+ if (ApplicationId.idDispenser == null) {
+ ApplicationId.idDispenser = new AtomicInteger(1);
+ }
+ return new ApplicationId(ApplicationId.idDispenser.getAndIncrement());
+ }
+
+}
diff --git a/core/api/src/main/java/org/onlab/onos/cluster/MastershipStore.java b/core/api/src/main/java/org/onlab/onos/cluster/MastershipStore.java
index 3e2ee03..5c0c207 100644
--- a/core/api/src/main/java/org/onlab/onos/cluster/MastershipStore.java
+++ b/core/api/src/main/java/org/onlab/onos/cluster/MastershipStore.java
@@ -4,12 +4,13 @@
import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.MastershipRole;
+import org.onlab.onos.store.Store;
/**
* Manages inventory of mastership roles for devices, across controller
* instances; not intended for direct use.
*/
-public interface MastershipStore {
+public interface MastershipStore extends Store<MastershipEvent, MastershipStoreDelegate> {
// three things to map: NodeId, DeviceId, MastershipRole
@@ -51,9 +52,7 @@
*
* @param nodeId controller instance identifier
* @param deviceId device identifier
- * @param role new role
* @return a mastership event
*/
- MastershipEvent setRole(NodeId nodeId, DeviceId deviceId,
- MastershipRole role);
+ MastershipEvent setMaster(NodeId nodeId, DeviceId deviceId);
}
diff --git a/core/api/src/main/java/org/onlab/onos/net/device/DeviceStore.java b/core/api/src/main/java/org/onlab/onos/net/device/DeviceStore.java
index ef111e9..c84aac8 100644
--- a/core/api/src/main/java/org/onlab/onos/net/device/DeviceStore.java
+++ b/core/api/src/main/java/org/onlab/onos/net/device/DeviceStore.java
@@ -5,13 +5,14 @@
import org.onlab.onos.net.Port;
import org.onlab.onos.net.PortNumber;
import org.onlab.onos.net.provider.ProviderId;
+import org.onlab.onos.store.Store;
import java.util.List;
/**
* Manages inventory of infrastructure devices; not intended for direct use.
*/
-public interface DeviceStore {
+public interface DeviceStore extends Store<DeviceEvent, DeviceStoreDelegate> {
/**
* Returns the number of devices known to the system.
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleStore.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleStore.java
index 28793e6..c6093384 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleStore.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleStore.java
@@ -2,11 +2,12 @@
import org.onlab.onos.ApplicationId;
import org.onlab.onos.net.DeviceId;
+import org.onlab.onos.store.Store;
/**
* Manages inventory of flow rules; not intended for direct use.
*/
-public interface FlowRuleStore {
+public interface FlowRuleStore extends Store<FlowRuleEvent, FlowRuleStoreDelegate> {
/**
* Returns the stored flow.
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleStoreDelegate.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleStoreDelegate.java
new file mode 100644
index 0000000..119712b
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleStoreDelegate.java
@@ -0,0 +1,9 @@
+package org.onlab.onos.net.flow;
+
+import org.onlab.onos.store.StoreDelegate;
+
+/**
+ * Flow rule store delegate abstraction.
+ */
+public interface FlowRuleStoreDelegate extends StoreDelegate<FlowRuleEvent> {
+}
diff --git a/core/api/src/main/java/org/onlab/onos/net/host/HostStore.java b/core/api/src/main/java/org/onlab/onos/net/host/HostStore.java
index e70bbf2..3f1cb23 100644
--- a/core/api/src/main/java/org/onlab/onos/net/host/HostStore.java
+++ b/core/api/src/main/java/org/onlab/onos/net/host/HostStore.java
@@ -1,20 +1,21 @@
package org.onlab.onos.net.host;
-import java.util.Set;
-
import org.onlab.onos.net.ConnectPoint;
import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.Host;
import org.onlab.onos.net.HostId;
import org.onlab.onos.net.provider.ProviderId;
+import org.onlab.onos.store.Store;
import org.onlab.packet.IpPrefix;
import org.onlab.packet.MacAddress;
import org.onlab.packet.VlanId;
+import java.util.Set;
+
/**
* Manages inventory of end-station hosts; not intended for direct use.
*/
-public interface HostStore {
+public interface HostStore extends Store<HostEvent, HostStoreDelegate> {
/**
* Creates a new host or updates the existing one based on the specified
@@ -133,7 +134,7 @@
* Returns the address bindings for a particular connection point.
*
* @param connectPoint the connection point to return address information
- * for
+ * for
* @return address information for the connection point
*/
PortAddresses getAddressBindingsForPort(ConnectPoint connectPoint);
diff --git a/core/api/src/main/java/org/onlab/onos/net/host/HostStoreDelegate.java b/core/api/src/main/java/org/onlab/onos/net/host/HostStoreDelegate.java
new file mode 100644
index 0000000..999b28f
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/host/HostStoreDelegate.java
@@ -0,0 +1,9 @@
+package org.onlab.onos.net.host;
+
+import org.onlab.onos.store.StoreDelegate;
+
+/**
+ * Infrastructure link store delegate abstraction.
+ */
+public interface HostStoreDelegate extends StoreDelegate<HostEvent> {
+}
diff --git a/core/api/src/main/java/org/onlab/onos/net/link/LinkStore.java b/core/api/src/main/java/org/onlab/onos/net/link/LinkStore.java
index dbe4877..0197417 100644
--- a/core/api/src/main/java/org/onlab/onos/net/link/LinkStore.java
+++ b/core/api/src/main/java/org/onlab/onos/net/link/LinkStore.java
@@ -4,13 +4,14 @@
import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.Link;
import org.onlab.onos.net.provider.ProviderId;
+import org.onlab.onos.store.Store;
import java.util.Set;
/**
* Manages inventory of infrastructure links; not intended for direct use.
*/
-public interface LinkStore {
+public interface LinkStore extends Store<LinkEvent, LinkStoreDelegate> {
/**
* Returns the number of links in the store.
diff --git a/core/api/src/main/java/org/onlab/onos/net/link/LinkStoreDelegate.java b/core/api/src/main/java/org/onlab/onos/net/link/LinkStoreDelegate.java
new file mode 100644
index 0000000..ec747c4
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/link/LinkStoreDelegate.java
@@ -0,0 +1,9 @@
+package org.onlab.onos.net.link;
+
+import org.onlab.onos.store.StoreDelegate;
+
+/**
+ * Infrastructure link store delegate abstraction.
+ */
+public interface LinkStoreDelegate extends StoreDelegate<LinkEvent> {
+}
diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/TopologyStore.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyStore.java
index adc6145..1945f4c 100644
--- a/core/api/src/main/java/org/onlab/onos/net/topology/TopologyStore.java
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyStore.java
@@ -6,6 +6,7 @@
import org.onlab.onos.net.Link;
import org.onlab.onos.net.Path;
import org.onlab.onos.net.provider.ProviderId;
+import org.onlab.onos.store.Store;
import java.util.List;
import java.util.Set;
@@ -13,7 +14,7 @@
/**
* Manages inventory of topology snapshots; not intended for direct use.
*/
-public interface TopologyStore {
+public interface TopologyStore extends Store<TopologyEvent, TopologyStoreDelegate> {
/**
* Returns the current topology snapshot.
diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/TopologyStoreDelegate.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyStoreDelegate.java
new file mode 100644
index 0000000..2a19a0c
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyStoreDelegate.java
@@ -0,0 +1,9 @@
+package org.onlab.onos.net.topology;
+
+import org.onlab.onos.store.StoreDelegate;
+
+/**
+ * Topology store delegate abstraction.
+ */
+public interface TopologyStoreDelegate extends StoreDelegate<TopologyEvent> {
+}
diff --git a/core/api/src/main/java/org/onlab/onos/store/AbstractStore.java b/core/api/src/main/java/org/onlab/onos/store/AbstractStore.java
index efd0d03..5d76e0f 100644
--- a/core/api/src/main/java/org/onlab/onos/store/AbstractStore.java
+++ b/core/api/src/main/java/org/onlab/onos/store/AbstractStore.java
@@ -2,6 +2,8 @@
import org.onlab.onos.event.Event;
+import static com.google.common.base.Preconditions.checkState;
+
/**
* Base implementation of a store.
*/
@@ -12,12 +14,21 @@
@Override
public void setDelegate(D delegate) {
+ checkState(this.delegate == null || this.delegate == delegate,
+ "Store delegate already set");
this.delegate = delegate;
}
@Override
- public D getDelegate() {
- return delegate;
+ public void unsetDelegate(D delegate) {
+ if (this.delegate == delegate) {
+ this.delegate = null;
+ }
+ }
+
+ @Override
+ public boolean hasDelegate() {
+ return delegate != null;
}
/**
diff --git a/core/api/src/main/java/org/onlab/onos/store/Store.java b/core/api/src/main/java/org/onlab/onos/store/Store.java
index 9eaef66..28bc08e 100644
--- a/core/api/src/main/java/org/onlab/onos/store/Store.java
+++ b/core/api/src/main/java/org/onlab/onos/store/Store.java
@@ -12,14 +12,25 @@
* Sets the delegate on the store.
*
* @param delegate new store delegate
+ * @throws java.lang.IllegalStateException if a delegate is already
+ * currently set on the store and is a different one that
*/
void setDelegate(D delegate);
/**
- * Get the current store delegate.
+ * Withdraws the delegate from the store.
*
- * @return store delegate
+ * @param delegate store delegate to withdraw
+ * @throws java.lang.IllegalArgumentException if the delegate is not
+ * currently set on the store
*/
- D getDelegate();
+ void unsetDelegate(D delegate);
+
+ /**
+ * Indicates whether the store has a delegate.
+ *
+ * @return true if delegate is set
+ */
+ boolean hasDelegate();
}
diff --git a/core/api/src/main/java/org/onlab/onos/store/StoreDelegate.java b/core/api/src/main/java/org/onlab/onos/store/StoreDelegate.java
index e2c5cd3..c7b0465 100644
--- a/core/api/src/main/java/org/onlab/onos/store/StoreDelegate.java
+++ b/core/api/src/main/java/org/onlab/onos/store/StoreDelegate.java
@@ -8,6 +8,11 @@
*/
public interface StoreDelegate<E extends Event> {
+ /**
+ * Notifies the delegate via the specified event.
+ *
+ * @param event store generated event
+ */
void notify(E event);
}