Package cn.bran.japid.template

Source Code of cn.bran.japid.template.JapidTemplateBaseWithStringBundler

package cn.bran.japid.template;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.TreeMap;

import cn.bran.japid.util.StringBundler;

public abstract class JapidTemplateBaseWithStringBundler {

  StringBundler out;
  protected Map<String, String> headers = new TreeMap<String, String>();
  {
    headers.put("Content-Type", "text/html; charset=utf-8");
  }

  /**
   * to keep track of all the action invocations by #{invoke} tag
   */
  protected TreeMap<Integer, cn.bran.japid.template.ActionRunner> actionRunners = new TreeMap<Integer, cn.bran.japid.template.ActionRunner>();

  public TreeMap<Integer, cn.bran.japid.template.ActionRunner> getActionRunners() {
    return actionRunners;
  }

  public void setActionRunners(TreeMap<Integer, cn.bran.japid.template.ActionRunner> actionRunners) {
    this.actionRunners = actionRunners;
  }

  public void setOut(StringBundler out) {
    this.out = out;
  }

  protected StringBundler getOut() {
    return out;
  }
 
//  public JapidTemplateBase() {
//   
//  };

  public JapidTemplateBaseWithStringBundler(int capacity) {
    this.out = new StringBundler(capacity);
  }

  // don't use it since it will lead to new instance of stringencoder
  Charset UTF8 = Charset.forName("UTF-8");

  final protected void p(String s) {
    writeString(s);
  }

  final protected void pln(String s) {
    writeString(s);
    out.append('\n');
  }

  /**
   * @param s
   * @throws IOException
   * @throws UnsupportedEncodingException
   */
  private void writeString(String s) {
    // ByteBuffer bb = StringUtils.encodeUTF8(s);
    // out.write(bb.array(), 0, bb.position());
    // ok my code is slower in large trunk of data
    if (s != null && !s.isEmpty())
      out.append(s);
  }

  // final protected void pln(byte[] ba) {
  // try {
  // out.write(ba);
  // out.write('\n');
  // } catch (IOException e) {
  // throw new RuntimeException(e);
  // }
  // }

  final protected void p(Object s) {
    if (s != null) {
      writeString(s.toString());
      // out.append(s);
    }
  }

  final protected void pln(Object s) {
    if (s != null)
      writeString(s.toString());
    pln();
  }

  final protected void pln() {
    out.append('\n');
  }

  /**
   * The template pattern to implement the template/layout relationship. Clients call a template's
   * render(), which store params in fields and calls in super class's layout, which does the whole page
   * layout and calls back child's doLayout to get the child content.
   */
  protected void layout() {
    doLayout();
  }

  protected abstract void doLayout();

  static protected byte[] getBytes(String src) {
    if (src == null || src.length() == 0)
      return new byte[] {};

    try {
      return src.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
      throw new RuntimeException(e);
    }
  }

  @Override
  public String toString() {
    return this.out.toString();
  }
}
TOP

Related Classes of cn.bran.japid.template.JapidTemplateBaseWithStringBundler

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.