package net.sourceforge.rtf.usecases.templateEngine;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import net.sourceforge.rtf.helper.RTFTemplateBuilder;
import net.sourceforge.rtf.template.IContext;
import net.sourceforge.rtf.usecases.AbstractTemplateEngineUseCase;
import net.sourceforge.rtf.usecases.model.Dependency;
import net.sourceforge.rtf.usecases.model.Developer;
import net.sourceforge.rtf.usecases.model.Project;
import net.sourceforge.rtf.usecases.util.UseCaseUtil;

public class TestFreemarkerTemplateEngine extends AbstractTemplateEngineUseCase {

    public TestFreemarkerTemplateEngine(String outDirectory) {
        super(outDirectory);
    }
     
    protected void putContext(IContext context) {
        /*
         * Context of simply POJO
         */
        context.put("date", new Date());
        context.put("project", new Project("Jakarta Velocity"));
        
        context.put("header_developer_name", "Name");
        context.put("header_developer_email", "Email");
        context.put("header_developer_roles", "Roles");
        /*
         * Context of list of POJO (Developers and Dependencies)
         */
        List developers = new ArrayList();
        Developer developer = new Developer("Will Glass-Husain", "wglass@apache.org");
        developer.addRole("Java Developer");
        developer.addRole("Release Manager");
        developers.add(developer);
        developer = new Developer("Geir Magnusson Jr.", "geirm@apache.org");
        developer.addRole("Java Developer");
        developer.addRole("Release Manager");
        developers.add(developer);
        developer = new Developer("Daniel L. Rall", "dlr@finemaltcoding.comg");
        developer.addRole("Java Developer");
        developer.addRole("Release Manager");
        developers.add(developer);
        context.put("developers", developers );
        
        List dependencies = new ArrayList();
        Dependency dependency = new Dependency("commons-collection", "jar", "1.0", "http://jakarta.apache.org/commons/collection/");
        dependencies.add(dependency);
        dependency = new Dependency("logkit", "jar", "1.0.1", "http://logkit");
        dependencies.add(dependency);
        dependency = new Dependency("oro", "jar", "2.0.8", "http://jakarta.apache.org/oro/");
        dependencies.add(dependency);
        
        context.put("dependencies", dependencies );
        
    }
    
    public static void main(String[] args) throws Exception {
        String baseDirectory = UseCaseUtil.getBaseDirectory(args);
        String outDirectory = baseDirectory + "usecases/out/ftl";
        // Create out Directory
        File out = new File(outDirectory);
        out.mkdir();
        
        String modelSource = baseDirectory + "usecases/models/ftl/jakarta-velocity-model.rtf.ftlRTFTemplate.rtf";
                
        TestFreemarkerTemplateEngine usecase = new TestFreemarkerTemplateEngine(outDirectory);
        usecase.setTemplateEngineType(RTFTemplateBuilder.FREEMARKER_ENGINE);
        usecase.run(modelSource);
        
    }
}
