Package de.willuhn.jameica.hbci

Source Code of de.willuhn.jameica.hbci.PassportRegistry

/**********************************************************************
* $Source: /cvsroot/hibiscus/hibiscus/src/de/willuhn/jameica/hbci/PassportRegistry.java,v $
* $Revision: 1.15 $
* $Date: 2010/07/22 11:48:55 $
* $Author: willuhn $
* $Locker:  $
* $State: Exp $
*
* Copyright (c) by willuhn.webdesign
* All rights reserved
*
**********************************************************************/
package de.willuhn.jameica.hbci;

import java.util.Enumeration;
import java.util.Hashtable;

import de.willuhn.jameica.hbci.passport.Passport;
import de.willuhn.jameica.services.BeanService;
import de.willuhn.jameica.system.Application;
import de.willuhn.logging.Logger;
import de.willuhn.util.ClassFinder;

/**
* Sucht alle verfuegbaren Passports und prueft diese auf Verwendbarkeit.
*/
public class PassportRegistry {

  private static Hashtable passportsByName  = null;
  private static Hashtable passportsByClass = null;

  /**
   * Initialisiert die Passport-Registry.
   */
  public static synchronized void init()
  {
    if (passportsByClass != null || passportsByName != null)
      return;
   
    passportsByClass = new Hashtable();
    passportsByName  = new Hashtable();

    try {
      Logger.info("searching for available passports");
      BeanService service = Application.getBootLoader().getBootable(BeanService.class);
      ClassFinder finder = Application.getPluginLoader().getManifest(HBCI.class).getClassLoader().getClassFinder();
      Class[] found = finder.findImplementors(Passport.class);
      for (Class c:found)
      {
        try {
          Passport p = (Passport) service.get(c);
          Application.getCallback().getStartupMonitor().setStatusText("init passport " + p.getName());
           passportsByName.put(p.getName(),c);
          passportsByClass.put(c.getName(),c);
          Logger.info("  " + p.getName() + " [" + p.getClass().getName() + "]");
        }
        catch (Exception e)
        {
          Logger.error("failed, skipping passport",e);
        }
      }
    }
    catch (ClassNotFoundException cn)
    {
      Logger.warn("no passports found");
    }
    catch (Throwable t)
    {
      Logger.error("error while searching for passports",t);
    }
  }
 
  /**
   * Erstellt eine Instanz die Passport-Klasse.
   * @param c die Passport-Klasse.
   * @return die Instanz.
   * @throws Exception
   */
  private static Passport load(Class c) throws Exception
  {
    if (c == null)
      return null;
   
    BeanService service = Application.getBootLoader().getBootable(BeanService.class);
    Passport p = (Passport) service.get(c);
    Logger.debug("[" + c.getName() + "][" + p.getName() + "] instantiated successfully");
    return p;
  }

  /**
   * Liefert eine Instanz des angegebenen Passports.
   * @param name Sprechender Name des Passports.
   * @return Instanz des Passports.
   * @throws Exception
   */
  public static Passport findByName(String name) throws Exception
  {
    if (name == null)
      return null;
    init();
    return (Passport) load((Class) passportsByName.get(name));
  }

  /**
   * Liefert eine Instanz des angegebenen Passports.
   * @param classname Java-Klasse des Passports.
   * @return Instanz des Passports.
   * @throws Exception
   */
  public static Passport findByClass(String classname) throws Exception
  {
    if (classname == null)
      return null;
    init();
    return (Passport) load((Class) passportsByClass.get(classname));
  }

  /**
   * Liefert ein Array mit allen verfuegbaren Passports.
   * @return Liste der Passports.
   * @throws Exception
   */
  public static Passport[] getPassports() throws Exception
  {
    init();
    Enumeration e = passportsByName.elements();
    Passport[] passports = new Passport[passportsByName.size()];
    int i=0;
    while (e.hasMoreElements())
    {
      passports[i++] = (Passport) load((Class)e.nextElement());
    }
    return passports;
  }
}


/**********************************************************************
* $Log: PassportRegistry.java,v $
* Revision 1.15  2010/07/22 11:48:55  willuhn
* @C Logging
*
* Revision 1.14  2007/05/20 23:45:10  willuhn
* @N HBCI-Jobausfuehrung Servertauglich gemacht
*
* Revision 1.13  2005/12/05 10:35:34  willuhn
* *** empty log message ***
*
* Revision 1.12  2005/07/04 21:57:08  web0
* @B bug 80
*
* Revision 1.11  2005/05/19 23:31:07  web0
* @B RMI over SSL support
* @N added handbook
*
* Revision 1.10  2005/01/30 20:45:35  willuhn
* *** empty log message ***
*
* Revision 1.9  2005/01/09 18:48:40  willuhn
* @N native lib for sizrdh
*
* Revision 1.8  2004/11/12 18:25:08  willuhn
* *** empty log message ***
*
* Revision 1.7  2004/10/19 23:33:31  willuhn
* *** empty log message ***
*
* Revision 1.6  2004/07/21 23:54:30  willuhn
* *** empty log message ***
*
* Revision 1.5  2004/06/30 20:58:29  willuhn
* *** empty log message ***
*
* Revision 1.4  2004/05/11 21:11:32  willuhn
* *** empty log message ***
*
* Revision 1.3  2004/05/05 22:14:47  willuhn
* *** empty log message ***
*
* Revision 1.2  2004/05/04 23:30:53  willuhn
* *** empty log message ***
*
* Revision 1.1  2004/05/04 23:07:23  willuhn
* @C refactored Passport stuff
*
**********************************************************************/
TOP

Related Classes of de.willuhn.jameica.hbci.PassportRegistry

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.