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%2Fosgi%2FNetconfOperationServiceFactoryImpl.java;h=6ea628d0190e8a531166c823efa4eff8bf6e5173;hp=cb9c956b90c8e10bba8283bd75eabe979cb9d068;hb=b2e81149739c87f0ecc2ce7f06448d7a5d3162b8;hpb=980322fdf8deb01893af9f31dfdda69df37bc7f1 diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationServiceFactoryImpl.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationServiceFactoryImpl.java index cb9c956b90..6ea628d019 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationServiceFactoryImpl.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationServiceFactoryImpl.java @@ -8,100 +8,56 @@ package org.opendaylight.controller.netconf.confignetconfconnector.osgi; -import java.lang.management.ManagementFactory; -import java.util.HashSet; +import com.google.common.base.Function; +import com.google.common.collect.Collections2; +import com.google.common.collect.Sets; import java.util.Set; -import javax.management.MBeanServer; -import org.opendaylight.controller.config.util.ConfigRegistryJMXClient; -import org.opendaylight.controller.netconf.api.Capability; +import org.opendaylight.controller.config.facade.xml.ConfigSubsystemFacadeFactory; +import org.opendaylight.controller.config.util.capability.Capability; +import org.opendaylight.controller.config.util.capability.ModuleListener; +import org.opendaylight.controller.config.util.capability.YangModuleCapability; import org.opendaylight.controller.netconf.api.monitoring.CapabilityListener; import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory; -import org.opendaylight.controller.netconf.util.capability.BasicCapability; -import org.opendaylight.controller.netconf.util.capability.YangModuleCapability; import org.opendaylight.yangtools.yang.model.api.Module; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class NetconfOperationServiceFactoryImpl implements NetconfOperationServiceFactory { - public static final int ATTEMPT_TIMEOUT_MS = 1000; - private static final int SILENT_ATTEMPTS = 30; + private final ConfigSubsystemFacadeFactory configFacadeFactory; - private final YangStoreService yangStoreService; - private final ConfigRegistryJMXClient jmxClient; - - private static final Logger LOG = LoggerFactory.getLogger(NetconfOperationServiceFactoryImpl.class); - - public NetconfOperationServiceFactoryImpl(YangStoreService yangStoreService) { - this(yangStoreService, ManagementFactory.getPlatformMBeanServer()); - } - - public NetconfOperationServiceFactoryImpl(YangStoreService yangStoreService, MBeanServer mBeanServer) { - this.yangStoreService = yangStoreService; - - ConfigRegistryJMXClient configRegistryJMXClient; - int i = 0; - // Config registry might not be present yet, but will be eventually - while(true) { - - try { - configRegistryJMXClient = new ConfigRegistryJMXClient(mBeanServer); - break; - } catch (IllegalStateException e) { - ++i; - if (i > SILENT_ATTEMPTS) { - LOG.info("JMX client not created after {} attempts, still trying", i, e); - } else { - LOG.debug("JMX client could not be created, reattempting, try {}", i, e); - } - try { - Thread.sleep(ATTEMPT_TIMEOUT_MS); - } catch (InterruptedException e1) { - Thread.currentThread().interrupt(); - throw new IllegalStateException("Interrupted while reattempting connection", e1); - } - } - } - - jmxClient = configRegistryJMXClient; - if (i > SILENT_ATTEMPTS) { - LOG.info("Created JMX client after {} attempts", i); - } else { - LOG.debug("Created JMX client after {} attempts", i); - } + public NetconfOperationServiceFactoryImpl(ConfigSubsystemFacadeFactory configFacadeFactory) { + this.configFacadeFactory = configFacadeFactory; } @Override public NetconfOperationServiceImpl createService(String netconfSessionIdForReporting) { - return new NetconfOperationServiceImpl(yangStoreService, jmxClient, netconfSessionIdForReporting); + return new NetconfOperationServiceImpl(configFacadeFactory.createFacade(netconfSessionIdForReporting), netconfSessionIdForReporting); } - @Override public Set getCapabilities() { - return setupCapabilities(yangStoreService); + return configFacadeFactory.getCurrentCapabilities(); } @Override public AutoCloseable registerCapabilityListener(final CapabilityListener listener) { - return yangStoreService.registerCapabilityListener(listener); + return configFacadeFactory.getYangStoreService().registerModuleListener(new ModuleListener() { + @Override + public void onCapabilitiesChanged(Set added, Set removed) { + listener.onCapabilitiesChanged( + transformModulesToCapabilities(added), transformModulesToCapabilities(removed)); + } + }); } - public static Set setupCapabilities(final YangStoreContext yangStoreSnapshot) { - Set capabilities = new HashSet<>(); - // [RFC6241] 8.3. Candidate Configuration Capability - capabilities.add(new BasicCapability("urn:ietf:params:netconf:capability:candidate:1.0")); - - // TODO rollback on error not supported EditConfigXmlParser:100 - // [RFC6241] 8.5. Rollback-on-Error Capability - // capabilities.add(new BasicCapability("urn:ietf:params:netconf:capability:rollback-on-error:1.0")); - - Set modules = yangStoreSnapshot.getModules(); - for (Module module : modules) { - capabilities.add(new YangModuleCapability(module, yangStoreSnapshot.getModuleSource(module))); + private static final Function MODULE_TO_CAPABILITY = new Function() { + @Override + public Capability apply(final Module module) { + return new YangModuleCapability(module, module.getSource()); } + }; - return capabilities; + public static Set transformModulesToCapabilities(Set modules) { + return Sets.newHashSet(Collections2.transform(modules, MODULE_TO_CAPABILITY)); } }