X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager-facade-xml%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Ffacade%2Fxml%2Fmapping%2Fconfig%2FConfig.java;h=381934ae130f92bf05eb37e8f92339bcd7fcc570;hb=f43b01b81319959b1907e3e04537f5169e7f33d8;hp=3ecee286d3c51fc4aa4f99eb0b5b30dbfb1e4cf0;hpb=23fe9ca678ada6263fec5dd996f4025e4a32fcf5;p=controller.git diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/Config.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/Config.java index 3ecee286d3..381934ae13 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/Config.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/Config.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2015, 2017 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, @@ -18,7 +18,6 @@ import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import java.util.Collection; import java.util.Collections; -import java.util.Date; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -32,31 +31,33 @@ import org.opendaylight.controller.config.util.xml.DocumentedException; import org.opendaylight.controller.config.util.xml.XmlElement; import org.opendaylight.controller.config.util.xml.XmlMappingConstants; import org.opendaylight.controller.config.util.xml.XmlUtil; +import org.opendaylight.yangtools.yang.common.Revision; import org.w3c.dom.Document; import org.w3c.dom.Element; - public class Config { private final Map> moduleConfigs; + Map> moduleConfigs; - private final Map> identityMap; + private final Map, IdentityMapping>> identityMap; private final EnumResolver enumResolver; - public Config(Map> moduleConfigs, final EnumResolver enumResolver) { - this(moduleConfigs, Collections.>emptyMap(), enumResolver); + public Config(final Map> moduleConfigs, final EnumResolver enumResolver) { + this(moduleConfigs, Collections., IdentityMapping>>emptyMap(), enumResolver); } - public Config(Map> moduleConfigs, Map> identityMap, final EnumResolver enumResolver) { + public Config(final Map> moduleConfigs, + final Map, IdentityMapping>> identityMap, final EnumResolver enumResolver) { this.moduleConfigs = moduleConfigs; this.identityMap = identityMap; this.enumResolver = enumResolver; } - public static Map>> getMappedInstances(Set instancesToMap, - Map> configs) { + public static Map>> getMappedInstances( + final Set instancesToMap, final Map> configs) { Multimap moduleToInstances = mapInstancesToModules(instancesToMap); Map>> retVal = Maps.newLinkedHashMap(); @@ -73,20 +74,19 @@ public class Config { // TODO, this code does not support same module names from different namespaces // Namespace should be present in ObjectName - if (instances == null){ + if (instances == null) { continue; } innerRetVal.put(moduleName, instances); } - retVal.put(namespaceToModuleToConfigEntry.getKey(), innerRetVal); } return retVal; } - private static Multimap mapInstancesToModules(Set instancesToMap) { + private static Multimap mapInstancesToModules(final Set instancesToMap) { Multimap retVal = HashMultimap.create(); for (ObjectName objectName : instancesToMap) { @@ -96,8 +96,8 @@ public class Config { return retVal; } - public Element toXml(Set instancesToMap, Optional maybeNamespace, Document document, - Element dataElement, ServiceRegistryWrapper serviceTracker) { + public Element toXml(final Set instancesToMap, final Optional maybeNamespace, + final Document document, final Element dataElement, final ServiceRegistryWrapper serviceTracker) { Map>> moduleToInstances = getMappedInstances(instancesToMap, moduleConfigs); @@ -106,20 +106,23 @@ public class Config { dataElement.setAttributeNS(maybeNamespace.get(), dataElement.getNodeName(), "xmlns"); } - Element modulesElement = XmlUtil.createElement(document, XmlMappingConstants.MODULES_KEY, Optional.of(XmlMappingConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG)); + Element modulesElement = XmlUtil.createElement(document, XmlMappingConstants.MODULES_KEY, + Optional.of(XmlMappingConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG)); dataElement.appendChild(modulesElement); for (Entry>> moduleToInstanceEntry : moduleToInstances.entrySet()) { for (Entry> moduleMappingEntry : moduleToInstanceEntry.getValue() .entrySet()) { - ModuleConfig mapping = moduleConfigs.get(moduleToInstanceEntry.getKey()).get(moduleMappingEntry.getKey()); + ModuleConfig mapping = moduleConfigs.get(moduleToInstanceEntry.getKey()) + .get(moduleMappingEntry.getKey()); if (moduleMappingEntry.getValue().isEmpty()) { continue; } for (ObjectName objectName : moduleMappingEntry.getValue()) { - modulesElement.appendChild(mapping.toXml(objectName, document, moduleToInstanceEntry.getKey(), enumResolver)); + modulesElement.appendChild( + mapping.toXml(objectName, document, moduleToInstanceEntry.getKey(), enumResolver)); } } @@ -130,65 +133,70 @@ public class Config { return dataElement; } + public Element moduleToXml(final String moduleNamespace, final String factoryName, final String instanceName, + final ObjectName instanceON, final Document document) { + ModuleConfig moduleConfig = getModuleMapping(moduleNamespace, instanceName, factoryName); + return moduleConfig.toXml(instanceON, document, moduleNamespace, enumResolver); + } + // TODO refactor, replace string representing namespace with namespace class // TODO refactor, replace Map->Multimap with e.g. ConfigElementResolved // class - public Map> fromXmlModulesResolved(XmlElement xml, EditStrategyType defaultEditStrategyType, ServiceRegistryWrapper serviceTracker) throws DocumentedException { + public Map> fromXmlModulesResolved(final XmlElement xml, + final EditStrategyType defaultEditStrategyType, final ServiceRegistryWrapper serviceTracker) + throws DocumentedException { Optional modulesElement = getModulesElement(xml); List moduleElements = getModulesElementList(modulesElement); Map> retVal = Maps.newHashMap(); - for (XmlElement moduleElement : moduleElements) { - ResolvingStrategy resolvingStrategy = new ResolvingStrategy() { - @Override - public ModuleElementResolved resolveElement(ModuleConfig moduleMapping, XmlElement moduleElement, ServiceRegistryWrapper serviceTracker, String instanceName, String moduleNamespace, EditStrategyType defaultStrategy) throws DocumentedException { - return moduleMapping.fromXml(moduleElement, serviceTracker, - instanceName, moduleNamespace, defaultStrategy, identityMap, enumResolver); - } - }; + ResolvingStrategy resolvingStrategy = (moduleMapping, moduleElement, serviceTracker1, + instanceName, moduleNamespace, defaultStrategy) -> moduleMapping.fromXml(moduleElement, serviceTracker1, + instanceName, moduleNamespace, defaultStrategy, identityMap, enumResolver); + for (XmlElement moduleElement : moduleElements) { resolveModule(retVal, serviceTracker, moduleElement, defaultEditStrategyType, resolvingStrategy); } + return retVal; } /** - * return a map containing namespace -> moduleName -> instanceName map. Attribute parsing is omitted. + * return a map containing namespace -> moduleName -> instanceName map. + * Attribute parsing is omitted. */ - public Map> fromXmlModulesMap(XmlElement xml, - EditStrategyType defaultEditStrategyType, ServiceRegistryWrapper serviceTracker) throws DocumentedException { + public Map> fromXmlModulesMap(final XmlElement xml, + final EditStrategyType defaultEditStrategyType, final ServiceRegistryWrapper serviceTracker) + throws DocumentedException { Optional modulesElement = getModulesElement(xml); List moduleElements = getModulesElementList(modulesElement); Map> retVal = Maps.newHashMap(); - for (XmlElement moduleElement : moduleElements) { - ResolvingStrategy resolvingStrategy = new ResolvingStrategy() { - @Override - public ModuleElementDefinition resolveElement(ModuleConfig moduleMapping, XmlElement moduleElement, - ServiceRegistryWrapper serviceTracker, String instanceName, String moduleNamespace, - EditStrategyType defaultStrategy) { - // TODO: add check for conflicts between global and local - // edit strategy - String perInstanceEditStrategy = moduleElement.getAttribute(XmlMappingConstants.OPERATION_ATTR_KEY, - XmlMappingConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0); - return new ModuleElementDefinition(instanceName, perInstanceEditStrategy, defaultStrategy); - } - }; + ResolvingStrategy resolvingStrategy = (moduleMapping, moduleElement, serviceTracker1, + instanceName, moduleNamespace, defaultStrategy) -> { + // TODO: add check for conflicts between global and local edit + // strategy + String perInstanceEditStrategy = moduleElement.getAttribute(XmlMappingConstants.OPERATION_ATTR_KEY, + XmlMappingConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0); + return new ModuleElementDefinition(instanceName, perInstanceEditStrategy, defaultStrategy); + }; + for (XmlElement moduleElement : moduleElements) { resolveModule(retVal, serviceTracker, moduleElement, defaultEditStrategyType, resolvingStrategy); } + return retVal; } - private static Optional getModulesElement(XmlElement xml) { + private static Optional getModulesElement(final XmlElement xml) { return xml.getOnlyChildElementOptionally(XmlMappingConstants.MODULES_KEY, - XmlMappingConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG); + XmlMappingConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG); } - private List getModulesElementList(Optional modulesElement) throws DocumentedException { + private List getModulesElementList(final Optional modulesElement) + throws DocumentedException { List moduleElements; if (modulesElement.isPresent()) { @@ -200,8 +208,10 @@ public class Config { return moduleElements; } - private void resolveModule(Map> retVal, ServiceRegistryWrapper serviceTracker, - XmlElement moduleElement, EditStrategyType defaultStrategy, ResolvingStrategy resolvingStrategy) throws DocumentedException { + private void resolveModule(final Map> retVal, + final ServiceRegistryWrapper serviceTracker, final XmlElement moduleElement, + final EditStrategyType defaultStrategy, final ResolvingStrategy resolvingStrategy) + throws DocumentedException { XmlElement typeElement = null; typeElement = moduleElement.getOnlyChildElementWithSameNamespace(XmlMappingConstants.TYPE_KEY); Entry prefixToNamespace = typeElement.findNamespaceOfTextContent(); @@ -215,19 +225,15 @@ public class Config { ModuleConfig moduleMapping = getModuleMapping(moduleNamespace, instanceName, factoryName); - Multimap innerMap = retVal.get(moduleNamespace); - if (innerMap == null) { - innerMap = HashMultimap.create(); - retVal.put(moduleNamespace, innerMap); - } + Multimap innerMap = retVal.computeIfAbsent(moduleNamespace, k -> HashMultimap.create()); - T resolvedElement = resolvingStrategy.resolveElement(moduleMapping, moduleElement, serviceTracker, - instanceName, moduleNamespace, defaultStrategy); + T resolvedElement = resolvingStrategy.resolveElement(moduleMapping, moduleElement, serviceTracker, instanceName, + moduleNamespace, defaultStrategy); innerMap.put(factoryName, resolvedElement); } - public Services fromXmlServices(XmlElement xml) throws DocumentedException { + public Services fromXmlServices(final XmlElement xml) throws DocumentedException { Optional servicesElement = getServicesElement(xml); Services services; @@ -240,29 +246,28 @@ public class Config { return services; } - private static Optional getServicesElement(XmlElement xml) { + private static Optional getServicesElement(final XmlElement xml) { return xml.getOnlyChildElementOptionally(XmlMappingConstants.SERVICES_KEY, - XmlMappingConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG); + XmlMappingConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG); } - public static void checkUnrecognisedChildren(XmlElement parent) throws DocumentedException { + public static void checkUnrecognisedChildren(final XmlElement parent) throws DocumentedException { Optional servicesOpt = getServicesElement(parent); Optional modulesOpt = getModulesElement(parent); List recognised = Lists.newArrayList(); - if(servicesOpt.isPresent()){ + if (servicesOpt.isPresent()) { recognised.add(servicesOpt.get()); } - if(modulesOpt.isPresent()){ + if (modulesOpt.isPresent()) { recognised.add(modulesOpt.get()); } parent.checkUnrecognisedElements(recognised); } - private String getFactoryName(String factoryNameWithPrefix, String prefixOrEmptyString) { - checkState( - factoryNameWithPrefix.startsWith(prefixOrEmptyString), + private String getFactoryName(final String factoryNameWithPrefix, final String prefixOrEmptyString) { + checkState(factoryNameWithPrefix.startsWith(prefixOrEmptyString), String.format("Internal error: text " + "content '%s' of type node does not start with prefix '%s'", factoryNameWithPrefix, prefixOrEmptyString)); @@ -275,7 +280,8 @@ public class Config { return factoryNameWithPrefix.substring(factoryNameAfterPrefixIndex); } - private ModuleConfig getModuleMapping(String moduleNamespace, String instanceName, String factoryName) { + private ModuleConfig getModuleMapping(final String moduleNamespace, final String instanceName, + final String factoryName) { Map mappingsFromNamespace = moduleConfigs.get(moduleNamespace); Preconditions.checkNotNull(mappingsFromNamespace, @@ -288,7 +294,8 @@ public class Config { } private interface ResolvingStrategy { - public T resolveElement(ModuleConfig moduleMapping, XmlElement moduleElement, ServiceRegistryWrapper serviceTracker, - String instanceName, String moduleNamespace, EditStrategyType defaultStrategy) throws DocumentedException; + T resolveElement(ModuleConfig moduleMapping, XmlElement moduleElement, ServiceRegistryWrapper serviceTracker, + String instanceName, String moduleNamespace, EditStrategyType defaultStrategy) + throws DocumentedException; } }