2012-02-21 3 views

ответ

16

Если код, сгенерированный метамодели:

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.

+1

Большое вам спасибо за ваш ответ Стефан :) – capint

+0

SUPERB ANSWER !!!!!! Большое спасибо Стефану! Не могу поблагодарить вас достаточно ..... Техника «ecore file» - это то, что я ищу! –

+0

Привет, удивительный спасибо! Мне пришлось немного изменить код, чтобы он работал. Пожалуйста, см. Мой ответ для деталей. – Andrei

1

мне пришлось модифицировать код из @sbegaudeau немного для того, чтобы работать:

Заменить

rs.getPackageRegistry().put(p.getNsURI(), p);

с

EPackage.Registry.INSTANCE.put(p.getNsURI(), p);

Кроме того, как-то я не могу зарегистрироваться тип .ecore. Пришлось использовать «*»: Resource.Factory.Registry.INSTANCE. getExtensionToFactoryMap().put("*", new EcoreResourceFactoryImpl());

Смежные вопросы