X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=restconf%2Fsal-rest-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Frestconf%2FRestConnectorProvider.java;h=2aab6df3a243926742c4ca9499bfb30b6c7d878a;hb=c44b3ff43728dae97e039d75d793be187157ce00;hp=418c9333e2e01ec853ae45e393b9e88e52891459;hpb=72fa00b36dff4b41997f5935daa5a77e1afd1b52;p=netconf.git diff --git a/restconf/sal-rest-connector/src/main/java/org/opendaylight/restconf/RestConnectorProvider.java b/restconf/sal-rest-connector/src/main/java/org/opendaylight/restconf/RestConnectorProvider.java index 418c9333e2..2aab6df3a2 100644 --- a/restconf/sal-rest-connector/src/main/java/org/opendaylight/restconf/RestConnectorProvider.java +++ b/restconf/sal-rest-connector/src/main/java/org/opendaylight/restconf/RestConnectorProvider.java @@ -9,22 +9,20 @@ package org.opendaylight.restconf; import com.google.common.base.Preconditions; -import java.util.Collection; -import java.util.Collections; import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction; import org.opendaylight.controller.md.sal.common.api.data.TransactionChain; import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; +import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; -import org.opendaylight.controller.sal.core.api.Broker.ProviderSession; -import org.opendaylight.controller.sal.core.api.Provider; import org.opendaylight.controller.sal.core.api.model.SchemaService; import org.opendaylight.netconf.sal.rest.api.RestConnector; import org.opendaylight.netconf.sal.restconf.impl.RestconfDocumentedException; -import org.opendaylight.restconf.common.wrapper.services.Draft16ServicesWrapperImpl; +import org.opendaylight.restconf.common.wrapper.services.ServicesWrapperImpl; import org.opendaylight.restconf.handlers.DOMDataBrokerHandler; import org.opendaylight.restconf.handlers.DOMMountPointServiceHandler; +import org.opendaylight.restconf.handlers.NotificationServiceHandler; import org.opendaylight.restconf.handlers.RpcServiceHandler; import org.opendaylight.restconf.handlers.SchemaContextHandler; import org.opendaylight.restconf.handlers.TransactionChainHandler; @@ -34,14 +32,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * Provider for restconf draft16. + * Provider for restconf draft18. * */ -public class RestConnectorProvider implements Provider, RestConnector, AutoCloseable { +public class RestConnectorProvider implements RestConnector, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(RestConnectorProvider.class); - public static final TransactionChainListener transactionListener = new TransactionChainListener() { + public static final TransactionChainListener TRANSACTION_CHAIN_LISTENER = new TransactionChainListener() { @Override public void onTransactionChainFailed(final TransactionChain chain, final AsyncTransaction transaction, final Throwable cause) { @@ -56,53 +54,76 @@ public class RestConnectorProvider implements Provider, RestConnector, AutoClose } }; - private ListenerRegistration listenerRegistration; private static TransactionChainHandler transactionChainHandler; private static DOMDataBroker dataBroker; + private static DOMMountPointServiceHandler mountPointServiceHandler; - @Override - public void onSessionInitiated(final ProviderSession session) { - final SchemaService schemaService = Preconditions.checkNotNull(session.getService(SchemaService.class)); + private final SchemaService schemaService; + private final DOMRpcService rpcService; + private final DOMNotificationService notificationService; + private final DOMMountPointService mountPointService; + private ListenerRegistration listenerRegistration; + + private SchemaContextHandler schemaCtxHandler; + + public RestConnectorProvider(DOMDataBroker domDataBroker, SchemaService schemaService, DOMRpcService rpcService, + DOMNotificationService notificationService, DOMMountPointService mountPointService) { + this.schemaService = Preconditions.checkNotNull(schemaService); + this.rpcService = Preconditions.checkNotNull(rpcService); + this.notificationService = Preconditions.checkNotNull(notificationService); + this.mountPointService = Preconditions.checkNotNull(mountPointService); + + RestConnectorProvider.dataBroker = Preconditions.checkNotNull(domDataBroker); + } - final Draft16ServicesWrapperImpl wrapperServices = Draft16ServicesWrapperImpl.getInstance(); + public void start() { + final ServicesWrapperImpl wrapperServices = ServicesWrapperImpl.getInstance(); - final SchemaContextHandler schemaCtxHandler = new SchemaContextHandler(); - this.listenerRegistration = schemaService.registerSchemaContextListener(schemaCtxHandler); + mountPointServiceHandler = new DOMMountPointServiceHandler(mountPointService); - final DOMMountPointServiceHandler domMountPointServiceHandler = new DOMMountPointServiceHandler( - session.getService(DOMMountPointService.class)); + final DOMDataBrokerHandler brokerHandler = new DOMDataBrokerHandler(dataBroker); - RestConnectorProvider.dataBroker = session.getService(DOMDataBroker.class); - final DOMDataBrokerHandler brokerHandler = new DOMDataBrokerHandler(RestConnectorProvider.dataBroker); + RestConnectorProvider.transactionChainHandler = new TransactionChainHandler(dataBroker + .createTransactionChain(RestConnectorProvider.TRANSACTION_CHAIN_LISTENER)); - RestConnectorProvider.transactionChainHandler = new TransactionChainHandler(RestConnectorProvider.dataBroker - .createTransactionChain(RestConnectorProvider.transactionListener)); + this.schemaCtxHandler = new SchemaContextHandler(transactionChainHandler); + this.listenerRegistration = schemaService.registerSchemaContextListener(this.schemaCtxHandler); - final DOMRpcService rpcService = session.getService(DOMRpcService.class); final RpcServiceHandler rpcServiceHandler = new RpcServiceHandler(rpcService); - wrapperServices.setHandlers(schemaCtxHandler, domMountPointServiceHandler, - RestConnectorProvider.transactionChainHandler, brokerHandler, rpcServiceHandler); + final NotificationServiceHandler notificationServiceHandler = + new NotificationServiceHandler(notificationService); + + wrapperServices.setHandlers(this.schemaCtxHandler, RestConnectorProvider.mountPointServiceHandler, + RestConnectorProvider.transactionChainHandler, brokerHandler, rpcServiceHandler, + notificationServiceHandler); + } + + public DOMMountPointServiceHandler getMountPointServiceHandler() { + return mountPointServiceHandler; } /** * After {@link TransactionChain} failed, this updates {@link TransactionChainHandler} with new transaction chain. * * @param chain - * - old {@link TransactionChain} + * old {@link TransactionChain} */ public static void resetTransactionChainForAdapaters(final TransactionChain chain) { LOG.trace("Resetting TransactionChain({})", chain); chain.close(); RestConnectorProvider.transactionChainHandler.update( - Preconditions.checkNotNull(RestConnectorProvider.dataBroker).createTransactionChain( - RestConnectorProvider.transactionListener) + Preconditions.checkNotNull(dataBroker).createTransactionChain( + RestConnectorProvider.TRANSACTION_CHAIN_LISTENER) ); } - @Override - public Collection getProviderFunctionality() { - return Collections.emptySet(); + /** + * Get current {@link DOMMountPointService} from {@link DOMMountPointServiceHandler}. + * @return {@link DOMMountPointService} + */ + public static DOMMountPointService getMountPointService() { + return mountPointServiceHandler.get(); } @Override @@ -113,8 +134,12 @@ public class RestConnectorProvider implements Provider, RestConnector, AutoClose } // close transaction chain - if (RestConnectorProvider.transactionChainHandler != null) { - RestConnectorProvider.transactionChainHandler.get().close(); + if (transactionChainHandler != null && transactionChainHandler.get() != null) { + transactionChainHandler.get().close(); } + + transactionChainHandler = null; + mountPointServiceHandler = null; + dataBroker = null; } }