/**
 * GetContextIdMessageHandler.java
 * Created on Sep 19, 2008
 * (C) Copyright TANDBERG Television Ltd.
 */
package com.tandbergtv.watchpoint.pmm.communication.handlers;

import java.io.Serializable;

import com.tandbergtv.watchpoint.communication.Util;
import com.tandbergtv.watchpoint.pmm.communication.MessageHandler;
import com.tandbergtv.watchpoint.pmm.entities.IContainer;
import com.tandbergtv.workflow.core.service.ServiceRegistry;
import com.tandbergtv.workflow.core.service.cache.ICacheService;
import com.tandbergtv.workflow.message.WorkflowMessage;
import com.tandbergtv.workflow.message.WorkflowMessage.MessageType;

/**
 * @author Vlada Jakobac
 *
 */
public class GetContextIdMessageHandler implements MessageHandler {

	private static final String LOOKUP_KEY = "lookupKey";
	private static String CONTAINER_CACHE_SERVICE_NAME = "Container Cache";
	private static final String CONTEXT_ID = "contextId";
	
	/* (non-Javadoc)
	 * @see com.tandbergtv.watchpoint.pmm.communication.MessageHandler#handleMessage(com.tandbergtv.workflow.message.WorkflowMessage)
	 */
	@SuppressWarnings("unchecked")
	public WorkflowMessage handleMessage(WorkflowMessage message)
			throws Exception {
		Util.validateRequired(message, LOOKUP_KEY);

		String lookupKey = Util.getStringValueTrimmed(message, LOOKUP_KEY);

		String contextId = "";
		ICacheService<IContainer> containerCache = (ICacheService<IContainer>) ServiceRegistry
		.getDefault().lookup(CONTAINER_CACHE_SERVICE_NAME);
		for (Serializable key : containerCache.getKeys()) {
			IContainer container = containerCache.get(key);
			
			if (container.getContainerLookupKey() != null && 
					container.getContainerLookupKey().trim().equals(lookupKey)){
				contextId = Long.toString(container.getContainerContextId());
				break;
			}							
		}
		
		WorkflowMessage response = new WorkflowMessage(message.getMessageUID(), message.getKey(),
				MessageType.ack);
		response.putValue(CONTEXT_ID, contextId);
		
		return response;
	}

}
