© Copyright International Business Machines Corporation 2006. Wszelkie prawa zastrzeżone. Ograniczone prawa na rzecz rządu Stanów Zjednoczonych - używanie produktów, tworzenie ich duplikatów oraz ujawnianie informacji o nich podlega zastrzeżeniom zawartym w umowie GSA ADP Schedule zawartej z firmą IBM Corp.
Jeśli podczas tworzenia transformacji typu model-model docelowym modelem jest model w specyfikacji UML 2, domyślne profile UML nie są odwzorowywane automatycznie. Na przykład profil UML default.epx nie jest odwzorowywany automatycznie. Takie profile należy odwzorować ręcznie lub użyć środowiska UMLDefaultLibrariesAddRule. To środowisko można dodać ręcznie do transformacji, jeśli docelowym modelem jest model UML EClass.
Aby dodać środowisko do transformacji, należy dodać do niej następujący kod:
/**
* <!-- początek-dokumentu-użytkownika -->
* <!-- koniec-dokumentu-użytkownika -->
* @generated NOT
*/
protected void addTransformElements(Registry registry) {
add(new UMLDefaultLibrariesAddRule());
addGeneratedTransformElements(registry);
// W tym miejscu można dodać więcej elementów transformacji po wygenerowanych
// Należy pamiętać o usunięciu znacznika @generated lub dodać do niego klauzulę NOT
}
Podczas tworzenia transformacji typu model-model, aby zapewnić obsługę "złączania" w modelu docelowym, we wtyczce obszaru roboczego Eclipse wymagane jest rozszerzenie "org.eclipse.core.runtime.contentTypes". To rozszerzenie można określić we wtyczce, która ma nazwę domeny pobraną z domeny modelu docelowego. Więcej informacji na temat tego rozszerzenia zawiera dokumentacja punktu rozszerzenia w projekcie Porównaj/scal. Umożliwia to budowanie bardziej wyrafinowanej strategii złączania dla modelu docelowego. W przypadku prostszej strategii EMF można określić następujące rozszerzenie (znaki "xxx" należy zastąpić rozszerzeniem pliku docelowego):
<extension
point="org.eclipse.core.runtime.contentTypes">
<file-association
content-type="com.ibm.xtools.comparemerge.emf.emfContentType"
file-extensions="xxx"/>
</extension>
Podczas tworzenia transformacji typu model-model, dla modeli Ecore określonych jako wejściowe lub wyjściowe muszą istnieć odpowiadające im modele genmodel. Aby utworzyć modele genmodel, można skorzystać z kreatora Model EMF. Po utworzeniu modeli genmodel należy się upewnić, czy został wygenerowany kod. Modele genmodel muszą być zarejestrowane w programistycznym środowisku wykonawczym lub muszą znajdować się w tej samej ścieżce, co odpowiadające im modele Ecore. Modele genmodel muszą mieć rozszerzenie pliku .genmodel, podobną nazwę oraz tę samą wielkość liter, co modele Ecore. W przeciwnym razie mechanizm tworzenia transformacji nie będzie mógł odszukać modelu genmodel. Jeśli mechanizm tworzenia transformacji nie będzie mógł odnaleźć wymaganych modeli genmodels, zablokuje generowanie kodu.
Podczas tworzenia konfiguracji dla transformacji typu model-model należy określić plik, który reprezentuje model docelowy, nawet jeśli plik jest pusty. Jako docelowego kontenera nie można określić adresu URI.
Aby utworzyć pusty model Ecore, na stronie głównej edytora lub kreatora konfigurowania transformacji należy kliknąć przycisk Utwórz nowy kontener docelowy i określić plik, który ma rozszerzenie modelu docelowego.
Aby integrować transformację typu model-model jako frontową dla transformacji typu JET (model-tekst), należy ręcznie dodać instancję środowiska JETRule do reguł 'postProcessing' transformacji RootTransformation, która znajduje się u dostawcy transformacji. Poniższy przykład zawiera kod, który należy dołączyć do klasy dostawcy transformacji. Znaki 'xxx' należy zastąpić identyfikatorem transformacji JET.
/**
* Tworzy transformację główną. Tutaj można dodać więcej reguł do transformacji
* <!-- początek-dokumentu-użytkownika -->
* <!-- koniec-dokumentu-użytkownika -->
* @param transform The root transformation
* @generated NOT
*/
protected RootTransformation createRootTransformation(ITransformationDescriptor descriptor) {
return new RootTransformation(descriptor, new MainTransform()) {
protected void addPostProcessingRules() {
add(new JETRule("xxx"));
}
};
}
Aby wygenerować transformacje, które pobierają lub wysyłają modele UML, metamodel UML należy określić jako główny element wejściowy i/lub wyjściowy specyfikacji odwzorowania. Dodawanie profilu UML do specyfikacji odwzorowania nie powoduje automatycznego dodania metamodelu UML.
Sposób obejścia: Metamodel UML należy dodać, klikając przycisk Dodaj model w kreatorze lub edytorze Odwzorowanie transformacji model-model.
Punkty końcowe konektorów odwzorowań mogą nie być widoczne, jeśli użytkownik przełącza opcję filtrowania z "Podstawowe" na "Pośrednie" lub "Zaawansowane", a następnie tworzy odwzorowania i z powrotem przełącza tryb filtrowania na "Podstawowe". Może to spowodować, że konektory odwzorowań będą wyświetlane z punktami końcowymi, które łączą z niczym. Wpływa to tylko na wygląd odwzorowań. Nie ma to wpływu na odwzorowania ani na kod źródłowy, który transformacja generuje z odwzorowań.
Sposób obejścia: Należy poprawić wygląd odwzorowania, podając tryb filtrowania, który był aktywny podczas tworzenia odwzorowania.
Gdy plik odwzorowań nie zawiera już żadnych odwzorowań, które określają składniki z modelu jako dane wejściowe lub wyjściowe, model jest "usuwany" z pliku odwzorowań. Sprawdzanie nieużywanych modeli jest przeprowadzane za każdym razem, gdy usuwane są dane wejściowe lub wyjściowe. Dla danych wejściowych i wyjściowych w pliku odwzorowań utrzymywane są osobne listy.
Sposób obejścia: Zanim będzie można wybrać składniki z danego modelu jako dane wejściowe lub wyjściowe odwzorowania, należy dodać model do pliku odwzorowań. Aby do pliku odwzorowań dodać model, w edytorze odwzorowań należy kliknąć przycisk Dodaj model.
W edytorze konfigurowania transformacji dla wygenerowanych transformacji typu model-model można określić opcję runSilent z dowolnym trybem scalania, włącznie z 'automatycznym' lub 'wizualnym'. Jeśli tryb scalania jest automatyczny lub wizualny, opcja runSilent wymusza strategię cichego scalania, jeśli w modelu docelowym znaleziono obsługę złączania. W przeciwnym razie wykorzystana zostanie strategia nadpisywania scalania.
Podczas tworzenia modelu odwzorowywania transformacji z metamodelu Ecore do metamodelu UML z wykorzystaniem profili, należy sprawdzić adres URI profilu, który zostanie użyty w docelowych modelach UML. Domyślnie wykorzystywany jest adres URI profilu określonego w edytorze odwzorowań. Jeśli podany zostanie adres URI zasobu, jest on przekształcany do odpowiedniego adresu URI wtyczki.
Sposób obejścia: We właściwości nadpisywania profileURI na stronie właściwości można określić inny adres URI. Należy kliknąć sekcję główną edytora odwzorowań, aby wyświetlić stronę właściwości. Uwaga: W przypadku korzystania z zarejestrowanego profilu innego niż profil wykorzystywany automatycznie, można określić adres URI, za pomocą którego zarejestrowany jest ten profil. Niepowodzenie tej operacji może spowodować, że zarejestrowany profil zostanie załadowany do zestawu zasobów więcej niż jeden raz, co może spowodować problemy ze scalaniem lub złączaniem.
Podczas generowania kodu z modeli odwzorowań w transformacjach typu model-model podstawowe pliki projektu, takie jak plugin.xml i manifest.mf są generowane, jeśli nie można ich odnaleźć. Po ich wygenerowaniu konieczna może być ich edycja.
Sposób obejścia:
- Jeśli do pliku odwzorowań dodane zostaną modele wejściowe lub wyjściowe, należy dokonać edycji pliku manifest.mf. Należy dodać zależności dla wtyczek, które zawierają wygenerowany kod modelu dla modelu wejściowego/wyjściowego. Dodanie tych zależności powinno poprawić błędy kompilowania wynikające z próby dostępu do klas, które nie znajdują się w tych wtyczkach. Można dodać zależność do wtyczki, która zawiera kod wygenerowany dla nowego modelu wejściowego/wyjściowego.
- Jeśli we wtyczce Java, zawierającej pliki plugin.xml i manifest.mf, utworzony zostanie model odwzorowania, do pliku manifest.mf należy dodać wymagane zależności. Należy dodać zależność dla tworzenia transformacji oraz zależność dla modeli wejściowych/wyjściowych. Do pliku plugin.xml należy także dodać rozszerzenie com.ibm.xtools.transform.core.transformationProviders.