X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2Foperations%2Feditconfig%2FEditConfig.java;h=709573c2414c3249917aae4e03851e0f9ada4da8;hb=3fdb59d96aecf80c8e5b414f2c69fc2d521c0abd;hp=1bb1d9bfba7babf8fa2dc504909e4f89b6730530;hpb=30c43b1714eff95a8b7b601888fdb03da7150216;p=controller.git 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 1bb1d9bfba..709573c241 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 @@ -25,6 +25,7 @@ import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.InstanceConfig; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.InstanceConfigElementResolved; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ModuleConfig; +import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ModuleElementDefinition; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ModuleElementResolved; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Services; import org.opendaylight.controller.netconf.confignetconfconnector.operations.AbstractConfigNetconfOperation; @@ -105,8 +106,8 @@ public class EditConfig extends AbstractConfigNetconfOperation { logger.debug("Test phase for {} operation successful", EditConfigXmlParser.EDIT_CONFIG); } - private void test(ConfigRegistryClient configRegistryClient, - EditConfigExecution execution, EditStrategyType editStrategyType) { + private void test(ConfigRegistryClient configRegistryClient, EditConfigExecution execution, + EditStrategyType editStrategyType) { ObjectName taON = transactionProvider.getTestTransaction(); try { @@ -115,8 +116,11 @@ public class EditConfig extends AbstractConfigNetconfOperation { transactionProvider.wipeTestTransaction(taON); } - setOnTransaction(configRegistryClient, execution.getResolvedXmlElements(), execution.getServices(), taON); - // TODO add service reference persistance testing here + ConfigTransactionClient ta = configRegistryClient.getConfigTransactionClient(taON); + + handleMisssingInstancesOnTransaction(ta, execution); + setServicesOnTransaction(ta, execution); + setOnTransaction(ta, execution); transactionProvider.validateTestTransaction(taON); } finally { transactionProvider.abortTestTransaction(taON); @@ -132,14 +136,16 @@ public class EditConfig extends AbstractConfigNetconfOperation { transactionProvider.wipeTransaction(); } - setOnTransaction(configRegistryClient, editConfigExecution.getResolvedXmlElements(), - editConfigExecution.getServices(), taON); - setServicesOnTransaction(configRegistryClient, editConfigExecution.getServices(), taON); + ConfigTransactionClient ta = configRegistryClient.getConfigTransactionClient(taON); + + handleMisssingInstancesOnTransaction(ta, editConfigExecution); + setServicesOnTransaction(ta, editConfigExecution); + setOnTransaction(ta, editConfigExecution); } - private void setServicesOnTransaction(ConfigRegistryClient configRegistryClient, Services services, - ObjectName taON) { - ConfigTransactionClient ta = configRegistryClient.getConfigTransactionClient(taON); + private void setServicesOnTransaction(ConfigTransactionClient ta, EditConfigExecution execution) { + + Services services = execution.getServices(); Map>> namespaceToServiceNameToRefNameToInstance = services .getNamespaceToServiceNameToRefNameToInstance(); @@ -153,9 +159,10 @@ public class EditConfig extends AbstractConfigNetconfOperation { for (String refName : refNameToInstance.keySet()) { ObjectName on = refNameToInstance.get(refName).getObjectName(ta.getTransactionName()); - // TODO check for duplicates try { - ta.saveServiceReference(qnameOfService, refName, on); + ObjectName saved = ta.saveServiceReference(qnameOfService, refName, on); + logger.debug("Saving service {} with on {} under name {} with service on {}", qnameOfService, + on, refName, saved); } catch (InstanceNotFoundException e) { throw new IllegalStateException("Unable to save ref name " + refName + " for instance " + on, e); } @@ -168,11 +175,10 @@ public class EditConfig extends AbstractConfigNetconfOperation { return ta.getServiceInterfaceName(namespace, serviceName); } - private void setOnTransaction(ConfigRegistryClient configRegistryClient, - Map> resolvedXmlElements, Services services, ObjectName taON) { - ConfigTransactionClient ta = configRegistryClient.getConfigTransactionClient(taON); + private void setOnTransaction(ConfigTransactionClient ta, EditConfigExecution execution) { + + for (Multimap modulesToResolved : execution.getResolvedXmlElements(ta).values()) { - for (Multimap modulesToResolved : resolvedXmlElements.values()) { for (Entry moduleToResolved : modulesToResolved.entries()) { String moduleName = moduleToResolved.getKey(); @@ -181,7 +187,22 @@ public class EditConfig extends AbstractConfigNetconfOperation { InstanceConfigElementResolved ice = moduleElementResolved.getInstanceConfigElementResolved(); EditConfigStrategy strategy = ice.getEditStrategy(); - strategy.executeConfiguration(moduleName, instanceName, ice.getConfiguration(), ta, services); + strategy.executeConfiguration(moduleName, instanceName, ice.getConfiguration(), ta, execution.getServiceRegistryWrapper(ta)); + } + } + } + + private void handleMisssingInstancesOnTransaction(ConfigTransactionClient ta, + EditConfigExecution execution) { + + for (Multimap modulesToResolved : execution.getModulesDefinition(ta).values()) { + for (Entry moduleToResolved : modulesToResolved.entries()) { + String moduleName = moduleToResolved.getKey(); + + ModuleElementDefinition moduleElementDefinition = moduleToResolved.getValue(); + + EditConfigStrategy strategy = moduleElementDefinition.getEditStrategy(); + strategy.executeConfiguration(moduleName, moduleElementDefinition.getInstanceName(), null, ta, execution.getServiceRegistryWrapper(ta)); } } } @@ -189,32 +210,38 @@ public class EditConfig extends AbstractConfigNetconfOperation { public static Config getConfigMapping(ConfigRegistryClient configRegistryClient, Map> mBeanEntries) { - Map> factories = transform(configRegistryClient, mBeanEntries); + Map> factories = transformMbeToModuleConfigs(configRegistryClient, mBeanEntries); return new Config(factories); } - // TODO refactor - private static Map> transform - (final ConfigRegistryClient configRegistryClient, Map> transformMbeToModuleConfigs + (final ConfigRegistryClient configRegistryClient, Map> mBeanEntries) { - return Maps.transformEntries(mBeanEntries, - new Maps.EntryTransformer, Map>() { - - @Override - public Map transformEntry(String arg0, Map arg1) { - return Maps.transformEntries(arg1, - new Maps.EntryTransformer() { - - @Override - public ModuleConfig transformEntry(String key, ModuleMXBeanEntry moduleMXBeanEntry) { - return new ModuleConfig(key, new InstanceConfig(configRegistryClient, moduleMXBeanEntry - .getAttributes()), moduleMXBeanEntry.getProvidedServices().values()); - } - }); - } - }); + + Map> namespaceToModuleNameToModuleConfig = Maps.newHashMap(); + + for (String namespace : mBeanEntries.keySet()) { + for (Entry moduleNameToMbe : mBeanEntries.get(namespace).entrySet()) { + String moduleName = moduleNameToMbe.getKey(); + ModuleMXBeanEntry moduleMXBeanEntry = moduleNameToMbe.getValue(); + + ModuleConfig moduleConfig = new ModuleConfig(moduleName, new InstanceConfig(configRegistryClient, + moduleMXBeanEntry.getAttributes()), moduleMXBeanEntry + .getProvidedServices().values()); + + Map moduleNameToModuleConfig = namespaceToModuleNameToModuleConfig.get(namespace); + if(moduleNameToModuleConfig == null) { + moduleNameToModuleConfig = Maps.newHashMap(); + namespaceToModuleNameToModuleConfig.put(namespace, moduleNameToModuleConfig); + } + + moduleNameToModuleConfig.put(moduleName, moduleConfig); + } + } + + return namespaceToModuleNameToModuleConfig; } @Override