Merge "Bug 3864: Notify netconf monitoring about changes in session"
[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
9 package org.opendaylight.netconf.test.tool;
10
11 import com.google.common.base.Function;
12 import com.google.common.base.Optional;
13 import com.google.common.collect.ArrayListMultimap;
14 import com.google.common.collect.Collections2;
15 import com.google.common.collect.Lists;
16 import com.google.common.collect.Sets;
17 import java.util.Collections;
18 import java.util.Set;
19 import javax.annotation.Nullable;
20 import org.opendaylight.controller.config.util.capability.Capability;
21 import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService;
22 import org.opendaylight.netconf.api.monitoring.SessionListener;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.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;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.Schema.Location;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.Schema.Location.Enumeration;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.SchemaBuilder;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.SchemaKey;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session;
37
38 public class DummyMonitoringService implements NetconfMonitoringService {
39
40     private static final Sessions EMPTY_SESSIONS = new SessionsBuilder().setSession(Collections.<Session>emptyList()).build();
41     private static final Function<Capability, Uri> CAPABILITY_URI_FUNCTION = new Function<Capability, Uri>() {
42         @Nullable
43         @Override
44         public Uri apply(Capability capability) {
45             return new Uri(capability.getCapabilityUri());
46         }
47     };
48
49     private static final Function<Capability, Schema> CAPABILITY_SCHEMA_FUNCTION = new Function<Capability, Schema>() {
50         @Nullable
51         @Override
52         public Schema apply(@Nullable Capability capability) {
53             return new SchemaBuilder()
54                     .setIdentifier(capability.getModuleName().get())
55                     .setNamespace(new Uri(capability.getModuleNamespace().get()))
56                     .setFormat(Yang.class)
57                     .setVersion(capability.getRevision().get())
58                     .setLocation(Collections.singletonList(new Location(Enumeration.NETCONF)))
59                     .setKey(new SchemaKey(Yang.class, capability.getModuleName().get(), capability.getRevision().get())).build();
60         }
61     };
62
63     private final Capabilities capabilities;
64     private final ArrayListMultimap<String, Capability> capabilityMultiMap;
65     private final Schemas schemas;
66
67     public DummyMonitoringService(Set<Capability> capabilities) {
68
69         this.capabilities = new CapabilitiesBuilder().setCapability(
70                 Lists.newArrayList(Collections2.transform(capabilities, CAPABILITY_URI_FUNCTION))).build();
71
72         Set<Capability> moduleCapabilities = Sets.newHashSet();
73         this.capabilityMultiMap = ArrayListMultimap.create();
74         for (Capability cap : capabilities) {
75             if(cap.getModuleName().isPresent()) {
76                 capabilityMultiMap.put(cap.getModuleName().get(), cap);
77                 moduleCapabilities.add(cap);
78             }
79         }
80
81         this.schemas = new SchemasBuilder().setSchema(Lists.newArrayList(Collections2.transform(moduleCapabilities, CAPABILITY_SCHEMA_FUNCTION))).build();
82     }
83
84     @Override
85     public Sessions getSessions() {
86         return EMPTY_SESSIONS;
87     }
88
89     @Override
90     public SessionListener getSessionListener() {
91         return null;
92     }
93
94     @Override
95     public Schemas getSchemas() {
96         return schemas;
97     }
98
99     @Override
100     public String getSchemaForCapability(String moduleName, Optional<String> revision) {
101
102         for (Capability capability : capabilityMultiMap.get(moduleName)) {
103             if (capability.getRevision().get().equals(revision.get())) {
104                 return capability.getCapabilitySchema().get();
105             }
106         }
107         throw new IllegalArgumentException("Module with name: " + moduleName + " and revision: " + revision + " does not exist");
108     }
109
110     @Override
111     public Capabilities getCapabilities() {
112         return capabilities;
113     }
114
115     @Override
116     public AutoCloseable registerCapabilitiesListener(CapabilitiesListener listener) {
117         return null;
118     }
119
120     @Override
121     public AutoCloseable registerSessionsListener(SessionsListener listener) {
122         return null;
123     }
124
125 }