Added skeletons for ZeroMQ APIs for Binding Aware ZeroMQ Connector 15/2115/6
authorTony Tkacik <ttkacik@cisco.com>
Wed, 23 Oct 2013 17:54:35 +0000 (19:54 +0200)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 6 Nov 2013 17:05:57 +0000 (17:05 +0000)
Change-Id: I92c91af2c23d9f9d351a16b9d200e02d6ede2f52
Signed-off-by: Tony Tkacik <ttkacik@cisco.com>
opendaylight/md-sal/sal-connector-api/pom.xml
opendaylight/md-sal/sal-connector-api/src/main/java/org/opendaylight/controller/sal/connector/api/BindingAwareRpcRouter.java [new file with mode: 0644]
opendaylight/md-sal/sal-connector-api/src/main/java/org/opendaylight/controller/sal/connector/api/BindingAwareZeroMqRpcRouter.java [new file with mode: 0644]
opendaylight/md-sal/sal-connector-api/src/main/java/org/opendaylight/controller/sal/connector/api/RpcRouter.java [new file with mode: 0644]

index 3be5b82806437fb973ad5525ba59e6749ccaa592..daeda3da6faeafe4c28baca54f4a68046855fd0d 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-model-api</artifactId>
         </dependency>
-        
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-binding</artifactId>
+        </dependency>
     </dependencies>
 
     <packaging>bundle</packaging>
diff --git a/opendaylight/md-sal/sal-connector-api/src/main/java/org/opendaylight/controller/sal/connector/api/BindingAwareRpcRouter.java b/opendaylight/md-sal/sal-connector-api/src/main/java/org/opendaylight/controller/sal/connector/api/BindingAwareRpcRouter.java
new file mode 100644 (file)
index 0000000..11df1ff
--- /dev/null
@@ -0,0 +1,114 @@
+package org.opendaylight.controller.sal.connector.api;
+
+import java.util.concurrent.Future;
+
+import org.opendaylight.yangtools.concepts.Immutable;
+
+public interface BindingAwareRpcRouter extends RpcRouter<String, String, String, byte[]> {
+
+    @Override
+    public Future<org.opendaylight.controller.sal.connector.api.RpcRouter.RpcReply<byte[]>> sendRpc(
+            RpcRequest<String, String, String, byte[]> input);
+
+    class BindingAwareRequest implements RpcRequest<String, String, String, byte[]>, Immutable {
+
+        private final BindingAwareRouteIdentifier routingInformation;
+        private final byte[] payload;
+
+        public BindingAwareRequest(BindingAwareRouteIdentifier routingInformation, byte[] payload) {
+            super();
+            this.routingInformation = routingInformation;
+            this.payload = payload;
+        }
+
+        public BindingAwareRouteIdentifier getRoutingInformation() {
+            return this.routingInformation;
+        }
+
+        @Override
+        public byte[] getPayload() {
+            return payload;
+        }
+    }
+
+    class BindingAwareRouteIdentifier implements RouteIdentifier<String, String, String>, Immutable {
+
+        private final String type;
+        private final String route;
+        private final String content;
+
+        public BindingAwareRouteIdentifier(String type, String route, String content) {
+            super();
+            this.type = type;
+            this.route = route;
+            this.content = content;
+        }
+
+        /**
+         * Java class name of Rpc Context
+         * 
+         * 
+         */
+        @Override
+        public String getContext() {
+            return this.content;
+        }
+
+        /**
+         * String representation of route e.g. node-id
+         * 
+         */
+        @Override
+        public String getRoute() {
+            return this.route;
+        }
+
+        /**
+         * Java class name of Rpc Type e.g org.opendaylight.AddFlowInput
+         * 
+         */
+        @Override
+        public String getType() {
+            return this.type;
+        }
+
+        @Override
+        public int hashCode() {
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + ((content == null) ? 0 : content.hashCode());
+            result = prime * result + ((route == null) ? 0 : route.hashCode());
+            result = prime * result + ((type == null) ? 0 : type.hashCode());
+            return result;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj)
+                return true;
+            if (obj == null)
+                return false;
+            if (getClass() != obj.getClass())
+                return false;
+            BindingAwareRouteIdentifier other = (BindingAwareRouteIdentifier) obj;
+            if (content == null) {
+                if (other.content != null)
+                    return false;
+            } else if (!content.equals(other.content))
+                return false;
+            if (route == null) {
+                if (other.route != null)
+                    return false;
+            } else if (!route.equals(other.route))
+                return false;
+            if (type == null) {
+                if (other.type != null)
+                    return false;
+            } else if (!type.equals(other.type))
+                return false;
+            return true;
+        }
+
+    }
+
+}
diff --git a/opendaylight/md-sal/sal-connector-api/src/main/java/org/opendaylight/controller/sal/connector/api/BindingAwareZeroMqRpcRouter.java b/opendaylight/md-sal/sal-connector-api/src/main/java/org/opendaylight/controller/sal/connector/api/BindingAwareZeroMqRpcRouter.java
new file mode 100644 (file)
index 0000000..1a360ad
--- /dev/null
@@ -0,0 +1,31 @@
+package org.opendaylight.controller.sal.connector.api;
+
+import java.util.concurrent.Future;
+
+public class BindingAwareZeroMqRpcRouter implements BindingAwareRpcRouter {
+
+    BindingAwareRpcRouter mdSalRouter;
+    
+    public BindingAwareRpcRouter getMdSalRouter() {
+        return mdSalRouter;
+    }
+
+
+    public void setMdSalRouter(BindingAwareRpcRouter mdSalRouter) {
+        this.mdSalRouter = mdSalRouter;
+    }
+
+
+    @Override
+    public Future<RpcReply<byte[]>> sendRpc(RpcRequest<String, String, String, byte[]> input) {
+        // Write message down to the wire
+        return null;
+    }
+    
+    // Receiver part - invoked when request is received and deserialized
+    private Future<RpcReply<byte[]>> receivedRequest(RpcRequest<String, String, String, byte[]> input) {
+        
+        return mdSalRouter.sendRpc(input);
+    }
+
+}
diff --git a/opendaylight/md-sal/sal-connector-api/src/main/java/org/opendaylight/controller/sal/connector/api/RpcRouter.java b/opendaylight/md-sal/sal-connector-api/src/main/java/org/opendaylight/controller/sal/connector/api/RpcRouter.java
new file mode 100644 (file)
index 0000000..4807c4e
--- /dev/null
@@ -0,0 +1,46 @@
+package org.opendaylight.controller.sal.connector.api;
+
+import java.util.concurrent.Future;
+
+/**
+ * 
+ * @author ttkacik
+ *
+ * @param <C> Routing Context Identifier
+ * @param <R> Route Type
+ * @param <T> Rpc Type
+ * @param <D> Data Type
+ */
+public interface RpcRouter<C,R,T,D> {
+
+    
+    
+    Future<RpcReply<D>> sendRpc(RpcRequest<C, R, T, D> input);
+    
+    
+    /**
+     * 
+     * @author 
+     *
+     * @param <C> Routing Context Identifier
+        * @param <R> Route Type
+        * @param <T> Rpc Type
+        * @param <D> Data Type
+     */
+    public interface RpcRequest<C,R,T,D> {
+
+        RouteIdentifier<C,R,T> getRoutingInformation();
+        D getPayload();
+    }
+    
+    public interface RouteIdentifier<C,R,T> {
+        
+        C getContext(); // defines a routing table (e.g. NodeContext)
+        R getRoute(); // e.g. (node identity)
+        T getType(); // rpc type
+    }
+    
+    public interface RpcReply<D> {
+        D getPayload();
+    }
+}