Hi Mark,

wow I'll see if I can use your design for the Module Generator!

> Thomas mentioned on the list that there's a module generator and I agree
> with you that it might be good to use it to create the code generation
> framework.  I don't know what state it's in, but I'm definitely willing to
> try it out.

To make it a little bit easier I've quickly made a "getting started":
http://argouml-modulegenerator.tigris.org/quickstart/index.html

About it's state: I see that i18n is broken (deja vu?), and I need to make a 
little fix to the classpath in the manifest file template. But everything for 
building with ant & Java SDK is generated. Regarding features: see project home 
page.

Feel free to play with the sources, it's not meant to be just mine. You can try 
your design on it, Linus could give you commit rights.

Thomas

-------- Original-Nachricht --------
> Datum: Mon, 5 Sep 2011 13:29:34 -0700
> Von: Mark Fortner <[email protected]>
> An: [email protected]
> Betreff: Re: [argouml-dev] Templated Code Generation

> I've posted an initial design for Templated Code Generation to the wiki:
> http://argouml.tigris.org/wiki/Templated_Code_Generation_Design
> 
> Hope this helps,
> 
> Mark
> 
> 
> 
> On Thu, Sep 1, 2011 at 10:25 AM, Thomas Neustupny <[email protected]> wrote:
> 
> > Jupp I did create a (very) simple interface to encapsulate all calls to
> the
> > template engine, it consist of the methods:
> >        /**
> >         * Initializes the template engine.
> >         *
> >         * @param dir
> >         *            The directory that contains the templates.
> >         */
> >        public void init(File dir);
> >
> >        /**
> >         * Generates content using a template and writes it to a file.
> >         *
> >         * @param templateName The name of the template to be used.
> >         * @param destFile The destination file.
> >         */
> >        public void generate(String templateName, File destFile);
> >
> >        /**
> >         * Gets an object from the template engine context.
> >         *
> >         * @param key
> >         *            The key for which the object is stored.
> >         * @return The found object.
> >         */
> >        public Object get(String key);
> >
> >        /**
> >         * Puts an object to the template engine context.
> >         *
> >         * @param key
> >         *            The key for which the object is to be stored.
> >         * @param value
> >         *            The object to be stored.
> >         */
> >        public void put(String key, Object value);
> >
> > Needs to deal with more than one context and maybe no File type for
> > parameters, but it does the job (i.e. is useful for the requirements I
> had).
> >
> > Thomas
> >
> >
> > -------- Original-Nachricht --------
> > > Datum: Thu, 1 Sep 2011 10:09:16 -0700
> > > Von: Mark Fortner <[email protected]>
> > > An: [email protected]
> > > Betreff: Re: [argouml-dev] Templated Code Generation
> >
> > > Hi Thomas,
> > > I don't mind contributing some time to it.  I used Velocity as one of
> the
> > > templating engines in ArgoPrint, and am pretty familiar with it. 
> Since
> > > Velocity is used in couple of places in ArgoUML, it might be good to
> > stick
> > > with it for the initial implementation, but make sure we have enough
> > > interfaces in place that it's easy enough to plugin a different
> > templating
> > > engine.
> > >
> > > Mark
> > >
> > > On Thu, Sep 1, 2011 at 10:00 AM, Thomas Neustupny <[email protected]>
> wrote:
> > >
> > > > Hi Mark et al,
> > > >
> > > > thank you for approaching the topic from the requirements side, this
> is
> > > > needed to engineer poweful features for ArgoUML! I have not much
> time
> > in
> > > the
> > > > next weeks, but I can contribute with some hints on the (opposite?)
> > > > technical side: we have worked with Velocity already. This template
> > > engine
> > > > is also used by AndroMDA. Since we use Antlr, we are also aware of
> > > > StringTemplate, another template engine. But with velocity, I know
> of
> > at
> > > > least two working examples that generate Java code from
> > templates+model,
> > > > both of them as ArgoUML modules:
> > > >
> > > > * http://argouml-modulegenerator.tigris.org/ (my baby)
> > > > * a template base Java generator by Andreas Rückert (I have the
> > > sources,
> > > > but will not give them away without talking to him)
> > > >
> > > > Maybe it's too early to talk about the concrete libs to use, but I
> just
> > > > wanted to let you know that there's some experience. Just go aheas
> with
> > > the
> > > > concept!
> > > >
> > > > (OK, I'm a little bit worried who will later implement it, do you
> think
> > > > someone will volunteer?)
> > > >
> > > > Regards,
> > > > Thomas
> > > >
> > > > -------- Original-Nachricht --------
> > > > > Datum: Thu, 1 Sep 2011 07:49:50 -0700
> > > > > Von: Mark Fortner <[email protected]>
> > > > > An: [email protected]
> > > > > Betreff: Re: [argouml-dev] Templated Code Generation
> > > >
> > > > > Hi Linus,
> > > > > It should be pretty easy to have template-specific file naming
> > > patterns.
> > > > >  I've started creating a model based on our discussions and I'll
> see
> > > if I
> > > > > can load that onto the wiki this weekend.
> > > > >
> > > > > Mark
> > > > >
> > > > >
> > > > > On Thu, Sep 1, 2011 at 7:43 AM, Linus Tolke Tigris
> <[email protected]
> > >
> > > > > wrote:
> > > > >
> > > > > > *Hello Mark!
> > > > > > *
> > > > > > *
> > > > > > *
> > > > > > *In my current project we have the header files and c++ files in
> > the
> > > > > same
> > > > > > directory. In other projects I have seen them in two different
> > > > > directories.
> > > > > > *
> > > > > > *
> > > > > > *
> > > > > > *         /Linus*
> > > > > >
> > > > > >
> > > > > > Den onsdagen den 31:e augusti 2011 skrev Mark Fortner:
> > > > > >
> > > > > > Hi Linus,
> > > > > >> In ArgoPrint I have a TemplateMetaFile object which contains
> > things
> > > > > like a
> > > > > >> file naming template.  We could use a similar approach for code
> > > > > generation
> > > > > >> templates.
> > > > > >>
> > > > > >> It's been a while since I've written any C++.  If you're
> > generating
> > > > > code
> > > > > >> do you typically put the headers in one directory and the
> > > > > implementations in
> > > > > >> another directory?  Perhaps splitting things up into an API and
> an
> > > SPI
> > > > > >> directory?
> > > > > >>
> > > > > >> Mark
> > > > > >>
> > > > > >>
> > > > > >> On Wed, Aug 31, 2011 at 11:03 AM, Linus Tolke Tigris
> > > > > <[email protected]>wrote:
> > > > > >>
> > > > > >>> Great Mark!
> > > > > >>>
> > > > > >>> For filenames, I am also thinking C++ where each class has a
> .h
> > > file
> > > > > and
> > > > > >>> a .cpp file i.e. two separate templates or a single template
> that
> > > > > generates
> > > > > >>> two files. I want to see this to be determined among the set
> of
> > > > > templates. I
> > > > > >>> assume this is easily fixed.
> > > > > >>>
> > > > > >>> I agree that it is best to put reverse engineering aside. It
> is
> > > great
> > > > > >>> that we state this up front. It simplifies things a lot.
> > > > > >>>
> > > > > >>>         /Linus
> > > > > >>>
> > > > > >>>
> > > > > >>> 2011/8/31 Mark Fortner <[email protected]>
> > > > > >>>
> > > > > >>>>
> > > > > >>>> Hi Linus,
> > > > > >>>> I'll definitely move the results of the discussion into a
> wiki
> > > page.
> > > > > >>>>
> > > > > >>>>
> > > > > >>>>> I miss two things but it might be my lack of knowledge of
> what
> > > is
> > > > > >>>>> included in the template engines.
> > > > > >>>>>
> > > > > >>>>>    - In the template it shall be able to express filename or
> > > > > filenames
> > > > > >>>>>    to be used.
> > > > > >>>>>
> > > > > >>>>> I don't know if the template itself should know about the
> > > filename,
> > > > > but
> > > > > >>>> you can definitely pass a file name to the templating engine.
> > > There
> > > > > are two
> > > > > >>>> use cases here:
> > > > > >>>>
> > > > > >>>>
> > > > > >>>>    - *Straight template-based generation*: you have a class,
> and
> > > an
> > > > > >>>>    output directory, and a template -- the template engine
> uses
> > > this
> > > > > data to
> > > > > >>>>    determine where what to write and where to write it.
> > > Determining
> > > > > the output
> > > > > >>>>    directory and classname is rather straight-forward:
> > > > > >>>>
> > > > >
> "${outputdir}/${packageName.toPath()}/${className}.${fileExtension}"
> > > > > >>>>    - *Project-based generation*: you have a domain class, a
> > > project
> > > > > >>>>    directory, and a template -- the correct directory is
> > > determined
> > > > > based on
> > > > > >>>>    the fact that it's a domain class, it's a Grails project
> (or
> > > some
> > > > > other
> > > > > >>>>    framework), and we know what the project root directory
> is.
> > > > > Something like
> > > > > >>>>
> > > > >
> > > >
> > >
> >
> "${projectRoot}/grails-app/domain/${packageName.toPath()}/${className}.groovy"
> > > > > >>>>
> > > > > >>>>
> > > > > >>>>>    - Re-generation, importing manual changes from previously
> > > > > generated
> > > > > >>>>>    files or reverse engineering. Shall this be addressed? Do
> > the
> > > > > template
> > > > > >>>>>    engines mentioned address this?
> > > > > >>>>>
> > > > > >>>>> In my mental model, language support = reverse engineering +
> > > code
> > > > > >>>> generation, and for the time being, I'd be satisified if we
> just
> > > had
> > > > > >>>> modifiable templates for code generation.  I'm not completely
> > > > > dissatisfied
> > > > > >>>> with reveng at the moment, there are just a few bits that are
> > > need
> > > > to
> > > > > be
> > > > > >>>> updated to properly support some features in the java
> language.
> > > So
> > > > > I'd
> > > > > >>>> rather put reveng to the side for the time being and focus on
> > > code
> > > > > >>>> generation. My personal feeling is that projects that are
> small
> > > and
> > > > > >>>> well-defined are more likely to be worked on by volunteers
> with
> > > > > limited
> > > > > >>>> available time and we should probably try to keep this as
> > minimal
> > > as
> > > > > >>>> possible.
> > > > > >>>>
> > > > > >>>> Mark
> > > > > >>>>
> > > > > >>>
> > > > > >>>
> > > > > >>
> > > > >
> > > > > ------------------------------------------------------
> > > > >
> > > >
> > >
> >
> http://argouml.tigris.org/ds/viewMessage.do?dsForumId=450&dsMessageId=2833966
> > > > >
> > > > > To unsubscribe from this discussion, e-mail:
> > > > > [[email protected]].
> > > > > To be allowed to post to the list contact the mailing list
> moderator,
> > > > > email: [[email protected]]
> > > >
> > > > --
> > > > Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
> > > > belohnen Sie mit bis zu 50,- Euro!
> https://freundschaftswerbung.gmx.de
> > > >
> > > > ------------------------------------------------------
> > > >
> > > >
> > >
> >
> http://argouml.tigris.org/ds/viewMessage.do?dsForumId=450&dsMessageId=2833991
> > > >
> > > > To unsubscribe from this discussion, e-mail: [
> > > > [email protected]].
> > > > To be allowed to post to the list contact the mailing list
> moderator,
> > > > email: [[email protected]]
> > > >
> > >
> > > ------------------------------------------------------
> > >
> >
> http://argouml.tigris.org/ds/viewMessage.do?dsForumId=450&dsMessageId=2833993
> > >
> > > To unsubscribe from this discussion, e-mail:
> > > [[email protected]].
> > > To be allowed to post to the list contact the mailing list moderator,
> > > email: [[email protected]]
> >
> > --
> > Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
> > belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de
> >
> > ------------------------------------------------------
> >
> >
> http://argouml.tigris.org/ds/viewMessage.do?dsForumId=450&dsMessageId=2833994
> >
> > To unsubscribe from this discussion, e-mail: [
> > [email protected]].
> > To be allowed to post to the list contact the mailing list moderator,
> > email: [[email protected]]
> >
> 
> ------------------------------------------------------
> http://argouml.tigris.org/ds/viewMessage.do?dsForumId=450&dsMessageId=2835678
> 
> To unsubscribe from this discussion, e-mail:
> [[email protected]].
> To be allowed to post to the list contact the mailing list moderator,
> email: [[email protected]]

-- 
NEU: FreePhone - 0ct/min Handyspartarif mit Geld-zurück-Garantie!               
Jetzt informieren: http://www.gmx.net/de/go/freephone

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=450&dsMessageId=2835706

To unsubscribe from this discussion, e-mail: 
[[email protected]].
To be allowed to post to the list contact the mailing list moderator, email: 
[[email protected]]

Reply via email to