Package de.willuhn.jameica.hbci.gui.action

Source Code of de.willuhn.jameica.hbci.gui.action.KontoMerge

/**********************************************************************
* $Source: /cvsroot/hibiscus/hibiscus/src/de/willuhn/jameica/hbci/gui/action/KontoMerge.java,v $
* $Revision: 1.1 $
* $Date: 2010/09/29 23:43:34 $
* $Author: willuhn $
*
* Copyright (c) by willuhn - software & services
* All rights reserved
*
**********************************************************************/

package de.willuhn.jameica.hbci.gui.action;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import de.willuhn.datasource.rmi.DBIterator;
import de.willuhn.jameica.gui.Action;
import de.willuhn.jameica.hbci.HBCI;
import de.willuhn.jameica.hbci.Settings;
import de.willuhn.jameica.hbci.rmi.Konto;
import de.willuhn.jameica.messaging.StatusBarMessage;
import de.willuhn.jameica.system.Application;
import de.willuhn.logging.Logger;
import de.willuhn.util.ApplicationException;
import de.willuhn.util.I18N;

/**
* Erwartet ein Array, eine Liste von Konten oder ein einzelnes Konto und gleicht sie mit den vorhandenen
* Konten ab. Die noch nicht in der Datenbank vorhandenen werden automatisch angelegt.
*/
public class KontoMerge implements Action
{
  private final static I18N i18n = Application.getPluginLoader().getPlugin(HBCI.class).getResources().getI18N();

  /**
   * @see de.willuhn.jameica.gui.Action#handleAction(java.lang.Object)
   */
  public void handleAction(Object context) throws ApplicationException
  {
    if (context == null)
      return;

    try
    {
      List<Konto> konten = new ArrayList<Konto>();

      if (context instanceof Konto)        konten.add((Konto) context);
      else if (context instanceof Konto[]) konten.addAll(Arrays.asList((Konto[])context));
      else if (context instanceof List)    konten.addAll((List)context);

      if (konten.size() == 0)
        return;

      DBIterator existing = Settings.getDBService().createList(Konto.class);

      int created   = 0;
      int skipped   = 0;
      int nosupport = 0;
      for (Konto konto:konten)
      {
        Logger.info("merging konto " + konto.getKontonummer());
        // Wir checken, ob's das Konto schon gibt
        boolean found = false;
        Logger.info("  checking if already exists");

        while (existing.hasNext())
        {
          Konto check = (Konto) existing.next();

          // BLZ stimmt nicht ueberein
          if (!check.getBLZ().equals(konto.getBLZ()))
            continue;

          // Kontonummer stimmt nicht ueberein.
          if (!check.getKontonummer().equals(konto.getKontonummer()))
            continue;

          // Stimmen Passports ueberein?
          String pp = check.getPassportClass();
          if (pp == null || !pp.equals(konto.getPassportClass()))
            continue;


          // BUGZILLA 338: Checken, ob Bezeichnung (=Type) uebereinstimmt
          // Bezeichnung ist optional - wir checken nur, wenn auf beiden
          // Seiten ein Name vorhanden ist und sie sich unterscheiden
          String localType = check.getBezeichnung();
          String newType   = konto.getBezeichnung();
          boolean haveName = (localType != null && localType.length() > 0 &&
                             newType != null && newType.length() > 0);

          // Die Konten gelten bereits als identisch, wenn
          // eines von beiden keine Bezeichnung hat (dann genuegen
          // die o.g. Kriterien). Andernfalls muessen die Bezeichnungen
          // uebereinstimmen.
          if (!haveName || newType.equals(localType))
          {
            found = true;
            Logger.info("  konto exists, skipping");
            skipped++;
          }
        }

        existing.begin();
        if (!found)
        {
          // Konto neu anlegen
          Logger.info("saving new konto");
          try {
            konto.store();
            created++;
            Logger.info("konto saved successfully");
          }
          catch (ApplicationException ae)
          {
            Logger.warn("konto not supported: " + ae.getMessage());
            nosupport++;
          }
          catch (Exception e)
          {
            // Wenn ein Konto fehlschlaegt, soll nicht gleich der ganze Vorgang abbrechen
            Logger.error("error while storing konto",e);
            Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Fehler beim Anlegen des Kontos {0}: {1}", new String[]{konto.getLongName(),e.getMessage()}),StatusBarMessage.TYPE_ERROR));
          }
        }
      }

      String[] values = new String[] {Integer.toString(created),Integer.toString(skipped), Integer.toString(nosupport)};
      Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Konten abgeglichen. Angelegt: {0}, �bersprungen: {1}, nicht unterst�tzt: {2}",values),StatusBarMessage.TYPE_SUCCESS));
    }
    catch (Exception e)
    {
      Logger.error("error while merging accounts",e);
      Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Fehler beim Anlegen der Konten: {0}",e.getMessage()),StatusBarMessage.TYPE_ERROR));
    }
  }

}



/**********************************************************************
* $Log: KontoMerge.java,v $
* Revision 1.1  2010/09/29 23:43:34  willuhn
* @N Automatisches Abgleichen und Anlegen von Konten aus KontoFetchFromPassport in KontoMerge verschoben
* @N Konten automatisch (mit Rueckfrage) anlegen, wenn das Testen der HBCI-Konfiguration erfolgreich war
* @N Config-Test jetzt auch bei Schluesseldatei
* @B in PassportHandleImpl#getKonten() wurder der Converter-Funktion seit jeher die falsche Passport-Klasse uebergeben. Da gehoerte nicht das Interface hin sondern die Impl
*
**********************************************************************/
TOP

Related Classes of de.willuhn.jameica.hbci.gui.action.KontoMerge

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.