  package com.FitBank.ebusiness.delegate;
  
  import com.FitBank.exception.FitDynamicInstancerException;
  
/**
  * Esta clase instancia la interface ConnectBusiness con un objeto de las 
  * clases de las implementaciones dadas a la interface.
  * @author  FITBANK
  * @version 2.0 Abril 2004
  */   
  
  
  public class InstancerConnect
  {
  
 /**
   * Objeto atributo de la clase que contiene la cadena con el nombre universal de la clase que
   * implementa la interface de conexión con el sistema de Seguridad del Banco del Pacífico.
   */
    protected static final String BP_SECURITY = "com.FitBank.ebusiness.delegate.ConnectBusinessBPS";
    
 /**
   * Objeto atributo de la clase que contiene la cadena con el nombre universal de la clase que
   * implementa la interface de conexión con el sistema de conexión con el core de FIT-BANK.
   */
    protected static final String FITBANK_EJB  = "com.FitBank.ebusiness.delegate.ConnectBusinessEJB";
    
    
 /**
   * Objeto atributo de la clase que contiene la cadena con el nombre del error común.
   */
    protected static final String ERROR = "InstancerConnect.instanceOfConnectBusiness():  ";
    
 /**
   * Objeto que contiene la cadena con la que se invoca el método instanciador dinámico
   * desde fuera de la clase para entregar una instancia que implemente la conexión al
   * sistema de seguridad del Banco del Pacífico.
   */
    public static final String IND_BPS = "SECURITY_BP";
    
 /**
   * Objeto que contiene la cadena con la que se invoca el método instanciador dinámico
   * desde fuera de la clase para entregar una instancia que implemente la conexión al
   * sistema de core de FIT-BANK.
   */
    public static final String IND_EJB = "BUSINESS_EJB";
    
    
 /**
   * Método constructor por Default de la Clase.
   */
    public InstancerConnect()
    {
    }
    
 /**
   * Método que instancia a través de la interface ConnectBusiness un objeto de las clases
   * que implementan la interface ConnectBsuinessBPS o ConnectBusinessEJB, dependiendo 
   * del parámetro enviado.
   * @param connectionType Objeto que contiene la cadena que inidica el tipo de objeto que debe 
   * retornar el método.
   * @return Objeto que contiene el objeto devuelto, encapsulado en la interface, retornando el 
   * de la implementacion solicitada.
   * @throws FitDynamicInstancerException Exception que se levanta en caso de ocurrir fallo en la
   * ejecución de las instrucciones del método.
   */
    public ConnectBusiness instanceOfConnectBusiness ( String connectionType )
      throws FitDynamicInstancerException
    {
      ConnectBusiness connectBusiness;
      String toInstance = null;
      
      if ( connectionType.equals( IND_BPS ) )
        toInstance = BP_SECURITY;
        
      else if ( connectionType.equals( IND_EJB ) )
        toInstance = FITBANK_EJB;
        
      try
      {
        connectBusiness = ( ConnectBusiness )Class.forName( toInstance, true, this.getClass().getClassLoader() ).newInstance();
        return connectBusiness;
      }
      catch( ClassNotFoundException exc )
      {
        throw new FitDynamicInstancerException( ERROR + "ClassNotFoundException" + exc.toString() );
      }
      catch( InstantiationException exc )
      {
        throw new FitDynamicInstancerException( ERROR + "InstantiationException" + exc.toString() );
      }
      catch( IllegalAccessException exc )
      {
        throw new FitDynamicInstancerException( ERROR + "IllegalAccessException" + exc.toString());
      }
    }
  }