
package presentacion;

import encapsuladores.Libro;
import excepciones.GenericaExcepcion;
import java.util.List;
import negocio.LibrosNegocio;

public class Inicio {
     public static void main(String[] args) {          
        try {  
              //    Abrimos conexiones del pool hasta que lance una excepción por tenerlas todas ocupadas
              //    Lanzamos una SQL desde cada una de las conexiones abiertas
              //    Posteriormente las primeras diez se cierran y se reutilizan inmediatamente volviendo a lanzar la SQL
              List<String> listaMensajes = new LibrosNegocio().probarOcupacionPoolConexiones();
              for (int i=0; i<listaMensajes.size(); i++)
                  System.out.println(listaMensajes.get(i));
              
              //    Utilizamos una única conexión para lanzar la SQL. Sería esta la implementación convencional y habitual.
              System.out.println("LA SIGUIENTE INVOCACION AL METODO DE LA CAPA DE NEGOCIO REPRESENTA LA IMPLEMENTACION CONVENCIONAL Y HABITUAL");
              System.out.println("-----  RELACION DE LIBROS PRESENTES EN LA TABLA   -----");
              List<Libro> listaLibros = new LibrosNegocio().consultarTodos();
              for (int i=0; i<listaLibros.size(); i++)
              {
                  Libro libro = listaLibros.get(i);
                  System.out.print(libro.getIdLibro()+"  -  ");
                  System.out.println(libro.getTitulo());  
              }             
        } catch (Exception excepcion)
           {  
             String mensajeError = "";
             if (excepcion instanceof GenericaExcepcion)      
                {
                   GenericaExcepcion genericaExcepcion = (GenericaExcepcion)excepcion;            
                   switch (genericaExcepcion.getCodigoError())
                   {                                      
                      case 20: mensajeError = "Todas las conexiones del pool están ocupadas en estos momentos. En breve habrá alguna libre.";      
                               break;     
                      case 21: mensajeError = "Se ha producido una situación de error al intentar abrir una conexión del pool.";      
                               break;                                 
                      case 22: mensajeError = "Se ha producido una situación de error al cerrar una conexión del pool.";      
                               break;         
                      case 84: mensajeError = "Se ha producido una situación de error en la BD al intentar consultar la relación de libros.";        
                               break;                                     
                      case 85: mensajeError = "Se ha producido una situación de error en la BD al intentar consultar número de filas.";        
                               break;                      
                   }       
                }    
               else
                { mensajeError = "Se ha producido una situación de error: " + excepcion.getMessage(); }
               System.out.println(mensajeError);
           }              
     }      
}
