public synchronized IFloodlightModuleContext loadModulesFromList(Collection<String> configMods,Properties prop) throws FloodlightModuleException {
  logger.debug("Starting module loader");
  findAllModules(configMods);
  ArrayList<IFloodlightModule> moduleList=new ArrayList<>();
  Map<Class<? extends IFloodlightService>,IFloodlightModule> moduleMap=new HashMap<>();
  HashSet<String> modsVisited=new HashSet<>();
  ArrayDeque<String> modsToLoad=new ArrayDeque<>(configMods);
  while (!modsToLoad.isEmpty()) {
    String moduleName=modsToLoad.removeFirst();
    traverseDeps(moduleName,modsToLoad,moduleList,moduleMap,modsVisited);
  }
  parseConfigParameters(prop);
  loadedModuleList=moduleList;
  initModules(moduleList);
  if (startupModules)   startupModules(moduleList);
  return floodlightModuleContext;
}

public synchronized IFloodlightModuleContext loadModulesFromList ( Collection < String > configMods , Properties prop ) throws FloodlightModuleException { logger . debug ( "Starting module loader" ) ; findAllModules ( configMods ) ; ArrayList < IFloodlightModule > moduleList = new ArrayList < > ( ) ; Map < Class < ? extends IFloodlightService > , IFloodlightModule > moduleMap = new HashMap < > ( ) ; HashSet < String > modsVisited = new HashSet < > ( ) ; ArrayDeque < String > modsToLoad = new ArrayDeque < > ( configMods ) ; while ( ! modsToLoad . isEmpty ( ) ) { String moduleName = modsToLoad . removeFirst ( ) ; traverseDeps ( moduleName , modsToLoad , moduleList , moduleMap , modsVisited ) ; } parseConfigParameters ( prop ) ; loadedModuleList = moduleList ; initModules ( moduleList ) ; if ( startupModules ) startupModules ( moduleList ) ; return floodlightModuleContext ; }
loads modules ( and their dependencies ) specified in the list
