Merge "Bug 2731: Discard changes only when transaction exist."
[controller.git] / opendaylight / netconf / mdsal-netconf-monitoring / src / main / java / org / opendaylight / controller / netconf / monitoring / NetconfMonitoringOperationServiceFactory.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.netconf.monitoring;
10
11 import com.google.common.base.Optional;
12 import com.google.common.collect.Sets;
13 import java.util.ArrayList;
14 import java.util.Collection;
15 import java.util.Collections;
16 import java.util.List;
17 import java.util.Set;
18 import org.opendaylight.controller.netconf.api.Capability;
19 import org.opendaylight.controller.netconf.api.monitoring.CapabilityListener;
20 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
21 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory;
22
23 /**
24 * Created by mmarsale on 18.2.2015.
25 */
26 public class NetconfMonitoringOperationServiceFactory implements NetconfOperationServiceFactory, AutoCloseable {
27
28     private final NetconfMonitoringOperationService operationService;
29
30     private static final Set<Capability> CAPABILITIES = Sets.<Capability>newHashSet(new Capability() {
31
32         @Override
33         public String getCapabilityUri() {
34             return MonitoringConstants.URI;
35         }
36
37         @Override
38         public Optional<String> getModuleNamespace() {
39             return Optional.of(MonitoringConstants.NAMESPACE);
40         }
41
42         @Override
43         public Optional<String> getModuleName() {
44             return Optional.of(MonitoringConstants.MODULE_NAME);
45         }
46
47         @Override
48         public Optional<String> getRevision() {
49             return Optional.of(MonitoringConstants.MODULE_REVISION);
50         }
51
52         @Override
53         public Optional<String> getCapabilitySchema() {
54             return Optional.absent();
55         }
56
57         @Override
58         public Collection<String> getLocation() {
59             return Collections.emptyList();
60         }
61     });
62
63     private static final AutoCloseable AUTO_CLOSEABLE = new AutoCloseable() {
64         @Override
65         public void close() throws Exception {
66             // NOOP
67         }
68     };
69
70     private final List<CapabilityListener> listeners = new ArrayList<>();
71
72     public NetconfMonitoringOperationServiceFactory(final NetconfMonitoringOperationService operationService) {
73         this.operationService = operationService;
74     }
75
76     @Override
77     public NetconfOperationService createService(final String netconfSessionIdForReporting) {
78         return operationService;
79     }
80
81     @Override
82     public Set<Capability> getCapabilities() {
83         return CAPABILITIES;
84     }
85
86     @Override
87     public AutoCloseable registerCapabilityListener(final CapabilityListener listener) {
88         listener.onCapabilitiesAdded(getCapabilities());
89         listeners.add(listener);
90         return AUTO_CLOSEABLE;
91     }
92
93     @Override
94     public void close() {
95         for (final CapabilityListener listener : listeners) {
96             listener.onCapabilitiesRemoved(getCapabilities());
97         }
98     }
99 }