[ONOS-2815]: add FloatingIpId and FloatingIpTest

Change-Id: Iae235c1f55543288eac475340467cdac618d4def
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FloatingIp.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FloatingIp.java
new file mode 100644
index 0000000..0933d9e
--- /dev/null
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FloatingIp.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc;
+
+import org.onlab.packet.IpAddress;
+
+/**
+ * Representation of a floatingIp.
+ */
+public interface FloatingIp {
+
+    /**
+     * Coarse classification of the type of the FloatingIp.
+     */
+    public enum Status {
+        /**
+         * Signifies that a floating Ip is currently active.
+         */
+        ACTIVE,
+        /**
+         * Signifies that a floating Ip is currently inactive.
+         */
+        INACTIVE
+    }
+
+    /**
+     * Returns the floatingIp identifier.
+     *
+     * @return identifier
+     */
+    FloatingIpId id();
+
+    /**
+     * Returns the tenant identifier.
+     *
+     * @return the tenant identifier
+     */
+    TenantId tenantId();
+
+    /**
+     * Returns the network identifier.
+     *
+     * @return the network identifier
+     */
+    TenantNetworkId networkId();
+
+    /**
+     * Returns the port identifier.
+     *
+     * @return the port identifier
+     */
+    VirtualPortId portId();
+
+    /**
+     * Returns the router identifier.
+     *
+     * @return the router identifier
+     */
+    RouterId routerId();
+
+    /**
+     * Returns the floating ip address.
+     *
+     * @return floatingIp
+     */
+    IpAddress floatingIp();
+
+    /**
+     * Returns the fixed ip address.
+     *
+     * @return fixedIp
+     */
+    IpAddress fixedIp();
+
+    /**
+     * Returns the status of floating ip.
+     *
+     * @return floatingIpStatus
+     */
+    Status status();
+}
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FloatingIpId.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FloatingIpId.java
new file mode 100644
index 0000000..1b48c7d
--- /dev/null
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FloatingIpId.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Objects;
+import java.util.UUID;
+
+/**
+ * Immutable representation of a floating IP identifier.
+ */
+public final class FloatingIpId {
+    private final UUID floatingIpId;
+
+    // Public construction is prohibited
+    private FloatingIpId(UUID floatingIpId) {
+        this.floatingIpId = checkNotNull(floatingIpId, "floatingIpId cannot be null");
+    }
+
+    /**
+     * Creates a floating IP identifier.
+     *
+     * @param floatingIpId the UUID id of floating IP identifier
+     * @return object of floating IP identifier
+     */
+    public static FloatingIpId of(UUID floatingIpId) {
+        return new FloatingIpId(floatingIpId);
+    }
+
+    /**
+     * Creates a floating IP identifier.
+     *
+     * @param floatingIpId the floating IP identifier in string
+     * @return object of floating IP identifier
+     */
+    public static FloatingIpId of(String floatingIpId) {
+        return new FloatingIpId(UUID.fromString(floatingIpId));
+    }
+
+    /**
+     * Returns the floating IP identifier.
+     *
+     * @return the floating IP identifier
+     */
+    public UUID floatingIpId() {
+        return floatingIpId;
+    }
+
+    @Override
+    public int hashCode() {
+        return floatingIpId.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof FloatingIpId) {
+            final FloatingIpId that = (FloatingIpId) obj;
+            return Objects.equals(this.floatingIpId, that.floatingIpId);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this).add("floatingIpId", floatingIpId).toString();
+    }
+}
diff --git a/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/floatingip/FloatingIpIdTest.java b/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/floatingip/FloatingIpIdTest.java
new file mode 100644
index 0000000..6ae27e9
--- /dev/null
+++ b/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/floatingip/FloatingIpIdTest.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.vtnrsc.floatingip;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
+
+import org.junit.Test;
+import org.onosproject.vtnrsc.FloatingIpId;
+
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Unit tests for FloatingIpId class.
+ */
+public class FloatingIpIdTest {
+    private String floatingIpIdStr1 = "5fb63824-4d5c-4b85-9f2f-ebb93c9ce3df";
+    private String floatingIpIdStr2 = "fa44f585-fe02-40d3-afe7-d1d7e5782c99";
+
+    /**
+     * Checks that the FloatingIpId class is immutable.
+     */
+    @Test
+    public void testImmutability() {
+        assertThatClassIsImmutable(FloatingIpId.class);
+    }
+
+    /**
+     * Checks the operation of equals() methods.
+     */
+    @Test
+    public void testEquals() {
+        FloatingIpId id1 = FloatingIpId.of(floatingIpIdStr1);
+        FloatingIpId id2 = FloatingIpId.of(floatingIpIdStr1);
+        FloatingIpId id3 = FloatingIpId.of(floatingIpIdStr2);
+        new EqualsTester().addEqualityGroup(id1, id2).addEqualityGroup(id3)
+                .testEquals();
+    }
+
+    /**
+     * Checks the construction of a FloatingIpId object.
+     */
+    @Test
+    public void testConstruction() {
+        final FloatingIpId id = FloatingIpId.of(floatingIpIdStr1);
+        assertThat(id, is(notNullValue()));
+        assertThat(id.floatingIpId().toString(), is(floatingIpIdStr1));
+    }
+}