August 22, 2007

Verwendung vom Eclipse UML2 Projekt zur Bearbeitung von UML2-Modellen und Profilen

Das Eclipse UML2 Projekt findet bereits in einigen Werkzeugen (z. B. Topcased UML Editor) Verwendung. Allerdings sind diese Tools zumeist Eclipse-Plugins die das Projekt innerhalb der Eclipse Umgebung verwenden. Möchte man UML2 in einer eigenständigen Java-Anwendung oder im Rahmen eines Unit-Tests verwenden, müssen einige Initialisierungen durchgeführt werden. Das nachfolgende Listing zeigt das erforderliche Setup:
protected static void registerResourceFactories(){
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().
put(UMLResource.FILE_EXTENSION, new UML22UMLResourceFactoryImpl());
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().
put("ecore", new EcoreResourceFactoryImpl());
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().
put("ecore2xml", new EcoreResourceFactoryImpl());
}

protected static void registerPathmaps(URI uri) {
URIConverter.URI_MAP.put(URI.createURI(UMLResource.LIBRARIES_PATHMAP),
uri.appendSegment("libraries").appendSegment(""));
URIConverter.URI_MAP.put(URI.createURI(UMLResource.METAMODELS_PATHMAP),
uri.appendSegment("metamodels").appendSegment(""));
URIConverter.URI_MAP.put(URI.createURI(UMLResource.PROFILES_PATHMAP),
uri.appendSegment("profiles").appendSegment(""));
final String UML2_200_NS_URI = "http://www.eclipse.org/uml2/2.0.0/UML";
EPackage.Registry.INSTANCE.put(UML2_200_NS_URI,
EPackage.Registry.INSTANCE.get(UMLPackage.eINSTANCE.getNsURI()));
Ecore2XMLPackage.eINSTANCE.getEClassifiers();
}

private static void registerMapping(URI uri) {
final String ECORE2XML = "platform:/plugin/org.eclipse.uml2.uml/
model/UML2_2_UML.ecore2xml";
URIConverter.URI_MAP.put(URI.createURI(ECORE2XML),
uri.appendSegment("model").appendSegment("UML2_2_UML.ecore2xml"));
}

Mit Hilfe der vorhergehenden Initialisierungen lässt sich ein UML2-Profil (XMI Version 2.x) laden und kann zur Modellierung verwendet werden.
 private Profile loadProfile() {
registerResourceFactories();
URI uri = URI.createURI("resources");
registerPathmaps(uri);
registerMapping(uri);
URI profileFile = URI.createFileURI("MyProfile.profile.uml");
Resource r = new ResourceSetImpl().getResource(profileFile, true);
Profile p = (Profile) EcoreUtil.getObjectByType(r.getContents(),
UMLPackage.Literals.PROFILE);
return p;
}

2 comments:

  1. Hallo Michael,

    ich hätte da eine ganz dringende Frage bzgl. des Eclipse UML2 Projekts!
    Und zwar soll ich unter anderem für meine Diplomarbeit einen Codegenerator
    in Java schreiben. UML2 sollte dabei das "Fundament" darstellen.
    Ich versuche im Moment die UML2 Klassen in meine JavaAnwendung zu implementieren,
    damit ich diese instanziieren kann. Habe es dann mit deinem Listing versucht, doch
    mein eclipse erkennt nur Fehler.
    Daher meine Frage: wie muss ich die Initialisierung durchführen???
    Danke schon mal für deine Bemühungen!

    Greetz
    Mic

    ReplyDelete
  2. Das kommt auf deine Fehler an, die du bekommst. Im obigen Beispiel wird die Initialisierung in der Methode loadProfile() durchgeführt. Vielleicht liegen die Probleme auch darin, dass du eine andere Eclipse oder UML-Version verwendest.

    Ansonsten kann man wohl behaupten, dass das Eclipse UML2 Projekt recht komplex ist. Aber trotzdem kann in Blick in den Quellcode des Projekts oder anderer Open Source Projekte hilfreich sein.

    Ich hoffe das sind einige Anhaltspunkte für dich, die dir weiterhelfen.
    Gruß micha

    ReplyDelete