/**
 * ADITitleParser.java
 * Created Feb 5, 2007
 * Copyright (C) Tandberg Television 2007
 */
package com.tandbergtv.workflow.executionhandler.handlers;

import org.apache.log4j.Logger;
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;

import com.tandbergtv.workflow.util.adi.ADI11Parser;

/**
 * Extracts the title from an ADI 1.1 metadata file and writes it out into a process variable
 * 
 * @author Sahil Verma
 */
public class ADITitleParser implements ActionHandler {

	/**
	 * 
	 */
	private static final long serialVersionUID = 6709074445697694794L;

	private static final Logger logger = Logger.getLogger(ADITitleParser.class);
	
	private static final String METADATA_FILE_PATH_VARIABLE = "metadataFilePath";
	
	private static final String TITLE_BRIEF_VARIABLE = "titleBrief";
	
	/**
	 * Creates a ADITitleParser
	 */
	public ADITitleParser() {
		super();
	}

	/* (non-Javadoc)
	 * @see org.jbpm.graph.def.ActionHandler#execute(org.jbpm.graph.exe.ExecutionContext)
	 */
	public void execute(ExecutionContext ec) {
		String path = (String)ec.getVariable(METADATA_FILE_PATH_VARIABLE);
		
		if (path == null || path.trim().length() == 0)
			throw new ExecutionHandlerException(ec.getProcessInstance() + " ADI metadata file path is not defined");
		
		logger.debug(ec.getProcessInstance() + " path to ADI metadata file is " + path);
		
		ADI11Parser parser = ADI11Parser.newInstance();
		
		try {
			parser.load(path);
			String title = parser.getBriefTitle();
			logger.debug(ec.getProcessInstance() + ", read title from ADI metadata: " + title);
			ec.getContextInstance().createVariable(TITLE_BRIEF_VARIABLE, title);
		} catch (Exception e) {
			throw new ExecutionHandlerException("Failed to read title ", e);
		}
	}
}
