2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netconf.server.osgi;
10 import static java.util.Objects.requireNonNull;
12 import java.util.Optional;
13 import java.util.concurrent.Executors;
14 import java.util.concurrent.ScheduledExecutorService;
15 import java.util.concurrent.ThreadFactory;
16 import java.util.concurrent.TimeUnit;
17 import org.opendaylight.netconf.server.api.monitoring.NetconfMonitoringService;
18 import org.opendaylight.netconf.server.api.monitoring.SessionListener;
19 import org.opendaylight.netconf.server.api.notifications.BaseNotificationPublisherRegistration;
20 import org.opendaylight.netconf.server.api.operations.NetconfOperationServiceFactory;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Capabilities;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Schemas;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Sessions;
24 import org.opendaylight.yangtools.concepts.Registration;
26 public class NetconfMonitoringServiceImpl implements NetconfMonitoringService, AutoCloseable {
27 private final NetconfCapabilityMonitoringService capabilityMonitoring;
28 private final NetconfSessionMonitoringService sessionMonitoring;
29 private final ScheduledExecutorService executorService;
31 private NetconfMonitoringServiceImpl(final NetconfOperationServiceFactory opProvider,
32 final NetconfSessionMonitoringService sessionMonitoring) {
33 capabilityMonitoring = new NetconfCapabilityMonitoringService(opProvider);
34 this.sessionMonitoring = requireNonNull(sessionMonitoring);
35 executorService = null;
38 public NetconfMonitoringServiceImpl(final NetconfOperationServiceFactory opProvider) {
39 this(opProvider, new NetconfSessionMonitoringService.WithoutUpdates());
42 public NetconfMonitoringServiceImpl(final NetconfOperationServiceFactory opProvider,
43 final ThreadFactory threadFactory, final long period, final TimeUnit timeUnit) {
44 capabilityMonitoring = new NetconfCapabilityMonitoringService(opProvider);
46 executorService = Executors.unconfigurableScheduledExecutorService(
47 // Note: 0 core pool size, as we want to shut the thread down when we do not have listeners
48 Executors.newScheduledThreadPool(0, threadFactory));
49 sessionMonitoring = new NetconfSessionMonitoringService.WithUpdates(executorService, period, timeUnit);
51 executorService = null;
52 sessionMonitoring = new NetconfSessionMonitoringService.WithoutUpdates();
56 public NetconfMonitoringServiceImpl(final NetconfOperationServiceFactory opProvider,
57 final ScheduledExecutorService threadPool, final long periodSeconds) {
58 this(opProvider, periodSeconds > 0
59 ? new NetconfSessionMonitoringService.WithUpdates(threadPool, periodSeconds, TimeUnit.SECONDS)
60 : new NetconfSessionMonitoringService.WithoutUpdates());
64 public Sessions getSessions() {
65 return sessionMonitoring.getSessions();
69 public SessionListener getSessionListener() {
70 return sessionMonitoring;
74 public Schemas getSchemas() {
75 return capabilityMonitoring.getSchemas();
79 public String getSchemaForCapability(final String moduleName, final Optional<String> revision) {
80 return capabilityMonitoring.getSchemaForModuleRevision(moduleName, revision);
84 public Capabilities getCapabilities() {
85 return capabilityMonitoring.getCapabilities();
89 public Registration registerCapabilitiesListener(final CapabilitiesListener listener) {
90 return capabilityMonitoring.registerListener(listener);
94 public Registration registerSessionsListener(final SessionsListener listener) {
95 return sessionMonitoring.registerListener(listener);
98 public void setNotificationPublisher(final BaseNotificationPublisherRegistration notificationPublisher) {
99 capabilityMonitoring.setNotificationPublisher(notificationPublisher);
103 public void close() {
104 capabilityMonitoring.close();
105 sessionMonitoring.close();
106 if (executorService != null) {
107 executorService.shutdown();