From: Tomas Olvecky Date: Thu, 22 May 2014 09:46:21 +0000 (+0200) Subject: Bug 1062 - Disallow implicit serviceref creation. X-Git-Tag: autorelease-tag-v20140601202136_82eb3f9~26^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=8720a3f3498bbc6fab675431f4200d26641a8ec8;hp=7e0e35596dde2a0cbcf077b26f9797b6e0cdfa43 Bug 1062 - Disallow implicit serviceref creation. Remove auto registration of service references by netconf. Old behaviour was adding ref_ + module name for each interface module implements even if it is not declared in /services node. Fix code style warning in config-netconf-connector. Change-Id: I8dc2b4dffac212d9b8b8243ccd7aaf290b87499b Signed-off-by: Tomas Olvecky --- diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/fromxml/ArrayAttributeReadingStrategy.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/fromxml/ArrayAttributeReadingStrategy.java index 442c504cce..1b74d49c4f 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/fromxml/ArrayAttributeReadingStrategy.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/fromxml/ArrayAttributeReadingStrategy.java @@ -30,8 +30,8 @@ public class ArrayAttributeReadingStrategy extends AbstractAttributeReadingStrat @Override AttributeConfigElement readElementHook(List configNodes) throws NetconfDocumentedException { List innerList = Lists.newArrayList(); - for (int i = 0; i < configNodes.size(); i++) { - innerList.add(innerStrategy.readElement(Lists.newArrayList(configNodes.get(i))).getValue()); + for (XmlElement configNode : configNodes) { + innerList.add(innerStrategy.readElement(Lists.newArrayList(configNode)).getValue()); } return AttributeConfigElement.create(getNullableDefault(), innerList); } diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/fromxml/ObjectNameAttributeReadingStrategy.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/fromxml/ObjectNameAttributeReadingStrategy.java index bf9eee7f26..08f3c73ac2 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/fromxml/ObjectNameAttributeReadingStrategy.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/fromxml/ObjectNameAttributeReadingStrategy.java @@ -8,20 +8,16 @@ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.fromxml; import com.google.common.base.Preconditions; +import java.util.List; +import java.util.Map; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.mapping.ObjectNameAttributeMappingStrategy; import org.opendaylight.controller.netconf.util.xml.XmlElement; import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; -import java.util.Map; public class ObjectNameAttributeReadingStrategy extends AbstractAttributeReadingStrategy { private static final Object PREFIX_SEPARATOR = ":"; - private static final Logger logger = LoggerFactory.getLogger(ObjectNameAttributeReadingStrategy.class); public ObjectNameAttributeReadingStrategy(String nullableDefault) { super(nullableDefault); @@ -39,8 +35,7 @@ public class ObjectNameAttributeReadingStrategy extends AbstractAttributeReading } private ObjectNameAttributeMappingStrategy.MappedDependency resolve(XmlElement firstChild) throws NetconfDocumentedException{ - XmlElement typeElement = null; - typeElement = firstChild.getOnlyChildElementWithSameNamespace(XmlNetconfConstants.TYPE_KEY); + XmlElement typeElement = firstChild.getOnlyChildElementWithSameNamespace(XmlNetconfConstants.TYPE_KEY); Map.Entry prefixNamespace = typeElement.findNamespaceOfTextContent(); String serviceName = checkPrefixAndExtractServiceName(typeElement, prefixNamespace); @@ -54,7 +49,7 @@ public class ObjectNameAttributeReadingStrategy extends AbstractAttributeReading public static String checkPrefixAndExtractServiceName(XmlElement typeElement, Map.Entry prefixNamespace) throws NetconfDocumentedException { String serviceName = typeElement.getTextContent(); - + // FIXME: comparing Entry with String: Preconditions.checkState(!prefixNamespace.equals(""), "Service %s value not prefixed with namespace", XmlNetconfConstants.TYPE_KEY); String prefix = prefixNamespace.getKey() + PREFIX_SEPARATOR; diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/mapping/ObjectMapper.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/mapping/ObjectMapper.java index 01844f27d4..4d984acee0 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/mapping/ObjectMapper.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/mapping/ObjectMapper.java @@ -10,28 +10,21 @@ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attri import com.google.common.base.Preconditions; import com.google.common.collect.Maps; +import java.util.Map; +import java.util.Map.Entry; +import javax.management.openmbean.ArrayType; +import javax.management.openmbean.CompositeType; +import javax.management.openmbean.OpenType; +import javax.management.openmbean.SimpleType; import org.opendaylight.controller.config.yangjmxgenerator.attribute.AttributeIfc; import org.opendaylight.controller.config.yangjmxgenerator.attribute.DependencyAttribute; import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListAttribute; import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListDependenciesAttribute; import org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.AttributeIfcSwitchStatement; -import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ServiceRegistryWrapper; - -import javax.management.openmbean.ArrayType; -import javax.management.openmbean.CompositeType; -import javax.management.openmbean.OpenType; -import javax.management.openmbean.SimpleType; -import java.util.Map; -import java.util.Map.Entry; public class ObjectMapper extends AttributeIfcSwitchStatement>> { - private final ServiceRegistryWrapper dependencyTracker; - - public ObjectMapper(ServiceRegistryWrapper depTracker) { - this.dependencyTracker = depTracker; - } public Map>> prepareMapping( Map configDefinition) { diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/SimpleAttributeResolvingStrategy.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/SimpleAttributeResolvingStrategy.java index 26709dbe6b..962d459f86 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/SimpleAttributeResolvingStrategy.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/SimpleAttributeResolvingStrategy.java @@ -133,7 +133,7 @@ final class SimpleAttributeResolvingStrategy extends AbstractAttributeResolvingS @Override protected Object parseObject(Class type, String value) { - return new Character(value.charAt(0)); + return value.charAt(0); } } diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/AbstractAttributeWritingStrategy.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/AbstractAttributeWritingStrategy.java deleted file mode 100644 index 61465f93e8..0000000000 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/AbstractAttributeWritingStrategy.java +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.toxml; - -public abstract class AbstractAttributeWritingStrategy { - protected Object preprocess(Object value) { - return value; - } -} diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/RuntimeBeanEntryWritingStrategy.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/RuntimeBeanEntryWritingStrategy.java index a74afd0812..644df0a7f9 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/RuntimeBeanEntryWritingStrategy.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/RuntimeBeanEntryWritingStrategy.java @@ -46,7 +46,7 @@ public class RuntimeBeanEntryWritingStrategy extends CompositeAttributeWritingSt Util.checkType(runtimeBeanInstanceMappingEntry.getValue(), Map.class); Map innerMap = (Map) runtimeBeanInstanceMappingEntry.getValue(); Element runtimeInstanceNode = XmlUtil.createElement(getDocument(), "_" - + (String) runtimeBeanInstanceMappingEntry.getKey(), Optional.absent()); + + runtimeBeanInstanceMappingEntry.getKey(), Optional.absent()); innerNode.appendChild(runtimeInstanceNode); for (Entry innerObjectEntry : innerMap.entrySet()) { diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/Config.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/Config.java index 854f99c5c0..1492066289 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/Config.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/Config.java @@ -8,6 +8,8 @@ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.config; +import static com.google.common.base.Preconditions.checkState; + import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.HashMultimap; @@ -31,7 +33,6 @@ import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants; import org.opendaylight.controller.netconf.util.xml.XmlUtil; import org.w3c.dom.Document; import org.w3c.dom.Element; -import static com.google.common.base.Preconditions.checkState; public class Config { @@ -97,13 +98,12 @@ public class Config { Map>> moduleToInstances = getMappedInstances(instancesToMap, moduleConfigs); - Element root = dataElement; if (maybeNamespace.isPresent()) { - root.setAttributeNS(maybeNamespace.get(), dataElement.getNodeName(), "xmlns"); + dataElement.setAttributeNS(maybeNamespace.get(), dataElement.getNodeName(), "xmlns"); } Element modulesElement = XmlUtil.createElement(document, XmlNetconfConstants.MODULES_KEY, Optional.of(XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG)); - root.appendChild(modulesElement); + dataElement.appendChild(modulesElement); for (String moduleNamespace : moduleToInstances.keySet()) { for (Entry> moduleMappingEntry : moduleToInstances.get(moduleNamespace) .entrySet()) { @@ -115,15 +115,15 @@ public class Config { } for (ObjectName objectName : moduleMappingEntry.getValue()) { - modulesElement.appendChild(mapping.toXml(objectName, serviceTracker, document, moduleNamespace)); + modulesElement.appendChild(mapping.toXml(objectName, document, moduleNamespace)); } } } - root.appendChild(Services.toXml(serviceTracker, document)); + dataElement.appendChild(Services.toXml(serviceTracker, document)); - return root; + return dataElement; } // TODO refactor, replace string representing namespace with namespace class diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/InstanceConfig.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/InstanceConfig.java index 0fe5fad29c..cf9b4c1597 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/InstanceConfig.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/InstanceConfig.java @@ -11,7 +11,12 @@ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.confi import com.google.common.base.Optional; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.google.common.collect.Multimap; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import javax.management.ObjectName; +import javax.management.openmbean.OpenType; import org.opendaylight.controller.config.util.ConfigRegistryClient; import org.opendaylight.controller.config.yangjmxgenerator.RuntimeBeanEntry; import org.opendaylight.controller.config.yangjmxgenerator.attribute.AttributeIfc; @@ -34,13 +39,6 @@ import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; -import javax.management.ObjectName; -import javax.management.openmbean.OpenType; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - public final class InstanceConfig { private static final Logger logger = LoggerFactory.getLogger(InstanceConfig.class); @@ -54,10 +52,10 @@ public final class InstanceConfig { this.configRegistryClient = configRegistryClient; } - private Map getMappedConfiguration(ObjectName on, ServiceRegistryWrapper depTracker) { + private Map getMappedConfiguration(ObjectName on) { // TODO make field, mappingStrategies can be instantiated only once - Map>> mappingStrategies = new ObjectMapper(depTracker) + Map>> mappingStrategies = new ObjectMapper() .prepareMapping(jmxToAttrConfig); Map toXml = Maps.newHashMap(); @@ -84,24 +82,22 @@ public final class InstanceConfig { return toXml; } - public Element toXml(ObjectName on, ServiceRegistryWrapper depTracker, String namespace, Document document, Element rootElement) { - - Element cfgElement = rootElement; + public Element toXml(ObjectName on, String namespace, Document document, Element rootElement) { Map strats = new ObjectXmlWriter().prepareWriting(yangToAttrConfig, document); - Map mappedConfig = getMappedConfiguration(on, depTracker); + Map mappedConfig = getMappedConfiguration(on); for (Entry mappingEntry : mappedConfig.entrySet()) { try { - strats.get(mappingEntry.getKey()).writeElement(cfgElement, namespace, mappingEntry.getValue()); + strats.get(mappingEntry.getKey()).writeElement(rootElement, namespace, mappingEntry.getValue()); } catch (Exception e) { throw new IllegalStateException("Unable to write value " + mappingEntry.getValue() + " for attribute " + mappingEntry.getValue(), e); } } - return cfgElement; + return rootElement; } private void resolveConfiguration(InstanceConfigElementResolved mappedConfig, ServiceRegistryWrapper depTracker) { @@ -129,14 +125,15 @@ public final class InstanceConfig { } public InstanceConfigElementResolved fromXml(XmlElement moduleElement, ServiceRegistryWrapper services, String moduleNamespace, - EditStrategyType defaultStrategy, Multimap providedServices, Map> identityMap) throws NetconfDocumentedException { + EditStrategyType defaultStrategy, + Map> identityMap) throws NetconfDocumentedException { Map retVal = Maps.newHashMap(); Map strats = new ObjectXmlReader().prepareReading(yangToAttrConfig, identityMap); List recognisedChildren = Lists.newArrayList(); - XmlElement type = null; - XmlElement name = null; + XmlElement type; + XmlElement name; type = moduleElement.getOnlyChildElementWithSameNamespace(XmlNetconfConstants.TYPE_KEY); name = moduleElement.getOnlyChildElementWithSameNamespace(XmlNetconfConstants.NAME_KEY); List typeAndName = Lists.newArrayList(type, name); @@ -156,7 +153,7 @@ public final class InstanceConfig { XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0); InstanceConfigElementResolved instanceConfigElementResolved = perInstanceEditStrategy.equals("") ? new InstanceConfigElementResolved( - retVal, defaultStrategy, providedServices) : new InstanceConfigElementResolved(perInstanceEditStrategy, retVal, defaultStrategy, providedServices); + retVal, defaultStrategy) : new InstanceConfigElementResolved(perInstanceEditStrategy, retVal, defaultStrategy); resolveConfiguration(instanceConfigElementResolved, services); return instanceConfigElementResolved; diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/InstanceConfigElementResolved.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/InstanceConfigElementResolved.java index c9605af586..ef5ba753d3 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/InstanceConfigElementResolved.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/InstanceConfigElementResolved.java @@ -8,7 +8,6 @@ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.config; -import com.google.common.collect.Multimap; import java.util.Map; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.confignetconfconnector.exception.OperationNotPermittedException; @@ -24,20 +23,17 @@ public class InstanceConfigElementResolved { private final EditStrategyType editStrategy; private final Map configuration; - private final Multimap providedServices; - public InstanceConfigElementResolved(String currentStrategy, Map configuration, EditStrategyType defaultStrategy, Multimap providedServices) throws NetconfDocumentedException { - EditStrategyType valueOf = null; - valueOf = parseStrategy(currentStrategy, defaultStrategy); - this.editStrategy = valueOf; + public InstanceConfigElementResolved(String currentStrategy, Map configuration, + EditStrategyType defaultStrategy) + throws NetconfDocumentedException { + this.editStrategy = parseStrategy(currentStrategy, defaultStrategy); this.configuration = configuration; - this.providedServices = providedServices; } - public InstanceConfigElementResolved(Map configuration, EditStrategyType defaultStrategy, Multimap providedServices) { + public InstanceConfigElementResolved(Map configuration, EditStrategyType defaultStrategy) { editStrategy = defaultStrategy; this.configuration = configuration; - this.providedServices = providedServices; } @@ -49,7 +45,7 @@ public class InstanceConfigElementResolved { public EditConfigStrategy getEditStrategy() { - return editStrategy.getFittingStrategy(providedServices); + return editStrategy.getFittingStrategy(); } public Map getConfiguration() { diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ModuleConfig.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ModuleConfig.java index 6a17e97350..0c2b0e228e 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ModuleConfig.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ModuleConfig.java @@ -9,8 +9,9 @@ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.config; import com.google.common.base.Optional; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; +import java.util.Date; +import java.util.Map; +import javax.management.ObjectName; import org.opendaylight.controller.config.api.jmx.ObjectNameUtil; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig; @@ -18,47 +19,20 @@ import org.opendaylight.controller.netconf.confignetconfconnector.operations.edi import org.opendaylight.controller.netconf.util.xml.XmlElement; import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants; import org.opendaylight.controller.netconf.util.xml.XmlUtil; -import org.opendaylight.yangtools.yang.common.QName; import org.w3c.dom.Document; import org.w3c.dom.Element; -import javax.management.ObjectName; -import java.util.Collection; -import java.util.Date; -import java.util.Map; - public class ModuleConfig { private final String moduleName; private final InstanceConfig instanceConfig; - private final Multimap providedServices; - public ModuleConfig(String moduleName, InstanceConfig mbeanMapping, Collection providedServices) { + public ModuleConfig(String moduleName, InstanceConfig mbeanMapping) { this.moduleName = moduleName; this.instanceConfig = mbeanMapping; - this.providedServices = mapServices(providedServices); - } - - private Multimap mapServices(Collection providedServices) { - Multimap mapped = HashMultimap.create(); - - for (QName providedService : providedServices) { - String key = providedService.getNamespace().toString(); - mapped.put(key, providedService.getLocalName()); - } - - return mapped; - } - - public InstanceConfig getMbeanMapping() { - return instanceConfig; - } - - public Multimap getProvidedServices() { - return providedServices; } - public Element toXml(ObjectName instanceON, ServiceRegistryWrapper depTracker, Document document, String namespace) { + public Element toXml(ObjectName instanceON, Document document, String namespace) { Element root = XmlUtil.createElement(document, XmlNetconfConstants.MODULE_KEY, Optional.absent()); // type belongs to config.yang namespace, but needs to be prefix:moduleName @@ -73,7 +47,7 @@ public class ModuleConfig { root.appendChild(nameElement); - root = instanceConfig.toXml(instanceON, depTracker, namespace, document, root); + root = instanceConfig.toXml(instanceON, namespace, document, root); return root; } @@ -81,7 +55,7 @@ public class ModuleConfig { public ModuleElementResolved fromXml(XmlElement moduleElement, ServiceRegistryWrapper depTracker, String instanceName, String moduleNamespace, EditStrategyType defaultStrategy, Map> identityMap) throws NetconfDocumentedException { - InstanceConfigElementResolved ice = instanceConfig.fromXml(moduleElement, depTracker, moduleNamespace, defaultStrategy, providedServices, identityMap); + InstanceConfigElementResolved ice = instanceConfig.fromXml(moduleElement, depTracker, moduleNamespace, defaultStrategy, identityMap); return new ModuleElementResolved(instanceName, ice); } diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ModuleElementDefinition.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ModuleElementDefinition.java index b772eee0d7..92b7a487e0 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ModuleElementDefinition.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ModuleElementDefinition.java @@ -49,10 +49,6 @@ public class ModuleElementDefinition { return instanceName; } - public EditStrategyType getEditStrategyType() { - return editStrategy; - } - public EditConfigStrategy getEditStrategy() { switch (editStrategy) { case delete : 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 1f63555e83..f86d641112 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,47 +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 org.opendaylight.yangtools.yang.common.QName; - +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 org.opendaylight.controller.config.api.ServiceReferenceReadableRegistry; +import org.opendaylight.yangtools.yang.common.QName; public class ServiceRegistryWrapper { private ServiceReferenceReadableRegistry configServiceRefRegistry; - private long suffix = 1; - 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); @@ -102,50 +85,4 @@ public class ServiceRegistryWrapper { 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)) { - 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 availableRefName = ""; - - while (true) { - availableRefName = refName + "_" + suffix++; - if (!refNamesAsSet.contains(availableRefName)){ - return availableRefName; - } - } - } } diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/rpc/ModuleRpcs.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/rpc/ModuleRpcs.java index 28b1417893..67c178e219 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/rpc/ModuleRpcs.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/rpc/ModuleRpcs.java @@ -56,11 +56,4 @@ public final class ModuleRpcs { return rpc; } - public Map getYangToJavaNames() { - return yangToJavaNames; - } - - public Map> getRpcMapping() { - return rpcMapping; - } } diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/InstanceRuntime.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/InstanceRuntime.java index 6a49275f26..44227bb4d8 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/InstanceRuntime.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/InstanceRuntime.java @@ -80,10 +80,7 @@ public class InstanceRuntime { if (on.getKeyPropertyList().size() != keyListSize + 1){ return false; } - if (!on.getKeyPropertyList().containsKey(string)){ - return false; - } - return true; + return on.getKeyPropertyList().containsKey(string); } })); } @@ -94,7 +91,7 @@ public class InstanceRuntime { public Element toXml(ObjectName rootOn, Set childRbeOns, Document document, String instanceIndex, Element parentElement, String namespace) { - Element xml = instanceMapping.toXml(rootOn, null, namespace, document, parentElement); + Element xml = instanceMapping.toXml(rootOn, namespace, document, parentElement); if (instanceIndex != null) { xml.setAttribute(KEY_ATTRIBUTE_KEY, instanceIndex); diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/ModuleRuntime.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/ModuleRuntime.java index 59767fec6e..4d67c75893 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/ModuleRuntime.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/ModuleRuntime.java @@ -9,27 +9,21 @@ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.runtime; import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Set; +import javax.management.ObjectName; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ModuleConfig; -import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ServiceRegistryWrapper; import org.w3c.dom.Document; import org.w3c.dom.Element; -import javax.management.ObjectName; -import java.util.Collection; -import java.util.Set; - public class ModuleRuntime { private final InstanceRuntime instanceRuntime; - public ModuleRuntime(String moduleName, InstanceRuntime instanceRuntime) { + public ModuleRuntime(InstanceRuntime instanceRuntime) { this.instanceRuntime = instanceRuntime; } - public InstanceRuntime getMbeanMapping() { - return instanceRuntime; - } - private ObjectName findRoot(Collection runtimeBeanOns) { for (ObjectName objectName : runtimeBeanOns) { if (objectName.getKeyPropertyList().size() == 3){ @@ -40,15 +34,16 @@ public class ModuleRuntime { } public Element toXml(String namespace, Collection runtimeBeanOns, - Document document, ModuleConfig moduleConfig, ObjectName configBeanON, ServiceRegistryWrapper serviceTracker) { + Document document, ModuleConfig moduleConfig, ObjectName configBeanON) { - Element moduleElement = moduleConfig.toXml(configBeanON, serviceTracker, document, namespace); + Element moduleElement = moduleConfig.toXml(configBeanON, document, namespace); ObjectName rootName = findRoot(runtimeBeanOns); Set childrenRuntimeBeans = Sets.newHashSet(runtimeBeanOns); childrenRuntimeBeans.remove(rootName); + // FIXME: why is this called and not used? instanceRuntime.toXml(rootName, childrenRuntimeBeans, document, moduleElement, namespace); return moduleElement; diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/Runtime.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/Runtime.java index 439dea2a80..b9518dc4d8 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/Runtime.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/Runtime.java @@ -8,26 +8,22 @@ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.runtime; +import com.google.common.base.Optional; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; import java.util.Collection; import java.util.Map; import java.util.Set; - import javax.management.ObjectName; - import org.opendaylight.controller.config.api.jmx.ObjectNameUtil; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Config; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ModuleConfig; -import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ServiceRegistryWrapper; import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants; import org.opendaylight.controller.netconf.util.xml.XmlUtil; import org.w3c.dom.Document; import org.w3c.dom.Element; -import com.google.common.base.Optional; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Maps; -import com.google.common.collect.Multimap; - public class Runtime { private final Map> moduleRuntimes; @@ -63,7 +59,7 @@ public class Runtime { return retVal; } - public Element toXml(Set instancesToMap, Set configBeans, Document document, ServiceRegistryWrapper serviceRegistry) { + public Element toXml(Set instancesToMap, Set configBeans, Document document) { Element root = XmlUtil.createElement(document, XmlNetconfConstants.DATA_KEY, Optional.absent()); Element modulesElement = XmlUtil.createElement(document, XmlNetconfConstants.MODULES_KEY, Optional.of(XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG)); @@ -86,11 +82,11 @@ public class Runtime { Element runtimeXml; ModuleConfig moduleConfig = moduleConfigs.get(localNamespace).get(moduleName); if(instanceToRbe==null || !instanceToRbe.containsKey(instanceName)) { - runtimeXml = moduleConfig.toXml(instanceON, serviceRegistry, document, localNamespace); + runtimeXml = moduleConfig.toXml(instanceON, document, localNamespace); } else { ModuleRuntime moduleRuntime = moduleRuntimes.get(localNamespace).get(moduleName); runtimeXml = moduleRuntime.toXml(localNamespace, instanceToRbe.get(instanceName), document, - moduleConfig, instanceON, serviceRegistry); + moduleConfig, instanceON); } modulesElement.appendChild(runtimeXml); } diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditConfig.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditConfig.java index 3ea26055f3..ffc69eb8ef 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditConfig.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditConfig.java @@ -13,6 +13,12 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import javax.management.InstanceNotFoundException; +import javax.management.ObjectName; import org.opendaylight.controller.config.api.ValidationException; import org.opendaylight.controller.config.util.ConfigRegistryClient; import org.opendaylight.controller.config.util.ConfigTransactionClient; @@ -21,7 +27,6 @@ import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorSeverity; import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorTag; import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorType; -import org.opendaylight.controller.netconf.confignetconfconnector.exception.NetconfConfigHandlingException; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Config; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.InstanceConfig; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.InstanceConfigElementResolved; @@ -43,13 +48,6 @@ import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; -import javax.management.InstanceNotFoundException; -import javax.management.ObjectName; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - public class EditConfig extends AbstractConfigNetconfOperation { private static final Logger logger = LoggerFactory.getLogger(EditConfig.class); @@ -69,7 +67,7 @@ public class EditConfig extends AbstractConfigNetconfOperation { @VisibleForTesting Element getResponseInternal(final Document document, - final EditConfigXmlParser.EditConfigExecution editConfigExecution) throws NetconfDocumentedException, NetconfConfigHandlingException { + final EditConfigXmlParser.EditConfigExecution editConfigExecution) throws NetconfDocumentedException { if (editConfigExecution.shouldTest()) { executeTests(getConfigRegistryClient(), editConfigExecution); @@ -232,11 +230,6 @@ public class EditConfig extends AbstractConfigNetconfOperation { return identityNameToSchemaNode.containsKey(idName); } - // FIXME method never used - public IdentitySchemaNode getIdentitySchemaNode(String idName) { - Preconditions.checkState(identityNameToSchemaNode.containsKey(idName), "No identity under name %s", idName); - return identityNameToSchemaNode.get(idName); - } } private static Map> transformIdentities(Set modules) { @@ -281,8 +274,7 @@ public class EditConfig extends AbstractConfigNetconfOperation { ModuleMXBeanEntry moduleMXBeanEntry = moduleNameToMbe.getValue(); ModuleConfig moduleConfig = new ModuleConfig(moduleName, new InstanceConfig(configRegistryClient, - moduleMXBeanEntry.getAttributes()), moduleMXBeanEntry - .getProvidedServices().values()); + moduleMXBeanEntry.getAttributes())); Map moduleNameToModuleConfig = namespaceToModuleNameToModuleConfig.get(namespace); if(moduleNameToModuleConfig == null) { @@ -307,7 +299,7 @@ public class EditConfig extends AbstractConfigNetconfOperation { EditConfigXmlParser.EditConfigExecution editConfigExecution; Config cfg = getConfigMapping(getConfigRegistryClient(), yangStoreSnapshot); - editConfigExecution = editConfigXmlParser.fromXml(xml, cfg, transactionProvider, getConfigRegistryClient()); + editConfigExecution = editConfigXmlParser.fromXml(xml, cfg); Element responseInternal; responseInternal = getResponseInternal(document, editConfigExecution); diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditConfigXmlParser.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditConfigXmlParser.java index 547ffcda3d..47220f1857 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditConfigXmlParser.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditConfigXmlParser.java @@ -11,8 +11,9 @@ package org.opendaylight.controller.netconf.confignetconfconnector.operations.ed import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Optional; import com.google.common.collect.Multimap; +import java.util.Arrays; +import java.util.Map; import org.opendaylight.controller.config.api.ServiceReferenceReadableRegistry; -import org.opendaylight.controller.config.util.ConfigRegistryClient; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Config; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ModuleElementDefinition; @@ -20,7 +21,6 @@ import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ServiceRegistryWrapper; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Services; import org.opendaylight.controller.netconf.confignetconfconnector.operations.Datastore; -import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider; import org.opendaylight.controller.netconf.util.exception.MissingNameSpaceException; import org.opendaylight.controller.netconf.util.exception.UnexpectedNamespaceException; import org.opendaylight.controller.netconf.util.xml.XmlElement; @@ -28,9 +28,6 @@ import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Arrays; -import java.util.Map; - public class EditConfigXmlParser { private static final Logger logger = LoggerFactory.getLogger(EditConfigXmlParser.class); @@ -45,8 +42,7 @@ public class EditConfigXmlParser { public EditConfigXmlParser() { } - EditConfigXmlParser.EditConfigExecution fromXml(final XmlElement xml, final Config cfgMapping, - TransactionProvider transactionProvider, ConfigRegistryClient configRegistryClient) + EditConfigXmlParser.EditConfigExecution fromXml(final XmlElement xml, final Config cfgMapping) throws NetconfDocumentedException { //TODO remove transactionProvider and CfgRegistry from parameters, accept only service ref store diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditStrategyType.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditStrategyType.java index 6b81603dcd..25d772f4ac 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditStrategyType.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditStrategyType.java @@ -8,12 +8,10 @@ package org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig; -import com.google.common.collect.Multimap; -import org.opendaylight.controller.netconf.api.NetconfDocumentedException; -import org.opendaylight.controller.netconf.confignetconfconnector.exception.OperationNotPermittedException; - import java.util.EnumSet; import java.util.Set; +import org.opendaylight.controller.netconf.api.NetconfDocumentedException; +import org.opendaylight.controller.netconf.confignetconfconnector.exception.OperationNotPermittedException; public enum EditStrategyType { // can be default @@ -58,12 +56,12 @@ public enum EditStrategyType { } } - public EditConfigStrategy getFittingStrategy(Multimap providedServices) { + public EditConfigStrategy getFittingStrategy() { switch (this) { case merge: - return new MergeEditConfigStrategy(providedServices); + return new MergeEditConfigStrategy(); case replace: - return new ReplaceEditConfigStrategy(providedServices); + return new ReplaceEditConfigStrategy(); case delete: return new DeleteEditConfigStrategy(); case remove: diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/MergeEditConfigStrategy.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/MergeEditConfigStrategy.java index 3e5707cf6d..6ebeeaa07b 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/MergeEditConfigStrategy.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/MergeEditConfigStrategy.java @@ -8,9 +8,10 @@ package org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import org.opendaylight.controller.config.api.jmx.ObjectNameUtil; +import java.util.Map; +import java.util.Map.Entry; +import javax.management.Attribute; +import javax.management.ObjectName; import org.opendaylight.controller.config.util.ConfigTransactionClient; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.confignetconfconnector.exception.NetconfConfigHandlingException; @@ -19,23 +20,12 @@ import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.management.Attribute; -import javax.management.InstanceNotFoundException; -import javax.management.ObjectName; -import java.util.Map; -import java.util.Map.Entry; - public class MergeEditConfigStrategy extends AbstractEditConfigStrategy { private static final Logger logger = LoggerFactory.getLogger(MergeEditConfigStrategy.class); - private final Multimap providedServices; public MergeEditConfigStrategy() { - this.providedServices = HashMultimap.create(); - } - public MergeEditConfigStrategy(Multimap providedServices) { - this.providedServices = providedServices; } @Override @@ -49,32 +39,8 @@ public class MergeEditConfigStrategy extends AbstractEditConfigStrategy { NetconfDocumentedException.ErrorTag.operation_failed, NetconfDocumentedException.ErrorSeverity.error); } - - private void addRefNames(ServiceRegistryWrapper services, Multimap providedServices, ConfigTransactionClient ta, ObjectName on) throws InstanceNotFoundException { - for (Entry namespaceToService : providedServices.entries()) { - - if(services.hasRefName(namespaceToService.getKey(), - namespaceToService.getValue(), on)){ - continue; - } - - String refName = services.getNewDefaultRefName(namespaceToService.getKey(), namespaceToService.getValue(), - ObjectNameUtil.getFactoryName(on), ObjectNameUtil.getInstanceName(on)); - ta.saveServiceReference( - ta.getServiceInterfaceName(namespaceToService.getKey(), namespaceToService.getValue()), refName, on); - } - } - @Override void executeStrategy(Map configuration, ConfigTransactionClient ta, ObjectName on, ServiceRegistryWrapper services) throws NetconfConfigHandlingException { - try { - addRefNames(services, providedServices, ta, on); - } catch (InstanceNotFoundException e) { - throw new NetconfConfigHandlingException(String.format("Unable to save default ref name for instance %s. Instance was not found.",e), - NetconfDocumentedException.ErrorType.application, - NetconfDocumentedException.ErrorTag.operation_failed, - NetconfDocumentedException.ErrorSeverity.error); - } for (Entry configAttributeEntry : configuration.entrySet()) { try { diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/MissingInstanceHandlingStrategy.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/MissingInstanceHandlingStrategy.java index c431766c4c..c8adb2eae0 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/MissingInstanceHandlingStrategy.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/MissingInstanceHandlingStrategy.java @@ -27,9 +27,8 @@ public class MissingInstanceHandlingStrategy extends AbstractEditConfigStrategy @Override void handleMissingInstance(Map configuration, ConfigTransactionClient ta, String module, String instance, ServiceRegistryWrapper services) throws NetconfConfigHandlingException { - ObjectName on = null; try { - on = ta.createModule(module, instance); + ObjectName on = ta.createModule(module, instance); logger.trace("New instance for {} {} created under name {}", module, instance, on); } catch (InstanceAlreadyExistsException e1) { throw new NetconfConfigHandlingException(String.format("Unable to create instance for %s : %s.", module, instance), @@ -42,6 +41,5 @@ public class MissingInstanceHandlingStrategy extends AbstractEditConfigStrategy @Override void executeStrategy(Map configuration, ConfigTransactionClient ta, ObjectName objectName, ServiceRegistryWrapper services) { - return; } } diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/ReplaceEditConfigStrategy.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/ReplaceEditConfigStrategy.java index bc3082ff50..ab993c5ffd 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/ReplaceEditConfigStrategy.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/ReplaceEditConfigStrategy.java @@ -8,9 +8,10 @@ package org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import org.opendaylight.controller.config.api.jmx.ObjectNameUtil; +import java.util.Map; +import java.util.Map.Entry; +import javax.management.Attribute; +import javax.management.ObjectName; import org.opendaylight.controller.config.util.ConfigTransactionClient; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.confignetconfconnector.exception.NetconfConfigHandlingException; @@ -19,26 +20,10 @@ import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.management.Attribute; -import javax.management.InstanceNotFoundException; -import javax.management.ObjectName; -import java.util.Map; -import java.util.Map.Entry; - public class ReplaceEditConfigStrategy extends AbstractEditConfigStrategy { private static final Logger logger = LoggerFactory.getLogger(ReplaceEditConfigStrategy.class); - private final Multimap providedServices; - - public ReplaceEditConfigStrategy() { - this.providedServices = HashMultimap.create(); - } - - public ReplaceEditConfigStrategy(Multimap providedServices) { - this.providedServices = providedServices; - } - @Override void handleMissingInstance(Map configuration, ConfigTransactionClient ta, String module, String instance, ServiceRegistryWrapper services) throws NetconfConfigHandlingException { @@ -51,32 +36,8 @@ public class ReplaceEditConfigStrategy extends AbstractEditConfigStrategy { NetconfDocumentedException.ErrorSeverity.error); } - private void addRefNames(ServiceRegistryWrapper services, Multimap providedServices, ConfigTransactionClient ta, ObjectName on) throws InstanceNotFoundException { - for (Entry namespaceToService : providedServices.entries()) { - - if(services.hasRefName(namespaceToService.getKey(), - namespaceToService.getValue(), on)){ - continue; - } - - String refName = services.getNewDefaultRefName(namespaceToService.getKey(), namespaceToService.getValue(), - ObjectNameUtil.getFactoryName(on), ObjectNameUtil.getInstanceName(on)); - ta.saveServiceReference( - ta.getServiceInterfaceName(namespaceToService.getKey(), namespaceToService.getValue()), refName, on); - } - } - @Override void executeStrategy(Map configuration, ConfigTransactionClient ta, ObjectName on, ServiceRegistryWrapper services) throws NetconfConfigHandlingException { - try { - addRefNames(services, providedServices, ta, on); - } catch (InstanceNotFoundException e) { - throw new NetconfConfigHandlingException(String.format("Unable to save default ref name for instance %s. Instance not found. ",on), - NetconfDocumentedException.ErrorType.application, - NetconfDocumentedException.ErrorTag.operation_failed, - NetconfDocumentedException.ErrorSeverity.error); - } - for (Entry configAttributeEntry : configuration.entrySet()) { try { AttributeConfigElement ace = configAttributeEntry.getValue(); diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/get/Get.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/get/Get.java index 4665c2cc89..5e44427da3 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/get/Get.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/get/Get.java @@ -9,14 +9,16 @@ package org.opendaylight.controller.netconf.confignetconfconnector.operations.get; import com.google.common.collect.Maps; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.management.ObjectName; import org.opendaylight.controller.config.util.ConfigRegistryClient; -import org.opendaylight.controller.config.util.ConfigTransactionClient; import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry; import org.opendaylight.controller.config.yangjmxgenerator.RuntimeBeanEntry; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.InstanceConfig; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ModuleConfig; -import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ServiceRegistryWrapper; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.runtime.InstanceRuntime; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.runtime.ModuleRuntime; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.runtime.Runtime; @@ -24,7 +26,6 @@ import org.opendaylight.controller.netconf.confignetconfconnector.operations.Abs import org.opendaylight.controller.netconf.confignetconfconnector.operations.Datastore; import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig; import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreSnapshot; -import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider; import org.opendaylight.controller.netconf.util.exception.MissingNameSpaceException; import org.opendaylight.controller.netconf.util.exception.UnexpectedElementException; import org.opendaylight.controller.netconf.util.exception.UnexpectedNamespaceException; @@ -35,22 +36,15 @@ import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; -import javax.management.ObjectName; -import java.util.List; -import java.util.Map; -import java.util.Set; - public class Get extends AbstractConfigNetconfOperation { private final YangStoreSnapshot yangStoreSnapshot; private static final Logger logger = LoggerFactory.getLogger(Get.class); - private final TransactionProvider transactionProvider; public Get(YangStoreSnapshot yangStoreSnapshot, ConfigRegistryClient configRegistryClient, - String netconfSessionIdForReporting, TransactionProvider transactionProvider) { + String netconfSessionIdForReporting) { super(configRegistryClient, netconfSessionIdForReporting); this.yangStoreSnapshot = yangStoreSnapshot; - this.transactionProvider = transactionProvider; } private Map> createModuleRuntimes(ConfigRegistryClient configRegistryClient, @@ -79,7 +73,7 @@ public class Get extends AbstractConfigNetconfOperation { } InstanceRuntime rootInstanceRuntime = createInstanceRuntime(root, cache); - ModuleRuntime moduleRuntime = new ModuleRuntime(module, rootInstanceRuntime); + ModuleRuntime moduleRuntime = new ModuleRuntime(rootInstanceRuntime); innerMap.put(module, moduleRuntime); } @@ -137,9 +131,7 @@ public class Get extends AbstractConfigNetconfOperation { final Runtime runtime = new Runtime(moduleRuntimes, moduleConfigs); - ObjectName txOn = transactionProvider.getOrCreateTransaction(); - ConfigTransactionClient ta = getConfigRegistryClient().getConfigTransactionClient(txOn); - final Element element = runtime.toXml(runtimeBeans, configBeans, document, new ServiceRegistryWrapper(ta)); + final Element element = runtime.toXml(runtimeBeans, configBeans, document); logger.trace("{} operation successful", XmlNetconfConstants.GET); diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java index 82e07c1e7b..03e0176e32 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java @@ -76,7 +76,7 @@ public class GetConfig extends AbstractConfigNetconfOperation { } private Element getResponseInternal(final Document document, final ConfigRegistryClient configRegistryClient, - final Datastore source) throws NetconfDocumentedException { + final Datastore source) { Element dataElement = XmlUtil.createElement(document, XmlNetconfConstants.DATA_KEY, Optional.absent()); final Set instances = Datastore.getInstanceQueryStrategy(source, this.transactionProvider) .queryInstances(configRegistryClient); diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/runtimerpc/RuntimeRpc.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/runtimerpc/RuntimeRpc.java index 7790e09cee..98eb176999 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/runtimerpc/RuntimeRpc.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/runtimerpc/RuntimeRpc.java @@ -56,7 +56,7 @@ public class RuntimeRpc extends AbstractConfigNetconfOperation { } private Element toXml(Document doc, Object result, AttributeIfc returnType, String namespace, String elementName) throws NetconfDocumentedException { - AttributeMappingStrategy> mappingStrategy = new ObjectMapper(null).prepareStrategy(returnType); + AttributeMappingStrategy> mappingStrategy = new ObjectMapper().prepareStrategy(returnType); Optional mappedAttributeOpt = mappingStrategy.mapAttribute(result); Preconditions.checkState(mappedAttributeOpt.isPresent(), "Unable to map return value %s as %s", result, returnType.getOpenType()); diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationProvider.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationProvider.java index 7f4f8fccb5..30873d9534 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationProvider.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationProvider.java @@ -49,7 +49,7 @@ final class NetconfOperationProvider { ops.add(new EditConfig(yangStoreSnapshot, transactionProvider, configRegistryClient, netconfSessionIdForReporting)); ops.add(new Commit(transactionProvider, configRegistryClient, netconfSessionIdForReporting)); - ops.add(new Get(yangStoreSnapshot, configRegistryClient, netconfSessionIdForReporting, transactionProvider)); + ops.add(new Get(yangStoreSnapshot, configRegistryClient, netconfSessionIdForReporting)); ops.add(new DiscardChanges(transactionProvider, configRegistryClient, netconfSessionIdForReporting)); ops.add(new Validate(transactionProvider, configRegistryClient, netconfSessionIdForReporting)); ops.add(new RuntimeRpc(yangStoreSnapshot, configRegistryClient, netconfSessionIdForReporting)); diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/transactions/TransactionProvider.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/transactions/TransactionProvider.java index 250af688ea..beab62e997 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/transactions/TransactionProvider.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/transactions/TransactionProvider.java @@ -156,17 +156,16 @@ public class TransactionProvider implements AutoCloseable { } public void wipeTestTransaction(ObjectName taON) { - wipeInternal(taON, true, null); + wipeInternal(taON, true); } /** * Wiping means removing all module instances keeping the transaction open + service references. */ - synchronized void wipeInternal(ObjectName taON, boolean isTest, String moduleName) { + synchronized void wipeInternal(ObjectName taON, boolean isTest) { ConfigTransactionClient transactionClient = configRegistryClient.getConfigTransactionClient(taON); - Set lookupConfigBeans = moduleName == null ? transactionClient.lookupConfigBeans() - : transactionClient.lookupConfigBeans(moduleName); + Set lookupConfigBeans = transactionClient.lookupConfigBeans(); int i = lookupConfigBeans.size(); for (ObjectName instance : lookupConfigBeans) { try { @@ -190,7 +189,7 @@ public class TransactionProvider implements AutoCloseable { public void wipeTransaction() { Optional taON = getTransaction(); Preconditions.checkState(taON.isPresent(), NO_TRANSACTION_FOUND_FOR_SESSION + netconfSessionIdForReporting); - wipeInternal(taON.get(), false, null); + wipeInternal(taON.get(), false); } } diff --git a/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java b/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java index f8d21e401c..54b15a85b2 100644 --- a/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java +++ b/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java @@ -194,33 +194,33 @@ public class NetconfMappingTest extends AbstractConfigTest { edit("netconfMessages/editConfig.xml"); Document config = getConfigCandidate(); - assertCorrectServiceNames(config, Sets.newHashSet("ref_test2", "user_to_instance_from_code", "ref_dep_user", + assertCorrectServiceNames(config, Sets.newHashSet("user_to_instance_from_code", "ref_dep_user", "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1", "ref_from_code_to_instance-from-code_1")); edit("netconfMessages/editConfig_addServiceName.xml"); config = getConfigCandidate(); - assertCorrectServiceNames(config, Sets.newHashSet("ref_test2", "user_to_instance_from_code", "ref_dep_user", + assertCorrectServiceNames(config, Sets.newHashSet("user_to_instance_from_code", "ref_dep_user", "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1", "ref_from_code_to_instance-from-code_1", "ref_dep_user_another")); edit("netconfMessages/editConfig_addServiceNameOnTest.xml"); config = getConfigCandidate(); - assertCorrectServiceNames(config, Sets.newHashSet("ref_test2", "user_to_instance_from_code", "ref_dep_user", + assertCorrectServiceNames(config, Sets.newHashSet("user_to_instance_from_code", "ref_dep_user", "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1", "ref_from_code_to_instance-from-code_1", "ref_dep_user_another")); commit(); config = getConfigRunning(); assertCorrectRefNamesForDependencies(config); - assertCorrectServiceNames(config, Sets.newHashSet("ref_test2", "user_to_instance_from_code", "ref_dep_user", + assertCorrectServiceNames(config, Sets.newHashSet("user_to_instance_from_code", "ref_dep_user", "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1", "ref_from_code_to_instance-from-code_1", "ref_dep_user_another")); edit("netconfMessages/editConfig_replace_default.xml"); config = getConfigCandidate(); - assertCorrectServiceNames(config, Sets.newHashSet("ref_dep", "ref_dep2")); + assertCorrectServiceNames(config, Collections.emptySet()); edit("netconfMessages/editConfig_remove.xml"); config = getConfigCandidate(); @@ -259,8 +259,8 @@ public class NetconfMappingTest extends AbstractConfigTest { nt.performTest(tester, Node.TEXT_NODE); } - private void assertCorrectServiceNames(Document configCandidate, final Set refNames) throws NodeTestException { - + private void assertCorrectServiceNames(Document configCandidate, Set refNames) throws NodeTestException { + final Set refNames2 = new HashSet<>(refNames); NodeList servicesNodes = configCandidate.getElementsByTagName("services"); assertEquals(1, servicesNodes.getLength()); @@ -272,9 +272,8 @@ public class NetconfMappingTest extends AbstractConfigTest { if(element.getNodeName() != null) { if(element.getNodeName().equals("name")) { String elmText = element.getTextContent(); - if(refNames.contains(elmText)) { - refNames.remove(elmText); - return; + if(refNames2.contains(elmText)) { + refNames2.remove(elmText); } else { throw new NodeTestException("Unexpected services defined: " + elmText); } @@ -284,7 +283,8 @@ public class NetconfMappingTest extends AbstractConfigTest { @Override public void noMoreNodes(NodeTest forTest) throws NodeTestException { - assertTrue(refNames.isEmpty()); + assertEquals(Collections.emptySet(), refNames2); + assertTrue(refNames2.toString(), refNames2.isEmpty()); } }; nt.performTest(tester, Node.ELEMENT_NODE); @@ -688,7 +688,7 @@ public class NetconfMappingTest extends AbstractConfigTest { } private Document get() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { - Get getOp = new Get(yangStoreSnapshot, configRegistryClient, NETCONF_SESSION_ID, transactionProvider); + Get getOp = new Get(yangStoreSnapshot, configRegistryClient, NETCONF_SESSION_ID); return executeOp(getOp, "netconfMessages/get.xml"); } diff --git a/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfConfigPersisterITTest.java b/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfConfigPersisterITTest.java index 29afa93d37..148b0446e3 100644 --- a/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfConfigPersisterITTest.java +++ b/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfConfigPersisterITTest.java @@ -144,12 +144,12 @@ public class NetconfConfigPersisterITTest extends AbstractNetconfConfigTest { notificationVerifier.assertNotificationCount(2); notificationVerifier.assertNotificationContent(0, 0, 0, 9); - notificationVerifier.assertNotificationContent(1, 4, 4, 9); + notificationVerifier.assertNotificationContent(1, 4, 3, 9); mockedAggregator.assertSnapshotCount(2); // Capabilities are stripped for persister mockedAggregator.assertSnapshotContent(0, 0, 0, 1); - mockedAggregator.assertSnapshotContent(1, 4, 4, 3); + mockedAggregator.assertSnapshotContent(1, 4, 3, 3); } private VerifyingPersister mockAggregator() throws IOException {