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;
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) {
}
};
- private ListenerRegistration<SchemaContextListener> 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<SchemaContextListener> 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<ProviderFunctionality> getProviderFunctionality() {
- return Collections.emptySet();
+ /**
+ * Get current {@link DOMMountPointService} from {@link DOMMountPointServiceHandler}.
+ * @return {@link DOMMountPointService}
+ */
+ public static DOMMountPointService getMountPointService() {
+ return mountPointServiceHandler.get();
}
@Override
}
// 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;
}
}