/**
 * RuleTest.java
 * Created on May 14, 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 org.hibernate.HibernateException;
import org.hibernate.Session;

import com.tandbergtv.watchpoint.pmm.entities.Rule;
import com.tandbergtv.watchpoint.pmm.entities.RuleType;
import com.tandbergtv.watchpoint.pmm.entities.RuleParameter;

import junit.framework.TestCase;

/**
 * @author spuranik
 * 
 */
public class RuleTest extends TestCase {

	public void _testRuleCreation() {
		try {
			// create rule
			Rule r = new Rule();
			Date start = new Date();
			r.setStartDate(start);

			RuleType rt = new RuleType();
			Session session = HibernateUtil.getSessionFactory().getCurrentSession();
			session.beginTransaction();

			// get ruletype to be set for rule
			System.out.println("Loading ruletype");
			long rtId = 5;
			session.load(rt, rtId);
			r.setType(rt);
			System.out.println("Saving rule");

			// add params to this rule
			List<RuleParameter> params = new ArrayList<RuleParameter>();
			RuleParameter rp = new RuleParameter();
			rp.setValue("2");
			rp.setOrder(1);
			rp.setRule(r);

			params.add(rp);
			r.setParams(params);

			// save rule
			session.save(r);
			session.getTransaction().commit();
			HibernateUtil.getSessionFactory().close();

			System.out.println("Done");
		} catch (HibernateException e) {
			System.out.println(e.getMessage());
		}
	}

	public void testRuleRead() {
		try {
			Rule r = new Rule();
			Session session = HibernateUtil.getSessionFactory().getCurrentSession();
			session.beginTransaction();

			System.out.println("Loading ruletype");
			long rId = 4;
			session.load(r, rId);
			session.getTransaction().commit();
			HibernateUtil.getSessionFactory().close();

			System.out.println("Rule id: " + r.getId());
			System.out.println("RuleType Id: " + r.getType().getId());
			System.out.println("Rule Start date: " + r.getStartDate());
			List<RuleParameter> params = r.getParams();
			int i = 0;
			for (RuleParameter p : params) {
				System.out.println("Params[" + i + "] Id = " + p.getId());
				System.out.println("Params[" + i + "] Order = " + p.getOrder());
				System.out.println("Params[" + i + "] Type = " + p.getValue());
				System.out.println("Params[" + i + "] Parent Id = " + p.getRule().getId());
				i++;
			}
		} catch (HibernateException e) {
			System.out.println(e.getMessage());
		}

	}
}
