package com.ibeetl.admin.core.gen;

import java.io.IOException;

import org.beetl.core.Configuration;
import org.beetl.core.Context;
import org.beetl.core.Function;
import org.beetl.core.GroupTemplate;
import org.beetl.core.resource.ClasspathResourceLoader;

import com.ibeetl.admin.core.util.beetl.VerifyForamtFunction;

public abstract class BaseTarget implements Target {

  protected GroupTemplate gt = null;
  protected String urlBase = null;

  @Override
  public void flush(AutoGen gen, String content) {
    // TODO Auto-generated method stub

  }

  @Override
  public GroupTemplate getGroupTemplate() {
    if (gt != null) {
      return gt;
    }

    ClassLoader loader = Thread.currentThread().getContextClassLoader();
    ClasspathResourceLoader rs = new ClasspathResourceLoader(loader, "codeTemplate");
    try {

      Configuration cfg = Configuration.defaultConfiguration();
      cfg.setStatementStart("@");
      cfg.setStatementEnd(null);

      cfg.setHtmlTagSupport(false);
      cfg.build();
      gt = new GroupTemplate(rs, cfg);
      gt.registerFunction("verifyFormat", new VerifyForamtFunction());
      gt.registerFunction(
          "upperFirst",
          new Function() {

            @Override
            public Object call(Object[] paras, Context ctx) {
              String s = (String) paras[0];
              return upperFirst(s);
            }
          });
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
    return gt;
  }

  public static String upperFirst(String s) {
    if (Character.isUpperCase(s.charAt(0))) return s;
    else
      return (new StringBuilder())
          .append(Character.toUpperCase(s.charAt(0)))
          .append(s.substring(1))
          .toString();
  }

  public GroupTemplate getGt() {
    return gt;
  }

  public void setGt(GroupTemplate gt) {
    this.gt = gt;
  }

  public String getUrlBase() {
    return urlBase;
  }

  public void setUrlBase(String urlBase) {
    this.urlBase = urlBase;
  }
}
