Dienstag, 31. März 2015

JDeveloper 12c: Extension Development Best Practices


Motivation

Im Rahmen des von der ADF-Community ausgerichteten ADF-Spotlight Webcasts habe ich am vergangenen Freitag (20.3.2015) einen Vortrag über Best Practices beim Extension-Development in JDeveloper 12c gehalten (in ADF-Spotlight Mediathek ansehen). Dort wurden die folgenden Themen behandelt:
  • Eintrag eines Wizard in die New-Gallery
  • Eintrag eines Menüeintrag im Hilfemenü
  • einmaliger Aufruf einer Methode nach erfolgreicher Installation (Post-Startup-Hook)
  • Deployment und Testen von Extensions
Außerdem wird dort ein zumindest rudimentäres Verständnis für die Konfiguration einer Extension vermittelt (Erläuterung der Dateien extension.xmlMANIFEST.MF und bundle.xml).

Dieser Blogpost vertieft das Definieren eines Galleryeintrags. Der Beispielcode der fertigen Extension kann hier heruntergeladen werden.

Durchführung: Galleryeinträge definieren

“Galleryeinträge definieren” meint, einen Wizard zu implementieren, der per New aufgerufen werden kann. Ironischerweise existiert ein Wizard, der das Erstellen eines solchen Wizards erleichtert. Dieser kann per New > Gallery Item (Wizard) aufgerufen werden. Im folgenden Screenshot sind bereits einige Eingaben getätigt worden, die den Rumpf der Klasse SampleWizard erzeugen wie sie im Beispielprojekt zu finden ist:


Dies erzeugt den folgenden Quellcode (ergänzt um eine beispielhafte Implementierung):

public final class SampleWizard implements Invokable {

    public boolean invoke(Context context) {
        String msg = JOptionPane.showInputDialog("Bitte geben Sie die Nachricht ein, die angezeigt werden soll:");
        JOptionPane.showMessageDialog(null, msg);
        return true;
    }
}

Essentiell für die Implementierung eines solchen Wizards ist, dass das Interface Invokable implementiert wird. Um einen “echten” step-by-step Wizard zu erstellen, sollte jedoch am besten die abstrakte Klasse Wizard (aus dem oracle.ide.wizard Package) erweitert werden. Einen solcher Wizard muss aber manuell implementiert werden, was hier den Rahmen jedoch sprengen würde. Deswegen sei hier lediglich auf das JDeveloper Extension Development Tutorial von Oracle verwiesen.

Der Code in invoke wird bei Auswahl des Wizards von der IDE aufgerufen. Ãœber den Parameter context können Informationen über den aktuellen Status des JDevelopers erfragt werden (bspw. das aktuelle Projekt), sowie Daten durch die verschiedenen Schritte eines Wizards durchgereicht werden.

Um den erzeugten Wizard der IDE bekannt zu machen, muss in dem sog. “Extension-Manifest” extension.xml ein item Element innerhalb des (ggf. ebenfalls zu erstellenden) gallery Elements hinzugefügt werden. Der folgende Code wird automatisch von dem oben gezeigten Wizard eingefügt:

<gallery xmlns="http://xmlns.oracle.com/jdeveloper/1013/extension">
    <item rule="always-enabled">
            <name>adfspotlight.sample.SampleWizard</name>
            <description>Sample</description>
            <help>Beispielwizard für die ADF-Spotlight Session.
            </help>
            <category>General</category>
            <folder>ADF-Spotlight</folder>
    </item>
</gallery>

Hervorzuheben ist die Referenz auf die Java-Klasse (per name) und die mögliche Einschränkung für die Verfügbarkeit des Wizards mithilfe des rule Attributs in item. Außerdem können manuell weitere Elemente innerhalb von item hinzugefügt werden, bspw. ein icon.

extension.xml - das Extension-Manifest

Das Extension-Manifest definiert die Schnittstelle zwischen JDeveloper und Extension: Hier werden Einsprungpunkte (trigger-hooks genannt) in der IDE definiert, durch die der User die diversen Funktionalitäten der Extension ansprechen kannn. Ein Beispiel hierfür ist das im vorigen Abschnitt definierte Gallery-Item.

Grundlage für das Extension-Manifest ist die Spezifikation JSR 198.

Keine Kommentare:

Kommentar veröffentlichen