Switch to using yangtools version of mockito-configuration
[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.core.Response
4 import org.opendaylight.controller.md.sal.common.api.data.DataReader
5 import org.opendaylight.controller.sal.core.api.Broker.ConsumerSession
6 import org.opendaylight.controller.sal.core.api.data.DataBrokerService
7 import org.opendaylight.controller.sal.rest.impl.RestconfProvider
8 import org.opendaylight.yangtools.yang.common.QName
9 import org.opendaylight.yangtools.yang.common.RpcResult
10 import org.opendaylight.yangtools.yang.data.api.CompositeNode
11 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier
12 import org.slf4j.LoggerFactory
13
14 class BrokerFacade implements DataReader<InstanceIdentifier, CompositeNode> {
15
16
17     val static LOG = LoggerFactory.getLogger(BrokerFacade)
18     val static BrokerFacade INSTANCE = new BrokerFacade
19
20     @Property
21     private ConsumerSession context;
22
23     @Property
24     private DataBrokerService dataService;
25     
26     private new() {
27         if (INSTANCE !== null) {
28             throw new IllegalStateException("Already instantiated");
29         }
30     }
31
32     def static BrokerFacade getInstance() {
33         return INSTANCE
34     }
35
36     private def void checkPreconditions() {
37         if (context === null || dataService === null) {
38             throw new ResponseException(Response.Status.SERVICE_UNAVAILABLE, RestconfProvider::NOT_INITALIZED_MSG)
39         }
40     }
41
42     override readConfigurationData(InstanceIdentifier path) {
43         checkPreconditions
44         LOG.info("Read Configuration via Restconf: {}", path)
45         return dataService.readConfigurationData(path);
46     }
47
48     override readOperationalData(InstanceIdentifier path) {
49         checkPreconditions
50         LOG.info("Read Operational via Restconf: {}", path)
51         return dataService.readOperationalData(path);
52     }
53
54     def RpcResult<CompositeNode> invokeRpc(QName type, CompositeNode payload) {
55         checkPreconditions
56         val future = context.rpc(type, payload);
57         return future.get;
58     }
59
60     def commitConfigurationDataPut(InstanceIdentifier path, CompositeNode payload) {
61         checkPreconditions
62         val transaction = dataService.beginTransaction;
63         LOG.info("Put Configuration via Restconf: {}", path)
64         transaction.putConfigurationData(path, payload);
65         return transaction.commit
66     }
67
68     def commitConfigurationDataPost(InstanceIdentifier path, CompositeNode payload) {
69         checkPreconditions
70         val transaction = dataService.beginTransaction;
71         transaction.putConfigurationData(path, payload);
72         if (payload == transaction.createdConfigurationData.get(path)) {
73             LOG.info("Post Configuration via Restconf: {}", path)
74             return transaction.commit
75         }
76         LOG.info("Post Configuration via Restconf was not executed because data already exists: {}", path)
77         return null;
78     }
79
80     def commitConfigurationDataDelete(InstanceIdentifier path) {
81         checkPreconditions
82         val transaction = dataService.beginTransaction;
83         transaction.removeConfigurationData(path)
84         return transaction.commit
85     }
86
87 }