EMF EKeys Problem

Websl

Mitglied
Hi,

ich schlage mich gerade etwas mit EMF rum, bin nun aber auf ein hässliches Problem mit den EKeys gestoßen, das ich irgendwie nicht gelöst kriege.

Ich habe zwei Klassen, A und B. A hat eine 0...* Referenz auf B (wird zu einer EList) und B hat eine 0...1 Referenz auf A.
Nun habe ich der 0...* Referenz (Elist) gesagt, als EKey soll das Attribut "name" der Klasse B verwendet werden. Damit kann ich die Instanz der Klasse ja eindeutig identifizieren. Meine Hoffnung war, das wenn ich nun zwei Objekte von Klasse B habe, die den gleichen Namen haben und in meine EList packe, das der generierte Code das erkennt und dann irgendein Event oder eine Exception wirft. Aber stattdessen wird von der 2ten Instanz der Namen in "null" geändert und so in die Liste aufgenommen.
Gibt es eine Möglichkeit in EMF einzustellen was passieren soll ohne im generierten Code rumzupfuschen?

//edit: Ok ich habe mal noch etwas weiter getestet. Der name wird beim einfügen auf "null" gesetzt wegen dieser Zeile in Klasse B:

Java:
protected static final String NAME_EDEFAULT = null;

Dies kann ich zwar beliebig umschreiben, aber wenn ich nun 3 Objekte habe, die alle den gleichen Namen haben passiert folgendes:
Objekt 1 wird genommen.
Objekt 2 da kollidiert der name mit dem von Objekt 1 und es wird auf NAME_EDEFAULT gesetzt.
Objekt 3 kollidiert mit Objekt 1 und wird ebenfalls auf NAME_EDEFAULT gesetzt. Und schon ist die eindeutige Identifikation dahin. Eine Exception oder ähnliches fänd ich echt toller :/

Gruß
Websl
 
Zuletzt bearbeitet:
Hi.
Das sollte daran liegen, dass NAME_DEFAULT als "static" deklariert ist.
Als solches deklarierte Variablen sind in allen erzeugten Objekten immer gleich!
Gruß.
 
Das ist von EMF generierter Code, den will ich auch nicht anfassen.
Ich setze diesen Wert auch niemals, deswegen ist er auch null.

Gruß
Websl
 
Okay, ja verstehe ... Aber dann würde sich doch anbieten einfach nicht über das "name"-Attribut zu gehen, oder? Weil der Name ja sowieso immer der gleiche ist 😵 ... Da du ihn ja nie setzt, er final und staticist, ist er immer "null", also steht ja nichts drin?
Von EMF hab ich gar keine Ahnung, vielleicht kann man da was richten!
 
Du verstehst da was falsch.
Natürlich hat Klasse B ein Attribute
Code:
protected String name;
.
Die oben stehende Zeile ist von EMF generiert.
Das Problem ist folgendes:

Beispielcode
Java:
A a = new A();
B b1 = new B("name1");
B b2 = new B("name1");
B b3 = new B("name1");

a.objektliste.add(b1);
a.objektliste.add(b2);
a.objektliste.add(b3);
Über die definierten EKeys wird beim adden in die Liste gecheckt, ob der Name bereits vorhanden ist. Ist er das nicht, wird das Objekt ganz normal eingefügt. Ist er allerdings vorhanden gibt es eine Kollision, denn der name muss in der Liste einzigartig sein. EMF nimmt dann den oben stehenden NAME_EDEFAULT der in meinem Falle "null" ist und gibt dem Objekt diesen Namen und fügt es in die Liste ein. Ich hätte aber gerne das, entweder ein Event (ChangeNotification des Adapter Interfaces?) ausgelöst oder eine Exception geworfen wird.

Wenn ich mir die hier obenstehende objektliste hole und alle Namen der darin stehenden Objekte hole wird drinstehen:
name1
null
null

Und ich hätte gerne, das es schon beim 2ten Add knallt. Dazu gibt es bestimmt irgendwo eine Einstellung in EMF und diese suche ich. Wahlweise nehme ich auch eine andere Lösung, sofern ich eben nichts am generierten Code ändern muss.

Gruß
Websl
 

Zurück
Oben