package org.jfox.tomcat;

import org.huihoo.jfox.system.ServiceSupport;
import org.apache.tomcat.startup.EmbededTomcat;

/**
 * @author <a href="mailto:young_yy@hotmail.com">Young Yang</a>
 */

public class IntegrateTomcat3 extends ServiceSupport {
  private EmbededTomcat tcAp;
  private String tomcatHome = null;
  private String argsforTomcat[] = null;

  public void doInit() throws Exception {
    tomcatHome = System.getProperties().getProperty("tomcat.home");
    if ((tomcatHome == null) || (tomcatHome.equalsIgnoreCase(""))) {
      logger.error("The tomcat.home isn't set during launching");
      throw new Exception("tomcat.home property is not set");
    }
    tcAp = new EmbeddedTomcat3();
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    tcAp.setCommonClassLoader(cl);
    tcAp.setContainerClassLoader(cl);
    tcAp.setAppsClassLoader(cl);
  }

  public void run() {
    try {
      tcAp.setArgs(argsforTomcat);
      tcAp.execute();
    }
    catch (Exception e) {
      logger.error(e);
    }
  }

  public void doStop() throws Exception {
    tcAp.stop();
  }

  protected void doStart() throws Exception {
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    run();
    Thread.currentThread().setContextClassLoader(cl);
  }

  protected void doDestroy() throws Exception {

  }

  class EmbeddedTomcat3 extends EmbededTomcat {
    public void debug(String s) {
      logger.info("EmbeddedTomcat: " + s);
    }

    public void debug(String s, Throwable t) {
//        System.out.println("EmbededTomcat: " + s);
//        if (t != null) t.printStackTrace();
      logger.info("EmbeddedTomcat: " + s, t);
    }
  }

}