IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Eclipse Discussion :

[ATL] Une question pour les experts


Sujet :

Eclipse

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Points : 13
    Points
    13
    Par défaut [ATL] Une question pour les experts
    Bonjour,

    Voila mon problème:

    Je n'arrive pas à "pointer" ce que je veux :

    En prenant un bout de mon code je vais essayer de m'expliquer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    rule controlflow_arc{
    	from a:MMAD!ControlFlow
     
    	to  b:MMH!ArcClassic (
    		  Name<-'A1_'+a.name,
    		  TokkenNb<-1,
    		  Target<-c,
    		  ),  
    	c:MMH!Place (
    		  Name<-'P_'+a.name,
    		  OutputLink<-d
    		  ),
    	d:MMH!ArcClassic(
    		  Name<-'A2_'+a.name,
    		  TokkenNb<-1,
    		  Target<-a.target
    	  )
    Depuis une méta-classe MMsource, je la sépare en trois autre méta-classes du MMcible. En gros, je transforme un controlflow de Sysml en "arc-place-arc" pour les réseaux de Petri (pour ce qui connaissent).

    Mon problème est que parfois j'ai besoin de relier des méta-classes ControlFlow à d'autres instances de méta-classes du MMSource.
    Quand j'essaye de faire la transformation, je pointe toujours sur "b:MMH!ArcClassic" alors que parfois j'aimerais le relier "d:MMH!ArcClassic"

    Je pointe toujours sur la première instance de ma règle de transformation, jamais sur les autres.

    J'espère pourvoir être compris... c'est pas facile à expliquer.

    Merci d'avance pour votre aide.

  2. #2
    Membre habitué Avatar de NeraOne
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 218
    Points : 128
    Points
    128
    Par défaut
    Alors j'ai fait un peu d'ATL, je vais essayer de résumé ton problème pour être sûr qu'on se soit compris... :
    Tu transformes un ControleFlow du métamodel MMAD en trois "objets" du métamodèle MMH (qui est le métamodel des réseaux de pétri j'imagine...) qui sont deux arcs et une place. Depuis d'autres règles tu veux pointer sur un objets particuliers de ton MMH (b, c ou d) pour pouvoir les relier entre eux ! That's it ?

    Alors je sais pas comment tu pointes sur ton ControlFlow mais pour faire ce que tu veux tu dois à mon sens tu dois utiliser un ResolveTemp, dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    macible <- thisModule.resolveTemp(objet.qui.pointe.sur.ton.controleflow, 'd')
    Du coup il va aller chercher l'objet d de ton controleFlow

    Dis moi si c'est bien ça !
    "Je ne suis pas d'accord avec ce que vous dites, mais je me battrai jusqu'à la mort pour que vous ayez le droit de le dire." Voltaire

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Points : 13
    Points
    13
    Par défaut J'essaye
    C'est bien ça,
    j'essaye votre solution desuite.
    Merci pour la réponse rapide.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Points : 13
    Points
    13
    Par défaut j'y ai cru
    Je ne vois pas trés bien comment marche thisModule qui est pourtant très utilisé... :s
    Mes appels se font de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    rule controlflow_arc{
    	from a:MMAD!ControlFlow
     
    	to  b:MMH!ArcClassic (
    		  Name<-'A1_'+a.name,
    		  TokkenNb<-1,
    		  Target<-c--,
    		 --Source<-a.source
    		  ),  
    	c:MMH!Place (
    		  Name<-'P_'+a.name,
    		  OutputLink<-d
    		 -- InputLink<-b
    		  ),
    	d:MMH!ArcClassic(
    		 Name<-'A2_'+a.name,
    		  Target<-a.target,
    		  TokkenNb<-1
    	  )
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rule Merge{	
    	from a:MMAD!MergeNode
    	to    b : distinct MMH!Transition foreach(inc in a.incoming)(
                        Name<-'T'+a.incoming.indexOf(inc)+'_'+a.name,
    	   		OutputLink<-c
    			),
    Sur un exemple ça donne :
    L'Arc A2_name de CF1 pointe toujours sur la première instance ici T1_name
    L'arc A2_name de CF2 pointe Toujours sur la première instance ic T1_name au lieu de T2_name.

    C'est pour ça que j'ai pensé à plutot cibler A2_ des ControlFlow depuis mon Merge mais je n'arrive pas à mettre en place la règle. Mais je vais essayer encore et poster la réponse.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Points : 13
    Points
    13
    Par défaut encore merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    rule Case3_R1 {
           from
                 i : MM_A!ClassA
           to
                 o_1 : MM_B!Class1 (
                        linkToClass2 <- thisModule.resolveTemp(i.linkToClassB, 'o_n')
                 )
    }
    rule Case3_R2 {
           from
                 in : MM_A!ClassB
           to
                 o_1 : MM_B!Class3 (
                        ...
                 ),
                 ...
                 o_n : MM_B!Class2 (
                        ...
                 ),
                 ...
    }
    j'ai trouvé ca page 47 du User Manual

    Merci de m'avoir aiguiller de facon si rapide et précise. Je commence a peine c'est pas facile de trouver ce qui existe. Mais ca à l'air de marcher

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une question pour les pros
    Par smookyone dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 27/03/2011, 16h17
  2. Question pour les experts windows (XP et CE)
    Par Mikaelo dans le forum Windows
    Réponses: 2
    Dernier message: 24/08/2010, 07h23
  3. une colle pour les experts flash
    Par vincentrey41 dans le forum Flash
    Réponses: 1
    Dernier message: 11/03/2010, 14h25
  4. Une question pour les RadioButton
    Par jacko842 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 26/02/2010, 16h24
  5. Question pour les experts
    Par Philippe66 dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 31/08/2006, 23h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo