/**
 * TitleTemplateProvider.java
 * Created Apr 29, 2009
 * Copyright (c) Tandberg Television 2009
 */
package com.tandbergtv.watchpoint.pmm.title.template;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.ResourceBundle;

import org.apache.log4j.Logger;

import com.tandbergtv.workflow.core.TaskVariable;
import com.tandbergtv.workflow.core.WorkflowTemplate;
import com.tandbergtv.workflow.core.service.ServiceRegistry;
import com.tandbergtv.workflow.driver.service.ITemplateLoaderService;

/**
 * Default implementation of the {@link ITitleTemplateProvider} interface
 * 
 * @author Sahil Verma
 */
public class TitleTemplateProvider implements ITitleTemplateProvider {

	private Collection<String> variablenames;
	
	private static final Logger logger = Logger.getLogger(TitleTemplateProvider.class);
	
	/* (non-Javadoc)
	 * @see com.tandbergtv.watchpoint.pmm.title.template.ITitleTemplateProvider#getTemplates()
	 */
	@Override
	public Collection<WorkflowTemplate> getTemplates() {
		Collection<WorkflowTemplate> templates = new ArrayList<WorkflowTemplate>();
		ITemplateLoaderService service = ServiceRegistry.getDefault().lookup(ITemplateLoaderService.class);
		
		if (service == null)
			throw new RuntimeException("Don't know how to get templates");
		
		for (WorkflowTemplate template : service.getLatestTemplates()) {
			for (TaskVariable variable : template.getStartTaskVariables()) {
				String name = variable.getVariableName();
				
				if (this.variablenames.contains(name)) {
					templates.add(template);
					continue;
				}
			}
		}
		
		return templates;
	}

	/* (non-Javadoc)
	 * @see com.tandbergtv.workflow.core.service.Service#getServiceName()
	 */
	@Override
	public String getServiceName() {
		return "Title Template Provider";
	}

	/* (non-Javadoc)
	 * @see com.tandbergtv.workflow.core.service.ServiceLifecycle#start()
	 */
	@Override
	public void start() {
		ResourceBundle bundle
			= ResourceBundle.getBundle(this.getClass().getPackage().getName() + ".variable");
		
		this.variablenames = Arrays.asList(bundle.getString("name").split(","));
		
		logger.info(getServiceName() + " started");
	}

	/* (non-Javadoc)
	 * @see com.tandbergtv.workflow.core.service.ServiceLifecycle#stop()
	 */
	@Override
	public void stop() {
	}
}
