Création de transformations - Notes sur l'édition

© Copyright International Business Machines Corporation 2006. All rights reserved. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.

Notes sur l'édition

1.0 Limitations
   1.1 Les profils UML par défaut ne sont pas automatiquement mappés lorsque vous créez un mappage vers UML à partir d'un modèle
   1.2 Dans les transformations de modèle à modèle, le support de fusion ("fuse") n'est disponible que pour les modèles cible pourvus de l'extension contentTypes
   1.3 Lorsque vous créez une transformation de modèle à modèle, les modèles Ecore que vous spécifiez comme entrée ou sortie doivent avoir des genmodels correspondants
   1.4 Vous devez spécifier un fichier comme conteneur cible dans une configuration de transformation de modèle à modèle
   1.5 L'intégration de la fonction Création de transformations avec les transformations JET n'est pas automatique
2.0 Problèmes connus et leurs solutions
   2.1 Les métamodèles UML ne sont pas ajoutés automatiquement aux mappages de modèle à modèle
   2.2 Les transformations vers ou depuis des propriétés filtrées peuvent sembler altérées dans l'éditeur de mappage
   2.3 Lorsque la seule référence à un modèle est supprimée dans un fichier de mappage, le modèle est lui-même supprimé du fichier de mappage
   2.4 L'option runSilent peut être sélectionnée dans l'éditeur de configuration de transformation de modèle à modèle si le mode de fusion est automatique ou visuel
   2.5 Des erreurs de fusion peuvent se produire lors du mappage d'un modèle vers un métamodèle UML avec un profil enregistré, si vous ne spécifiez pas l'ID d'enregistrement du profil
   2.6 Lors de la génération de code à partir de modèles de mappage, les fichiers de base du projet, notamment 'plugin.xml' et MANIFEST.MF', ne sont pas regénérés

1.0 Limitations

1.1 Les profils UML par défaut ne sont pas automatiquement mappés lorsque vous créez un mappage vers UML à partir d'un modèle

Lorsque vous créez une transformation de modèle à modèle, si la cible est un modèle UML 2, les profils UML par défaut ne sont pas automatiquement mappés. C'est le cas, par exemple, du profil UML default.epx. Vous devez mapper ces profils manuellement ou utiliser l'infrastructure (framework) UMLDefaultLibrariesAddRule. Vous pouvez ajouter manuellement cette infrastructure à une transformation si la cible est un élément EClass de modèle UML.

Pour ajouter l'infrastructure à une transformation, ajoutez le code suivant à cette transformation :

    /**
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated NOT
     */
    protected void addTransformElements(Registry registry) {
 add(new UMLDefaultLibrariesAddRule());
     addGeneratedTransformElements(registry);
     // Vous pouvez ajouter ici d'autres éléments de transformation après ceux qui sont générés
     // Pensez à supprimer la balise @generated ou à la faire suivre du mot-clé NOT
    }

1.2 Dans les transformations de modèle à modèle, le support de fusion ("fuse") n'est disponible que pour les modèles cible pourvus de l'extension contentTypes

