2012-02-21 11 views

Respuesta

16

Si tiene el código generado por el metamodelo:

resourceSet.getPackageRegistry() 
    .put(org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE.getNsURI() 
    , org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE); 

(aquí por el metamodelo "genmodel")

Si sólo tiene el archivo .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); 
} 

Puede encontrar un poco más sobre este código here con el método llamado registerEcorePackages(), u sed para registrar el archivo .ecore en el espacio de trabajo (con su espacio de trabajo fullpath) en nuestro registro de paquete personalizado. Si desea registrar su metamodelo en el registro global de paquetes EMF, reemplace resourceSet.getPackageRegistry() por EPackage.Registry.INSTANCE.

+1

Muchas gracias por su respuesta Stephane :) – capint

+0

RESPUESTA EXCELENTE !!!!!! Muchas gracias Stephane! No puedo agradecerles lo suficiente ... ¡La técnica del "archivo ecore" es lo que estoy buscando! –

+0

Hola, increíble gracias! Tuve que modificar el código un poco para que funcione. Por favor, mira mi respuesta para más detalles. – Andrei

1

tuve que modificar el código de @sbegaudeau un poco para que funcione:

Reemplazar

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

con

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

también, de alguna manera No puedo registrar el tipo .ecore Tuve que usar "*": Resource.Factory.Registry.INSTANCE. getExtensionToFactoryMap().put("*", new EcoreResourceFactoryImpl());

Cuestiones relacionadas