Class PluginLoader


  • public final class PluginLoader
    extends java.lang.Object
    Kontrolliert alle installierten Plugins.
    • Constructor Summary

      Constructors 
      Constructor Description
      PluginLoader()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void canUnInstall​(Manifest mf)
      Prueft, ob das Plugin prinzipiell deinstalliert werden kann.
      Plugin findByClass​(java.lang.Class c)
      Versucht, anhand der Klasse herauszufinden, zu welchem Plugins sie gehoert.
      java.util.Map<Manifest,​java.lang.Throwable> getInitErrors()
      Liefert die ggf.
      java.util.List<Manifest> getInstalledManifests()
      Liefert eine Liste mit den Manifesten der installierten Plugins.
      java.util.List<Plugin> getInstalledPlugins()
      Liefert eine Liste mit allen installierten Plugins.
      Manifest getManifest​(java.lang.Class plugin)
      Liefert das Manifest der angegebenen Plugin-Klasse.
      Manifest getManifest​(java.lang.String pluginClass)
      Liefert das Manifest der angegebenen Plugin-Klasse.
      Manifest getManifestByName​(java.lang.String name)
      Liefert das Manifest anhand des Plugin-Namens.
      java.util.List<Manifest> getManifests()
      Liefert eine Liste mit allen gefundenen Manifesten.
      <T extends Plugin>
      T
      getPlugin​(java.lang.Class<? extends Plugin> plugin)
      Liefert die Instanz des Plugins mit der angegebenen Klasse.
      Plugin getPlugin​(java.lang.String pluginClass)
      Liefert die Instanz des Plugins mit der angegebenen Klassennamen.
      void init()
      Sucht nach allen verfuegbaren Plugins und initialisiert sie.
      boolean isInstalled​(java.lang.String pluginClass)
      Prueft, ob das angegebene Plugin installiert ist und erfolgreich initialisiert ist.
      boolean isObsolete​(java.lang.String name)
      Prueft, ob das Plugin obsolet ist und daher ignoriert wird.
      void markForDelete​(Manifest manifest)
      Deinstalliert ein Plugin nicht sofort, sondern markiert es nur zur Loeschung.
      void shutDown()
      Wird beim Beenden der Anwendung ausgefuehrt und beendet alle Plugins.
      void unInstall​(Manifest mf, boolean deleteUserData, de.willuhn.util.ProgressMonitor monitor)
      Deinstalliert das angegebene Plugin.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • PluginLoader

        public PluginLoader()
    • Method Detail

      • init

        public void init()
        Sucht nach allen verfuegbaren Plugins und initialisiert sie.
      • isObsolete

        public boolean isObsolete​(java.lang.String name)
        Prueft, ob das Plugin obsolet ist und daher ignoriert wird.
        Parameters:
        name - der Name des Plugins.
        Returns:
        true, wenn es obsolet ist.
      • getInstalledPlugins

        public java.util.List<Plugin> getInstalledPlugins()
        Liefert eine Liste mit allen installierten Plugins.
        Returns:
        Liste aller installierten Plugins. Die Elemente sind vom Typ AbstractPlugin.
      • getInstalledManifests

        public java.util.List<Manifest> getInstalledManifests()
        Liefert eine Liste mit den Manifesten der installierten Plugins.
        Returns:
        Liste der installierten Manifeste.
      • getManifests

        public java.util.List<Manifest> getManifests()
        Liefert eine Liste mit allen gefundenen Manifesten.
        Returns:
        Liste aller Manifeste (unabhaengig ob erfolgreich installiert oder nicht).
      • getManifest

        public Manifest getManifest​(java.lang.Class plugin)
        Liefert das Manifest der angegebenen Plugin-Klasse.
        Parameters:
        plugin - Klasse des Plugins.
        Returns:
        das Manifest.
      • getManifest

        public Manifest getManifest​(java.lang.String pluginClass)
        Liefert das Manifest der angegebenen Plugin-Klasse.
        Parameters:
        pluginClass - Klasse des Plugins.
        Returns:
        das Manifest.
      • getManifestByName

        public Manifest getManifestByName​(java.lang.String name)
        Liefert das Manifest anhand des Plugin-Namens.
        Parameters:
        name - Name des Plugins.
        Returns:
        das Manifest.
      • getPlugin

        public <T extends Plugin> T getPlugin​(java.lang.Class<? extends Plugin> plugin)
        Liefert die Instanz des Plugins mit der angegebenen Klasse.
        Type Parameters:
        T - der Typ des Plugins.
        Parameters:
        plugin - Klasse des Plugins.
        Returns:
        Instanz des Plugins oder null wenn es nicht installiert ist.
      • getPlugin

        public Plugin getPlugin​(java.lang.String pluginClass)
        Liefert die Instanz des Plugins mit der angegebenen Klassennamen.
        Parameters:
        pluginClass - Klassenname des Plugins.
        Returns:
        Instanz des Plugins oder null wenn es nicht installiert ist.
      • findByClass

        public Plugin findByClass​(java.lang.Class c)
        Versucht, anhand der Klasse herauszufinden, zu welchem Plugins sie gehoert.

        Falls die Klasse in mehreren Plugins enthalten ist und diese Plugins einen gemeinsamen Classloader nutzen (was bei den bisherigen und meisten Plugins meist der Fall ist), kann das Ergebnis durchaus variieren.

        Parameters:
        c - die zu testende Klasse.
        Returns:
        das Plugin oder null, wenn es nicht ermittelbar ist oder zu einem Fehler fuehrte. Der Fehler wird im Jameica-Log protokolliert.
      • isInstalled

        public boolean isInstalled​(java.lang.String pluginClass)
        Prueft, ob das angegebene Plugin installiert ist und erfolgreich initialisiert ist.
        Parameters:
        pluginClass - vollstaeniger Klassenname des Plugins. Warum hier nicht ein Class-Objekt uebergeben wird? Wuerde das Plugin mittels PluginLoader.isInstalled(NeededPlugin.class) pruefen wollen, ob das benoetigte Plugin installiert ist, dann wuerde bereits das NeededPlugin.class vom SystemClassLoader der JVM mit einer ClassNotFoundException aufgeben. Da wir es hier mit dynamisch geladenen Klassen zu tun haben, sind die dem SystemClassLoader nicht bekannt sondern nur unserem eigenen, der via Application.getClassLoader() bezogen werden kann.
        Returns:
        true, wenn es installiert und aktiv ist.
      • canUnInstall

        public void canUnInstall​(Manifest mf)
                          throws de.willuhn.util.ApplicationException
        Prueft, ob das Plugin prinzipiell deinstalliert werden kann.
        Parameters:
        mf - das zu pruefende Plugin.
        Throws:
        de.willuhn.util.ApplicationException - wird geworfen, wenn das Plugin nicht deinstalliert werden kann.
      • unInstall

        public void unInstall​(Manifest mf,
                              boolean deleteUserData,
                              de.willuhn.util.ProgressMonitor monitor)
        Deinstalliert das angegebene Plugin. Die Deinstallation geschieht im Hintergrund. Die Funktion kehrt daher sofort zurueck.
        Parameters:
        mf - das zu deinstallierende Plugin.
        deleteUserData -
        monitor - der Fortschritts-Monitor.
      • getInitErrors

        public java.util.Map<Manifest,​java.lang.Throwable> getInitErrors()
        Liefert die ggf. beim Laden/Initialisieren des Plugins aufgetretenen Fehler.
        Returns:
        die aufgetretenen Fehler.
      • markForDelete

        public void markForDelete​(Manifest manifest)
                           throws de.willuhn.util.ApplicationException
        Deinstalliert ein Plugin nicht sofort, sondern markiert es nur zur Loeschung. Das eigentliche Loeschen geschieht dann erst beim naechsten Start.
        Parameters:
        manifest - das Plugin, welches zur Loeschung vorgemerkt wird.
        Throws:
        de.willuhn.util.ApplicationException
      • shutDown

        public void shutDown()
        Wird beim Beenden der Anwendung ausgefuehrt und beendet alle Plugins.