Dans les transformations de modèle à modèle, pour ajouter le support de fusion ("fuse") à votre modèle cible, vous devez installer l'extension "org.eclipse.core.runtime.contentTypes" dans un plug-in de votre espace de travail Eclipse. Vous pouvez spécifier cette extension dans un plug-in dont le nom de domaine est dérivé de celui du domaine du modèle cible. Pour plus d'informations sur cette extension, reportez-vous à la documentation des points d'extension, dans le projet Comparaison/Fusion. Elle vous permet de construire une stratégie de fusion sophistiquée pour votre modèle cible. Pour une stratégie EMF plus simple, vous pouvez spécifier l'extension suivante (remplacez "xxx" par l'extension de votre fichier cible) :

<extension
  point="org.eclipse.core.runtime.contentTypes">
  <file-association
   content-type="com.ibm.xtools.comparemerge.emf.emfContentType"
  file-extensions="xxx"/>
 </extension>

1.3 Lorsque vous créez une transformation de modèle à modèle, les modèles Ecore que vous spécifiez comme entrée ou sortie doivent avoir des genmodels correspondants

Lorsque vous créez une transformation de modèle à modèle, les modèles Ecore que vous spécifiez comme entrée ou sortie doivent avoir des genmodels correspondants. Pour créer des genmodels, vous devez utiliser l'assistant Modèle EMF. Veillez à générer le code après avoir créé les genmodels.Les genmodels doivent être enregistrés (inscrits) dans le plan de travail de développement, ou bien ils doivent se trouver sur le même chemin que les modèles Ecore correspondants. Chaque genmodel doit porter l'extension de nom de fichier .genmodel et avoir le même nom (avec la même casse de caractères) que le modèle Ecore auquel il correspond. Faute de quoi, le moteur de création de transformation ne le trouvera pas. Si ce moteur ne trouve pas les genmodels requis, il désactive la génération de code.

1.4 Vous devez spécifier un fichier comme conteneur cible dans une configuration de transformation de modèle à modèle

Lorsque vous créez la configuration d'une transformation de modèle à modèle, vous devez spécifier un fichier pour représenter le modèle cible, même si ce fichier est vide. Vous ne pouvez pas spécifier d'URI comme conteneur de la cible.

Pour créer un modèle Ecore vide, sur la page principale de l'éditeur ou assistant de configuration de transformation, cliquez sur le bouton Créer un nouveau conteneur cible et spécifiez un fichier avec l'extension du modèle cible.

1.5 L'intégration de la fonction Création de transformations avec les transformations JET n'est pas automatique

Pour intégrer une transformation de modèle à modèle comme frontal d'une transformation JET (modèle à texte), vous devez ajouter manuellement une instance de l'infrastructure JETRule aux règles de post-traitement ('postProcessing') de la transformation racine (RootTransformation) située dans la classe du fournisseur de transformation. L'exemple suivant montre le code que vous devez inclure dans la classe de votre fournisseur de transformation. Remplacez 'xxx' par l'ID de votre transformation JET.

    /**
     * Crée une transformation racine. Vous pouvez ajouter d'autres règles à la transformation ici
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @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"));
                   }
        };
   }

2.0 Problèmes connus et leurs solutions

2.1 Les métamodèles UML ne sont pas ajoutés automatiquement aux mappages de modèle à modèle

Pour générer des transformations qui reçoivent en entrée ou produisent en sortie des modèles UML, spécifiez un métamodèle UML comme entrée racine et/ou comme sortie racine de la spécification de mappage.L'ajout d'un profil UML à la spécification de mappage n'entraîne pas l'ajout automatique du métamodèle UML.

Solution : Ajoutez le métamodèle UML en cliquant sur le bouton Ajouter un modèle, dans l'assistant ou l'éditeur de mappage de transformation de modèle à modèle.

2.2 Les transformations vers ou depuis des propriétés filtrées peuvent sembler altérées dans l'éditeur de mappage

Les points d'extrémité des connecteurs de mappage peuvent disparaître si un utilisateur passe du filtrage "de base" des fonctions au filtrage "intermédiaire" ou "avancé", puis qu'il crée des mappages et revient au filtrage "de base". Dans ce cas, les connecteurs semblent avoir des points d'extrémité qui ne se connectent à rien du tout.Il ne s'agit que d'un problème d'apparence. Les mappages et le code source généré à partir de ces derniers par la transformation ne sont pas affectés.

Solution : Vous pouvez rétablir l'apparence correcte en repassant au mode de filtrage qui était en vigueur lorsque les mappages ont été créés.

2.3 Lorsque la seule référence à un modèle est supprimée dans un fichier de mappage, le modèle est lui-même supprimé du fichier de mappage

Lorsqu'un fichier de mappages ne contient plus aucun mappage spécifiant des éléments d'un modèle particulier comme entrée ou sortie de mappage, ce modèle est "supprimé" du fichier de mappages. La recherche des modèles inutilisés a lieu chaque fois qu'une entrée ou une sortie de mappage est supprimée. Des listes distinctes sont tenues à jour dans le fichier de mappages pour les entrées et les sorties.

Solution : Vous devez ajouter le modèle au fichier de mappages avant de pouvoir sélectionner des éléments de ce modèle comme entrées ou sorties de mappage. Pour cela, cliquez sur le bouton Ajouter un modèle dans l'éditeur de mappage.

2.4 L'option runSilent peut être sélectionnée dans l'éditeur de configuration de transformation de modèle à modèle si le mode de fusion est automatique ou visuel

Pour une transformation de modèle à modèle générée, il est possible de spécifier l'option runSilent (Exécuter en silence) dans l'éditeur de configuration de transformation avec n'importe quel mode de fusion, notamment les modes 'automatique' et 'visuel'. Si le mode de fusion est automatique ou visuel, l'option runSilent force l'adoption de la stratégie de fusion silencieuse si le support de fusion ("fuse") est trouvé pour le modèle cible. Sinon, une stratégie de fusion par remplacement est appliquée.

2.5 Des erreurs de fusion peuvent se produire lors du mappage d'un modèle vers un métamodèle UML avec un profil enregistré, si vous ne spécifiez pas l'ID d'enregistrement du profil

Lors de la création d'un modèle de mappage de transformation d'un métamodèle Ecore vers un métamodèle UML avec un profil, vous devez vérifier l'URI du profil qui sera utilisé dans vos modèles UML cible. Par défaut, c'est l'URI du profil que vous spécifiez dans l'éditeur de mappage qui est utilisé. Si vous spécifiez un URI de ressource, il est converti en un URI de plug-in équivalent.

Solution : Vous pouvez spécifier un URI différent via la propriété de substitution profileURI, sur la page de propriétés. Cliquez sur la section racine dans l'éditeur de mappage pour afficher la page de propriétés. Remarque : Si vous utilisez un profil enregistré (inscrit), vous pouvez spécifier son URI, s'il est différent du profil utilisé automatiquement. Si vous ne le faites pas, le profil enregistré risque d'être chargé plusieurs fois dans le jeu de ressources, ce qui pourrait entraîner des problèmes de fusion.

2.6 Lors de la génération de code à partir de modèles de mappage, les fichiers de base du projet, notamment 'plugin.xml' et MANIFEST.MF', ne sont pas regénérés

Lors de la génération de code à partir de modèles de mappage dans les transformations de modèle à modèle, les fichiers de base du projet tels que plugin.xml et manifest.mf sont générés s'ils sont introuvables. Vous pouvez avoir besoin d'éditer ces fichiers nouvellement générés.

Solution :