[ONOS-2753]: add vtnRsc event, listenner and feedback

Change-Id: I3a2054daa4b0e72ed1225be856a0321adbd4b504
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEvent.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEvent.java
new file mode 100644
index 0000000..3bac158
--- /dev/null
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEvent.java
@@ -0,0 +1,77 @@
+/*
+ * 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.event;
+
+import org.onosproject.event.AbstractEvent;
+
+
+/**
+ * Describes network vtnrsc event.
+ */
+public class VtnRscEvent
+        extends AbstractEvent<VtnRscEvent.Type, VtnRscEventFeedback> {
+
+    /**
+     * Type of vtnrsc events.
+     */
+    public enum Type {
+        /**
+         * Signifies that floating IP has create.
+         */
+        FLOATINGIP_PUT,
+        /**
+         * Signifies that floating IP has delete.
+         */
+        FLOATINGIP_DELETE,
+        /**
+         * Signifies that router has create.
+         */
+        ROUTER_PUT,
+        /**
+         * Signifies that router has delete.
+         */
+        ROUTER_DELETE,
+        /**
+         * Signifies that router interface has add.
+         */
+        ROUTER_INTERFACE_PUT,
+        /**
+         * Signifies that router interface has remove.
+         */
+        ROUTER_INTERFACE_DELETE
+    }
+
+    /**
+     * Creates an event of a given type and for the specified vtn event feedback.
+     *
+     * @param type Vtnrsc event type
+     * @param vtnFeedback event VtnrscEventFeedback subject
+     */
+    public VtnRscEvent(Type type, VtnRscEventFeedback vtnFeedback) {
+        super(type, vtnFeedback);
+    }
+
+    /**
+     * Creates an event of a given type and for the specified vtn event feedback.
+     *
+     * @param type Vtnrsc event type
+     * @param vtnFeedback event VtnrscEventFeedback subject
+     * @param time occurrence time
+     */
+    public VtnRscEvent(Type type, VtnRscEventFeedback vtnFeedback, long time) {
+        super(type, vtnFeedback, time);
+    }
+}
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEventFeedback.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEventFeedback.java
new file mode 100644
index 0000000..63dcaee
--- /dev/null
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscEventFeedback.java
@@ -0,0 +1,123 @@
+/*
+ * 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.event;
+
+import java.util.Objects;
+
+import org.onosproject.vtnrsc.FloatingIp;
+import org.onosproject.vtnrsc.Router;
+import org.onosproject.vtnrsc.RouterInterface;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Representation of a VtnRsc event feedback.
+ */
+public class VtnRscEventFeedback {
+    private final FloatingIp floaingtIp;
+    private final Router router;
+    private final RouterInterface routerInterface;
+
+    /**
+     * Creates VtnRscEventFeedback object.
+     *
+     * @param floatingIp the floating Ip
+     */
+    public VtnRscEventFeedback(FloatingIp floatingIp) {
+        this.floaingtIp = checkNotNull(floatingIp, "floaintIp cannot be null");
+        this.router = null;
+        this.routerInterface = null;
+    }
+
+    /**
+     * Creates VtnRscEventFeedback object.
+     *
+     * @param router the router
+     */
+    public VtnRscEventFeedback(Router router) {
+        this.floaingtIp = null;
+        this.router = checkNotNull(router, "router cannot be null");
+        this.routerInterface = null;
+    }
+
+    /**
+     * Creates VtnRscEventFeedback object.
+     *
+     * @param routerInterface the router interface
+     */
+    public VtnRscEventFeedback(RouterInterface routerInterface) {
+        this.floaingtIp = null;
+        this.router = null;
+        this.routerInterface = checkNotNull(routerInterface,
+                                            "routerInterface cannot be null");
+    }
+
+    /**
+     * Returns floating IP.
+     *
+     * @return floaingtIp the floating IP
+     */
+    public FloatingIp floatingIp() {
+        return floaingtIp;
+    }
+
+    /**
+     * Returns router.
+     *
+     * @return router the router
+     */
+    public Router router() {
+        return router;
+    }
+
+    /**
+     * Returns router interface.
+     *
+     * @return routerInterface the router interface
+     */
+    public RouterInterface routerInterface() {
+        return routerInterface;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(floaingtIp, router, routerInterface);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof VtnRscEventFeedback) {
+            final VtnRscEventFeedback that = (VtnRscEventFeedback) obj;
+            return Objects.equals(this.floaingtIp, that.floaingtIp)
+                    && Objects.equals(this.router, that.router)
+                    && Objects.equals(this.routerInterface, that.routerInterface);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("router", router)
+                .add("floaingtIp", floaingtIp)
+                .add("routerInterface", routerInterface)
+                .toString();
+    }
+}
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscListener.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscListener.java
new file mode 100644
index 0000000..fdd6755
--- /dev/null
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/VtnRscListener.java
@@ -0,0 +1,26 @@
+/*
+ * 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.event;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Entity capable of VtnRsc related events.
+ */
+public interface VtnRscListener extends EventListener<VtnRscEvent> {
+
+}
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/package-info.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/package-info.java
new file mode 100644
index 0000000..c1575ad
--- /dev/null
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/event/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+/**
+ * Event of VtnRsc for VtnRsc service.
+ */
+package org.onosproject.vtnrsc.event;