package org.sdnplatform.sync.internal.config; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.sdnplatform.sync.error.SyncException; import org.sdnplatform.sync.internal.SyncManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.floodlightcontroller.core.module.FloodlightModuleContext; /** * Delegate cluster configuration to a list of providers * @author readams */ public class DelegatingCCProvider implements IClusterConfigProvider { protected static final Logger logger = LoggerFactory.getLogger(DelegatingCCProvider.class.getName()); List<IClusterConfigProvider> providers = new ArrayList<IClusterConfigProvider>(); public void addProvider(IClusterConfigProvider provider) { this.providers.add(provider); } @Override public void init(SyncManager syncManager, FloodlightModuleContext context) { Iterator<IClusterConfigProvider> iter = providers.iterator(); while (iter.hasNext()) { IClusterConfigProvider provider = iter.next(); try { provider.init(syncManager, context); } catch (Exception e) { logger.error("Failed to initialize provider " + provider.getClass().getName(), e); iter.remove(); } } } @Override public ClusterConfig getConfig() throws SyncException { for (IClusterConfigProvider provider : providers) { try { return provider.getConfig(); } catch (RuntimeException e) { logger.debug("RuntimeException in ClusterConfig provider {}", provider.getClass().getSimpleName(), e); } catch (Exception e) { logger.debug("ClusterConfig provider {} failed: {}", provider.getClass().getSimpleName(), e.getMessage()); } } throw new SyncException("All cluster config providers failed"); } }