You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by "Nathan Bubna (JIRA)" <de...@velocity.apache.org> on 2010/11/05 16:06:43 UTC

[jira] Commented: (VELOCITY-787) Write to multiple files, controlled by template directives

    [ 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: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org