Merge "Moved Schema Aware logic from DataStore to SchemaAwareDataStore adapter"
[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 ResponseException(Response.Status.SERVICE_UNAVAILABLE, RestconfProvider::NOT_INITALIZED_MSG)
37         }
38     }
39
40     override readConfigurationData(InstanceIdentifier path) {
41         checkPreconditions
42         return dataService.readConfigurationData(path);
43     }
44
45     override readOperationalData(InstanceIdentifier path) {
46         checkPreconditions
47         return dataService.readOperationalData(path);
48     }
49
50     def RpcResult<CompositeNode> invokeRpc(QName type, CompositeNode payload) {
51         checkPreconditions
52         val future = context.rpc(type, payload);
53         return future.get;
54     }
55
56     def commitConfigurationDataPut(InstanceIdentifier path, CompositeNode payload) {
57         checkPreconditions
58         val transaction = dataService.beginTransaction;
59         transaction.putConfigurationData(path, payload);
60         return transaction.commit()
61     }
62
63     def commitOperationalDataPut(InstanceIdentifier path, CompositeNode payload) {
64         checkPreconditions
65         val transaction = dataService.beginTransaction;
66         transaction.putOperationalData(path, payload);
67         return transaction.commit()
68     }
69     
70 }