/**
 * ParameterReferenceHelperTest.java
 * Created on May 20, 2008
 * (C) Copyright TANDBERG Television Ltd.
 */
package com.tandbergtv.watchpoint.pmm.job.unitTests;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import junit.framework.TestCase;

import com.tandbergtv.watchpoint.pmm.entities.EntityType;
import com.tandbergtv.watchpoint.pmm.job.conf.ParameterReferenceFileParser;
import com.tandbergtv.watchpoint.pmm.job.conf.ParameterReferenceGroup;
import com.tandbergtv.watchpoint.pmm.job.conf.ParameterReferenceItem;
import com.tandbergtv.watchpoint.pmm.title.TitleActivator;

/**
 * @author spuranik
 * 
 */
public class ParameterReferenceFileParserTest extends TestCase {

	private TitleActivator titleActivator;
	
	/* (non-Javadoc)
	 * @see junit.framework.TestCase#setUp()
	 */
	@Override
	protected void setUp() throws Exception {
		
		titleActivator = new TitleActivator();
		titleActivator.start();
		super.setUp();
	}

	/* (non-Javadoc)
	 * @see junit.framework.TestCase#tearDown()
	 */
	@Override
	protected void tearDown() throws Exception {
		
		titleActivator.stop();
		super.tearDown();
	}

	public void testRuleMenuReading() {
		try {
			ParameterReferenceFileParser helper = ParameterReferenceFileParser.getInstance();

			Map<EntityType, List<ParameterReferenceGroup>> rules = helper.getRules();
			Iterator<EntityType> keys = rules.keySet().iterator();
			while (keys.hasNext()) {
				EntityType type = keys.next();
				System.out.println("Entity type: " + type.toString());
				List<ParameterReferenceGroup> groups = rules.get(type);
				printGroups(groups);
			}
		} catch (Exception e) {
			System.out.println("Error while getting rule menus: " + e.toString());
		}
	}

	public void _testParameterMenuReading() {
		try {
			ParameterReferenceFileParser helper = ParameterReferenceFileParser.getInstance();

			Map<EntityType, List<ParameterReferenceGroup>> parameters = helper.getParameters();
			Iterator<EntityType> keys = parameters.keySet().iterator();
			while (keys.hasNext()) {
				EntityType type = keys.next();
				System.out.println("Entity type: " + type.toString());
				List<ParameterReferenceGroup> groups = parameters.get(type);
				printGroups(groups);
			}
		} catch (Exception e) {
			System.out.println("Error while getting parameter menus: " + e.toString());
		}
	}

	public void _testGettingRulesForEntity() {
		try {
			ParameterReferenceFileParser helper = ParameterReferenceFileParser.getInstance();
			EntityType type = EntityType.toType("Partner");
			List<ParameterReferenceGroup> ruleOptions = helper.getRules(type);
			for (ParameterReferenceGroup group : ruleOptions) {
				printGroup(group);
			}
		} catch (Exception e) {
			System.out.println(e.toString());
		}

	}
	
	public void _testGettingParametersForEntity() {
		try {
			ParameterReferenceFileParser helper = ParameterReferenceFileParser.getInstance();
			EntityType type = EntityType.toType("Partner");
			List<ParameterReferenceGroup> paramOptions = helper.getParameters(type);
			for (ParameterReferenceGroup group : paramOptions) {
				printGroup(group);
			}
		} catch (Exception e) {
			System.out.println(e.toString());
		}
	}
	
	private void printGroups(List<ParameterReferenceGroup> groups) {
		for (ParameterReferenceGroup g : groups) {
			printGroup(g);
		}
	}

	private void printGroup(ParameterReferenceGroup group) {
		System.out.println("Group Name: " + group.getName());
		System.out.println("Group Callback: " + group.getCallback());
		System.out.println("Group Type: " + group.getType());

		List<ParameterReferenceItem> items = group.getItems();
		for (ParameterReferenceItem item : items) {
			System.out.println("###Items###");
			printItem(item);
		}

	}

	private void printItem(ParameterReferenceItem item) {
		if (item.getClass().equals(ParameterReferenceGroup.class)) {
			printGroup((ParameterReferenceGroup) item);
		} else {
			System.out.println("Item Class: " + item.getClass());
			System.out.println("Item Name: " + item.getName());
			System.out.println("Item Value: " + item.getValue());
			System.out.println("Item Parent Name: " + item.getParent().getName());
		}
	}
	
	public void _testGettingParamsWithTitles()
	{
		try {
			ParameterReferenceFileParser helper = ParameterReferenceFileParser.getInstance();
			EntityType type = EntityType.toType("Partner");
			List<ParameterReferenceGroup> paramOptions = helper.getParameters(type, false);
			for (ParameterReferenceGroup group : paramOptions) {
				printGroup(group);
			}
		} catch (Exception e) {
			System.out.println(e.toString());
		}
	}
}
