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)