/*
- * 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,
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;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-
public class Config {
private final Map<String/* Namespace from yang file */,
- Map<String /* Name of module entry from yang file */, ModuleConfig>> moduleConfigs;
+ Map<String /* Name of module entry from yang file */,
+ ModuleConfig>> moduleConfigs;
private final Map<String, Map<Date, IdentityMapping>> identityMap;
private final EnumResolver enumResolver;
- public Config(Map<String, Map<String, ModuleConfig>> moduleConfigs, final EnumResolver enumResolver) {
+ public Config(final Map<String, Map<String, ModuleConfig>> moduleConfigs, final EnumResolver enumResolver) {
this(moduleConfigs, Collections.<String, Map<Date, IdentityMapping>>emptyMap(), enumResolver);
}
- public Config(Map<String, Map<String, ModuleConfig>> moduleConfigs, Map<String, Map<Date, IdentityMapping>> identityMap, final EnumResolver enumResolver) {
+ public Config(final Map<String, Map<String, ModuleConfig>> moduleConfigs,
+ final Map<String, Map<Date, IdentityMapping>> identityMap, final EnumResolver enumResolver) {
this.moduleConfigs = moduleConfigs;
this.identityMap = identityMap;
this.enumResolver = enumResolver;
}
- public static Map<String, Map<String, Collection<ObjectName>>> getMappedInstances(Set<ObjectName> instancesToMap,
- Map<String, Map<String, ModuleConfig>> configs) {
+ public static Map<String, Map<String, Collection<ObjectName>>> getMappedInstances(
+ final Set<ObjectName> instancesToMap, final Map<String, Map<String, ModuleConfig>> configs) {
Multimap<String, ObjectName> moduleToInstances = mapInstancesToModules(instancesToMap);
Map<String, Map<String, Collection<ObjectName>>> retVal = Maps.newLinkedHashMap();
// 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<String, ObjectName> mapInstancesToModules(Set<ObjectName> instancesToMap) {
+ private static Multimap<String, ObjectName> mapInstancesToModules(final Set<ObjectName> instancesToMap) {
Multimap<String, ObjectName> retVal = HashMultimap.create();
for (ObjectName objectName : instancesToMap) {
return retVal;
}
- public Element toXml(Set<ObjectName> instancesToMap, Optional<String> maybeNamespace, Document document,
- Element dataElement, ServiceRegistryWrapper serviceTracker) {
+ public Element toXml(final Set<ObjectName> instancesToMap, final Optional<String> maybeNamespace,
+ final Document document, final Element dataElement, final ServiceRegistryWrapper serviceTracker) {
Map<String, Map<String, Collection<ObjectName>>> moduleToInstances = getMappedInstances(instancesToMap,
moduleConfigs);
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<String, Map<String, Collection<ObjectName>>> moduleToInstanceEntry : moduleToInstances.entrySet()) {
for (Entry<String, Collection<ObjectName>> 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));
}
}
return dataElement;
}
- public Element moduleToXml(String moduleNamespace, String factoryName, String instanceName,
- ObjectName instanceON, Document document) {
+ 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 Map->Multimap with e.g. ConfigElementResolved
// class
- public Map<String, Multimap<String, ModuleElementResolved>> fromXmlModulesResolved(XmlElement xml, EditStrategyType defaultEditStrategyType, ServiceRegistryWrapper serviceTracker) throws DocumentedException {
+ public Map<String, Multimap<String, ModuleElementResolved>> fromXmlModulesResolved(final XmlElement xml,
+ final EditStrategyType defaultEditStrategyType, final ServiceRegistryWrapper serviceTracker)
+ throws DocumentedException {
Optional<XmlElement> modulesElement = getModulesElement(xml);
List<XmlElement> moduleElements = getModulesElementList(modulesElement);
Map<String, Multimap<String, ModuleElementResolved>> retVal = Maps.newHashMap();
for (XmlElement moduleElement : moduleElements) {
- ResolvingStrategy<ModuleElementResolved> resolvingStrategy = new ResolvingStrategy<ModuleElementResolved>() {
- @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<ModuleElementResolved> resolvingStrategy = (moduleMapping, moduleElement1,
+ serviceTracker1, instanceName, moduleNamespace,
+ defaultStrategy) -> moduleMapping.fromXml(moduleElement1, serviceTracker1, instanceName,
+ moduleNamespace, defaultStrategy, identityMap, enumResolver);
resolveModule(retVal, serviceTracker, moduleElement, defaultEditStrategyType, resolvingStrategy);
}
}
/**
- * 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<String, Multimap<String, ModuleElementDefinition>> fromXmlModulesMap(XmlElement xml,
- EditStrategyType defaultEditStrategyType, ServiceRegistryWrapper serviceTracker) throws DocumentedException {
+ public Map<String, Multimap<String, ModuleElementDefinition>> fromXmlModulesMap(final XmlElement xml,
+ final EditStrategyType defaultEditStrategyType, final ServiceRegistryWrapper serviceTracker)
+ throws DocumentedException {
Optional<XmlElement> modulesElement = getModulesElement(xml);
List<XmlElement> moduleElements = getModulesElementList(modulesElement);
Map<String, Multimap<String, ModuleElementDefinition>> retVal = Maps.newHashMap();
for (XmlElement moduleElement : moduleElements) {
- ResolvingStrategy<ModuleElementDefinition> resolvingStrategy = new ResolvingStrategy<ModuleElementDefinition>() {
- @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<ModuleElementDefinition> 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);
return retVal;
}
- private static Optional<XmlElement> getModulesElement(XmlElement xml) {
+ private static Optional<XmlElement> 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<XmlElement> getModulesElementList(Optional<XmlElement> modulesElement) throws DocumentedException {
+ private List<XmlElement> getModulesElementList(final Optional<XmlElement> modulesElement)
+ throws DocumentedException {
List<XmlElement> moduleElements;
if (modulesElement.isPresent()) {
return moduleElements;
}
- private <T> void resolveModule(Map<String, Multimap<String, T>> retVal, ServiceRegistryWrapper serviceTracker,
- XmlElement moduleElement, EditStrategyType defaultStrategy, ResolvingStrategy<T> resolvingStrategy) throws DocumentedException {
+ private <T> void resolveModule(final Map<String, Multimap<String, T>> retVal,
+ final ServiceRegistryWrapper serviceTracker, final XmlElement moduleElement,
+ final EditStrategyType defaultStrategy, final ResolvingStrategy<T> resolvingStrategy)
+ throws DocumentedException {
XmlElement typeElement = null;
typeElement = moduleElement.getOnlyChildElementWithSameNamespace(XmlMappingConstants.TYPE_KEY);
Entry<String, String> prefixToNamespace = typeElement.findNamespaceOfTextContent();
ModuleConfig moduleMapping = getModuleMapping(moduleNamespace, instanceName, factoryName);
- Multimap<String, T> innerMap = retVal.get(moduleNamespace);
- if (innerMap == null) {
- innerMap = HashMultimap.create();
- retVal.put(moduleNamespace, innerMap);
- }
+ Multimap<String, T> 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<XmlElement> servicesElement = getServicesElement(xml);
Services services;
return services;
}
- private static Optional<XmlElement> getServicesElement(XmlElement xml) {
+ private static Optional<XmlElement> 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<XmlElement> servicesOpt = getServicesElement(parent);
Optional<XmlElement> modulesOpt = getModulesElement(parent);
List<XmlElement> 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));
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<String, ModuleConfig> mappingsFromNamespace = moduleConfigs.get(moduleNamespace);
Preconditions.checkNotNull(mappingsFromNamespace,
private interface ResolvingStrategy<T> {
T resolveElement(ModuleConfig moduleMapping, XmlElement moduleElement, ServiceRegistryWrapper serviceTracker,
- String instanceName, String moduleNamespace, EditStrategyType defaultStrategy) throws DocumentedException;
+ String instanceName, String moduleNamespace, EditStrategyType defaultStrategy)
+ throws DocumentedException;
}
}