Как определить карту в Xcore
Согласно EMF FAQ, возможно создать Карту в EMF:
EMap в основном представляет собой список экземпляров java.util.Map$Entry. Поэтому для создания карты вам необходимо сначала смоделировать запись карты, выполнив следующие действия:
- Создайте EClass с именем [Type1]To[Type2]Map, где [Type1] представляет тип ключа, а [Type2] представляет тип значения.
- Установите для свойства Имя класса экземпляра вновь созданного EClass значение java.util.Map$Entry.
- Создайте EAttribute или EReference с именем "key" и установите для него EDataType или EClass.
- Создайте EAttribute или EReference с именем "value" и установите для него EDataType или EClass.
Теперь, когда вы создаете EReference где-то, который использует этот класс записи карты в качестве своего EClass, генератор кода EMF обнаружит этот особый случай и сгенерирует для вас правильно типизированный получатель / установщик EMap вместо обычного получателя / установщика EList.
Могу ли я использовать это с моделями Xcore? Я не уверен, выполним ли шаг #2 в Xcore или он вообще поддерживает карты.
1 ответ
Для меня это работает.
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;
}