2 Stimmen

Kann ich ein Ecore-Metamodell erstellen, mit dem Modelle auf Java-Klassen verweisen können?

Angenommen, ich möchte ein Ecore-Metamodell entwerfen, das in etwa so aussieht und zum "Ausführen" einer Liste von Klassen verwendet werden soll:

JavaClassRunnerList
   0..* JavaClass

Und nehmen wir an, ich habe ein Java-Projekt, das Klassen namens PrintsHello , PrintsSeparator y PrintsWorld .

Ich würde dann gerne Modelle schreiben, die so aussehen:

JavaClassRunnerList
   PrintsHello.class
   PrintsSeparator.class
   PrintsWorld.class
   PrintsSeparator.class
   PrintsSeparator.class

Ich möchte, dass mein Modell in der Lage ist, ein Java-Projekt einzubinden und dessen Klassen als Auswahlmöglichkeiten für die Modellreferenzen zu erkennen (möglicherweise im selben Projekt, in dem sich das Modell befindet).

Ist dies möglich?

2voto

Jeff Axelrod Punkte 26503

Ed Merks sagte die folgenden. Den Rest der Diskussion finden Sie im Thread.

Sie können Ecore's EJavaClass Datentyp zur Erstellung eines mehrwertigen Attribut zu erstellen. Es könnte besser sein, nur Klassennamen zu verwenden, und mit einer Klassenlader, um therm in tatsächliche Klasseninstanzen zu konvertieren.

S die Verweise auf IProject Sie können eine Zeichenkette verwenden und diese dann in eine IProject über den Arbeitsbereich Root.

0voto

Romain Bernard Punkte 96

Sie sollten für jede Java-Klasse, auf die Sie verweisen wollen, zusätzliche EDatatypes in Ihrem Ecore definieren (mit 'Instance Type Name' = java class qualified name) und diese Datentypen einfach verwenden, um einige Ihrer EAttribute zu schreiben.

Beachten Sie, dass Sie für jeden erstellten EDatatype spezifische Konverter implementieren müssen, wenn Sie EAttribute-Werte in Ihren Ressourcendateien beibehalten wollen.

Beispiel mit einem EDatatype namens 'Date', mit instanceTypeName='java.util.Date', müssten Sie in Ihrer Fabrikimplementierung eine Implementierung für die folgenden zwei Methoden angeben:

/**
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public Date createDateFromString(EDataType eDataType, String initialValue) {
    // TODO replace with your implementation
    return (Date)super.createFromString(eDataType, initialValue);
}

/**
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public String convertDateToString(EDataType eDataType, Object instanceValue) {
    // TODO replace with your implementation
    return super.convertToString(eDataType, instanceValue);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X