package net.sourceforge.rtf.usecases.loop;

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

import net.sourceforge.rtf.RTFTemplate;
import net.sourceforge.rtf.helper.RTFTemplateBuilder;
import net.sourceforge.rtf.template.IContext;
import net.sourceforge.rtf.usecases.AbstractRTFUseCase;
import net.sourceforge.rtf.usecases.util.UseCaseLog;
import net.sourceforge.rtf.usecases.util.UseCaseUtil;

/**
 * Use case which generate RTF file with information about
 * Jakarta Velocity Project. This example use RTF model
 * <b>usecases/models/jakartavelocityproject/jakarta-velocity-model.rtf</b>
 * RTF files generated into directory <b>usecases/out/jakartavelocityproject</b>.
 * 
 * @version 1.0.0
 * @author <a href="mailto:angelo.zerr@gmail.com">Angelo ZERR</a>
 * 
 */
public class RTFJakartaVelocityProjectWithFreemarker extends AbstractRTFUseCase {

    public RTFJakartaVelocityProjectWithFreemarker(String outDirectory) {
        super(outDirectory);
    }
    
    protected void putDefaultFormat(RTFTemplate rtfTemplate) {
        /*
         * Set any common formatting objects on the engine - these will be passed through to each template it creates
         */
        rtfTemplate.setDefaultFormat(Date.class, DateFormat.getDateInstance());
    }
    
    protected void putContext(IContext context) {
        
        List listOfString = new ArrayList();
        listOfString.add("value 1");
        listOfString.add("value 2");            
        context.put("list", listOfString );
        
    }
    
    /**
     * Use case of RTFTemplate with the RTF source model <b>jakarta-velocity-model.rtf</b>.
     * It generate three files into directory <b>usecases/out/jakartavelocityproject</b> : 
     * <ul>
     *  <li><b>jakarta-velocity-model.rtf.&lt;rtfTemplateImpl&gt;.rtf</b> RTF  document transformed.</li>
     * </ul>
     * <ul>
     *  <li><b>jakarta-velocity-model.rtf.out.rtf</b> RTF final with value of the context.</li>
     * </ul>
     * <ul>
     *  <li><b>jakarta-velocity.fields.xml</b> XML fields available.</li>
     * </ul>
     * @param args the args.
     * @throws Exception the exception.
     */
    public static void main( String[] args ) throws Exception {
        String baseDirectory = UseCaseUtil.getBaseDirectory(args);
        UseCaseLog logger = new UseCaseLog();
        logger.logTitle("Start RTFJakartaVelocityProject...");
        String outDirectory = baseDirectory + "usecases/out/loop";
        // Create out Directory
        File out = new File(outDirectory);
        out.mkdir();
        
        // Generate RTF file by using RTF model jakarta-velocity-model.rtf
        String rtfSource = baseDirectory + "usecases/models/loop/loop.rtf";
        RTFJakartaVelocityProjectWithFreemarker usecase = new RTFJakartaVelocityProjectWithFreemarker(outDirectory);
        /**
         * Set Velocity as RTFTemplate implementation
         * 
         */
        usecase.setRtfTemplateImpl(RTFTemplateBuilder.DEFAULT_FREEMARKER_RTFTEMPLATE); 
        // not required, because by default velocity is the default RTFTemplate implementation
        
        usecase.saveTransformedDocument(true); // Save RTF file with velocity macro
        usecase.run(rtfSource);
        
        logger.logTitle("GENERATE RTF VELOCITY AND TARGET FILES INTO : " + outDirectory);
        
        // Save XML fields into file with update 
        String xmlFieldsAvailable = outDirectory + "/jakartavelocityproject.fields.xml";
        usecase.saveXmlFields(xmlFieldsAvailable ,false);
        logger.logTitle("GENERATE XML FIELDS AVAIALABLE : " + xmlFieldsAvailable);
        logger.logBody(usecase.getXMLFields());
        
        logger.logTitle("End RTFJakartaVelocityProject...");
        
    }



}
