| Hello, 
 Acceleo uses the same guidelines as EMF Compare for gerrit
      reviews, you can get most information from
      https://wiki.eclipse.org/EMF_Compare/Gerrit . The most basic
      requirement is that you need to have signed an Eclipse Contributor
      Agreement (ECA) with the eclipse foundation. For this you will
      have to follow the instructions from
https://wiki.eclipse.org/Development_Resources/Contributing_via_Git#Eclipse_Contributor_Agreement
      . 
 Please let me know if some of the instructions are unclear or out
      of date.
 
 We will try and review this as soon as possible. 
 Laurent Goubet Obeo
 
 On 04/11/2019 19:03, pere lengo wrote:
 
      
      
      
       
        Good Evening, 
        
 
        I am writing because, some time ago I funded a MDA company, that
        vastly implemented Acceleo as a code generation mechanism. 
        
 
        As part of the architecture of the framework  a crucial part of the requirements
          of the framework required dynamic overriding and
        polyphormism, in order to allow (for example) setting different
        name rules for various companies as per their naming standards
        requirements. 
        
 
        One of the major problems found is that the overriding mechanism
        is not suitable for generators that are not open-sourced because
        it is mandatory to import the extended template and use it
        explicitly, which makes extension mechanism very limited. A
        similar problem applies to
          queries, that cannot be overriden. 
        Another 
          very interesting extension mechanism that requires
        implicit import declaration is Polyphormism. However, the fact
        that it requires an implicit import also makes it less usable. 
        
 
        As an example of what I attempted to achieve: 
        
 
        -I have a _javascript_ generator that generates a _javascript_
        function that has to invoke a remote server. 
        -The client code could be generated for REST protocol, JSON-RPC
        protocol, or whatever protocol the architect decides, depending
        on the UML stereotypes applied to ports connecting the client
        and server component. 
        -I want to be able to generate the client for more than these
        two protocols without having to import the new generators in the
        old templates. 
        
 
        To solve all of these problems, I've patched a couple of
        classes, to allow dynamic
          polyphormism without imports and query dynamic overriding
          mechanisms. 
        
 
        
          For example, we want to make a call to a template as follows: 
        
          
            [generateClientInstanceByTecnology(sourceTecnology,targetTecnology,
              targetInterface, sourcePorts, sourceComponent,
              targetPorts, targetComponent, model)/] 
        
          
 
          Which invokes: 
        
          
            [template public generateClientInstanceByTecnology
              (sourceTecnology : Stereotype, targetTecnology :
              Stereotype,  targetInterface : Interface , sourcePorts :
              Set(Port), sourceComponent : Component, targetPorts :
              Set(Port), targetComponent : Component,  model : Model) ] 
          
            [
generateClientInstanceByTecnology2(sourceTecnology.getStereotypeMetaClass(),
              targetTecnology.getStereotypeMetaClass(), targetInterface,
              sourcePorts, sourceComponent, targetPorts,
              targetComponent, model)/] 
          
         
        
        
          And the default implementation: 
        
          
            [template public generateClientInstanceByTecnology2
              (sourceTecnology : OclAny, targetTecnology : OclAny,
               targetInterface : Interface , sourcePorts : Set(Port),
              sourceComponent : Component, targetPorts : Set(Port),
              targetComponent : Component,  model : Model)  ] 
          
            // FIXME - Non available generators for  
          
         
          
         
          
         
          
            [/template] 
        
          
 
         
        
          An implementor can extend this generator for example for Dojo
          (_javascript_ framework) clients, requesting HTTP servers in
          this way: 
        
          
            [template public generateClientInstanceByTecnology2
              (sourceTecnology : Dojotoolkit , targetTecnology : Http,
              targetInterface : Interface , sourcePorts : Set(Port),
              sourceComponent : Component, targetPorts : Set(Port),
              targetComponent : Component,  model : Model) ]
 .... [/template]
 
 
          
            Another implementor can extend this generator for example
            for Angular (_javascript_ framework) clients, requesting
            JSON-RPC servers in this way: 
            [template public generateClientInstanceByTecnology2
              (sourceTecnology : Angular, targetTecnology : JsonRpc,
              targetInterface : Interface , sourcePorts : Set(Port),
              sourceComponent : Component, targetPorts : Set(Port),
              targetComponent : Component,  model : Model) ]....
 
 
        
 
        
          
             
        I would like to know what the requirements to push the code to
        the repository are and how to document these functionalities. 
        I have this patch applied to R3_3_maintenance branch- do you
        think that it is necessary to upgrade it to the master version
        and make appropiate tests to validate it? If so, I kindly
        request your assitance for the pulling phase. 
        
 
        Many thanks, 
        
 
        Pere Joseph Rodríguez 
        
 
        
 
 _______________________________________________
acceleo-dev mailing list
acceleo-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://www.eclipse.org/mailman/listinfo/acceleo-dev
 --  Laurent
          GoubetConsultant
 +33
          2 51 13 51 42
 
 ![]()
 7 Boulevard Ampère - Carquefou -
        France obeo.fr | twitter | linkedin
 |