# Path: ermesms/Plugin.py
# class Plugin(Singleton):
#     """Classe-base dei plugin di ermeSms.
# 
#     Questa classe permette di creare ed utilizzare in ermeSms i "plugin":
#     moduli che aggiungono funzionalità al programma (come interfacce utente
#     o classi per l'invio degli SMS).
#     Ogni plugin, a seconda di arbitrarie condizioni verificate a runtime,
#     può essere disponibile o meno (vedi metodo isAvaliable).
#     """
# 
#     def isAvailable(self):
#         """Ritorna true se questo plugin è utilizzabile."""
#         raise NotImplementedError()
# 
#     def getPlugins(cls):
#         """Ritorna un'istanza di ogni plugin disponibile in un dizionario
#         indicizzato per nome.
#         """
#         result = {}
#         classes = cls.__subclasses__()
#         for i in classes:
#             obj = i.getInstance()
#             if obj.isAvailable():
#                 result[i.__name__] = obj
#         return result
#     getPlugins = classmethod(getPlugins)
# 
# Path: ermesms/PriorityPlugin.py
# class PriorityPlugin(Plugin):
#     """Classe-base dei plugin a priorità di MoioSMS.
# 
#     Ogni istanza di PriorityPlugin ha associata una priorità (ritornata dal metodo
#     getPriority). In presenza di più plugin disponibili a diversa priorità, va
#     utilizzato preferenzialmente il plugin a priorità massima (ritornato dal metodo
#     getBestPlugin).
#     """
# 
#     def getPriority(self):
#         """Ritorna un indice di priorità (intero)."""
#         raise NotImplementedError()
# 
#     def getBestPlugin(cls):
#         """Ritorna un'istanza del plugin disponibile a massima priorità o None se
#         non esistono plugin disponibili.
#         """
#         result = None
#         all = cls.getPlugins()
#         for i in all.values():
#             if result is None:
#                 result = i
#             else:
#                 if i.getPriority()>result.getPriority():
#                     result = i
#         return result
#     getBestPlugin = classmethod(getBestPlugin)


from ermesms.Plugin import Plugin
from ermesms.PriorityPlugin import PriorityPlugin
# -*- coding: utf-8 -*-


class UI(PriorityPlugin):
    """Classe base dei plugin per le interfacce utente."""

    def run(self):
        """Avvia questa interfaccia."""
        raise NotImplementedError()

    def showFatalException(self, message):
        """Questo metodo viene richiamato nel caso in cui venga catturata
        un'eccezione non gestita nel programma principale."""

# Path: ermesms/Plugin.py
# class Plugin(Singleton):
#     """Classe-base dei plugin di ermeSms.
# 
#     Questa classe permette di creare ed utilizzare in ermeSms i "plugin":
#     moduli che aggiungono funzionalità al programma (come interfacce utente
#     o classi per l'invio degli SMS).
#     Ogni plugin, a seconda di arbitrarie condizioni verificate a runtime,
#     può essere disponibile o meno (vedi metodo isAvaliable).
#     """
# 
#     def isAvailable(self):
#         """Ritorna true se questo plugin è utilizzabile."""
#         raise NotImplementedError()
# 
#     def getPlugins(cls):
#         """Ritorna un'istanza di ogni plugin disponibile in un dizionario
#         indicizzato per nome.
#         """
#         result = {}
#         classes = cls.__subclasses__()
#         for i in classes:
#             obj = i.getInstance()
#             if obj.isAvailable():
#                 result[i.__name__] = obj
#         return result
#     getPlugins = classmethod(getPlugins)
# 
# Path: ermesms/PriorityPlugin.py
# class PriorityPlugin(Plugin):
#     """Classe-base dei plugin a priorità di MoioSMS.
# 
#     Ogni istanza di PriorityPlugin ha associata una priorità (ritornata dal metodo
#     getPriority). In presenza di più plugin disponibili a diversa priorità, va
#     utilizzato preferenzialmente il plugin a priorità massima (ritornato dal metodo
#     getBestPlugin).
#     """
# 
#     def getPriority(self):
#         """Ritorna un indice di priorità (intero)."""
#         raise NotImplementedError()
# 
#     def getBestPlugin(cls):
#         """Ritorna un'istanza del plugin disponibile a massima priorità o None se
#         non esistono plugin disponibili.
#         """
#         result = None
#         all = cls.getPlugins()
#         for i in all.values():
#             if result is None:
#                 result = i
#             else:
#                 if i.getPriority()>result.getPriority():
#                     result = i
#         return result
#     getBestPlugin = classmethod(getBestPlugin)


# Path: ermesms/plugins/UI.py
from ermesms.Plugin import Plugin
from ermesms.PriorityPlugin import PriorityPlugin

# -*- coding: utf-8 -*-


class UI(PriorityPlugin):
    """Classe base dei plugin per le interfacce utente."""

    def run(self):
        """Avvia questa interfaccia."""
        raise NotImplementedError()

    def showFatalException(self, message):
        """Questo metodo viene richiamato nel caso in cui venga catturata
        un'eccezione non gestita nel programma principale."""

        raise NotImplementedError()