package timertest;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class for Servlet: TimerTestServlet01
 */
 public class TimerTestServlet01 extends javax.servlet.http.HttpServlet
 	implements javax.servlet.Servlet {

	@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);

		//開始時刻firstTimeと実行間隔peroidをweb.xmlから取得する。
		String[] FirstTimeParts = {"04", "00", "00"};
		long peroid = 86400000;
		try {
			InitialContext context = new InitialContext();
			String firstTime = (String)context.lookup("java:comp/env/FirstTime");
			FirstTimeParts = firstTime.split(":");
			peroid = ((Long)context.lookup("java:comp/env/Period")).longValue();
		} catch (NamingException e) {
			throw new ServletException("The parameter 'FirstTime' or 'Period' can not be read.", e);
		}

		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(FirstTimeParts[0]));
		cal.set(Calendar.MINUTE, Integer.parseInt(FirstTimeParts[1]));
		cal.set(Calendar.SECOND, Integer.parseInt(FirstTimeParts[2]));
		//開始時刻が過去である場合には、開始時刻を一日遅らせる。
		if (cal.getTimeInMillis() < Calendar.getInstance().getTimeInMillis()) {
			cal.add(Calendar.DATE, 1);
		}
		Date firstTime = cal.getTime();

		Timer timer1 = new Timer();
		timer1.scheduleAtFixedRate(new Task01(config.getServletContext()), firstTime, peroid); 
		log("Task scheduled.  firstTime:" + firstTime + "  period:" + peroid + "[ms]");
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
		throws ServletException, IOException {
		PrintWriter out = resp.getWriter();
		out.println("Hello, world.");
	}
}