Utilizo un motor de transformación para crear un metamodelo Ecore en tiempo de ejecución y me pregunto cómo podemos registrar ese metamodelo con EMF para que pueda reconocer el metamodelo.Registrar el metamodelo Ecore mediante programación
Respuesta
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
.
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());
- 1. Mover el mouse mediante programación
- 2. creando uiview mediante programación?
- 3. Deshabilitar mediante programación window.location.reload?
- 4. Agregar PageControl mediante programación
- 5. Generar propiedades mediante programación
- 6. mediante programación en C#
- 7. XText analiza programáticamente un script DSL en un modelo Ecore
- 8. Cómo reiniciar mediante programación?
- 9. Editando Web.config mediante programación
- 10. ¿Consulta mediante programación MSDN?
- 11. ¿Cómo crear o registrar un usuario usando django-tastypie API mediante programación?
- 12. Mover el cursor del ratón mediante programación
- 13. Mostrar el menú mediante programación en WPF
- 14. Enviar SMS desde el iPhone mediante programación
- 15. UIWebView deshabilita el acercamiento mediante programación
- 16. Magento: reconstruir el catálogo plano mediante programación
- 17. sincronizar mediante programación el PP en Django
- 18. crear el archivo XML mediante programación
- 19. seleccionar mediante programación archivo en el Explorador
- 20. Magento, ¿cómo deshabilitar el módulo mediante programación?
- 21. hacer el paquete mac/paquete mediante programación
- 22. identificando mediante programación el dispositivo iphone
- 23. ¿Cómo establecer el tamaño NSView mediante programación?
- 24. El descubrimiento de IP pública mediante programación
- 25. Deshabilitar mediante programación el bloqueo de mayúsculas
- 26. aumentar mediante programación un comando
- 27. Conexión a TFSPreview mediante programación
- 28. Obtener página actual mediante programación
- 29. Cómo ejecutar NUnit mediante programación
- 30. agregar mediante programación gatillo estilo
Muchas gracias por su respuesta Stephane :) – capint
RESPUESTA EXCELENTE !!!!!! Muchas gracias Stephane! No puedo agradecerles lo suficiente ... ¡La técnica del "archivo ecore" es lo que estoy buscando! –
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