org.kapott.hbci.status.HBCIDialogStatus Maven / Gradle / Ivy
Show all versions of hbci4j-core Show documentation
/********************************************************************** * * This file is part of HBCI4Java. * Copyright (c) 2001-2008 Stefan Palme * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * **********************************************************************/ package org.kapott.hbci.status; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.kapott.hbci.manager.HBCIUtilsInternal; /**
, wenn während der Dialogausführung Exceptions aufgetreten sind, sonstStatus-Informationen für einen kompletten HBCI-Dialog. Objekte dieser Klasse werden von {@link HBCIExecStatus}-Objekten verwaltet. In einem
HBCIDialogStatus
werden alle Status-Informationen gespeichert, die während der Ausführung eines HBCI-Dialoges anfallen.Die direkte Auswertung der Felder dieser Klasse ist i.d.R. nicht zu empfehlen. Statt dessen sollten die bereitgestellten Methoden benutzt werden, um alle relevanten Informationen zu extrahieren.
*/ public final class HBCIDialogStatus { /**Status-Informationen zu den einzelnen Nachrichten zwischen Dialog-Initialisierung und Dialog-Abschluss ("Nutzdaten"). Ein Element dieses Arrays enthält dabei die Status-Informationen über genau einen HBCI-Nachrichtenaustausch.
Die direkte Auswertung dieses Feldes ist aus folgendem Grund in den meisten Fällen nicht zu empfehlen: Sollen mehrere Geschäftsvorfälle innerhalb eines einzigen HBCI-Dialoges ausgeführt werden, so weiß die HBCI-Anwendung i.d.R. nicht, in welcher Nachricht sich ein bestimmter GV befindet bzw. wie viele Nachrichten überhaupt erzeugt werden, weil der HBCI-Kernel beim Hinzufügen von Geschäftsvorfällen u.U. selbstständig die Erzeugung einer zusätzlichen Nachricht auslöst. Es ist deshalb nicht ohne weiteres möglich, die zu einem bestimmten Geschäftsvorfall passende Nachrichtennummer zu ermitteln, um damit das entsprechende Element aus diesem Array zu extrahieren.
*/ public HBCIMsgStatus[] msgStatus; /** Statusinformationen zur Dialog-Initialisierungs-Nachricht. In diesem Feld werden alle Status-Informationen gespeichert, die die Dialog-Initialisierung betreffen. */ public HBCIMsgStatus initStatus; /** Statusinformationen zur Dialog-Abschluss-Nachricht. In diesem Feld werden alle Status-Informationen gespeichert, die die Nachrichten zur Beendigung des Dialoges betreffen. */ public HBCIMsgStatus endStatus; public HBCIDialogStatus() { msgStatus=null; initStatus=null; endStatus=null; } /** Wird von der HBCI4Java-Dialog-Engine aufgerufen */ public void setInitStatus(HBCIMsgStatus status) { this.initStatus=status; } /** Wird von der HBCI4Java-Dialog-Engine aufgerufen */ public void setMsgStatus(HBCIMsgStatus[] status) { this.msgStatus=status; } /** Wird von der HBCI4Java-Dialog-Engine aufgerufen */ public void setEndStatus(HBCIMsgStatus status) { this.endStatus=status; } /**Gibt zurück, ob der Dialog als ganzes erfolgreich abgelaufen ist. Ein Dialog gilt dann als erfolgreich abgelaufen, wenn die Dialog-Initialisierung, alle Nachrichten mit Geschäftsvorfällen sowie der Dialog-Abschluss ohne Fehlermeldungen abgelaufen sind.
Sobald auch nur eine dieser Nachrichten einen Fehler erzeugt hat, gibt diese Methode
false
zurück. Es handelt sich also um einen sehr "strengen" Test. Falls diese Methodetrue
zurückgibt, so könnte eine Überprüfung der einzelnen Geschäftsvorfälle auf eventuell aufgetretene Fehler entfallen (siehe jedoch unten). Beim Rückgabewertfalse
müssen alle ausgeführten Geschäftsvorfälle überprüft werden, ob einer (oder mehrere) davon den (oder die) Fehler ausgelöst haben.Achtung: Wenn diese Methode
true
zurückgibt, heißt das nicht zwangsläufig, dass auch alle geplantenHBCIJobs
tatsächlich erfolgreich durchgeführt wurden. Diese Methode zeigt nur an, dass dieHBCIJobs
, die auch tatsächlich in einer der Auftragsnachrichten enthalten gewesen sind, erfolgreich durchgeführt wurden. Trat beim Hinzufügen einesHBCIJobs
zu einer Azuftragsnachricht ein Fehler auf, so dass dieserHBCIJob
gar nicht erst versandt wurde, so zeigt diese Methode u.U. trotzdemtrue
, obwohl gar nicht alle geplanten Aufträge ausgeführt wurden (eben weil diese Methode nur anzeigt, ob bei der eigentlichen Ausführung von Aufträgen Fehler aufgetreten sind oder nicht).Um also sicher zu gehen, dass alle gewünschten Aufträge auch wirklich erfolgreich ausgeführt wurden, sollte von jedem ursprünglich erzeugten
@returnHBCIJob
der Status mit {@link org.kapott.hbci.GV.HBCIJob#getJobResult()} und {@link org.kapott.hbci.GV_Result.HBCIJobResult#isOK()} geprüft werden.true
, wenn keine Nachricht des Dialoges einen Fehler erzeugt hat;false
, wenn wenigstens ein Nachrichtenaustausch nicht fehlerfrei abgelaufen ist.*/ public boolean isOK() { boolean ret; ret=(initStatus!=null && initStatus.isOK()); if (msgStatus!=null) { for (int i=0;itrue false
@deprecated wird nicht benutzt */ public boolean hasExceptions() { boolean ret=false; if (initStatus!=null) { ret|=initStatus.hasExceptions(); } if (msgStatus!=null) { for (int i=0;iret=new ArrayList (); if (initStatus!=null) { ret.addAll(Arrays.asList(initStatus.getExceptions())); } if (msgStatus!=null) { for (int i=0;i