real application ids
Change-Id: Ia24f1de6ccff614769727ab261002520dfd8506f
diff --git a/core/api/src/main/java/org/onlab/onos/ApplicationId.java b/core/api/src/main/java/org/onlab/onos/ApplicationId.java
index 433265e..3fab53f 100644
--- a/core/api/src/main/java/org/onlab/onos/ApplicationId.java
+++ b/core/api/src/main/java/org/onlab/onos/ApplicationId.java
@@ -1,56 +1,21 @@
package org.onlab.onos;
-import java.util.Objects;
-import java.util.concurrent.atomic.AtomicInteger;
/**
- * Application id generator class.
+ * Application identifier.
*/
-public final class ApplicationId {
-
- private static final AtomicInteger ID_DISPENCER = new AtomicInteger(1);
- 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);
- }
+public interface ApplicationId {
/**
- * Returns a new application id.
- *
- * @return app id
+ * Returns the application id.
+ * @return a short value
*/
- public static ApplicationId getAppId() {
- return new ApplicationId(ApplicationId.ID_DISPENCER.getAndIncrement());
- }
+ short id();
+
+ /**
+ * Returns the applications supplied identifier.
+ * @return a string identifier
+ */
+ String name();
}
diff --git a/core/api/src/main/java/org/onlab/onos/CoreService.java b/core/api/src/main/java/org/onlab/onos/CoreService.java
index 32c36c5..3302888 100644
--- a/core/api/src/main/java/org/onlab/onos/CoreService.java
+++ b/core/api/src/main/java/org/onlab/onos/CoreService.java
@@ -12,4 +12,21 @@
*/
Version version();
+ /**
+ * Registers a new application by its name, which is expected
+ * to follow the reverse DNS convention, e.g.
+ * {@code org.flying.circus.app}
+ *
+ * @param identifier string identifier
+ * @return the application id
+ */
+ ApplicationId registerApplication(String identifier);
+
+ /**
+ * Returns an existing application id from a given id.
+ * @param id the short value of the id
+ * @return an application id
+ */
+ ApplicationId getAppId(Short id);
+
}
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java
index 47e9fed..e5504db 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java
@@ -21,7 +21,7 @@
private final FlowId id;
- private final ApplicationId appId;
+ private final short appId;
private final int timeout;
@@ -36,7 +36,7 @@
this.timeout = timeout;
this.created = System.currentTimeMillis();
- this.appId = ApplicationId.valueOf((int) (flowId >> 32));
+ this.appId = (short) (flowId >>> 48);
this.id = FlowId.valueOf(flowId);
}
@@ -52,11 +52,11 @@
this.priority = priority;
this.selector = selector;
this.treatment = treatement;
- this.appId = appId;
+ this.appId = appId.id();
this.timeout = timeout;
this.created = System.currentTimeMillis();
- this.id = FlowId.valueOf((((long) appId().id()) << 32) | (this.hash() & 0xffffffffL));
+ this.id = FlowId.valueOf((((long) this.appId) << 48) | (this.hash() & 0x0000ffffffffL));
}
public DefaultFlowRule(FlowRule rule) {
@@ -78,7 +78,7 @@
}
@Override
- public ApplicationId appId() {
+ public short appId() {
return appId;
}
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java
index 410aed4..c63f247 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java
@@ -1,6 +1,5 @@
package org.onlab.onos.net.flow;
-import org.onlab.onos.ApplicationId;
import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.intent.BatchOperationTarget;
@@ -26,7 +25,7 @@
*
* @return an applicationId
*/
- ApplicationId appId();
+ short appId();
/**
* Returns the flow rule priority given in natural order; higher numbers