Add copyright headers to sal-rest-connector
[netconf.git] / opendaylight / netconf / mdsal-netconf-monitoring / src / main / java / org / opendaylight / controller / config / yang / netconf / mdsal / monitoring / NetconfMdsalMonitoringMapperModule.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.controller.config.yang.netconf.mdsal.monitoring;
10
11 import java.util.Collections;
12 import java.util.Set;
13 import org.opendaylight.controller.config.util.capability.Capability;
14 import org.opendaylight.netconf.api.monitoring.CapabilityListener;
15 import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService;
16 import org.opendaylight.netconf.mapping.api.NetconfOperation;
17 import org.opendaylight.netconf.mapping.api.NetconfOperationService;
18 import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactory;
19 import org.opendaylight.netconf.monitoring.GetSchema;
20
21 public class NetconfMdsalMonitoringMapperModule extends org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.AbstractNetconfMdsalMonitoringMapperModule {
22     public NetconfMdsalMonitoringMapperModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
23         super(identifier, dependencyResolver);
24     }
25
26     public NetconfMdsalMonitoringMapperModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, final org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.NetconfMdsalMonitoringMapperModule oldModule, final java.lang.AutoCloseable oldInstance) {
27         super(identifier, dependencyResolver, oldModule, oldInstance);
28     }
29
30     @Override
31     public void customValidation() {
32         // add custom validation form module attributes here.
33     }
34
35     @Override
36     public java.lang.AutoCloseable createInstance() {
37         final NetconfMonitoringService serverMonitoringDependency = getServerMonitoringDependency();
38
39         final MonitoringToMdsalWriter monitoringToMdsalWriter = new MonitoringToMdsalWriter(serverMonitoringDependency);
40         getBindingAwareBrokerDependency().registerProvider(monitoringToMdsalWriter);
41
42         final MdSalMonitoringMapperFactory mdSalMonitoringMapperFactory = new MdSalMonitoringMapperFactory(new MdsalMonitoringMapper(serverMonitoringDependency)) {
43             @Override
44             public void close() {
45                 super.close();
46                 monitoringToMdsalWriter.close();
47                 getAggregatorDependency().onRemoveNetconfOperationServiceFactory(this);
48             }
49         };
50
51         getAggregatorDependency().onAddNetconfOperationServiceFactory(mdSalMonitoringMapperFactory);
52         return mdSalMonitoringMapperFactory;
53
54     }
55
56     // FIXME almost exactly same code as in netconf-monitoring, refactor
57     private static class MdSalMonitoringMapperFactory implements NetconfOperationServiceFactory, AutoCloseable {
58
59         private final NetconfOperationService operationService;
60
61         private static final AutoCloseable AUTO_CLOSEABLE = new AutoCloseable() {
62             @Override
63             public void close() throws Exception {
64                 // NOOP
65             }
66         };
67
68         public MdSalMonitoringMapperFactory(final NetconfOperationService operationService) {
69             this.operationService = operationService;
70         }
71
72         @Override
73         public NetconfOperationService createService(final String netconfSessionIdForReporting) {
74             return operationService;
75         }
76
77         @Override
78         public Set<Capability> getCapabilities() {
79             // TODO
80             // No capabilities exposed to prevent clashes with schemas from mdsal-netconf-connector (it exposes all the schemas)
81             // If the schemas exposed by mdsal-netconf-connector are filtered, this class would expose monitoring related models
82             return Collections.emptySet();
83         }
84
85         @Override
86         public AutoCloseable registerCapabilityListener(final CapabilityListener listener) {
87             return AUTO_CLOSEABLE;
88         }
89
90         @Override
91         public void close() {}
92     }
93
94
95     private static class MdsalMonitoringMapper implements NetconfOperationService {
96
97         private final NetconfMonitoringService serverMonitoringDependency;
98
99         public MdsalMonitoringMapper(final NetconfMonitoringService serverMonitoringDependency) {
100             this.serverMonitoringDependency = serverMonitoringDependency;
101         }
102
103         @Override
104         public Set<NetconfOperation> getNetconfOperations() {
105             return Collections.<NetconfOperation>singleton(new GetSchema(serverMonitoringDependency));
106         }
107
108         @Override
109         public void close() {
110             // NOOP
111         }
112     }
113 }