/* $Id: $ * Creation date: November 3, 2007 * License: * Copyright: * Authors: */ @mainClass "TransfoProxy::Main" @mainOperation "main" package TransfoProxy; require kermeta // les 2 méta-modèles require "platform:/resource/Architecture/meta-models/ClientServeur.ecore" require "platform:/resource/Architecture/meta-models/ClientProxyServeur.ecore" // fonctions utilitaires Kermeta sur les 2 MM require "platform:/resource/Architecture/meta-models/ClientServeurUtil.kmt" require "platform:/resource/Architecture/meta-models/ClientProxyServeurUtil.kmt" using kermeta::standard using kermeta::persistence // nom des packages des 2 MM using ClientProxyServeur using ClientServeur class Main { operation transformerModele(serveur : ClientServeur::Serveur) : ClientProxyServeur::Serveur is do // on cree un serveur cible avec le m�me nom var serveurCible : ClientProxyServeur::Serveur init ClientProxyServeur::Serveur.new serveurCible.nom := serveur.nom // pour chaque client auquel le serveur est connecte, on cree // une interface, un client et un proxy cible avec les bonnes associations serveur.connecteA.each { client | var clientCible : ClientProxyServeur::Client init ClientProxyServeur::Client.new var interfaceCible : ClientProxyServeur::Interface init ClientProxyServeur::Interface.new var proxy : ClientProxyServeur::Proxy init ClientProxyServeur::Proxy.new clientCible.nom := client.nom interfaceCible.nom := client.utilise.nom proxy.nom := client.nom + serveur.nom clientCible.connecteA := proxy clientCible.utilise := interfaceCible interfaceCible.estImplementeePar := proxy interfaceCible.estUtiliseePar := clientCible proxy.implemente := interfaceCible proxy.clientConnecte := clientCible proxy.serveurConnecte := serveurCible serveurCible.connecteA.add(proxy) } result := serveurCible end operation main() : Void is do // classes utilitaires sur les MM var utilCS : ClientServeurUtil::Main init ClientServeurUtil::Main.new var utilCPS : ClientProxyServeurUtil::Main init ClientProxyServeurUtil::Main.new var serveurSource : ClientServeur::Serveur var serveurCible : ClientProxyServeur::Serveur // chargement du modèle source serveurSource := utilCS.chargerModele("platform:/resource/Architecture/models/ModeleCS.xmi") stdio.writeln("\n +++++++ Modele source +++++++\n") utilCS.afficherModele(serveurSource) // transformation du modèle serveurCible := transformerModele(serveurSource) stdio.writeln("\n +++++++ Modele cible (transforme) ++++++++++\n") utilCPS.afficherModele(serveurCible) stdio.writeln("\n ++++++ sauvegarde modele cible ++++++\n") utilCPS.sauverModele("platform:/resource/Architecture/models/ModeleProxyKermeta.xmi", serveurCible) end }