package es.ejie.frmk.infraestructura.internacionalizacion;

import java.util.List;
import java.util.Properties;

import javax.servlet.jsp.PageContext;
/**
 * @version 1.0
 * Fecha: 18-dic-03
 *
 * Esta interface lo implementará la clase Gestora de Mensajes e i18n. 
 * Ofrece el API publico del componente
*/
public interface Q70GestorMensajes {
	/**
	 * Metodo que devuelve el mensaje asociado a un codigo en el lenguaje
	 * especificado y realizando la búsqueda del mensaje en la lista de ámbitos
	 * posibles en la que puede localizarse. La búsqueda finaliza cuando el retorno es diferente 
	 * del code del mensaje, es decir, cuando se ha encontrado el literal asociado al key en alguno 
	 * de los ámbitos de la lista.
	 * 
	 * @param aListaScope lista de ámbitos posibles en los que localizar el mensaje
	 * @param code key con el que identificar el mensaje ascociado
	 * @param languaje idioma
	 * @param args Array de textos a intercalar en el mensaje
	 * @return Literal correspondiente a la key solicitada
	 * 
	 * @throws Q70GestorMensajesException
	 */
	public String getMessage(List aListaScope, String code, String languaje, Object[] args) throws Q70GestorMensajesException;
	
	/**
	 * Metodo que devuelve el mensaje asociado a un codigo en el lenguaje
	 * especificado.
	 * 
	 * @deprecated Usar este metodo de Struts en lugar de realizar esta llamada: 
	 * 'RequestUtils.message(pageContext, bundle, localeKey, key, args);'";
	 * 
	 * @param pageContext contexto del custom-tag
	 * @param bundle Ambito donde buscar el literal
	 * @param localeKey Identificador del idioma
	 * @param key Clave codigo deseado
	 * @param args Array de subcadenas de composición del mensaje
	 * @return Literal correspondiente a la key solicitada
	 * 
	 * @throws Q70GestorMensajesException
	 */
	public String getMessage(PageContext pageContext, String bundle,String localeKey, String key, Object[] args)
		throws Q70GestorMensajesException;
	
	/**
	 * Metodo que devuelve el mensaje asociado a un codigo en el lenguaje
	 * especificado
	 * 
	 * @param aScope Ambito de busqueda del mensaje (nombre de tabla, fichero propiedades)
	 * @param key Clave codigo deseado
	 * @param localeKey Identificador del idioma
	 * @param args Array de subcadenas de composición del mensaje
	 * 
	 * @return Literal correspondiente a la key solicitada
	 * @throws Q70GestorMensajesException
	 */
	public String getMessage(String aScope, String key, String localeKey, Object[] args)
		throws Q70GestorMensajesException;
	
	/**
	 * Metodo que devuelve el mensaje asociado a un codigo en el lenguaje
	 * especificado
	 * 
	 * @param aScope Ambito de busqueda del mensaje (nombre de tabla, fichero propiedades)
	 * @param key Clave codigo deseado
	 * @param localeKey Identificador del idioma
	 * 
	 * @return Literal correspondiente a la key solicitada
	 * @throws Q70GestorMensajesException
	 */
	public String getMessage(String aScope, String key, String localeKey)
		throws Q70GestorMensajesException;			

	/**
	 * Metodo que devuelve el mensaje en el lenguaje de la propiedad user.language 
	 * y del ámbito de Geremua. 
	 * 
	 * @param key Clave codigo deseado
	 * 
	 * @return Literal correspondiente a la key solicitada
	 */
	public String getMessage(String key);

	/**
	 * Metodo que devuelve el mensaje en el lenguaje de la propiedad user.language 
	 * y del ámbito de Geremua. 
	 * 
	 * @param key Clave codigo deseado
	 * @param args Array de subcadenas de composición del mensaje
	 * 
	 * @return Literal correspondiente a la key solicitada
	 */
	public String getMessage(String key, Object[] args);

	/**
	 * Metodo que devuelve el mensaje en el lenguaje de la propiedad user.language 
	 * y del ámbito de Geremua. 
	 * 
	 * @param key Clave codigo deseado
	 * @param languaje idioma
	 * @param args Array de subcadenas de composición del mensaje
	 * 
	 * @return Literal correspondiente a la key solicitada
	 */
	public String getMessage(String key, String languaje, Object[] args);
							
	/**
	 * Metodo que devuelve el fichero de propiedades asociado al ambito e 
	 * idioma especificados
	 *
	 * @param aScope Ambito de busqueda del mensaje (nombre de tabla, fichero propiedades)
	 * @param languaje idioma
	 * 
	 * @return Propiedades del fichero especificado
	 * @throws Q70GestorMensajesException
	 */
	public Properties getProperties(String aScope, String language)
		throws Q70GestorMensajesException;
	
	/**
	 * Metodo que devuelve el fichero de propiedades de Geremua
	 * 
	 * @param languaje idioma
	 * 
	 * @return Propiedades del fichero especificado
	 * @throws Q70GestorMensajesException
	 */
	public Properties getProperties(String language)
		throws Q70GestorMensajesException;
}
