/**
 * DailyTimerTest.java
 * Created on Jun 9, 2008
 * (C) Copyright TANDBERG Television Ltd.
 */
package com.tandbergtv.watchpoint.pmm.job.unitTests;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import junit.framework.TestCase;

import com.tandbergtv.watchpoint.pmm.entities.RuleParameter;
import com.tandbergtv.watchpoint.pmm.entities.RuleParameterDataType;
import com.tandbergtv.watchpoint.pmm.entities.RuleTypeParameter;
import com.tandbergtv.watchpoint.pmm.job.timers.Daily;
import com.tandbergtv.watchpoint.pmm.job.timers.EveryNDays;
import com.tandbergtv.watchpoint.pmm.job.timers.OnDate;
import com.tandbergtv.watchpoint.pmm.job.timers.OnDayEveryNWeeks;
import com.tandbergtv.watchpoint.pmm.job.timers.TimerResult;

/**
 * @author spuranik
 * 
 */
public class TimerTest extends TestCase {

	public void testDailyTimer() {
		Daily d = new Daily();
		List<RuleTypeParameter> ruleTypeParams = new ArrayList<RuleTypeParameter>();
		RuleTypeParameter rp = new RuleTypeParameter();
		rp.setType(RuleParameterDataType.TIME);
		rp.setOrder(1);
		ruleTypeParams.add(rp);

		List<RuleParameter> params = new ArrayList<RuleParameter>();
		RuleParameter p = new RuleParameter();
		p.setOrder(1);
		p.setValue("7:15 pm");
		params.add(p);

		Date startDate = new Date();
		TimerResult result = (TimerResult) d.getTime(ruleTypeParams, params, startDate);
		// String time = result.getTimeExpression();
		// Date jobStartDate = result.getStartDate();
		String startTime = result.getStartDate().toString();
		boolean isPeriodic = result.getIsPeriodic();
		long interval = result.getRepeatInterval();

		System.out.println("Daily start time : " + startTime + " isPeriodic: " + isPeriodic
				+ " interval: " + interval);
	}

	public void testOnDateTimer() {
		OnDate d = new OnDate();

		List<RuleTypeParameter> ruleTypeParams = new ArrayList<RuleTypeParameter>();
		RuleTypeParameter rp1 = new RuleTypeParameter();
		rp1.setOrder(1);
		rp1.setType(RuleParameterDataType.DATE);
		ruleTypeParams.add(rp1);
		RuleTypeParameter rp2 = new RuleTypeParameter();
		rp2.setOrder(2);
		rp2.setType(RuleParameterDataType.TIME);
		ruleTypeParams.add(rp2);

		List<RuleParameter> params = new ArrayList<RuleParameter>();
		RuleParameter p1 = new RuleParameter();
		p1.setOrder(1);
		p1.setValue("2008-07-03");
		params.add(p1);
		RuleParameter p2 = new RuleParameter();
		p2.setOrder(2);
		p2.setValue("1:13 am");
		params.add(p2);

		Date startDate = new Date();
		TimerResult result = (TimerResult) d.getTime(ruleTypeParams, params, startDate);
		Date jobStartDate = result.getStartDate();
		System.out.println("OnDate startDate: " + jobStartDate.toString());
	}

	public void testEveryNDaysTimer() {
		EveryNDays d = new EveryNDays();

		List<RuleTypeParameter> ruleTypeParams = new ArrayList<RuleTypeParameter>();
		RuleTypeParameter rp1 = new RuleTypeParameter();
		rp1.setOrder(1);
		rp1.setType(RuleParameterDataType.INTEGER);
		ruleTypeParams.add(rp1);
		RuleTypeParameter rp2 = new RuleTypeParameter();
		rp2.setOrder(2);
		rp2.setType(RuleParameterDataType.TIME);
		ruleTypeParams.add(rp2);

		List<RuleParameter> params = new ArrayList<RuleParameter>();
		RuleParameter p1 = new RuleParameter();
		p1.setOrder(1);
		p1.setValue("3");
		params.add(p1);
		RuleParameter p2 = new RuleParameter();
		p2.setOrder(2);
		p2.setValue("4:23 pm");
		params.add(p2);

		Date startDate = new Date();
		TimerResult result = (TimerResult) d.getTime(ruleTypeParams, params, startDate);
		Date jobStartDate = result.getStartDate();
		System.out.println("EveryNDays startDate: " + jobStartDate.toString() + " periodicity: "
				+ result.getRepeatInterval());
	}

	public void testOnDayEveryNWeeks() {
		OnDayEveryNWeeks d = new OnDayEveryNWeeks();

		List<RuleTypeParameter> ruleTypeParams = new ArrayList<RuleTypeParameter>();
		RuleTypeParameter rp1 = new RuleTypeParameter();
		rp1.setOrder(1);
		rp1.setType(RuleParameterDataType.DAY);
		ruleTypeParams.add(rp1);
		RuleTypeParameter rp2 = new RuleTypeParameter();
		rp2.setOrder(2);
		rp2.setType(RuleParameterDataType.INTEGER);
		ruleTypeParams.add(rp2);
		RuleTypeParameter rp3 = new RuleTypeParameter();
		rp3.setOrder(3);
		rp3.setType(RuleParameterDataType.TIME);
		ruleTypeParams.add(rp3);

		List<RuleParameter> params = new ArrayList<RuleParameter>();
		RuleParameter p1 = new RuleParameter();
		p1.setOrder(1);
		p1.setValue("TUESDAY");
		params.add(p1);
		RuleParameter p2 = new RuleParameter();
		p2.setOrder(2);
		p2.setValue("1");
		params.add(p2);
		RuleParameter p3 = new RuleParameter();
		p3.setOrder(3);
		p3.setValue("12:00 pm");
		params.add(p3);

		Date startDate = new Date();
		TimerResult result = (TimerResult) d.getTime(ruleTypeParams, params, startDate);
		Date jobStartDate = result.getStartDate();
		System.out.println("OnDayEveryNWeeks startDate: " + jobStartDate.toString()
				+ " periodicity: " + result.getRepeatInterval());
	}
}
