[ 
https://issues.apache.org/jira/browse/VELOCITY-787?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12928617#action_12928617
 ] 

Nathan Bubna commented on VELOCITY-787:
---------------------------------------

I think this is out of scope for the Engine project, and perhaps Velocity in 
general.  And i think you could support this now with a clever tool instead of 
Directives, and with no need to modify Velocity.

public class WriterTool {

    public void switchToWriter(String name)...
    public void setFilename(String name)...
    public void whateverMagicYouCanThinkUp()...

}

Then you give this tool the info it needs, drop that instance into your context 
and viola!  You have all the control you want from within the template.

> Write to multiple files, controlled by template directives
> ----------------------------------------------------------
>
>                 Key: VELOCITY-787
>                 URL: https://issues.apache.org/jira/browse/VELOCITY-787
>             Project: Velocity
>          Issue Type: New Feature
>          Components: Engine
>    Affects Versions: 2.0
>         Environment: All environments
>            Reporter: Don Mendelson
>
> For some purposes, such as code generation, it would be very desirable to 
> output to multiple files from the same context. For example, to generate code 
> for a C++ class, two files must be generated - a header and implementation 
> file. Rendering could be driven by the same context in both cases, which 
> would desribe the class name, method signatures, etc. Currently this must be 
> done by running the engine twice - once with a header template and again with 
> an implementation file template.
> Furthermore, it would desirable to determine the output file names during 
> rendering, based on a combination of template directives and data in the 
> context. To use the code generation example, the header and implementation 
> file names would be determined by the name of the class to be generated.
> This is not possible with the current method signature of Directive: 
>     public boolean render(InternalContextAdapter context, Writer writer, Node 
> node) 
> An output directive would want to change the writer to a different instance 
> of FileWriter, for instance. But since Java passes object references by 
> value, the writer object cannot be replaced.
> The proposal is to provide a method to install a new instance of Writer 
> during rendering of a template. This would support both writing multiple 
> outputs in one run of the engine as well as controlling the file names of the 
> outputs.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to