/**
 * GetTitleIdMessageHandler.java
 * Created on Sep 22, 2008
 * (C) Copyright TANDBERG Television Ltd.
 */
package com.tandbergtv.watchpoint.pmm.communication.handlers;

import java.io.File;
import java.util.Collection;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import com.tandbergtv.watchpoint.communication.Util;
import com.tandbergtv.watchpoint.pmm.communication.MessageHandler;
import com.tandbergtv.watchpoint.pmm.entities.Title;
import com.tandbergtv.watchpoint.pmm.title.ITitleService;
import com.tandbergtv.workflow.core.service.ServiceRegistry;
import com.tandbergtv.workflow.message.WorkflowMessage;
import com.tandbergtv.workflow.message.WorkflowMessage.MessageType;

/**
 * @author Vlada Jakobac
 * 
 */
public class GetTitleIdsMessageHandler implements MessageHandler {

	/* template parameters */
	private static final String METADATA_PATH = "metadataPath";
	private static final String TITLE_IDS = "titleIds";
	private static final String TITLE_ID_DELIMITER = ",";

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.tandbergtv.watchpoint.pmm.communication.MessageHandler#handleMessage
	 * (com.tandbergtv.workflow.message.WorkflowMessage)
	 */
	public WorkflowMessage handleMessage(WorkflowMessage message)
			throws Exception {
		/* prepare response */
		WorkflowMessage response = new WorkflowMessage(message.getMessageUID(),
				message.getKey(), MessageType.ack);

		/* validate input */
		Util.validateRequired(message, METADATA_PATH);

		/* extract info and prepare info for getting the title id */
		String metadataFilePath = Util.getStringValueTrimmed(message,
				METADATA_PATH);

		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder docBuilder = factory.newDocumentBuilder();
		Document metadata = docBuilder.parse(new File(metadataFilePath));

		/* get title id */
		ServiceRegistry defaultServiceRegistry = ServiceRegistry.getDefault();
		ITitleService titleService = defaultServiceRegistry
				.lookup(ITitleService.class);

		Collection<Title> titles = titleService.getTitle(metadata);
		StringBuilder sb = new StringBuilder();
		for (Title t : titles) {
			if (sb.length() > 0) {
				sb.append(TITLE_ID_DELIMITER);
			}
			sb.append(String.valueOf(t.getId()));
		}
		response.putValue(TITLE_IDS, sb.toString());
		return response;
	}
}
