Remove the option to deliver streams over WebSockets
[netconf.git] / netconf / tools / netconf-testtool / src / main / java / org / opendaylight / netconf / test / tool / DummyMonitoringService.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 package org.opendaylight.netconf.test.tool;
9
10 import static com.google.common.base.Preconditions.checkState;
11
12 import com.google.common.collect.ArrayListMultimap;
13 import com.google.common.collect.ImmutableSet;
14 import java.util.HashSet;
15 import java.util.Optional;
16 import java.util.Set;
17 import java.util.stream.Collectors;
18 import org.opendaylight.netconf.server.api.monitoring.Capability;
19 import org.opendaylight.netconf.server.api.monitoring.NetconfManagementSession;
20 import org.opendaylight.netconf.server.api.monitoring.NetconfMonitoringService;
21 import org.opendaylight.netconf.server.api.monitoring.SessionEvent;
22 import org.opendaylight.netconf.server.api.monitoring.SessionListener;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.Yang;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Capabilities;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.CapabilitiesBuilder;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Schemas;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.SchemasBuilder;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Sessions;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.SessionsBuilder;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.Schema.Location;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.Schema.Location.Enumeration;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.SchemaBuilder;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.SchemaKey;
35 import org.opendaylight.yangtools.concepts.NoOpObjectRegistration;
36 import org.opendaylight.yangtools.concepts.Registration;
37 import org.opendaylight.yangtools.yang.binding.util.BindingMap;
38
39 public class DummyMonitoringService implements NetconfMonitoringService {
40     private static final Sessions EMPTY_SESSIONS = new SessionsBuilder().build();
41
42     private final Capabilities capabilities;
43     private final ArrayListMultimap<String, Capability> capabilityMultiMap;
44     private final Schemas schemas;
45
46     public DummyMonitoringService(final Set<Capability> capabilities) {
47         this.capabilities = new CapabilitiesBuilder()
48             .setCapability(capabilities.stream()
49                 .map(capability -> new Uri(capability.getCapabilityUri()))
50                 .collect(ImmutableSet.toImmutableSet()))
51             .build();
52
53         final var moduleCapabilities = new HashSet<Capability>();
54         capabilityMultiMap = ArrayListMultimap.create();
55         for (var cap : capabilities) {
56             cap.getModuleName().ifPresent(moduleName -> {
57                 capabilityMultiMap.put(moduleName, cap);
58                 moduleCapabilities.add(cap);
59             });
60         }
61
62         schemas = new SchemasBuilder()
63             .setSchema(BindingMap.of(moduleCapabilities.stream()
64                 .map(capability -> new SchemaBuilder()
65                     .setIdentifier(capability.getModuleName().orElseThrow())
66                     .setNamespace(new Uri(capability.getModuleNamespace().orElseThrow()))
67                     .setFormat(Yang.VALUE)
68                     .setVersion(capability.getRevision().orElse(""))
69                     .setLocation(Set.of(new Location(Enumeration.NETCONF)))
70                     .withKey(new SchemaKey(Yang.VALUE, capability.getModuleName().orElseThrow(),
71                         capability.getRevision().orElse("")))
72                     .build())
73                 .collect(Collectors.toList())))
74             .build();
75     }
76
77     @Override
78     public Sessions getSessions() {
79         return EMPTY_SESSIONS;
80     }
81
82     @Override
83     public SessionListener getSessionListener() {
84         return new SessionListener() {
85             @Override
86             public void onSessionUp(final NetconfManagementSession session) {
87                 //no op
88             }
89
90             @Override
91             public void onSessionDown(final NetconfManagementSession session) {
92                 //no op
93             }
94
95             @Override
96             public void onSessionEvent(final SessionEvent event) {
97                 //no op
98             }
99         };
100     }
101
102     @Override
103     public Schemas getSchemas() {
104         return schemas;
105     }
106
107     @Override
108     public String getSchemaForCapability(final String moduleName, final Optional<String> revision) {
109         final var capabilityList = capabilityMultiMap.get(moduleName);
110         if (revision.isPresent()) {
111             for (var capability : capabilityList) {
112                 if (capability.getRevision().orElse("").equals(revision.orElseThrow())) {
113                     return capability.getCapabilitySchema().orElseThrow();
114                 }
115             }
116         } else {
117             checkState(capabilityList.size() == 1,
118                 "Expected 1 capability for module %s, available revisions : %s", moduleName, capabilityList);
119             //Only one revision is present, so return it
120             return capabilityList.iterator().next().getCapabilitySchema().orElseThrow();
121         }
122
123         throw new IllegalArgumentException(
124             "Module with name: " + moduleName + " and revision: " + revision + " does not exist");
125     }
126
127     @Override
128     public Capabilities getCapabilities() {
129         return capabilities;
130     }
131
132     @Override
133     public Registration registerCapabilitiesListener(final CapabilitiesListener listener) {
134         return NoOpObjectRegistration.of(listener);
135     }
136
137     @Override
138     public Registration registerSessionsListener(final SessionsListener listener) {
139         return NoOpObjectRegistration.of(listener);
140     }
141 }