X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2Fmapping%2Fconfig%2FServiceRegistryWrapper.java;h=8c2c74f2ac58d1c2144a1e8194cb46e15eb279b9;hp=7df671297c4f38272a1b391ecfc97d4d72c8e132;hb=531621aac4cff9d39cbd8668a53bdeba8a0e6d81;hpb=56af902306c727ef1db5185c101b878b5cb386a7 diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ServiceRegistryWrapper.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ServiceRegistryWrapper.java index 7df671297c..8c2c74f2ac 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ServiceRegistryWrapper.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ServiceRegistryWrapper.java @@ -7,46 +7,30 @@ */ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.config; -import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import org.opendaylight.controller.config.api.ServiceReferenceReadableRegistry; - +import java.util.Map; import javax.management.InstanceNotFoundException; import javax.management.ObjectName; -import java.util.Collection; -import java.util.Collections; -import java.util.Map; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import org.opendaylight.controller.config.api.ServiceReferenceReadableRegistry; +import org.opendaylight.controller.config.api.jmx.ObjectNameUtil; +import org.opendaylight.yangtools.yang.common.QName; public class ServiceRegistryWrapper { - private ServiceReferenceReadableRegistry configServiceRefRegistry; - - private long suffix = 1; + private final ServiceReferenceReadableRegistry configServiceRefRegistry; public ServiceRegistryWrapper(ServiceReferenceReadableRegistry configServiceRefRegistry) { this.configServiceRefRegistry = configServiceRefRegistry; } - - public boolean hasRefName(String namespace, String serviceName, ObjectName on) { - String qname = configServiceRefRegistry.getServiceInterfaceName(namespace, serviceName); - Map forQName = configServiceRefRegistry.getServiceMapping().get(qname); - if(forQName==null) return false; - return forQName.values().contains(on); - } - public ObjectName getByServiceAndRefName(String namespace, String serviceName, String refName) { Map> serviceNameToRefNameToInstance = getMappedServices().get(namespace); - Preconditions.checkArgument(serviceNameToRefNameToInstance != null, "No serviceInstances mapped to " + namespace); + Preconditions.checkNotNull(serviceNameToRefNameToInstance, "No serviceInstances mapped to " + namespace); Map refNameToInstance = serviceNameToRefNameToInstance.get(serviceName); - Preconditions.checkArgument(refNameToInstance != null, "No serviceInstances mapped to " + serviceName + " , " + Preconditions.checkNotNull(refNameToInstance, "No serviceInstances mapped to " + serviceName + " , " + serviceNameToRefNameToInstance.keySet()); String instanceId = refNameToInstance.get(refName); @@ -59,7 +43,12 @@ public class ServiceRegistryWrapper { String qNameOfService = configServiceRefRegistry.getServiceInterfaceName(namespace, serviceName); try { - return configServiceRefRegistry.getServiceReference(qNameOfService, refName); + /* + Remove transaction name as this is redundant - will be stripped in DynamicWritableWrapper, + and makes it hard to compare with service references got from MXBean attributes + */ + return ObjectNameUtil.withoutTransactionName( + configServiceRefRegistry.getServiceReference(qNameOfService, refName)); } catch (InstanceNotFoundException e) { throw new IllegalArgumentException("No serviceInstance mapped to " + refName + " under service name " + serviceName + " , " + refNameToInstance.keySet(), e); @@ -71,89 +60,34 @@ public class ServiceRegistryWrapper { Map>> retVal = Maps.newHashMap(); Map> serviceMapping = configServiceRefRegistry.getServiceMapping(); - for (String serviceQName : serviceMapping.keySet()) - for (String refName : serviceMapping.get(serviceQName).keySet()) { + for (Map.Entry> qNameToRefNameEntry : serviceMapping.entrySet()){ + for (String refName : qNameToRefNameEntry.getValue().keySet()) { - ObjectName on = serviceMapping.get(serviceQName).get(refName); + ObjectName on = qNameToRefNameEntry.getValue().get(refName); Services.ServiceInstance si = Services.ServiceInstance.fromObjectName(on); - // FIXME use QName's new String constructor, after it is fixed -// QName qname; -// try { -// qname = new QName(serviceQName); -// } catch (ParseException e) { -// throw new IllegalStateException("Unable to parse qname of a service " + serviceQName, e); -// } - Pattern p = Pattern.compile("\\(([^\\(\\?]+)\\?[^\\?\\)]*\\)([^\\)]+)"); - Matcher matcher = p.matcher(serviceQName); - Preconditions.checkArgument(matcher.matches()); - String namespace = matcher.group(1); - String localName = matcher.group(2); - -// String namespace = qname.getNamespace().toString(); + QName qname = QName.create(qNameToRefNameEntry.getKey()); + String namespace = qname.getNamespace().toString(); Map> serviceToRefs = retVal.get(namespace); if(serviceToRefs==null) { serviceToRefs = Maps.newHashMap(); retVal.put(namespace, serviceToRefs); } -// String localName = qname.getLocalName(); + String localName = qname.getLocalName(); Map refsToSis = serviceToRefs.get(localName); if(refsToSis==null) { refsToSis = Maps.newHashMap(); serviceToRefs.put(localName, refsToSis); } - Preconditions.checkState(refsToSis.containsKey(refName) == false, + Preconditions.checkState(!refsToSis.containsKey(refName), "Duplicate reference name %s for service %s:%s, now for instance %s", refName, namespace, localName, on); refsToSis.put(refName, si.toString()); } - - return retVal; - } - - @VisibleForTesting - public String getNewDefaultRefName(String namespace, String serviceName, String moduleName, String instanceName) { - String refName; - refName = "ref_" + instanceName; - - Map> serviceNameToRefNameToInstance = getMappedServices().get(namespace); - - Map refNameToInstance; - if(serviceNameToRefNameToInstance == null || serviceNameToRefNameToInstance.containsKey(serviceName) == false) { - refNameToInstance = Collections.emptyMap(); - } else - refNameToInstance = serviceNameToRefNameToInstance.get(serviceName); - - final Set refNamesAsSet = toSet(refNameToInstance.keySet()); - if (refNamesAsSet.contains(refName)) { - refName = findAvailableRefName(refName, refNamesAsSet); - } - - return refName; - } - - - private Set toSet(Collection values) { - Set refNamesAsSet = Sets.newHashSet(); - - for (String refName : values) { - boolean resultAdd = refNamesAsSet.add(refName); - Preconditions.checkState(resultAdd, - "Error occurred building services element, reference name {} was present twice", refName); } - return refNamesAsSet; - } - - private String findAvailableRefName(String refName, Set refNamesAsSet) { - String intitialRefName = refName; - - while (true) { - refName = intitialRefName + "_" + suffix++; - if (refNamesAsSet.contains(refName) == false) - return refName; - } + return retVal; } }