/**
 * TitleReferenceEvaluator.java
 * Created on Jun 3, 2008
 * (C) Copyright TANDBERG Television Ltd.
 */
package com.tandbergtv.watchpoint.pmm.job.unitTests;

import junit.framework.TestCase;

import com.tandbergtv.watchpoint.pmm.job.referenceEvaluator.ParameterReferencePath;
import com.tandbergtv.watchpoint.pmm.job.referenceEvaluator.ReferenceEvaluator;
import com.tandbergtv.watchpoint.pmm.job.referenceEvaluator.TitleReferenceEvaluator;
import com.tandbergtv.watchpoint.pmm.title.TitleActivator;

/**
 * NOTE: To run this test 'specsDirPath' in SpecificationManager's loadSpecs 
 * needs to be changed because it looks up the application properties to get the 
 * specs dir. 
 * 
 * @author spuranik
 */
public class TitleReferenceEvaluatorTest extends TestCase {

	private TitleActivator activator;
	
	/*
	 * (non-Javadoc)
	 * 
	 * @see junit.framework.TestCase#setUp()
	 */
	@Override
	protected void setUp() throws Exception {
		try {
			activator = new TitleActivator();
			activator.start();			
		} catch (RuntimeException e) {
			System.out.println("Error initializing: " + e.toString());
		}
		super.setUp();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see junit.framework.TestCase#tearDown()
	 */
	@Override
	protected void tearDown() throws Exception {
		try {
			activator.stop();
		} catch (RuntimeException e) {
			System.out.println("Error in clean up: " + e.toString());
		}
		super.tearDown();
	}

	@SuppressWarnings("unchecked")
	@Deprecated
	public void testJobParameterEvaluation() {
		/*
		// create a title of ADI spec
		Title rootTitle = new Title("CableLabsVOD1.1");
		rootTitle.setId(1L);
		rootTitle.setExternalLocation("01-02");
		rootTitle.setName("Package");
		TitleMetadata rootmd = new TitleMetadata("licStartDate", "06-04-2008");
		rootTitle.addMetadata(rootmd);

		Title title = new Title("CableLabsVOD1.1");
		title.setId(2L);
		title.setName("Title");
		title.setParent(rootTitle);		

		Title movie = new Title("CableLabsVOD1.1");
		movie.setId(3L);
		movie.setName("Preview");
		movie.setParent(title);
		TitleMetadata md1 = new TitleMetadata("runtime", "12");
		movie.addMetadata(md1);

		title.addChild(movie);
		rootTitle.addChild(title);

		// build a info object which contains job params and contextid		
		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("Trailer File Path");
		p3.setValue("$Title.CableLabsVOD1.1.Trailer File Path");
		jobParams.add(p3);

		JobParameter p4 = new JobParameter();
		p4.setName("Package License Start Date");
		p4.setValue("$Title.CableLabsVOD1.1.Package License Start Date");
		jobParams.add(p4);

		JobParameter p5 = new JobParameter();
		p5.setName("Title Name");
		p5.setValue("$Title.Name");
		jobParams.add(p5);

		JobParameter p6 = new JobParameter();
		p6.setName("Title External Source Path");
		p6.setValue("$Title.External Source Path");
		jobParams.add(p6);
		
		info.put(JobScheduleInfoConstants.CONTEXTID, 1L);
		info.put(JobScheduleInfoConstants.JOB_PARAMETERS, jobParams);

		ITitleService titleService = ServiceRegistry.getDefault().lookup(ITitleService.class);		
		ISpecificationManager specManager = ServiceRegistry.getDefault().lookup(ISpecificationManager.class);
		ReferenceEvaluator titleEvaluator = new TitleReferenceEvaluator(titleService, specManager);

		titleEvaluator.evaluate(rootTitle, 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());
		}
		*/
	}

	public void _testGettingPathForRuleParameter() {
		String ruleParameterValue = "$Title Metadata.CableLabsVOD11.Package License End Date";
		// String ruleParameterValue = "$Title Non-Metadata.Id";
		// String ruleParameterValue = "$Schedule.PitchDate";
		// String ruleParameterValue = "sometext";

		ReferenceEvaluator titleEvaluator = new TitleReferenceEvaluator();
		
		ParameterReferencePath pathForProperty = titleEvaluator.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);
		}
	}
}
