Beispiel: Transformieren von C# in Java
In diesem Beispiel wird gezeigt, wie Sie eine Transformation von einem C#-Modell in ein Java-Modell durchführen. Außerdem erfahren Sie auch, wie Sie Quell- und Zielmodell manuell oder automatisch synchron halten.
Das in diesem Beispiel verwendete UModel-Projekt steht unter dem folgenden Pfad zur Verfügung: C:\Benutzer\<Benutzername>\Dokumente\Altova\UModel2024\UModelExamples\Bank_multiLanguage.ump. Wenn Sie das Paket "Design View" öffnen, sehen Sie, dass das Modell zwei in Java geschriebene Pakete und ein in C# geschriebenes Paket enthält. In diesem Beispiel wird angenommen, dass sich die Anforderungen nun geändert haben und das dritte Paket nun ebenfalls in Java implementiert werden muss.
Erstellen wir zuerst das Paket, in dem alle Elemente des neue Java-Zielmodells gespeichert werden sollen.
1.Klicken Sie mit der rechten Maustaste auf das "Root"-Paket und wählen Sie im Kontextmenü den Befehl Neues Element | Paket.
2.Geben Sie dem Paket den Namen "Bank Server Java".
![um_transform_cs_to_java01](./images/um_transform_cs_to_java01.png)
Sie können nun die Transformation von C# in Java folgendermaßen durchführen:
1.Klicken Sie mit der rechten Maustaste auf das Quellpaket "Bank Server" und wählen Sie im Kontextmenü den Befehl Modelltransformation.
![um_transform_cs_to_java02](./images/um_transform_cs_to_java02.png)
2.Wenn Sie aufgefordert werden, ein Zielpaket auszuwählen, wählen Sie das zuvor erstellte Paket "Bank Server Java" aus und klicken Sie auf Weiter.
![um_transform_cs_to_java03](./images/um_transform_cs_to_java03.png)
3.Wählen Sie als Transformationstyp C# in Java aus und behalten Sie alle anderen Einstellungen unverändert bei.
![um_transform_cs_to_java04](./images/um_transform_cs_to_java04.png)
4.Klicken Sie auf Fertig stellen. Wenn Sie darüber informiert werden, dass das "UModel Model Transformation Profile" inkludiert wird, klicken Sie zur Bestätigung auf OK.
Die Transformation wird fertig gestellt und im Projekt wurden die folgenden Änderungen vorgenommen:
•Im Zielpaket wird ein Paketdiagramm namens "Modelltransformation von Bank Server in Bank Server Java" generiert und automatisch geöffnet. In diesem Diagramm wird die soeben durchgeführte Transformation dargestellt. Bei Bedarf können Sie darin die zuvor definierten Einstellungen ändern, wie unten beschrieben.
•Das Zielpaket "Bank Server Java" enthält alle anhand des C#-Quellmodells transformierten und für Java angepassten Elemente. Wenn Sie z.B. das Diagramm "Bank Server" öffnen, werden Sie sehen, dass es anstelle des in C# verwendeten Typs bool den Typ boolean enthält.
•Das Paket "Component View" im Fenster "Modell-Struktur" enthält eine neue Komponente "Agency". Diese Komponente wurde automatisch generiert, da die Einstellung Komponentenrealisierungen und Komponenten generieren aktiviert war und das Quellpaket den Namespace Agency enthält. In der neuen Komponente sind die Code Engineering-Einstellungen für das Zielmodell (in diesem Fall Java) definiert.
![um_transform_cs_to_java05](./images/um_transform_cs_to_java05.png)
Sie können nun das Java-Zielmodell für das Code Engineering konfigurieren:
1.Klicken Sie im Paket "Component View" auf die Komponente "Agency".
2.Gehen Sie im Fenster "Eigenschaften" zur Eigenschaft Verzeichnis und geben Sie das Verzeichnis ein, in dem der Code generiert werden soll (z.B. C:\Bank_Sample\Java, vorausgesetzt, dieses Verzeichnis existiert).
![um_transform_cs_to_java06](./images/um_transform_cs_to_java06.png)
Wir werden nun Java-Code anhand des Zielmodells generieren:
1.Klicken Sie mit der rechten Maustaste auf das "Bank Server Java"-Paket und wählen Sie den Befehl Code Engineering | Merge Programmcode von UModel-Paket.
2.Klicken Sie auf OK, um die Synchronisierungseinstellungen zu bestätigen.
Ihr UModel-Projekt enthält zu diesem Zeitpunkt sowohl das Bank Server-Quellmodell in C# als auch das Zielmodell in Java (und beide Modelle sind für die Codegenerierung konfiguriert). Sie können ab jetzt beide Modelle (manuell oder automatisch) synchron halten, selbst wenn Sie am C#-Modell weiterarbeiten. Öffnen Sie als Beispiel dafür das Diagramm "Bank Server" im C#-Quellpaket und fügen Sie zur Klasse BankServer eine neue Operation namens getNumberOfAccounts hinzu, deren Rückgabewert ein int-Wert ist.
![um_transform_cs_to_java07](./images/um_transform_cs_to_java07.png)
Diese Änderung kann manuell im Zielmodell übernommen werden. Gehen Sie dazu folgendermaßen vor:
1.Klicken Sie mit der rechten Maustaste auf das Quellpaket "Bank Server" und wählen Sie den Befehl Modelltransformation aktualisieren | von 'Bank Server' in 'Bank Server Java'.
2.Klicken Sie auf Fertig stellen.
Die zuvor über das C#-Modell hinzugefügte Operation getNumberOfAccounts wurde nun in das Java-Zielmodell zusammengeführt.
Wir wollen die Transformationseinstellungen nun so konfigurieren, dass Aktualisierungen in C# automatisch in Java übernommen werden, wenn Sie das C#-Quellmodell in das C#-Modell importieren oder Änderungen aus dem Modell im C#-Code zusammenführen.
1.Öffnen Sie das Paketdiagramm "Modelltransformation von Bank Server in Bank Server Java".
2.Doppelklicken Sie auf den Eigenschaftswert AutomaticaUpdateAfterModelFromCode und setzen Sie ihn auf "on".
3.Wiederholen Sie die obigen Schritt für den Eigenschaftswert AutomaticUpdateBeforeCodeFromModel.
![um_transform_cs_to_java08](./images/um_transform_cs_to_java08.png)
Um die automatischen Aktualisierungen auszulösen,
1.gehen Sie zurück zur Klasse BankServer im C#-Quellmodell und löschen Sie die Operation getNumberOfAccounts.
2.Klicken Sie mt der rechten Maustaste auf das Paket Bank Server C# und wählen Sie entweder den Befehl Merge Programcode aus UModel-Paket oder Merge UModel-Paket aus Programmcode.
Da automatische Aktualisierungen nun aktiviert sind, wird diese Änderung nun auch automatisch in der Java-Zielklasse BankServer übernommen.