package com.fp.bpm.actions;

import com.fp.bpm.ActionExecutor;

/**
 * Enumeracion en la que se define las clases que resuleven o ejecutan una accion.
 * @author Jorge Vaca.
 * @version 2.1
 */
public enum ActionTypes {
	
	QUERY("query","com.fp.bpm.actions.QueryAction"),
	SAVE("save","com.fp.bpm.actions.SaveAction"),
	LOGON("logon","com.fp.bpm.actions.LogonAction");
	
	/**
	 * Codig de accion al cual se asocia la clase de ejecucion.
	 */
	private String actionCode;
	/**
	 * Clase especifica que procesa un codigo de accion. 
	 */
	private String actionClass;
	
	/**
	 * Crea una instancia de de ActionTypes.
	 * @param pActionCode	Codigo de accion.
	 * @param pActionClass	Clase que procesa la accion.. 
	 */
	private ActionTypes(String pActionCode,String pActionClass) {
		actionCode = pActionCode;
		actionClass = pActionClass;
	}
	
	/**
	 * Entraga un objeto ActionTypes dado el codigo de accion. 
	 * @param pActionCode	Código de accion. 
	 * @return	ActionTypes
	 * @throws Exception
	 */
	public static ActionTypes getActionTypes(String pActionCode) throws Exception{
		ActionTypes [] at = null; 
		at = ActionTypes.values();
		ActionTypes  actiontypes = null; 
		for(ActionTypes obj : at){
		  if(obj.actionCode.compareTo(pActionCode) == 0){
			  actiontypes =  obj;
		  }
		}
		return actiontypes;   
	}
	
	/**
	 * Entrega una instancia de la clase que maneja datos por cada accion. 
	 * @return	ActionExecutor
	 * @throws Exception
	 */
	public ActionExecutor getInstanceOfAction() throws Exception{
	    return (ActionExecutor)Class.forName(actionClass).newInstance();
	}
	
	/**
	 * Entrega el valor de actionCode.
	 * @return	String
	 * @throws Exception
	 */
	public String getActionCode() throws Exception {
		return actionCode;
	}
	
	/**
	 * Entrega el valor de actionClass.
	 * @return	String
	 * @throws Exception
	 */
	public String getActionClass() throws Exception {
		return actionClass;
	}
	
}
