Add-In SQL*Developer / *+ Track 3 */

Dans ce troisième track consacré au développement d’une Add-In pour SQL*Developer, nous allons continuer l’exploration des exemples fournis dans Jdeveloper Extension SDK et développer une Add-In qui ajoute des informations au menu « Tools | Preferences… » et les conserve après l’arrêt/relance de SQL*Developer. Dans ce cadre, nous allons nous inspirer de l’exemple « ConfigPanel » pour créer cette Addin.

Avant d’aller plus loin, reportez-vous au track = »Add-In SQL*Developer /*+ Track 1 */ » qui décrit plus en détail comment développer une Add-In. Pour effectuer ces opérations, nous allons faire ce qui suit :

  • Créer un projet
  • Ajouter la bibliothèque « JDeveloper Extension SDK »
  • Ajouter un fichier extension.xml
  • Créer un profil de déploiement pour le projet
  • Ajoutez une classe « MyPrefData »
  • Créer une classe « MyPrefPanel »
  • Ajoutez la classe « Addin03 » qui inplémente l’Add-In
  • Déployer l’Add-in et la tester

Créer un projet
Sélectionner l’application « addins-application » créer un projet nommé « addin03 ».

Ajouter la bibliothèque « JDeveloper Extension SDK »
Sélectionner « Project Properties » sur le projet addin03 et ajoutez la bibliothèque Jdeveloper Extension SDK à la section Libraries. Décocher la case export pour ne pas déployer la bibliothèque avec l’application.

Ajouter un fichier extension.xml
Sélectionner le projet « addin03 » et ajouter un fichier extension.xml dans le répertoire src/META-INF. Le répertoire n’existe pas, créez-le. Le fichier extension.xml est disponible ici. Il ajoute l’addin arkzoyd.sqldeveloper.addins.addin03 à SQL*Developer.

Créer un profil de déploiement pour le projet
Sélectionner le projet « Addin03 » et ajouter un profil de déploiement « JAR File » nommé addin03.
Lui donner le chemin suivant comme nom du jar déploiyé : « %SQLDEV_HOME%sqldeveloperextensionsarkzoyd.sqldeveloper.addins.addin03.jar » (arkzoyd.sqldeveloper.addins.Addin03 correspond au paramètre id de la balise extension du fichier extension.xml).

Ajoutez une classe « MyPrefData »
Créer une nouvelle classe et nommez-la MyPrefData. Cette classe étend oracle.ide.config.ChangeEventSource et implémente oracle.ide.util.Copyable. Ces méthode et propriétés sont les suivantes :

  • public static final String KEY = « myAddin03 »;
  • private String data = « « ;
  • public Object copyTo(Object target)
    {
    final MyPrefData copy =
    (target!=null?(MyPrefData)target:new MyPrefData());
    copyToImpl(copy);
    return copy;
    }
  • protected final void copyToImpl(MyPrefData copy)
    {
    copy.data = data;
    copy.fireChangeEvent();
    }
  • public String getData()
    {
    if (data.trim().length() == 0)
    data = « « ;
    return data;
    }
  • public void setData(String d)
    {
    data = d.trim();
    }

Cette classe représente les données que nous allons stocker dans SQL*Developer

Ajoutez une classe « MyPrefPanel »
Créer une nouvelle classe et nommez-la MyPrefPanel; Cette classe étend oracle.ide.panels.DefaultTraversablePanel :

  • Affichez-le « Properties Inspector » et cliquez sur l’Onglet « Design » sur l’éditeur qui affiche le contenu de la classe créée précédemment. Sélectionnez le panneau qui s’affiche et dans le properties Inspector, mettez la variable layout à « GridBagLayout ».
  • Afficher la palette de composants et poser sur le panneau, dans l’ordre :
    • un objet JLabel
    • un objet JTextField
  • Modifier les propriétés des 2 objets créés précédemment pour que l’affichage ressemble à la copie d’écran ci-dessous :

  • Ajoutez les 2 objets suivant à la classe :
    • public static final String TITLE = « ArKZoYd Config »;
    • private ButtonGroup group = new ButtonGroup();
  • Pour terminer, supprimer toutes les listener sur les 2 objets créés précédemment et ajoutez les 4 méthodes onEntry(), onExit(), load(), commit() :
    public void onEntry(TraversableContext tc)
    {
    final MyPrefData options =
    (MyPrefData) tc.find(MyPrefData.KEY);
    load(options);
    }

    public void onExit(TraversableContext tc)
    {
    final MyPrefData options =
    (MyPrefData) tc.find(MyPrefData.KEY);
    commit(options);
    }

    private void load(MyPrefData options)
    {
    jTextField1.setText(options.getData());
    }

    private void commit(MyPrefData options)
    {
    options.setData(jTextField1.getText());
    }

Ajoutez la classe addin03.java qui inplémente l’Add-In

Pour terminer l’add-in, il faut créer une classe Addin03.java qui hérite de Addin. Ajouter un identifiant pour les données stockées dans SQL*Developer :

  • private static final String EXTENSION_ID = « arkzoyd.sqldeveloper.addins.Addin03 »;

Addin03 classe implémente dans la méthode initialize() avec les opérations qui suivent :

  • On crée (ou retrouve) un objet ClientSetting à partir des informations stockées dans SQL*Developer avec la clé EXTENSION_ID
    ClientSetting clientSetting = ClientSetting.findOrCreate( EXTENSION_ID );
  • Si dans les setting, la valeur représentée par KEY n’existe pas, on la crée sinon c’est qu’elle a déjà été créée lors d’une utilisation précédente.
    if (clientSetting.getData(MyPrefData.KEY) == null)
    {
    clientSetting.putData(MyPrefData.KEY, new MyPrefData());
    }
  • On ajoute au panneau de préférence le panneau MyPrefPanel créé précédemment. Le nom de ce panneau est une chaine stockée dans la classe et nommée TITLE :
    Navigable myIdeSettingsPanel = new Navigable(MyPrefPanel.TITLE, MyPrefPanel.class);
    IdeSettings.registerUI(myIdeSettingsPanel);

Déployer l’Add-in et tester
Déployer le fichier Jar dans les extensions de SQL*Developer. Lancer SQL*Developer et sélectionner le menu « Tools | Préférences… ». L’écran des préférences apparaît et inclu un nouveau panneau comme ci-dessous.


Pour vérifier que les données sont stockées dans SQL*Developer, modifier le champ, arrêter SQL*DEveloper, relancez-le et revenez sur le même écran de SQL*Developer.

-GarK!

Vous pouvez télécharger l’ensemble du projet ici
Vous pouvez télécharger l’Add-In ici (Si vous l’ajoutez dans $SQLDEV_HOMEsqldeveloperextensions et vous verrez le résultat)