X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2Fmapping%2Fruntime%2FRuntime.java;h=129143835fd024e53c290509662f968f9e691b6c;hp=8af1e0ee90e94fe7c009eb93ece4b1f478b16d4f;hb=0ae12c54560ef14cb8c08beef4553f7523d41578;hpb=a87db38d47967eae159c5be17ab334bb6a4edffc 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 8af1e0ee90..129143835f 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 @@ -12,26 +12,37 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; 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 javax.management.ObjectName; +import java.util.Collection; import java.util.Map; import java.util.Set; public class Runtime { private final Map> moduleRuntimes; + private final Map> moduleConfigs; - public Runtime(Map> moduleRuntimes) { + public Runtime(Map> moduleRuntimes, + Map> moduleConfigs) { this.moduleRuntimes = moduleRuntimes; + this.moduleConfigs = moduleConfigs; } private Map> mapInstancesToModules(Set instancesToMap) { Map> retVal = Maps.newHashMap(); + // TODO map to namepsace, prevent module name conflicts + // this code does not support same module names from different namespaces + // Namespace should be present in ObjectName + for (ObjectName objectName : instancesToMap) { String moduleName = ObjectNameUtil.getFactoryName(objectName); @@ -49,7 +60,7 @@ public class Runtime { return retVal; } - public Element toXml(Set instancesToMap, Document document) { + public Element toXml(Set instancesToMap, Set configBeans, Document document, ServiceRegistryWrapper serviceRegistry) { Element root = document.createElement(XmlNetconfConstants.DATA_KEY); Element modulesElement = document.createElement(XmlNetconfConstants.MODULES_KEY); @@ -57,19 +68,30 @@ public class Runtime { XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG); root.appendChild(modulesElement); - Map> moduleToInstances = mapInstancesToModules(instancesToMap); + Map> moduleToRuntimeInstance = mapInstancesToModules(instancesToMap); + Map>> moduleToConfigInstance = Config.getMappedInstances( + configBeans, moduleConfigs); + + for (String localNamespace : moduleConfigs.keySet()) { - for (String localNamespace : moduleRuntimes.keySet()) { - for (String moduleName : moduleRuntimes.get(localNamespace).keySet()) { - Multimap instanceToRbe = moduleToInstances.get(moduleName); + Map> instanceToMbe = moduleToConfigInstance.get(localNamespace); - if (instanceToRbe == null) - continue; + for (String moduleName : moduleConfigs.get(localNamespace).keySet()) { + Multimap instanceToRbe = moduleToRuntimeInstance.get(moduleName); - for (String instanceName : instanceToRbe.keySet()) { - ModuleRuntime moduleRuntime = moduleRuntimes.get(localNamespace).get(moduleName); - Element innerXml = moduleRuntime.toXml(localNamespace, instanceName, instanceToRbe.get(instanceName), document); - modulesElement.appendChild(innerXml); + for (ObjectName instanceON : instanceToMbe.get(moduleName)) { + String instanceName = ObjectNameUtil.getInstanceName(instanceON); + + Element runtimeXml; + ModuleConfig moduleConfig = moduleConfigs.get(localNamespace).get(moduleName); + if(instanceToRbe==null || instanceToRbe.containsKey(instanceName) == false) { + runtimeXml = moduleConfig.toXml(instanceON, serviceRegistry, document, localNamespace); + } else { + ModuleRuntime moduleRuntime = moduleRuntimes.get(localNamespace).get(moduleName); + runtimeXml = moduleRuntime.toXml(localNamespace, instanceToRbe.get(instanceName), document, + moduleConfig, instanceON, serviceRegistry); + } + modulesElement.appendChild(runtimeXml); } } @@ -78,4 +100,14 @@ public class Runtime { return root; } + private ObjectName findInstance(Collection objectNames, String instanceName) { + for (ObjectName objectName : objectNames) { + String name = ObjectNameUtil.getInstanceName(objectName); + if(name.equals(instanceName)) + return objectName; + } + + throw new UnsupportedOperationException("Unable to find config bean instance under name " + instanceName + " among " + objectNames); + } + }