public interface Plugin {
/**
* Diese Methode wird pro Instanz des Plugins genau einmal aufgerufen, und
* dient als Konstruktor.
* @param directory Das Verzeichnis, aus dem das Plugin geladen wurde. Muss
* das Plugin Datein lesen/schreiben, so sollte dies in diesem Verzeichnis
* geschehen.
* @param majorID Die ID wird für eine Identifikation des Plugins benötigt, falls
* das Plugin Einstellungen speichern möchte.
*/
public void init( File directory, String majorID );
/**
* Gibt die Hauptid dieses Plugins zurück. Dieser Wert muss dem major-Wert aus
* {@link #init(File, String)} entsprechen.
* @return Die ID
*/
public String getMajorID();
/**
* Gibt eine Liste der Plugins zurück, welche geladen werden müssen, bevor
* dieses Plugin an die Reihe kommt. Beim Aufruf der {@link #plug(InstanceManager, PluginInserter, Plugin[]) plug}
* -Methode bekommt dieses Plugin die Instanzen der anderen Plugins zurück.
*
* [b]Achtung: [/b] Sollten die Requests einen Kreis bilden, so werden
* die beteiligten Plugins, und alle davon abhängigen Plugins, nicht geladen!
* @return Die anfgeforderten Plugins oder null
*/
public Class<Plugin>[] getRequests();
/**
* Diese Methode wird einmal aufgerufen, nachdem <code>init</code> und
* nachdem die Sprachdatei geladen wurde.
* Das Plugin kann mit dieser Methode seine zusätzlichen Komponenten
* hinzufügen.
* Zu dem Zeitpunkt, wenn diese Methode aufgerufen wird, sind schon alle
* Teile des Béziermanagers initialisiert, aber es gibt noch keine
* Möglichkeit auf den {@link PluginManager} zuzugreiffen.
* @param inserter Der Inserter. Das Plugin kann seine verschiedenen Komponenten
* beim Inserter anmelden.
* @param requests Eine Liste der Plugins, welche nach den Angaben von
* {@link #getRequests() getRequests} zuerst geladen wurden. Die Reihenfolge
* der Plugins ist dieselbe, wie der Array von <code>getRequests</code>
* geliefert hat.
*/
public void plug( PluginInserter inserter, Plugin[] requests );