Add static factory method to create ConnectPoints from strings.
Change-Id: I743b4a4fb433ad07cf6f2cbed3da7b6e19a74ebb
diff --git a/core/api/src/main/java/org/onosproject/net/ConnectPoint.java b/core/api/src/main/java/org/onosproject/net/ConnectPoint.java
index 621cb2d..b5ff42c 100644
--- a/core/api/src/main/java/org/onosproject/net/ConnectPoint.java
+++ b/core/api/src/main/java/org/onosproject/net/ConnectPoint.java
@@ -15,9 +15,12 @@
*/
package org.onosproject.net;
+import com.google.common.base.MoreObjects;
+
import java.util.Objects;
-import com.google.common.base.MoreObjects;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
/**
* Abstraction of a network connection point expressed as a pair of the
@@ -90,6 +93,42 @@
return portNumber;
}
+ /**
+ * Parse a device connect point from a string.
+ * The connect point should be in the format "deviceUri/portNumber".
+ *
+ * @param string string to parse
+ * @return a ConnectPoint based on the information in the string.
+ */
+ public static ConnectPoint deviceConnectPoint(String string) {
+ checkNotNull(string);
+ String[] splitted = string.split("/");
+ checkArgument(splitted.length == 2,
+ "Connect point must be in \"deviceUri/portNumber\" format");
+
+ return new ConnectPoint(DeviceId.deviceId(splitted[0]),
+ PortNumber.portNumber(splitted[1]));
+ }
+
+ /**
+ * Parse a host connect point from a string.
+ * The connect point should be in the format "hostId/vlanId/portNumber".
+ *
+ * @param string string to parse
+ * @return a ConnectPoint based on the information in the string.
+ */
+ public static ConnectPoint hostConnectPoint(String string) {
+ checkNotNull(string);
+ String[] splitted = string.split("/");
+ checkArgument(splitted.length == 3,
+ "Connect point must be in \"hostId/vlanId/portNumber\" format");
+
+ int lastSlash = string.lastIndexOf("/");
+
+ return new ConnectPoint(HostId.hostId(string.substring(0, lastSlash)),
+ PortNumber.portNumber(string.substring(lastSlash + 1, string.length())));
+ }
+
@Override
public int hashCode() {
return Objects.hash(elementId, portNumber);
diff --git a/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java b/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java
index 9580481..2aecabd 100644
--- a/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java
+++ b/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java
@@ -18,12 +18,14 @@
import com.google.common.testing.EqualsTester;
import org.junit.Test;
+import static junit.framework.TestCase.fail;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import static org.onosproject.net.DeviceId.deviceId;
import static org.onosproject.net.PortNumber.portNumber;
/**
- * Test of the connetion point entity.
+ * Test of the connection point entity.
*/
public class ConnectPointTest {
@@ -39,7 +41,6 @@
assertEquals("incorrect element id", P2, p.port());
}
-
@Test
public void testEquality() {
new EqualsTester()
@@ -48,4 +49,62 @@
.addEqualityGroup(new ConnectPoint(DID2, P1), new ConnectPoint(DID2, P1))
.testEquals();
}
+
+ @Test
+ public void testParseDeviceConnectPoint() {
+ String cp = "of:0011223344556677/1";
+
+ ConnectPoint connectPoint = ConnectPoint.deviceConnectPoint(cp);
+ assertEquals("of:0011223344556677", connectPoint.deviceId().toString());
+ assertEquals("1", connectPoint.port().toString());
+
+ expectDeviceParseException("");
+ expectDeviceParseException("1/");
+ expectDeviceParseException("1/1/1");
+ expectDeviceParseException("of:0011223344556677/word");
+ }
+
+ /**
+ * Parse a device connect point and expect an exception to be thrown.
+ *
+ * @param string string to parse
+ */
+ private static void expectDeviceParseException(String string) {
+ try {
+ ConnectPoint.deviceConnectPoint(string);
+ fail("Expected exception was not thrown");
+ } catch (Exception e) {
+ assertTrue(true);
+ }
+ }
+
+ @Test
+ public void testParseHostConnectPoint() {
+ String cp = "16:3A:BD:6E:31:E4/-1/1";
+
+ ConnectPoint connectPoint = ConnectPoint.hostConnectPoint(cp);
+ assertEquals("16:3A:BD:6E:31:E4/-1", connectPoint.hostId().toString());
+ assertEquals("1", connectPoint.port().toString());
+
+ expectHostParseException("");
+ expectHostParseException("1/");
+ expectHostParseException("1/1");
+ expectHostParseException("1/1/1/1");
+ expectHostParseException("16:3A:BD:6E:31:E4/word/1");
+ expectHostParseException("16:3A:BD:6E:31:E4/1/word");
+ }
+
+ /**
+ * Parse a host connect point and expect an exception to be thrown.
+ *
+ * @param string string to parse
+ */
+ private static void expectHostParseException(String string) {
+ try {
+ ConnectPoint.hostConnectPoint(string);
+ fail("Expected exception was not thrown");
+ } catch (Exception e) {
+ assertTrue(true);
+ }
+ }
}