2017-06-27 1 views
1

Ich verwende derzeit eine Java-Anwendung, die mit Eclipse und RCP entwickelt wurde; Diese Anwendung verfügt über wenige Plugin-Dateien im JAR-Format. Diese Dateien enthalten spezielle Prozeduren für die Erstellung von Preislisten.Java RCP: Erstelle Erweiterungspunkt von bestehender Erweiterung

Ich muss eine völlig neue Anwendung entwickeln, die die vorhandenen Erweiterungen verwendet, um neue Preisliste zu erstellen, also habe ich ein neues Plug-in-Projekt erstellt und ich habe versucht, den Erweiterungspunkt kompatibel mit meinen vorhandenen Erweiterungen zu erstellen.

Das Problem ist, ich bin überhaupt nicht alle Experten mit RCP, so machte ich sicher einige Fehler: wenn ich versuche, mit diesem um die Erweiterung zu bekommen:

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 
    } 
} 

ich immer 0 Elemente erhalten.

Also sicher habe ich einen Fehler gemacht beim Erstellen des Erweiterungspunkts oder wenn ich die verfügbare Erweiterung hinzugefügt habe ... oder beides!

Eigentlich: - ich die JAR-Dateien in meinem Projekt hinzugefügt, enthalten dann in der Build-Konfiguration - Ich habe die Erweiterung Punkt - ich die .exsd Datei öffnen, ein „Client“ Element mit einer „Klasse“ hinzugefügt Attribut; diese Klasse „Implementiert“ Feldpunkte auf ein Objekt in einer jar-Klasse definiert (das gleiche Objekt wird in der Plugin-Datei implementiert) Eclipse window Innerhalb der Plugin-Datei (.jar) Ich habe diese:

public class Pricelist2017 extends Pricelist 
implements IPricedata 
{ 
    ... 

-

EDIT: nach greg-449 Vorschlag Anwendung, jetzt bin ich in der Lage etwas Verlängerung zu bekommen, aber ich Problem konfrontiert, wenn ich versuche, auf sie zuzugreifen:

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()); 
} 

I (für 2 extensio bekommen ns gefunden):

client 
null 
[email protected] 

client 
null 
[email protected] 

Ich vermisse etwas anderes, aber es ist schwierig zu finden, wo zu berühren. Vielen Dank im Voraus für Ihre Hilfe!

Antwort

1

Bisher haben Sie den Erweiterungspunkt definiert. Das macht nur den Erweiterungspunkt für die Verwendung verfügbar, es erstellt nicht erstellen Sie alle Verwendungen der Erweiterung. Stellen Sie zunächst sicher, dass Ihre Erweiterungspunktdefinition definiert, wie Sie das client-Element verwenden. Sie müssen so etwas wie ein Sequence im extension Schnitt haben: Definition

Sie müssen nun einige Verwendungen des Erweiterungspunkt erstellen. Klicken Sie auf der Registerkarte "Erweiterungen" des plugin.xml-Editors auf "Hinzufügen ..." und erstellen Sie eine Erweiterung. Hier geben Sie die Klasse an, die IPricedata implementiert: Extension

+0

Großartig. Es klappt! Also muss ich unbedingt im Voraus wissen, wie viele Klassen IPricedata implementieren und dann einzeln hinzufügen? (tatsächlich habe ich einige hundert Klassen, die IPricedata implementieren, jeder mit anderen Attributen und ich muss sie programmgesteuert auswählen) – Scare

+0

Ja, Sie müssen eine Erweiterung für jede Klasse erstellen, um dies mit Erweiterungspunkten zu tun. –

Verwandte Themen