Bug 164
[controller.git] / opendaylight / md-sal / sal-rest-connector / src / main / java / org / opendaylight / controller / sal / restconf / impl / BrokerFacade.xtend
1 package org.opendaylight.controller.sal.restconf.impl
2
3 import javax.ws.rs.WebApplicationException
4 import javax.ws.rs.core.Response
5 import org.opendaylight.controller.md.sal.common.api.data.DataReader
6 import org.opendaylight.controller.sal.core.api.Broker.ConsumerSession
7 import org.opendaylight.controller.sal.core.api.data.DataBrokerService
8 import org.opendaylight.controller.sal.rest.impl.RestconfProvider
9 import org.opendaylight.yangtools.yang.common.QName
10 import org.opendaylight.yangtools.yang.common.RpcResult
11 import org.opendaylight.yangtools.yang.data.api.CompositeNode
12 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier
13
14 class BrokerFacade implements DataReader<InstanceIdentifier, CompositeNode> {
15
16     val static BrokerFacade INSTANCE = new BrokerFacade
17
18     @Property
19     private ConsumerSession context;
20
21     @Property
22     private DataBrokerService dataService;
23     
24     private new() {
25         if (INSTANCE !== null) {
26             throw new IllegalStateException("Already instantiated");
27         }
28     }
29
30     def static BrokerFacade getInstance() {
31         return INSTANCE
32     }
33
34     private def void checkPreconditions() {
35         if (context === null || dataService === null) {
36             throw new WebApplicationException(Response.status(Response.Status.SERVICE_UNAVAILABLE)
37                     .entity(RestconfProvider::NOT_INITALIZED_MSG).build())
38         }
39     }
40
41     override readConfigurationData(InstanceIdentifier path) {
42         checkPreconditions
43         return dataService.readConfigurationData(path);
44     }
45
46     override readOperationalData(InstanceIdentifier path) {
47         checkPreconditions
48         return dataService.readOperationalData(path);
49     }
50
51     def RpcResult<CompositeNode> invokeRpc(QName type, CompositeNode payload) {
52         checkPreconditions
53         val future = context.rpc(type, payload);
54         return future.get;
55     }
56
57     def commitConfigurationDataPut(InstanceIdentifier path, CompositeNode payload) {
58         checkPreconditions
59         val transaction = dataService.beginTransaction;
60         transaction.putConfigurationData(path, payload);
61         return transaction.commit()
62     }
63
64     def commitOperationalDataPut(InstanceIdentifier path, CompositeNode payload) {
65         checkPreconditions
66         val transaction = dataService.beginTransaction;
67         transaction.putOperationalData(path, payload);
68         return transaction.commit()
69     }
70     
71 }