All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kapott.hbci.status.HBCIStatus Maven / Gradle / Ivy

Go to download

HBCI4j - Home Banking Computer Interface for Java - Clone from https://github.com/hbci4j/hbci4java

There is a newer version: 3.5.46
Show newest version
/*  $Id: HBCIStatus.java,v 1.1 2011/05/04 22:38:02 willuhn Exp $

    This file is part of HBCI4Java
    Copyright (C) 2001-2008  Stefan Palme

    HBCI4Java is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    HBCI4Java is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package org.kapott.hbci.status;

import lombok.extern.slf4j.Slf4j;
import org.kapott.hbci.manager.HBCIUtils;

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

/**
 * 

Menge zusammengehöriger Status-Informationen. In Objekten dieser * Klasse kann eine Menge von HBCI-Statuscodes sowie eine Menge von * Exceptions gespeichert werden. Der Sinn dieser Klasse ist die * Zusammenfassung von mehreren Status-Informationen, die logisch * zusammengehören (z.B. alle Status-Informationen, die ein bestimmtes * Nachrichtensegment betreffen). *

* Objekte dieser Klasse werden beispielsweise in * {@link org.kapott.hbci.status.HBCIMsgStatus} verwendet, * um globale und segmentbezogene Status-Informationen voneinander getrennt * zu sammeln.

*/ @Slf4j public final class HBCIStatus { /** * Statuscode für "Gesamtstatus kann nicht ermittelt werden". (z.B. weil * gar keine Informationen in diesem Objekt enthalten sind) */ public static final int STATUS_UNKNOWN = 1; /** * Statuscode für "es ist mindestens ein Fehlercode enthalten" */ public static final int STATUS_ERR = 2; /** * Statuscode für "alle Statusinformationen besagen OK" */ static final int STATUS_OK = 0; private List retVals; private List exceptions; public HBCIStatus() { retVals = new ArrayList<>(); exceptions = new ArrayList<>(); } /** * Wird von der HBCI4Java-Dialog-Engine aufgerufen */ void addException(Exception e) { exceptions.add(e); log.error(e.getMessage(), e); } /** * Wird von der HBCI4Java-Dialog-Engine aufgerufen */ public void addRetVal(HBCIRetVal ret) { retVals.add(ret); if (ret.isError()) { log.error("HBCI error code: " + ret.toString()); } } /** * Gibt zurück, ob in diesem Status-Objekt Exceptions gespeichert sind * * @return true, falls Exceptions gespeichert sind, * sonst false */ boolean hasExceptions() { return exceptions.size() != 0; } private boolean hasX(char code) { boolean ret = false; for (HBCIRetVal retVal : retVals) { if (retVal.code.charAt(0) == code) { ret = true; break; } } return ret; } /** * Gibt zurück, ob in den Rückgabedaten in diesem Objekt Fehlermeldungen * enthalten sind * * @return true, falls Fehlermeldungen vorhanden sind, * sonst false */ public boolean hasErrors() { return hasX('9'); } /** * Gibt zurück, ob in den Rückgabedaten in diesem Objekt Warnungen * enthalten sind * * @return true, falls Warnungen vorhanden sind, * sonst false */ private boolean hasWarnings() { return hasX('3'); } /** * Gibt zurück, ob in den Rückgabedaten in diesem Objekt Erfolgsmeldungen * enthalten sind * * @return true, falls Erfolgsmeldungen vorhanden sind, * sonst false */ private boolean hasSuccess() { return hasX('0'); } private List getX(char code) { ArrayList hbciRetVals = new ArrayList<>(); for (HBCIRetVal retVal : retVals) { if (retVal.code.charAt(0) == code) { hbciRetVals.add(retVal); } } return hbciRetVals; } /** * Gibt die in diesem Status-Objekt gespeicherten Exceptions zurück * * @return Array mit Exceptions, die während der HBCI-Kommunikation * aufgetreten sind. */ public Exception[] getExceptions() { return exceptions.toArray(new Exception[0]); } /** * Gibt alle in diesem Status-Objekt gespeicherten Rückgabewerte zurück * * @return Array mit HBCIRetVals, die während der HBCI-Kommunikation * aufgetreten sind. */ public List getRetVals() { return retVals; } /** * Gibt die in diesem Objekt gespeicherten Fehlermeldungen zurück * * @return Array mit HBCI-Returncodes, die allesamt Fehlermeldungen beschreiben */ List getErrors() { return getX('9'); } /** * Gibt die in diesem Objekt gespeicherten Warnungen zurück * * @return Array mit HBCI-Returncodes, die allesamt Warnmeldungen beschreiben */ public List getWarnings() { return getX('3'); } /** * Gibt die in diesem Objekt gespeicherten Erfolgsmeldungen zurück * * @return Array mit HBCI-Returncodes, die allesamt Erfolgsmeldungen beschreiben */ private List getSuccess() { return getX('0'); } /** * Gibt einen Code zurück, der den zusammengefassten Status aller in diesem * Objekt gespeicherten Rückgabewerte beschreibt. Dafür gibt es folgende * Möglichkeiten: *
    *
  • STATUS_OK wird zurückgegeben, wenn es keine Fehlermeldungen * oder Exceptions gegeben hat und mindestens eine Erfolgsmeldung oder * Warnung enthalten ist
  • *
  • STATUS_ERR wird zurückgegeben, wenn wenigstens eine * Exception aufgetreten ist oder wenigstens eine Fehlermeldung enthalten * ist.
  • *
  • STATUS_UNKNOWN wird zurückgegeben, wenn keine der beiden * o.g. Bedingungen zutrifft.
  • *
* * @return einen Code, der den zusammengefassten Status aller Rückgabewerte * beschreibt. */ public int getStatusCode() { int code; /* TODO: eine Exception als Fehler einzustufen ist gefaehrlich: wenn * ein GV bei einer Bank eingereicht wird und von der Bank erfolgreich * verarbeitet wird, beim Entgegennehmen der Antwort-Nachricht jedoch * eine Exception auftritt, sieht der Job aus wie "fehlgeschlagen" - * dabei ist nur das Parsen der Erfolgsnachricht fehlgeschlagen */ if (hasExceptions() || hasErrors()) { code = STATUS_ERR; } else if (hasSuccess() || hasWarnings()) { code = STATUS_OK; } else { code = STATUS_UNKNOWN; } return code; } /** * Gibt true zurück, wenn keine Fehlermeldungen bzw. Exceptions * aufgetreten sind und wenigstens eine Successmeldung oder Warnung enthalten * ist */ public boolean isOK() { return getStatusCode() == STATUS_OK; } /** * Gibt einen String zurück, der alle Fehlermeldungen der hier enthaltenen * Rückgabewerte im Klartext enthält. Für evtl. enthaltene Exception wird * die entsprechende Beschreibung in Kurz (siehe * {@link org.kapott.hbci.manager.HBCIUtils#exception2StringShort(Exception)}) * benutzt. * * @return String mit allen Fehlermeldungen */ public List getErrorList() { List ret = new ArrayList<>(); if (hasExceptions()) { for (Exception ex : exceptions) { ret.add(HBCIUtils.exception2StringShort(ex)); } } if (hasErrors()) { for (HBCIRetVal hbciRetVal : getErrors()) { ret.add(hbciRetVal.toString()); } } return ret; } public List getWarningsList() { List ret = new ArrayList<>(); if (hasWarnings()) { for (HBCIRetVal hbciRetVal : getWarnings()) { ret.add(hbciRetVal.toString()); } } return ret; } /** * Gibt die Status-Informationen aller enthaltenen Exceptions und * HBCI-Rückgabewerte als ein String zurück. * * @return String mit allen gespeicherten Status-Informationen */ public String toString() { StringBuilder ret = new StringBuilder(); for (Exception ex : exceptions) { ret.append(HBCIUtils.exception2StringShort(ex)); ret.append(System.getProperty("line.separator")); } for (HBCIRetVal hbciRetVal : getErrors()) { ret.append(hbciRetVal.toString()); ret.append(System.getProperty("line.separator")); } for (HBCIRetVal hbciRetVal : getWarnings()) { ret.append(hbciRetVal.toString()); ret.append(System.getProperty("line.separator")); } for (HBCIRetVal hbciRetVal : getSuccess()) { ret.append(hbciRetVal.toString()); ret.append(System.getProperty("line.separator")); } return ret.toString().trim(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy