package es.ejie.frmk.infraestructura.seguridad;

import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;

import n38a.exe.N38APISesion;
import n38c.exe.N38API;

import org.w3c.dom.Document;

import es.ejie.frmk.infraestructura.utilidades.excepciones.Q70UtilidadesExcepcion;
import es.ejie.frmk.infraestructura.utilidades.general.Q70UtilidadesGenerales;
import es.ejie.frmk.infraestructura.utilidades.xml.Q70UtilidadesXML;

/**
 * La clase encapsula la información de la sesión de aplicación obtenida mediante una invocación
 * a  <code>n38APISesionCrearApp</code> del API de XL-Nets.
 * <p>
 * Implementa el interface <code>Q70InformacionSeguridadInterface</code>, que proporciona el API para 
 * interrogar por los parámetros de la información de sesion mantenida en el sistema XL-Nets.
 */
public class Q70InformacionSeguridadAplicacion implements Q70InformacionSeguridadInterface, Externalizable{
	N38APISesion sesionAPI = new N38APISesion();
	Document sesion = null;

/**
 * Método constructor de la clase.
 * <p>
 * @param nombreAplicacion Nombre de la aplicación 
 * @throws Q70SeguridadException
 */
public Q70InformacionSeguridadAplicacion(String nombreAplicacion) throws Q70SeguridadException{
	buildSecurityInf(nombreAplicacion);
}

/**
 * Método constructor de la clase. 
 */
public Q70InformacionSeguridadAplicacion() {
	super();
}

protected void buildSecurityInf(String nombreAplicacion){
	sesion = sesionAPI.n38APISesionCrearApp(nombreAplicacion);
}

/**
 * @see es.ejie.frmk.infraestructura.seguridad.Q70InformacionSeguridadInterface#getSessionSecurityInf(java.lang.String)
 */
public Object getSessionSecurityInf(String valor) throws Q70SeguridadException{
	String val = Q70UtilidadesGenerales.replaceString(Q70Constantes.RUTAVALOR,"?",valor);
	try{
		return Q70UtilidadesXML.searchDomVector(sesion,val);		
	}catch(Q70UtilidadesExcepcion ue){
		throw new Q70SeguridadException("Q70InformacionSeguridadAplicacion", "getSessionSecurityInf", "No encontrada informacion para " + valor , ue);
	}
}

/**
 * Devuelve una instancia del Toolkit de XLNet para la sesión de la petición.
 * @param contextoSeguridad contexto de seguridad de la sesión
 */	
public N38APISesion getXLNESessionTolkit() throws Q70SeguridadException{
	return sesionAPI;
}

protected N38APISesion getSessionTolkit() throws Q70SeguridadException{
	return sesionAPI;
}	

protected N38API getToolKit(){
	return new N38API(sesion);
}
/**
 * @see java.lang.Object#toString()
 */
public String toString(){
	return "\n<ContextoSeguridad>\n" +
	"<aplicaciones>" + sesion +
	"</recursos>\n</ContextoSeguridad>";
}

/**
 * @see java.io.Externalizable#readExternal(java.io.ObjectInput)
 */
public void readExternal(ObjectInput ois)throws IOException, ClassNotFoundException{
	
}

/**
 * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
 */
public void writeExternal(ObjectOutput oos)throws IOException{
	
}

/**
 * @return Returns the sesion.
 */
protected Document getSesion() {
	return sesion;
}
}