Implementation for enabling remote rpc calls between 2 instances of md-sal
[controller.git] / opendaylight / md-sal / sal-remoterpc-connector / implementation / src / main / java / org / opendaylight / controller / sal / connector / remoterpc / RemoteRpcProvider.java
1 package org.opendaylight.controller.sal.connector.remoterpc;
2
3 import java.util.Collection;
4 import java.util.Set;
5 import java.util.concurrent.ExecutorService;
6
7 import org.opendaylight.controller.sal.connector.remoterpc.Client;
8 import org.opendaylight.controller.sal.connector.remoterpc.api.RoutingTable;
9 import org.opendaylight.controller.sal.core.api.Broker.ProviderSession;
10 import org.opendaylight.controller.sal.core.api.Provider;
11 import org.opendaylight.controller.sal.core.api.Provider.ProviderFunctionality;
12 import org.opendaylight.yangtools.yang.common.QName;
13 import org.opendaylight.yangtools.yang.common.RpcResult;
14 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
15
16 public class RemoteRpcProvider implements 
17     RemoteRpcServer,
18     RemoteRpcClient,
19     Provider {
20
21     private final ServerImpl server;
22     private final Client client;
23     private RoutingTableProvider provider;
24
25     @Override
26     public void setRoutingTableProvider(RoutingTableProvider provider) {
27         this.provider = provider;
28         server.setRoutingTableProvider(provider);
29         client.setRoutingTableProvider(provider);
30     }
31     
32     @Override
33     public RpcResult<CompositeNode> invokeRpc(QName rpc, CompositeNode input) {
34         return client.invokeRpc(rpc, input);
35     }
36     
37     @Override
38     public Set<QName> getSupportedRpcs() {
39         return client.getSupportedRpcs();
40     }
41     
42     
43     public RemoteRpcProvider(ServerImpl server, Client client) {
44         this.server = server;
45         this.client = client;
46     }
47     
48     public void setBrokerSession(ProviderSession session) {
49         server.setBrokerSession(session);
50     }
51     public void setServerPool(ExecutorService serverPool) {
52         server.setServerPool(serverPool);
53     }
54     public void start() {
55         client.setRoutingTableProvider(provider);
56         server.setRoutingTableProvider(provider);
57         server.start();
58         client.start();
59     }
60     public void onRouteUpdated(String key, Set values) {
61         server.onRouteUpdated(key, values);
62     }
63     public void onRouteDeleted(String key) {
64         server.onRouteDeleted(key);
65     }
66     
67     
68     @Override
69     public Collection<ProviderFunctionality> getProviderFunctionality() {
70         // TODO Auto-generated method stub
71         return null;
72     }
73     
74     
75     @Override
76     public void onSessionInitiated(ProviderSession session) {
77         server.setBrokerSession(session);
78         start();
79     }
80     
81     
82     public void close() throws Exception {
83         server.close();
84         client.close();
85     }
86
87     
88     
89     
90     @Override
91     public void stop() {
92         server.stop();
93         client.stop();
94     }
95 }