1 package org.opendaylight.controller.sample.zeromq.provider;
3 import org.opendaylight.controller.sal.common.util.RpcErrors;
4 import org.opendaylight.controller.sal.common.util.Rpcs;
5 import org.opendaylight.controller.sal.core.api.AbstractProvider;
6 import org.opendaylight.controller.sal.core.api.Broker.ProviderSession;
7 import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
8 import org.opendaylight.controller.sal.core.api.RpcImplementation;
9 import org.opendaylight.yangtools.yang.common.QName;
10 import org.opendaylight.yangtools.yang.common.RpcError;
11 import org.opendaylight.yangtools.yang.common.RpcResult;
12 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
13 import org.opendaylight.yangtools.yang.data.api.Node;
14 import org.opendaylight.yangtools.yang.data.impl.CompositeNodeTOImpl;
15 import org.opendaylight.yangtools.yang.data.impl.SimpleNodeTOImpl;
16 import org.osgi.framework.BundleContext;
17 import org.osgi.framework.ServiceRegistration;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
24 public class ExampleProvider extends AbstractProvider implements RpcImplementation {
26 private final URI namespace = URI.create("http://cisco.com/example");
27 private final QName QNAME = new QName(namespace, "heartbeat");
28 private RpcRegistration reg;
30 private ServiceRegistration thisReg;
32 private ProviderSession session;
33 private Logger _logger = LoggerFactory.getLogger(ExampleProvider.class);
36 public void onSessionInitiated(ProviderSession session) {
37 this.session = session;
41 public Set<QName> getSupportedRpcs() {
42 Set<QName> supportedRpcs = new HashSet<QName>();
43 supportedRpcs.add(QNAME);
48 public RpcResult<CompositeNode> invokeRpc(final QName rpc, CompositeNode input) {
49 boolean success = false;
50 CompositeNode output = null;
51 Collection<RpcError> errors = new ArrayList<>();
53 // Only handle supported RPC calls
54 if (getSupportedRpcs().contains(rpc)) {
56 errors.add(RpcErrors.getRpcError("app", "tag", "info", RpcError.ErrorSeverity.WARNING, "message:null input", RpcError.ErrorType.RPC, null));
59 if (isErroneousInput(input)) {
60 errors.add(RpcErrors.getRpcError("app", "tag", "info", RpcError.ErrorSeverity.ERROR, "message:error", RpcError.ErrorType.RPC, null));
64 output = addSuccessNode(input);
68 return Rpcs.getRpcResult(success, output, errors);
71 // Examines input -- dives into CompositeNodes and finds any value equal to "error"
72 private boolean isErroneousInput(CompositeNode input) {
73 for (Node<?> n : input.getChildren()) {
74 if (n instanceof CompositeNode) {
75 if (isErroneousInput((CompositeNode)n)) {
80 if ((input.getChildren().get(0).getValue()).equals("error")) {
88 // Adds a child SimpleNode containing the value "success" to the input CompositeNode
89 private CompositeNode addSuccessNode(CompositeNode input) {
90 List<Node<?>> list = new ArrayList<Node<?>>(input.getChildren());
91 SimpleNodeTOImpl<String> simpleNode = new SimpleNodeTOImpl<String>(QNAME, input, "success");
93 return new CompositeNodeTOImpl(QNAME, null, list);
97 protected void startImpl(BundleContext context) {
98 thisReg = context.registerService(ExampleProvider.class, this, new Hashtable<String, String>());
102 protected void stopImpl(BundleContext context) {
106 thisReg.unregister();
107 } catch (Exception e) {
108 // TODO Auto-generated catch block
114 public void announce(QName name) {
115 _logger.debug("Announcing [{}]\n\n\n", name);
116 reg = this.session.addRpcImplementation(name, this);