X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager-facade-xml%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Ffacade%2Fxml%2Fmapping%2Fconfig%2FConfig.java;h=7aec4946e1af524e5fe5938ad20993cdf1dc2989;hp=d40bfe1d80c170b76a8d647f32b87414ce878a5c;hb=d266f4384d4850af9049d7cddd2bbac8f75ba61e;hpb=35624f56612e0b8ca641c2fc5fed25f1c7628e51 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 d40bfe1d80..7aec4946e1 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, @@ -9,6 +9,7 @@ package org.opendaylight.controller.config.facade.xml.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; @@ -34,11 +35,11 @@ import org.opendaylight.controller.config.util.xml.XmlUtil; import org.w3c.dom.Document; import org.w3c.dom.Element; - public class Config { private final Map> moduleConfigs; + Map> moduleConfigs; private final Map> identityMap; @@ -48,14 +49,15 @@ public class Config { this(moduleConfigs, Collections.>emptyMap(), enumResolver); } - public Config(final Map> moduleConfigs, final Map> identityMap, final EnumResolver enumResolver) { + public Config(final Map> moduleConfigs, + final Map> identityMap, final EnumResolver enumResolver) { this.moduleConfigs = moduleConfigs; this.identityMap = identityMap; this.enumResolver = enumResolver; } - public static Map>> getMappedInstances(final Set instancesToMap, - final Map> configs) { + public static Map>> getMappedInstances( + final Set instancesToMap, final Map> configs) { Multimap moduleToInstances = mapInstancesToModules(instancesToMap); Map>> retVal = Maps.newLinkedHashMap(); @@ -72,14 +74,13 @@ 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; @@ -95,8 +96,8 @@ public class Config { return retVal; } - public Element toXml(final Set instancesToMap, final Optional maybeNamespace, final Document document, - final Element dataElement, final 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); @@ -105,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,7 +134,7 @@ public class Config { } public Element moduleToXml(final String moduleNamespace, final String factoryName, final String instanceName, - final ObjectName instanceON, final Document document) { + final ObjectName instanceON, final Document document) { ModuleConfig moduleConfig = getModuleMapping(moduleNamespace, instanceName, factoryName); return moduleConfig.toXml(instanceON, document, moduleNamespace, enumResolver); } @@ -139,20 +143,19 @@ public class Config { // TODO refactor, replace Map->Multimap with e.g. ConfigElementResolved // class - public Map> fromXmlModulesResolved(final XmlElement xml, final EditStrategyType defaultEditStrategyType, final 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(final ModuleConfig moduleMapping, final XmlElement moduleElement, final ServiceRegistryWrapper serviceTracker, final String instanceName, final String moduleNamespace, final EditStrategyType defaultStrategy) throws DocumentedException { - return moduleMapping.fromXml(moduleElement, serviceTracker, - instanceName, moduleNamespace, defaultStrategy, identityMap, enumResolver); - } - }; + ResolvingStrategy resolvingStrategy = (moduleMapping, moduleElement1, + serviceTracker1, instanceName, moduleNamespace, + defaultStrategy) -> moduleMapping.fromXml(moduleElement1, serviceTracker1, instanceName, + moduleNamespace, defaultStrategy, identityMap, enumResolver); resolveModule(retVal, serviceTracker, moduleElement, defaultEditStrategyType, resolvingStrategy); } @@ -160,27 +163,25 @@ public class Config { } /** - * 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(final XmlElement xml, - final EditStrategyType defaultEditStrategyType, final ServiceRegistryWrapper serviceTracker) throws DocumentedException { + 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(final ModuleConfig moduleMapping, final XmlElement moduleElement, - final ServiceRegistryWrapper serviceTracker, final String instanceName, final String moduleNamespace, - final 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, moduleElement1, + serviceTracker1, instanceName, moduleNamespace, defaultStrategy) -> { + // TODO: add check for conflicts between global and local + // edit strategy + String perInstanceEditStrategy = moduleElement1.getAttribute(XmlMappingConstants.OPERATION_ATTR_KEY, + XmlMappingConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0); + return new ModuleElementDefinition(instanceName, perInstanceEditStrategy, defaultStrategy); }; resolveModule(retVal, serviceTracker, moduleElement, defaultEditStrategyType, resolvingStrategy); @@ -190,10 +191,11 @@ public class Config { 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(final Optional modulesElement) throws DocumentedException { + private List getModulesElementList(final Optional modulesElement) + throws DocumentedException { List moduleElements; if (modulesElement.isPresent()) { @@ -205,8 +207,10 @@ public class Config { return moduleElements; } - private void resolveModule(final Map> retVal, final ServiceRegistryWrapper serviceTracker, - final XmlElement moduleElement, final EditStrategyType defaultStrategy, final 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(); @@ -222,8 +226,8 @@ public class Config { 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); } @@ -243,7 +247,7 @@ public class Config { 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(final XmlElement parent) throws DocumentedException { @@ -251,10 +255,10 @@ public class Config { 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()); } @@ -262,8 +266,7 @@ public class Config { } private String getFactoryName(final String factoryNameWithPrefix, final String prefixOrEmptyString) { - checkState( - factoryNameWithPrefix.startsWith(prefixOrEmptyString), + checkState(factoryNameWithPrefix.startsWith(prefixOrEmptyString), String.format("Internal error: text " + "content '%s' of type node does not start with prefix '%s'", factoryNameWithPrefix, prefixOrEmptyString)); @@ -276,7 +279,8 @@ public class Config { return factoryNameWithPrefix.substring(factoryNameAfterPrefixIndex); } - private ModuleConfig getModuleMapping(final String moduleNamespace, final String instanceName, final String factoryName) { + private ModuleConfig getModuleMapping(final String moduleNamespace, final String instanceName, + final String factoryName) { Map mappingsFromNamespace = moduleConfigs.get(moduleNamespace); Preconditions.checkNotNull(mappingsFromNamespace, @@ -290,6 +294,7 @@ public class Config { private interface ResolvingStrategy { T resolveElement(ModuleConfig moduleMapping, XmlElement moduleElement, ServiceRegistryWrapper serviceTracker, - String instanceName, String moduleNamespace, EditStrategyType defaultStrategy) throws DocumentedException; + String instanceName, String moduleNamespace, EditStrategyType defaultStrategy) + throws DocumentedException; } }