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
13 import org.opendaylight.controller.sal.core.api.mount.MountInstance
15 class BrokerFacade implements DataReader<InstanceIdentifier, CompositeNode> {
18 val static LOG = LoggerFactory.getLogger(BrokerFacade)
19 val static BrokerFacade INSTANCE = new BrokerFacade
22 private ConsumerSession context;
25 private DataBrokerService dataService;
28 if (INSTANCE !== null) {
29 throw new IllegalStateException("Already instantiated");
33 def static BrokerFacade getInstance() {
37 private def void checkPreconditions() {
38 if (context === null || dataService === null) {
39 throw new ResponseException(Response.Status.SERVICE_UNAVAILABLE, RestconfProvider::NOT_INITALIZED_MSG)
43 override readConfigurationData(InstanceIdentifier path) {
45 LOG.info("Read Configuration via Restconf: {}", path)
46 return dataService.readConfigurationData(path);
49 def readConfigurationDataBehindMountPoint(MountInstance mountPoint, InstanceIdentifier path) {
51 LOG.info("Read Configuration via Restconf: {}", path)
52 return mountPoint.readConfigurationData(path);
55 override readOperationalData(InstanceIdentifier path) {
57 LOG.info("Read Operational via Restconf: {}", path)
58 return dataService.readOperationalData(path);
61 def readOperationalDataBehindMountPoint(MountInstance mountPoint, InstanceIdentifier path) {
63 LOG.info("Read Operational via Restconf: {}", path)
64 return mountPoint.readOperationalData(path);
67 def RpcResult<CompositeNode> invokeRpc(QName type, CompositeNode payload) {
69 val future = context.rpc(type, payload);
73 def commitConfigurationDataPut(InstanceIdentifier path, CompositeNode payload) {
75 val transaction = dataService.beginTransaction;
76 LOG.info("Put Configuration via Restconf: {}", path)
77 transaction.putConfigurationData(path, payload);
78 return transaction.commit
81 def commitConfigurationDataPutBehindMountPoint(MountInstance mountPoint, InstanceIdentifier path, CompositeNode payload) {
83 val transaction = mountPoint.beginTransaction;
84 LOG.info("Put Configuration via Restconf: {}", path)
85 transaction.putConfigurationData(path, payload);
86 return transaction.commit
89 def commitConfigurationDataPost(InstanceIdentifier path, CompositeNode payload) {
91 val transaction = dataService.beginTransaction;
92 transaction.putConfigurationData(path, payload);
93 if (payload == transaction.createdConfigurationData.get(path)) {
94 LOG.info("Post Configuration via Restconf: {}", path)
95 return transaction.commit
97 LOG.info("Post Configuration via Restconf was not executed because data already exists: {}", path)
101 def commitConfigurationDataPostBehindMountPoint(MountInstance mountPoint, InstanceIdentifier path, CompositeNode payload) {
103 val transaction = mountPoint.beginTransaction;
104 transaction.putConfigurationData(path, payload);
105 if (payload == transaction.createdConfigurationData.get(path)) {
106 LOG.info("Post Configuration via Restconf: {}", path)
107 return transaction.commit
109 LOG.info("Post Configuration via Restconf was not executed because data already exists: {}", path)
113 def commitConfigurationDataDelete(InstanceIdentifier path) {
115 val transaction = dataService.beginTransaction;
116 transaction.removeConfigurationData(path)
117 return transaction.commit
120 def commitConfigurationDataDeleteBehindMountPoint(MountInstance mountPoint, InstanceIdentifier path) {
122 val transaction = mountPoint.beginTransaction;
123 transaction.removeConfigurationData(path)
124 return transaction.commit