1 package org.opendaylight.controller.sal.restconf.impl
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
14 class BrokerFacade implements DataReader<InstanceIdentifier, CompositeNode> {
17 val static LOG = LoggerFactory.getLogger(BrokerFacade)
18 val static BrokerFacade INSTANCE = new BrokerFacade
21 private ConsumerSession context;
24 private DataBrokerService dataService;
27 if (INSTANCE !== null) {
28 throw new IllegalStateException("Already instantiated");
32 def static BrokerFacade getInstance() {
36 private def void checkPreconditions() {
37 if (context === null || dataService === null) {
38 throw new ResponseException(Response.Status.SERVICE_UNAVAILABLE, RestconfProvider::NOT_INITALIZED_MSG)
42 override readConfigurationData(InstanceIdentifier path) {
44 LOG.info("Read Configuration via Restconf: {}", path)
45 return dataService.readConfigurationData(path);
48 override readOperationalData(InstanceIdentifier path) {
50 LOG.info("Read Operational via Restconf: {}", path)
51 return dataService.readOperationalData(path);
54 def RpcResult<CompositeNode> invokeRpc(QName type, CompositeNode payload) {
56 val future = context.rpc(type, payload);
60 def commitConfigurationDataPut(InstanceIdentifier path, CompositeNode payload) {
62 val transaction = dataService.beginTransaction;
63 LOG.info("Put Configuration via Restconf: {}", path)
64 transaction.putConfigurationData(path, payload);
65 return transaction.commit
68 def commitConfigurationDataPost(InstanceIdentifier path, CompositeNode payload) {
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
76 LOG.info("Post Configuration via Restconf was not executed because data already exists: {}", path)
80 def commitConfigurationDataDelete(InstanceIdentifier path) {
82 val transaction = dataService.beginTransaction;
83 transaction.removeConfigurationData(path)
84 return transaction.commit