Hi Leon,

Often generated files are only a starting point. 

Example

Template

public class Factory {

    private String className = "${className}";



    public Object create() throws Exception {

        return Class.forName(className).newInstance();

    }

}


First time template generates:

public class Factory {
    private String className = "foo";

    public Object create() throws Exception {
        return Class.forName(className).newInstance();
    }
}

User may change this generated file to be:

public class Factory {

    private String className = "foo";



    public Object create() throws Exception {
        Object o = Class.forName(className).newInstance();

        System.out.println("creating object "  + o);
        Statistic.createdObject(className, +1);
        return o;

    }

}

Template may be updated to generate:

public class Factory {

    private String className = "foo";



    public Object create() throws Exception {


        return Class.forName(className).newInstance();


    }



    public Object create(ClassLoader cl) throws Exception {


        return Class.forName(className, cl, true).newInstance();


    }


}

When user code is maintained the generated file would be

public class Factory {

    private String className = "foo";



    public Object create() throws Exception {
        Object o = Class.forName(className).newInstance();


        System.out.println("creating object "  + o);

        Statistic.createdObject(className, +1);

        return o;


    }



    public Object create(ClassLoader cl) throws Exception {



        return Class.forName(className, cl, true).newInstance();



    }



}

And not (missing user code)

public class Factory {


    private String className = "foo";





    public Object create() throws Exception {



        return Class.forName(className).newInstance();



    }





    public Object create(ClassLoader cl) throws Exception {



        return Class.forName(className, cl, true).newInstance();



    }



}


Many times generated files need updating. Sometimes generated files are just 
starting points meant for the user to fill in and sometimes they are meant to 
be final results but developers/users may wish to make mods to them anyways.

The above is a simplistic example, but a user mod could be anything from adding 
an annotation to a log statement to employing an optimization such as a cache 
to adding a new method, etc.

What i presented, was a simple practical way to allow user mods to be 
maintained during file regeneration.

In conclusion, very often not everything is accounted for during generation. 
Sometimes the files need to be regenerated as templates change. What was 
presented was a way to maintain user changes in the generated files as files 
are regenerated. When combined with a compile step this also allows an easy way 
to flag incompatible user changes, or simply flag that the file was changed by 
the user.


These types of comments often need work arounds in real systems as generated 
code does not always meet user requirements or may even have bugs or other 
limitations.

// user generated code - do not modify - overwrites







A couple side thoughts

<use as template> - way to use different template during codegen, useful as 
workaround for end user in prod system
<crc file> - way to test for user mods, and flag errors, may skip whitespace, 
etc

> Date: Sun, 19 Jul 2009 14:04:53 +0200
> Subject: Re: New Tag - Looking for Comments (Maintain user code during        
> regeneration of files)
> From: rosenberg.l...@googlemail.com
> To: user@commons.apache.org
> 
> On Fri, Jul 17, 2009 at 11:11 AM, Jason
> Weinstein<jasonweinst...@hotmail.com> wrote:
> >
> > A common problem with templating systems is that they overwrite changes made
> > to the generated files, when things are regenerated.
> 
> Hello,
> 
> maybe I don't understand your point, but why should someone change
> generated files?
> 
> Leon
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
> For additional commands, e-mail: user-h...@commons.apache.org
> 

_________________________________________________________________
Windows Liveā„¢ HotmailĀ®: Celebrate the moment with your favorite sports pics. 
Check it out.
http://www.windowslive.com/Online/Hotmail/Campaign/QuickAdd?ocid=TXT_TAGLM_WL_QA_HM_sports_photos_072009&cat=sports

Reply via email to