
// EvalTemplate.java
// Geir Magnusson Jr.
// Modified by Andrew Davison, ad@coe.psu.ac.th, July 2023

/* Demonstrates how to use Velocity evaluate()
   to dynamically create a template from a String.
   For another approach, see EvalScript.java

  Usage:
    > compile EvalTemplate.java
    > run EvalTemplate
*/

import java.io.*;
import java.util.*;

import org.apache.velocity.*;
import org.apache.velocity.app.*;


public class EvalTemplate
{
  public static void main( String args[]) throws Exception
  {
    Velocity.init();

    VelocityContext vc = new VelocityContext();
    vc.put("lib", "Velocity");
    vc.put("names", Arrays.asList("Jim", "Jane", "Joan", "John"));

    // dynamically create template from a string
    String templateStr = "Using $lib:\n" +
             "#foreach ($name in $names)\n" +
             "  $name\n" +
             "#end\n";

    StringWriter sw = new StringWriter();
    Velocity.evaluate(vc, sw, "EvalLog", templateStr);
    System.out.println(sw);
  } /* main */

}  // end of EvalTemplate class
