package es.ejie.frmk.presentacion.sesiondatos.utilidades;

/**
 * Permite borrar sesiones antiguas de la estructura de tablas de Geremua.
 * <p>
 * Delega el trabajo en <code>Q70BorradoBDPorFecha</code>. 
 * El objetivo de esta clase es aportar un <code>main</code> que se pueda invocar desde una JVM 
 * diferente a la del servidor de aplicaciones donde está Geremua.
 * <p>
 * El borrado de sesiones también puede hacerse desde la aplicación de administración,
 * en cuyo caso los parámetros están en el fichero r09.properties. 
 * En este fichero se pueden ver ejemplos de valores de estos parámetros. 
 * <p>
 * En el método {@link Q70EjecutaBorradoSesionesBD#main(String[])} se explican brevemente.
 * 
 * @see Q70BorradoBDPorFecha
 * @see Q70BorradoBDPorFechaQ70
 */

public class Q70EjecutaBorradoSesionesBD
{
	/**
	 * Borra sesiones antiguas de la BD.
	 * <p>
	 * Los parámetros que se reciben en el array de Strings son:
	 * <ul>
	 * <li>tipo de operación:
	 * <ul>
	 * <li>"CON_SELECT" Borrado de sesiones de usuario caducadas
	 * <li>"SIN_SELECT" Borrado de apilamientos caducados
	 * </ul>
	 * <li>driver (Clase que implementa el driver JDBC)
	 * <li>servidor de BD al que se van a pedir conexiones
	 * <li>sentencia select
	 * <li>sentencia delete
	 * <li>datos SQL (DATOS_SES)
	 * <li>clave SQL (ID_SES)
	 * <li>antigüedad de borrado en milisegundos
	 * <li>usuario
	 * <li>password
	 * </ul>
	 * 
	 * @param args
	 */
	public static void main(String[] args)
	{
		try
		{
			if (args != null)
			{
				System.out.println("***** Inicio borrarSesiones con argumentos *****");
				System.out.println("***** Inicio borrarSesiones con argumentos *****");
			
				new Q70EjecutaBorradoSesionesBD().borraConArgumentos(args);
				return;
			}
			
			System.out.println("***** Fin borrarSesiones con argumentos *****");
			System.out.println("***** Fin borrarSesiones con argumentos *****");
		}
		catch (Throwable e)
		{
			System.out.println("***** ERROR GRAVE *****");
			System.out.println("***** ERROR GRAVE *****");
			e.printStackTrace();
		}
	}

	/**
	 * Crea un objeto borrador {@link Q70BorradoBDPorFecha} y lo inicializa con los parámetros recibidos en {@link Q70EjecutaBorradoSesionesBD#main(String[])}
	 * @param args
	 */

	private void borraConArgumentos(String[] args)
	{
		if (args.length == 0)
		{
			System.out.println(">>>>> ERROR: Es una clase que necesita argumentos.");
			return;
		}

		if ("CON_SELECT".equalsIgnoreCase(args[0])){
			if (args.length != 10)
			{
				System.out.println(">>>>> ERROR: Numero de argumentos incorrecto.");
				return;
			}
			borraConArgumentosSesiones(args);
		}
		else{
			if ("SIN_SELECT".equalsIgnoreCase(args[0])){
				if (args.length != 7)
				{
					System.out.println(">>>>> ERROR: Numero de argumentos incorrecto.");
					return;
				}
				borraConArgumentosPila(args);
			}
			else{
				System.out.println(">>>>> ERROR: El primer argumento es incorrecto. Tiene el valor " + args[0] + " y debe ser uno de estos dos: 'CON_SELECT' o 'SIN_SELECT'.");
			}
		}
		System.out.println("*** FIN borraConArgumentos");
	}

	private void borraConArgumentosSesiones(String[] args) {
		for (int i = args.length - 1; i >= 0; i--)
		{
			System.out.println("Argumento..." + i + "..." + args[i]);
		}
		System.out.println("*** INICIO borraConArgumentosSesiones");
		Q70BorradoBDPorFecha borrador = new Q70BorradoBDPorFecha();

		borrador.setDbDriver(args[1]);
		borrador.setDbServer(args[2]);
		borrador.setSelectSentence(args[3]);
		borrador.setDeleteSentence(args[4]);
		borrador.setDatosSQL(args[5]);
		borrador.setClaveSQL(args[6]);
		borrador.setDeleteDate(Long.valueOf(args[7]).longValue());
		borrador.setDbLogin(args[8]);
		borrador.setDbPassword(args[9]);

		borrador.borrarSesiones();
		System.out.println("*** FIN borraConArgumentosSesiones");		
	}

	private void borraConArgumentosPila(String[] args) {
		for (int i = args.length - 1; i >= 0; i--)
		{
			System.out.println("Argumento..." + i + "..." + args[i]);
		}
		System.out.println("*** INICIO borraConArgumentosPila");
		Q70BorradoBDPorFecha borrador = new Q70BorradoBDPorFecha();

		borrador.setDbDriver(args[1]);
		borrador.setDbServer(args[2]);
		borrador.setDeleteSentence(args[3]);
		borrador.setDeleteDate(Long.valueOf(args[4]).longValue());
		borrador.setDbLogin(args[5]);
		borrador.setDbPassword(args[6]);

		borrador.borraSinSelect();
		System.out.println("*** FIN borraConArgumentosPila");		
	}

}
