/**
 * ScheduleReferenceEvaluator.java
 * Created on Jun 4, 2008
 * (C) Copyright TANDBERG Television Ltd.
 */
package com.tandbergtv.watchpoint.pmm.job.unitTests;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import junit.framework.TestCase;

import com.tandbergtv.watchpoint.pmm.entities.DistributionSchedule;
import com.tandbergtv.watchpoint.pmm.entities.JobParameter;
import com.tandbergtv.watchpoint.pmm.entities.Planner;
import com.tandbergtv.watchpoint.pmm.job.referenceEvaluator.ParameterReferencePath;
import com.tandbergtv.watchpoint.pmm.job.referenceEvaluator.ScheduleReferenceEvaluator;
import com.tandbergtv.watchpoint.pmm.job.util.JobScheduleInfoConstants;
import com.tandbergtv.watchpoint.pmm.title.conf.ISpecificationManager;
import com.tandbergtv.workflow.core.service.ServiceRegistry;

/**
 * @author spuranik
 * 
 */
public class ScheduleReferenceEvaluatorTest extends TestCase {

	/*
	 * (non-Javadoc)
	 * 
	 * @see junit.framework.TestCase#setUp()
	 */
	@Override
	protected void setUp() throws Exception {
		try {
			ISpecificationManager mgr = ServiceRegistry.getDefault().lookup(ISpecificationManager.class);
			mgr.start();
		} catch (RuntimeException e) {
			System.out.println(e.getMessage());
		}
		super.setUp();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see junit.framework.TestCase#tearDown()
	 */
	@Override
	protected void tearDown() throws Exception {
		try {
			ISpecificationManager mgr = ServiceRegistry.getDefault().lookup(ISpecificationManager.class);
			mgr.stop();
		} catch (RuntimeException e) {
			System.out.println(e.getMessage());
		}
		super.tearDown();
	}

	public void _testGettingPathForRuleParameter() {
		String ruleParameterValue = "$Planner.Date";
		// String ruleParameterValue = "$Schedule.PitchDate";
		// String ruleParameterValue = "$Schedule.Id";
		// String ruleParameterValue = "$Title Non-Metadata.Id";
		// String ruleParameterValue = "sometext";

		ScheduleReferenceEvaluator evaluator = new ScheduleReferenceEvaluator();
		ParameterReferencePath pathForProperty = evaluator.getPath(ruleParameterValue);

		if (pathForProperty != null) {
			System.out.println("Parameter Reference: " + pathForProperty.getParameterReference());
			System.out.println("Name for: " + ruleParameterValue + " is: "
					+ pathForProperty.getName());
			System.out.println("Is " + ruleParameterValue + " metadata?: "
					+ pathForProperty.getIsMetadata());
			System.out.println("Property field for: " + ruleParameterValue + " is: "
					+ pathForProperty.getPropertyField());
		} else {
			System.out.println("Path not found for: " + ruleParameterValue);
		}
	}

	@SuppressWarnings("unchecked")
	public void _testGettingPitchScheduleRef() {
		DistributionSchedule schedule = new DistributionSchedule(3L, 1L, new Date());

		Map<String, Object> info = new HashMap<String, Object>();
		List<JobParameter> jobParams = new ArrayList<JobParameter>();

		JobParameter p1 = new JobParameter();
		p1.setName("ProviderId");
		p1.setValue("$Partner.ProviderId");
		jobParams.add(p1);

		JobParameter p2 = new JobParameter();
		p2.setName("SomeText");
		p2.setValue("PlainText");
		jobParams.add(p2);

		JobParameter p3 = new JobParameter();
		p3.setName("Title Id");
		p3.setValue("$Title.Id");
		jobParams.add(p3);

		JobParameter p4 = new JobParameter();
		p4.setName("Schedule Date");
		p4.setValue("$Schedule.Date");
		jobParams.add(p4);

		info.put(JobScheduleInfoConstants.CONTEXTID, 1L);
		info.put(JobScheduleInfoConstants.JOB_PARAMETERS, jobParams);

		ScheduleReferenceEvaluator evaluator = new ScheduleReferenceEvaluator();
		evaluator.evaluate(schedule, info);

		List<JobParameter> evaluatedParams = (List<JobParameter>) info
				.get(JobScheduleInfoConstants.JOB_PARAMETERS);
		for (JobParameter parameter : evaluatedParams) {
			System.out.println("Parameter Name: " + parameter.getName());
			System.out.println("Parameter Value: " + parameter.getValue());
		}
	}

	@SuppressWarnings("unchecked")
	public void testGettingPlannerRef() {
		Planner planner = new Planner(6L, new Date());

		Map<String, Object> info = new HashMap<String, Object>();
		List<JobParameter> jobParams = new ArrayList<JobParameter>();

		JobParameter p1 = new JobParameter();
		p1.setName("ProviderId");
		p1.setValue("$Partner.ProviderId");
		jobParams.add(p1);

		JobParameter p2 = new JobParameter();
		p2.setName("SomeText");
		p2.setValue("PlainText");
		jobParams.add(p2);

		JobParameter p3 = new JobParameter();
		p3.setName("Title Id");
		p3.setValue("$Title.Id");
		jobParams.add(p3);

		JobParameter p4 = new JobParameter();
		p4.setName("Planner Date");
		p4.setValue("$Planner.Date");
		jobParams.add(p4);

		info.put(JobScheduleInfoConstants.CONTEXTID, 1L);
		info.put(JobScheduleInfoConstants.JOB_PARAMETERS, jobParams);

		ScheduleReferenceEvaluator evaluator = new ScheduleReferenceEvaluator();
		evaluator.evaluate(planner, info);

		List<JobParameter> evaluatedParams = (List<JobParameter>) info
				.get(JobScheduleInfoConstants.JOB_PARAMETERS);
		for (JobParameter parameter : evaluatedParams) {
			System.out.println("Parameter Name: " + parameter.getName());
			System.out.println("Parameter Value: " + parameter.getValue());
		}
	}
}
