2017-06-27 1 views
1

J'utilise actuellement une application Java développée avec Eclipse et RCP; cette application a peu de fichiers plugin au format jar, ces fichiers incluent des procédures spéciales pour la génération des prix.Java RCP: Créer un point d'extension à partir d'une extension existante

Je dois développer une toute nouvelle application qui utilise les extensions existantes pour créer une nouvelle liste de prix. J'ai donc créé un nouveau projet plug-in et j'ai essayé de créer le point d'extension compatible avec mes extensions existantes.

Le problème est que je ne suis pas du tout expert avec RCP, donc je fait sûr une erreur: lorsque je tente d'obtenir l'extension avec ceci:

IExtensionRegistry reg = Platform.getExtensionRegistry(); 
IConfigurationElement[] extensions = 
reg.getConfigurationElementsFor("prices.year"); 

for (int i = 0; i < extensions.length; i++) { 
    if(extensions[i].getName().equals("2016")) { 
     // Do something 
    } 
} 

Je reçois toujours 0 éléments.

Donc, c'est sûr que j'ai fait une erreur lors de la création du point d'extension ou lorsque j'ai ajouté l'extension disponible ... ou les deux!

En fait: - J'ai ajouté les fichiers jar dans mon projet, puis inclus dans la configuration de construction - J'ai créé le point d'extension - j'ouvrir le fichier .exsd, a ajouté un élément « client » avec une « classe » attribut; cette classe « Met en œuvre » points de champ à un objet défini dans une classe de pot (le même objet est mis en œuvre dans le fichier plugin) Eclipse window A l'intérieur du fichier Plugin (.jar) J'ai ceci:

public class Pricelist2017 extends Pricelist 
implements IPricedata 
{ 
    ... 

-

EDIT: Après avoir appliqué greg-449 suggestion, maintenant, je suis en mesure d'obtenir une extension, mais je fais face à problème lorsque je tente d'y accéder:

IExtensionRegistry reg = Platform.getExtensionRegistry(); 
IConfigurationElement[] extensions = reg.getConfigurationElementsFor("prices.year"); 

for (int i = 0; i < extensions.length; i++) { 
    System.out.println(extension[i].getName()); 
    System.out.println(extension[i].getAttribute("id")); 
    System.out.println(extension[i].toString()); 
} 

Je reçois (pour 2 extensio ns trouvé):

client 
null 
[email protected] 

client 
null 
[email protected] 

Il me manque autre chose, mais il est difficile de trouver où toucher. Un grand merci d'avance pour toute votre aide!

Répondre

1

Jusqu'à présent, vous venez de définir le point d'extension. Cela ne fait que rendre le point d'extension disponible pour l'utilisation, il ne crée aucune utilisation de l'extension et non.

Assurez-vous d'abord que la définition de votre point d'extension définit comment vous utilisez l'élément client. Vous devez avoir quelque chose comme un Sequence dans la section extension: Definition

Vous devez maintenant créer des utilisations du point d'extension. Dans l'onglet 'Extensions' de l'éditeur plugin.xml, cliquez sur 'Ajouter ...' et créez une extension. C'est ici que vous spécifiez la classe qui implémente IPricedata: Extension

+0

Très bien. Ça marche! Donc, j'ai absolument besoin de savoir à l'avance combien de classes implémentent IPricedata, puis de les ajouter une par une? (en fait j'ai quelques centaines de classes qui implémentent IPricedata, tout le monde avec des attributs différents et j'ai besoin de les sélectionner par programme) – Scare

+0

Oui, vous devez créer une extension pour chaque classe en utilisant des points d'extension. –