2012-02-21 16 views

risposta

16

Se avete il codice generato dal tuo metamodel:

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

(qui per la metamodello "genmodel")

se avete solo il file .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); 
} 

Puoi trovare ulteriori informazioni su questo codice here con il metodo registerEcorePackages(), u sed per registrare il file .ecore nello spazio di lavoro (con il relativo percorso completo dell'area di lavoro) nel nostro registro dei pacchetti personalizzato. Se si desidera registrare il proprio metamodello nel registro globale dei pacchetti EMF, sostituire resourceSet.getPackageRegistry() entro il EPackage.Registry.INSTANCE.

+1

Grazie mille per la tua risposta Stephane :) – capint

+0

RISPOSTA SUPERBILE !!!!!! Grazie mille Stephane! Non posso ringraziarti abbastanza ..... La tecnica del "file ecore" è ciò che sto cercando! –

+0

Ciao, fantastico grazie! Ho dovuto modificare il codice un po 'per farlo funzionare. Si prega di vedere la mia risposta per i dettagli. – Andrei

1

ho dovuto modificare il codice da @sbegaudeau un po 'per farlo funzionare:

Sostituire

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

con

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

Inoltre, in qualche modo non riesco a registrare il tipo .ecore. Ho dovuto usare "*": Resource.Factory.Registry.INSTANCE. getExtensionToFactoryMap().put("*", new EcoreResourceFactoryImpl());