Я использую механизм преобразования для создания метамодели Ecore во время выполнения, и мне интересно, как мы можем зарегистрировать эту метамодель с EMF, чтобы она могла распознавать метамоду?Реализовать мета-модель Ecore программно
ответ
Если код, сгенерированный метамодели:
resourceSet.getPackageRegistry()
.put(org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE.getNsURI()
, org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE);
(здесь "genmodel" метамодели)
Если у вас есть только .ecore
файл:
// register globally the Ecore Resource Factory to the ".ecore" extension
// weird that we need to do this, but well...
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(
"ecore", new EcoreResourceFactoryImpl());
ResourceSet rs = new ResourceSetImpl();
// enable extended metadata
final ExtendedMetaData extendedMetaData = new BasicExtendedMetaData(rs.getPackageRegistry());
rs.getLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA,
extendedMetaData);
Resource r = rs.getResource(uriOfYourModel, true);
EObject eObject = r.getContents().get(0);
if (eObject instanceof EPackage) {
EPackage p = (EPackage)eObject;
rs.getPackageRegistry().put(p.getNsURI(), p);
}
Вы можете найти немного больше об этом коде here с методом с именем registerEcorePackages()
, u sed для регистрации файла .ecore
в рабочей области (с полным пространством для рабочей области) в нашем пользовательском реестре пакетов. Если вы хотите зарегистрировать метамодель в глобальном реестре пакетов EMF, замените resourceSet.getPackageRegistry()
на EPackage.Registry.INSTANCE
.
мне пришлось модифицировать код из @sbegaudeau немного для того, чтобы работать:
Заменить
rs.getPackageRegistry().put(p.getNsURI(), p);
с
EPackage.Registry.INSTANCE.put(p.getNsURI(), p);
Кроме того, как-то я не могу зарегистрироваться тип .ecore. Пришлось использовать «*»: Resource.Factory.Registry.INSTANCE. getExtensionToFactoryMap().put("*", new EcoreResourceFactoryImpl());
- 1. Расширение третьей метамодели pary ecore
- 2. Ecore EClass в XText
- 3. Ecore decorator
- 4. navigate ecore model
- 5. Могу ли я создать метамодель Ecore, которая позволяет моделям ссылаться на классы Java?
- 6. Как создать плагин с использованием метамодели .ecore
- 7. может иметь собственные свойства EMF Ecore EReference
- 8. Сортировка классов Ecore топологически
- 9. Ecore модификация
- 10. Ecore Reference
- 11. Как программно генерировать EMF-модель (.ecore, .genmodel) из схемы XSD?
- 12. Безопасна ли метамодель Apache?
- 13. Метамодель диаграммы классов UML
- 14. Как реализовать UIScrollView программно
- 15. Eclipse Modeling Framework и XPAND - Как создать метамодель iOS?
- 16. Итераторы и Iterable в ECore
- 17. Traverse ecore модель
- 18. Ecore защитной оболочки напротив
- 19. Модель Ecore для Xtext
- 20. Диалог файла Ecore
- 21. Диаграмма классов от ecore
- 22. использование EAnnotation в Ecore
- 23. Ссылка между двумя Ecore
- 24. UML XMI для Ecore
- 25. Ecore SCA MetaModel
- 26. Как генерировать метамодель из объекта?
- 27. Критерий спящего режима и метамодель
- 28. программно реализовать UIScrollView в UIAlertView
- 29. Программно реализовать WCF с сертификатом
- 30. Как реализовать «Show Touches» программно?
Большое вам спасибо за ваш ответ Стефан :) – capint
SUPERB ANSWER !!!!!! Большое спасибо Стефану! Не могу поблагодарить вас достаточно ..... Техника «ecore file» - это то, что я ищу! –
Привет, удивительный спасибо! Мне пришлось немного изменить код, чтобы он работал. Пожалуйста, см. Мой ответ для деталей. – Andrei