2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.controller.netconf.impl;
11 import com.google.common.base.Optional;
12 import com.google.common.base.Preconditions;
13 import com.google.common.collect.Maps;
14 import org.opendaylight.controller.netconf.impl.mapping.CapabilityProvider;
15 import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshot;
16 import org.opendaylight.controller.netconf.mapping.api.Capability;
17 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
19 import java.util.Collections;
23 public class CapabilityProviderImpl implements CapabilityProvider {
24 private final NetconfOperationServiceSnapshot netconfOperationServiceSnapshot;
25 private final Set<String> capabilityURIs;
27 public CapabilityProviderImpl(NetconfOperationServiceSnapshot netconfOperationServiceSnapshot) {
28 this.netconfOperationServiceSnapshot = netconfOperationServiceSnapshot;
29 Map<String, Capability> urisToCapabilitiesInternalMap = getCapabilitiesInternal(netconfOperationServiceSnapshot);
30 capabilityURIs = Collections.unmodifiableSet(urisToCapabilitiesInternalMap.keySet());
33 private static Map<String, Capability> getCapabilitiesInternal(
34 NetconfOperationServiceSnapshot netconfOperationServiceSnapshot) {
35 Map<String, Capability> capabilityMap = Maps.newHashMap();
37 for (NetconfOperationService netconfOperationService : netconfOperationServiceSnapshot.getServices()) {
38 final Set<Capability> caps = netconfOperationService.getCapabilities();
40 for (Capability cap : caps) {
41 // TODO check for duplicates ?
42 capabilityMap.put(cap.getCapabilityUri(), cap);
50 public synchronized String getSchemaForCapability(String moduleName, Optional<String> revision) {
52 Map<String, Map<String, String>> mappedModulesToRevisionToSchema = Maps.newHashMap();
54 for (NetconfOperationService netconfOperationService : netconfOperationServiceSnapshot.getServices()) {
55 final Set<Capability> caps = netconfOperationService.getCapabilities();
57 for (Capability cap : caps) {
58 if (cap.getModuleName().isPresent() == false)
60 if (cap.getRevision().isPresent() == false)
62 if (cap.getCapabilitySchema().isPresent() == false)
65 final String currentModuleName = cap.getModuleName().get();
66 Map<String, String> revisionMap = mappedModulesToRevisionToSchema.get(currentModuleName);
67 if (revisionMap == null) {
68 revisionMap = Maps.newHashMap();
69 mappedModulesToRevisionToSchema.put(currentModuleName, revisionMap);
72 String currentRevision = cap.getRevision().get();
73 revisionMap.put(currentRevision, cap.getCapabilitySchema().get());
77 Map<String, String> revisionMapRequest = mappedModulesToRevisionToSchema.get(moduleName);
78 Preconditions.checkState(revisionMapRequest != null, "Capability for module %s not present, " + ""
79 + "available modules : %s", moduleName, capabilityURIs);
81 if (revision.isPresent()) {
82 String schema = revisionMapRequest.get(revision.get());
84 Preconditions.checkState(schema != null,
85 "Capability for module %s:%s not present, available revisions for module: %s", moduleName,
86 revision.get(), revisionMapRequest.keySet());
90 Preconditions.checkState(revisionMapRequest.size() == 1,
91 "Expected 1 capability for module %s, available revisions : %s", moduleName,
92 revisionMapRequest.keySet());
93 return revisionMapRequest.values().iterator().next();
98 public synchronized Set<String> getCapabilities() {
99 return capabilityURIs;