Merge "Cleanup root pom "name"."
[controller.git] / opendaylight / netconf / mdsal-netconf-monitoring / src / main / java / org / opendaylight / controller / config / yang / netconf / mdsal / monitoring / NetconfMdsalMonitoringMapperModule.java
1 package org.opendaylight.controller.config.yang.netconf.mdsal.monitoring;
2
3 import com.google.common.base.Optional;
4 import com.google.common.collect.Sets;
5 import java.util.ArrayList;
6 import java.util.Collection;
7 import java.util.Collections;
8 import java.util.List;
9 import java.util.Set;
10 import org.opendaylight.controller.netconf.api.Capability;
11 import org.opendaylight.controller.netconf.api.monitoring.CapabilityListener;
12 import org.opendaylight.controller.netconf.api.monitoring.NetconfMonitoringService;
13 import org.opendaylight.controller.netconf.mapping.api.NetconfOperation;
14 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
15 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory;
16 import org.opendaylight.controller.netconf.monitoring.GetSchema;
17 import org.opendaylight.controller.netconf.monitoring.MonitoringConstants;
18
19 public class NetconfMdsalMonitoringMapperModule extends org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.AbstractNetconfMdsalMonitoringMapperModule {
20     public NetconfMdsalMonitoringMapperModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
21         super(identifier, dependencyResolver);
22     }
23
24     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) {
25         super(identifier, dependencyResolver, oldModule, oldInstance);
26     }
27
28     @Override
29     public void customValidation() {
30         // add custom validation form module attributes here.
31     }
32
33     @Override
34     public java.lang.AutoCloseable createInstance() {
35         final NetconfMonitoringService serverMonitoringDependency = getServerMonitoringDependency();
36
37         final MonitoringToMdsalWriter monitoringToMdsalWriter = new MonitoringToMdsalWriter(serverMonitoringDependency);
38         getBindingAwareBrokerDependency().registerProvider(monitoringToMdsalWriter);
39
40         final MdSalMonitoringMapperFactory mdSalMonitoringMapperFactory = new MdSalMonitoringMapperFactory(new MdsalMonitoringMapper(serverMonitoringDependency)) {
41             @Override
42             public void close() {
43                 super.close();
44                 monitoringToMdsalWriter.close();
45                 getAggregatorDependency().onRemoveNetconfOperationServiceFactory(this);
46             }
47         };
48
49         getAggregatorDependency().onAddNetconfOperationServiceFactory(mdSalMonitoringMapperFactory);
50         return mdSalMonitoringMapperFactory;
51
52     }
53
54     // FIXME almost exactly same code as in netconf-monitoring, refactor
55     private static class MdSalMonitoringMapperFactory implements NetconfOperationServiceFactory, AutoCloseable {
56
57         private final NetconfOperationService operationService;
58
59         private static final Set<Capability> CAPABILITIES = Sets.<Capability>newHashSet(new Capability() {
60
61             @Override
62             public String getCapabilityUri() {
63                 return MonitoringConstants.URI;
64             }
65
66             @Override
67             public Optional<String> getModuleNamespace() {
68                 return Optional.of(MonitoringConstants.NAMESPACE);
69             }
70
71             @Override
72             public Optional<String> getModuleName() {
73                 return Optional.of(MonitoringConstants.MODULE_NAME);
74             }
75
76             @Override
77             public Optional<String> getRevision() {
78                 return Optional.of(MonitoringConstants.MODULE_REVISION);
79             }
80
81             @Override
82             public Optional<String> getCapabilitySchema() {
83                 return Optional.absent();
84             }
85
86             @Override
87             public Collection<String> getLocation() {
88                 return Collections.emptyList();
89             }
90         });
91
92         private static final AutoCloseable AUTO_CLOSEABLE = new AutoCloseable() {
93             @Override
94             public void close() throws Exception {
95                 // NOOP
96             }
97         };
98
99         private final List<CapabilityListener> listeners = new ArrayList<>();
100
101         public MdSalMonitoringMapperFactory(final NetconfOperationService operationService) {
102             this.operationService = operationService;
103         }
104
105         @Override
106         public NetconfOperationService createService(final String netconfSessionIdForReporting) {
107             return operationService;
108         }
109
110         @Override
111         public Set<Capability> getCapabilities() {
112             return CAPABILITIES;
113         }
114
115         @Override
116         public AutoCloseable registerCapabilityListener(final CapabilityListener listener) {
117             listener.onCapabilitiesAdded(getCapabilities());
118             listeners.add(listener);
119             return AUTO_CLOSEABLE;
120         }
121
122         @Override
123         public void close() {
124             for (final CapabilityListener listener : listeners) {
125                 listener.onCapabilitiesRemoved(getCapabilities());
126             }
127         }
128     }
129
130
131     private static class MdsalMonitoringMapper implements NetconfOperationService {
132
133         private final NetconfMonitoringService serverMonitoringDependency;
134
135         public MdsalMonitoringMapper(final NetconfMonitoringService serverMonitoringDependency) {
136             this.serverMonitoringDependency = serverMonitoringDependency;
137         }
138
139         @Override
140         public Set<NetconfOperation> getNetconfOperations() {
141             return Collections.<NetconfOperation>singleton(new GetSchema(serverMonitoringDependency));
142         }
143
144         @Override
145         public void close() {
146             // NOOP
147         }
148     }
149 }