Package com.firefly.mvc.web.support.view

Source Code of com.firefly.mvc.web.support.view.FFTViewHandle$Holder

package com.firefly.mvc.web.support.view;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.firefly.mvc.web.servlet.SystemHtmlPage;
import com.firefly.mvc.web.support.ViewHandle;
import com.firefly.template.Model;
import com.firefly.template.TemplateFactory;
import com.firefly.utils.log.Log;
import com.firefly.utils.log.LogFactory;

public class FFTViewHandle implements ViewHandle {

  private static Log log = LogFactory.getInstance().getLog("firefly-system");
  private TemplateFactory t;
  private boolean init = false;

  private FFTViewHandle() {

  }

  private static class Holder {
    private static FFTViewHandle instance = new FFTViewHandle();
  }

  public static FFTViewHandle getInstance() {
    return Holder.instance;
  }

  public FFTViewHandle init(String viewPath, String encoding) {
    if (!init) {
      log.info("template path {}", viewPath);
      com.firefly.template.Config config = new com.firefly.template.Config();
      config.setViewPath(viewPath);
      config.setCharset(encoding);
      t = new TemplateFactory(config).init();
      init = true;
    }
    return this;
  }

  @Override
  public void render(final HttpServletRequest request,
      HttpServletResponse response, Object view) throws ServletException,
      IOException {
    if (view instanceof String && view != null) {
      String ret = (String) view;
      log.debug("fft path [{}]", ret);
      com.firefly.template.View v = t.getView(ret);
      if (v == null)
        SystemHtmlPage.responseSystemPage(request, response, t
            .getConfig().getCharset(),
            HttpServletResponse.SC_NOT_FOUND, "template: " + ret
                + "not found");
      else {
        response.setCharacterEncoding(t.getConfig().getCharset());
        response.setHeader("Content-Type", "text/html; charset="
            + t.getConfig().getCharset());
        ServletOutputStream out = response.getOutputStream();
        Model model = new Model() {

          @SuppressWarnings("unchecked")
          @Override
          public void clear() {
            Enumeration<String> e = request.getAttributeNames();
            while (e.hasMoreElements()) {
              String name = e.nextElement();
              request.removeAttribute(name);
            }
          }

          @Override
          public Object get(String name) {
            return request.getAttribute(name);
          }

          @Override
          public void put(String name, Object o) {
            request.setAttribute(name, o);
          }

          @Override
          public void remove(String name) {
            request.removeAttribute(name);
          }
        };
        try {
          v.render(model, out);
        } finally {
          out.close();
        }
      }
    }
  }

}
TOP

Related Classes of com.firefly.mvc.web.support.view.FFTViewHandle$Holder

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.