2016-12-29 9 views
5

Согласно EMF FAQ, можно создать карту в EMF:Как определить карту в Xcore

EMAP в основном Список экземпляров java.util.Map $ Входа. Поэтому, чтобы создать карту, необходимую для первой модели ввод карты с помощью , выполнив следующие действия:

  1. Создание EClass с именем [Type1] К [Type2] Карта, где [Type1] представляет на тип ключа и тому [Type2] представляет тип значения.
  2. Задайте свойство класса экземпляра только что созданного EClass для java.util.Map $ Entry.
  3. Создайте EAttribute или EReference с именем «key» и установите для него EDataType или EClass.
  4. Создайте EAttribute или EReference под названием «значение» и установите для него EDataType или EClass.

Теперь, когда вы создаете EReference где-то, что использует эту карту запись класс как его EClass, генератор EMF код обнаружит это специальный дело и генерировать правильно набранный EMAP геттер/сеттер для вас вместо из обычный ELIS-приемник/сеттер.

Могу ли я использовать это с помощью моделей Xcore? Я не уверен, возможен ли шаг №2 в Xcore или он вообще поддерживает карты.

ответ

4

Для меня это работает.

DataPoints.xcore:

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

class KeyValueList { 
    contains KeyValuePair[] entries 
} 

Приведенные выше результаты в KeyValueListImpl классе с getEntries метод, который выглядит следующим образом:

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; 
} 
Смежные вопросы