Uploaded image for project: 'Velocity'
  1. Velocity
  2. VELOCITY-787

Write to multiple files, controlled by template directives

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Closed
    • Major
    • Resolution: Won't Fix
    • 2.0
    • None
    • Engine
    • None
    • All environments

    Description

      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.

      Attachments

        1. FileTool.java
          10 kB
          Christoph Reck

        Activity

          People

            Unassigned Unassigned
            donmendelson Don Mendelson
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: