Używam silnika transformacji, aby utworzyć meta-model Ecore w czasie wykonywania i zastanawiam się, w jaki sposób możemy zarejestrować ten meta-model z EMF, aby mógł rozpoznać meta-model?Meta-model rejestruje programowo
Odpowiedz
Jeśli kod generowany przez metamodelu:
resourceSet.getPackageRegistry()
.put(org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE.getNsURI()
, org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE);
(tutaj na "genmodel" metamodelu)
Jeśli masz tylko plik .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);
}
Możesz znaleźć nieco więcej na temat tego kodu here za pomocą metody o nazwie registerEcorePackages()
, u sed, aby zarejestrować plik .ecore
w obszarze roboczym (z pełną ścieżką obszaru roboczego) w naszym niestandardowym rejestrze pakietów. Jeśli chcesz zarejestrować swój metamodel w globalnym rejestrze paczek EMF, zastąp resourceSet.getPackageRegistry()
przez EPackage.Registry.INSTANCE
.
musiałem zmodyfikować kod z @sbegaudeau trochę go do pracy:
Wymień
rs.getPackageRegistry().put(p.getNsURI(), p);
z
EPackage.Registry.INSTANCE.put(p.getNsURI(), p);
też jakoś nie mogę się zarejestrować typ .ecore. Musiał użyć „*”: Resource.Factory.Registry.INSTANCE. getExtensionToFactoryMap().put("*", new EcoreResourceFactoryImpl());
- 1. Spring: Missing JPA Metamodel
- 2. UML metamodel: pochodzi, unia pochodzi i podzbiorów
- 3. Django rejestruje położenie
- 4. View.onTouchEvent rejestruje tylko wydarzenie ACTION_DOWN
- 5. Logappnet traceappender nie rejestruje niczego
- 6. Elmah rejestruje tylko 15 błędów
- 7. AuthenticationManager.SignIn() nie rejestruje się w
- 8. Uzyskiwanie "Przynajmniej jeden metamodel WZP musi być obecny" z @WebMvcTest
- 9. Dlaczego MetaModel JPA2 jest generowany z niestabilnymi elementami?
- 10. Java IDL: servertool nie rejestruje i wisi
- 11. Czy program Win32 rejestruje wątek bezpieczny?
- 12. GDB informacji rejestruje polecenia - druga kolumna wyjścia
- 13. AreaRegistration.RegisterAllAreas() nie rejestruje reguł dla obszaru
- 14. Log4Net nie rejestruje ani nie odpowiada błędowi
- 15. inotifywait w docker-container nie rejestruje zmian
- 16. ekspresowe app ciągły rejestruje/sockjs-node/info
- 17. Spring MVC nie rejestruje wszystkich wyjątków
- 18. onResourceReceived dwa razy rejestruje każdy zasób?
- 19. ELMAH nie rejestruje numeru linii kodu
- 20. Jak otworzyć programowo programowo
- 21. Programowo programowo blokuje autolayout
- 22. Jak ustawić programowo programowo?
- 23. Przełącz programowo programowo
- 24. Lokalizacja funkcji programowo programowo
- 25. Running moją aplikację node Zawsze nie rejestruje żadnego wyjścia
- 26. C# Powershell snapin nie rejestruje się przy użyciu installutil
- 27. Regex rejestruje każde wystąpienie wyrazu w obrębie dwóch ograniczników.
- 28. Aplikacja Azure Application Insights nie rejestruje połączeń Redis
- 29. Railsy 3 mailer nie działa i nie rejestruje żadnych błędów
- 30. Sprawdź, czy jakiś adres e-mail się rejestruje na gravatar?
Dziękuję bardzo za odpowiedź :) – capint
Stephane SUPERB ODPOWIEDZI !!!!!! Wielkie dzięki Stephane! Nie mogę ci wystarczająco podziękować ..... Technika "ecore file" jest tym, czego szukam! –
Cześć, niesamowite dziękuję! Musiałem trochę zmodyfikować kod, żeby działał. Proszę zobaczyć moją odpowiedź dla szczegółów. – Andrei