def getServerDependencyMap(plugin,serverName):   
    factory = ServerNetworkFactory(plugin.mainDaemon)
    serversNetwork=factory.buildNetwork(plugin.mainDaemon.ETC_DIR)
    
    returnValue = {}
    returnValue['available'] = {}
    returnValue['disabled'] = {}
    returnValue['existing'] = {}
    
    for possibleServer in serversNetwork.getSortedNodeListIndex():
        if possibleServer != serverName:
            returnValue['available'][possibleServer] = iniToDict(os.path.join(plugin.mainDaemon.SERVERS_DIR,possibleServer + ".ini"))["server"]["comment"]
            try:
                serversNetwork.addDependency(serverName, possibleServer)
                
                #if all went well, remove dependency
                try:
                    serversNetwork.removeDependency( possibleServer,serverName )
                except ValueError:
                    pass
            except DependencyException as e:
                returnValue['available'].pop(possibleServer)
                returnValue['disabled'][possibleServer] = e.list
            except AdditionError:
                #Happens if dependency already exists
                returnValue['existing'][possibleServer] = returnValue['available'].pop(possibleServer)

    
    return returnValue
 def __init__(self):
     self.ETC_DIR = ETC_DIR
     OUTLET_DIR = config.get('main', 'OUTLET_DIR')
     self.OUTLETS_DIR = os.path.join(ETC_DIR,OUTLET_DIR)
     
     TESTER_DIR = config.get('main', 'TESTER_DIR')
     self.TESTERS_DIR = os.path.join(ETC_DIR,TESTER_DIR)
     
     CONTROLLER_DIR = config.get('main', 'CONTROLLER_DIR')
     self.CONTROLLERS_DIR = os.path.join(ETC_DIR,CONTROLLER_DIR) 
     
     SERVER_DIR = config.get('main', 'SERVER_DIR')
     self.SERVERS_DIR = os.path.join(ETC_DIR,SERVER_DIR)
     
     def makeSureDirExists(path):
         if not os.path.isdir(path):
             os.mkdir(path)
         return
     
     makeSureDirExists(self.OUTLETS_DIR)
     makeSureDirExists(self.CONTROLLERS_DIR)
     makeSureDirExists(self.TESTERS_DIR)
     makeSureDirExists(self.SERVERS_DIR)
     
     #config framework
     self.config = config #get it from the global
     
     #Handle the serverTree
     #Daemon.__init__(self, pidfile, stdin, stdout, stderr)
     
     factory = ServerNetworkFactory(self)
     self.servers=factory.buildNetwork(ETC_DIR)
     #self.servers.allOff()
     #servers.initiateStartup()
     
     #Communication handling system
     self.communicationHandler =CommunicationHandler(self)
     self.communicationHandler.AddCommandToList("getAvailablePluginsList", lambda dataDict: self.getAvailablePluginsListIndex(dataDict))
     self.communicationHandler.AddCommandToList("getAvailablePDUsList", lambda dataDict: {"PDUs" : json.dumps(factory.getOutletsDictIndex())})
     self.communicationHandler.AddCommandToList("getAvailableTestersList", lambda dataDict: {"Testers" : json.dumps(factory.getTestersDictIndex())})
     self.communicationHandler.AddCommandToList("getAvailableControllersList", lambda dataDict: {"Controllers" : json.dumps(factory.getControllersDictIndex())})
     self.communicationHandler.AddCommandToList("restart", lambda dataDict: self.reload(dataDict))
     
     
     self.running= True
     
     #plugin init
     self.plugins = []
     plugins = self.getPluginList()
     
     for plugin in plugins:
         if plugin.__name__ in pluginList:
             #self.debug("Loaded: " + plugin.__name__)
             self.plugins.append(plugin(self))
     
     #plugin run
     for plugin in self.plugins:
         plugin.start()
     
     #main loop
     try:
         while self.running:
             #self.debug("In main loop")
             time.sleep(10)
     except KeyboardInterrupt:
         self.debug("Got KeyboardInterrupt, exiting")
         self.shutdown()
     return