Package com.google.sitebricks.compiler.template.freemarker

Source Code of com.google.sitebricks.compiler.template.freemarker.FreemarkerTemplateCompiler

package com.google.sitebricks.compiler.template.freemarker;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import com.google.common.collect.ImmutableSet;
import com.google.sitebricks.Renderable;
import com.google.sitebricks.Respond;

import freemarker.core.Environment;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;

/**
* Creates renderables, given a Freemarker template page.
*/
public class FreemarkerTemplateCompiler {
  private final Class<?> page;

  public FreemarkerTemplateCompiler(Class<?> page) {
    this.page = page;
  }

  public Renderable compile(String templateContent) {
         
    final Template template = getTemplate(page, templateContent);   

    return new Renderable() {
      @Override
      public void render(Object bound, Respond respond) {
        assert page.isInstance(bound);
        Writer writer = new StringWriter();
        try {
            template.process(bound, writer);
        }
        catch (TemplateException e) {
            throw new RuntimeException(e);
        }
        catch (IOException e) {
            throw new RuntimeException(e);
        }         
        respond.write(writer.toString());
      }

      @Override
      public <T extends Renderable> Set<T> collect(Class<T> clazz) {
        return ImmutableSet.of();
      }
    };
  }
 
  private Template getTemplate(Class<?> page, String content)
  {
    Configuration configuration = new Configuration();
    configuration.setTemplateExceptionHandler( new SitebricksTemplateExceptionHandler() );
     
    try {
      return new Template(page.getName(), new StringReader(content), configuration);
    }
    catch ( IOException e ) {
      throw new RuntimeException( e );
    }         
  }
 
  class SitebricksTemplateExceptionHandler implements TemplateExceptionHandler {
    public void handleTemplateException(TemplateException te, Environment env, Writer out)
      throws TemplateException {       
      // We intentionally do nothing here
    }
  }
}
TOP

Related Classes of com.google.sitebricks.compiler.template.freemarker.FreemarkerTemplateCompiler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.