2016-12-29 1 views
5

Nach den EMF FAQ definieren, ist es möglich, eine Karte in EMF zu erstellen:Wie man eine Karte in Xcore

Ein EMap ist im Grunde eine Liste der java.util.Map $ Eintrag Instanzen. daher eine Karte müssen Sie zuerst Ihre MapEintrag modellieren, indem nach diesen Schritten zu erstellen:

  1. Eine E-Klasse mit dem Namen [Typ1] bis [Typ2] Karte wo [Typ1] stellt den Schlüssel des Typs und der [Type2] repräsentiert den Typ des Wertes.
  2. Legen Sie die Instanzklassenname-Eigenschaft der neu erstellten EClass auf java.util.Map $ Entry fest.
  3. Erstellen Sie ein EAttribute oder EReference namens "Schlüssel" und legen Sie den EDataType oder EClass dafür fest.
  4. Erstellen Sie ein EAttribute oder EReference namens "value" und legen Sie den EDataType oder EClass dafür fest.

Nun, wenn Sie einen eReference irgendwo erstellen, die diese Karte Eintrag Klasse als E-Klasse verwendet, wird der EMB-Code-Generator diesen speziellen Fall erfassen und ein richtig getippt EMap Getter/Setter für Sie statt eines generieren normaler EList Getter/Setter.

Kann ich dies mit Xcore Modellen verwenden? Ich bin mir nicht sicher, ob Schritt 2 in Xcore machbar ist oder überhaupt Karten unterstützt.

Antwort

4

Für mich funktioniert das.

DataPoints.xcore:

... 
class KeyValuePair wraps java.util.Map$Entry { 
    String key 
    String value 
} 

class KeyValueList { 
    contains KeyValuePair[] entries 
} 

Die obigen Ergebnisse in einer KeyValueListImpl-Klasse mit einer getEntries Methode, die wie folgt aussieht:

public EMap<String, String> getEntries() { 
    if (entries == null) { 
     entries = new EcoreEMap<String,String>(DataPointsPackage.Literals.KEY_VALUE_PAIR, KeyValuePairImpl.class, this, DataPointsPackage.KEY_VALUE_LIST__ENTRIES); 
    } 
    return entries; 
} 
Verwandte Themen