/* $Id: HBCIRetVal.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 java.io.Serializable;
import java.util.ArrayList;
import java.util.Properties;
import org.kapott.hbci.exceptions.HBCI_Exception;
import org.kapott.hbci.manager.HBCIUtilsInternal;
/** <p>Repr�sentation eines HBCI-Statuscodes. Objekte dieser Klasse
stellen einen einzigen HBCI-Returncode dar, welcher aus einer
Antwortnachricht von der Bank extrahiert wurde.
</p><p>
Zu den hier bereitgestellten Informationen z�hlen neben den eigentlichen
Status-Daten (Status-Code, Textmeldung) auch eine numerische Darstellung
<em>des</em> Teiles der urspr�nglich gesendeten Nachricht, auf den sich
diese Statusmeldung bezieht. Sofern das m�glich ist, wird diese numerische
Darstellung zus�tzlich in den Lowlevel-Namen des betreffenden Nachrichtenteils
umgewandelt, so dass f�r den Anwender eine bessere Lokalisierung des
Problems m�glich ist.</p> */
public final class HBCIRetVal
implements Serializable
{
/** <p>HBCI-Fehlercode. Diese Codes bestehen immer aus vier Ziffern. Die erste
Ziffer kennzeichnet dabei die Art:</p>
<ul>
<li><p>0 - Erfolgsmeldung</p></li>
<li><p>3 - Warnung</p></li>
<li><p>9 - Fehlermeldung</p></li>
</ul> */
public String code;
/** Segmentnummer in der gesendeten Nachricht, auf das sich dieser
R�ckgabewert bezieht. Falls es sich um einen globalen R�ckgabewert
handelt (d.h. einen, der sich auf die komplette Nachricht bezieht),
so ist dieser Wert <code>null</code>*/
public String segref;
/** Nummer des Datenelementes oder der Datenelementgruppe, auf das sich
dieser R�ckgabewert bezieht. Diese Information ist nicht in jedem
Fall vorhanden (z.B. wenn es sich um einen globalen Fehlercode handelt
oder wenn sich der R�ckgabewert auf ein komplettes Segment bezieht).
In einem solchen Fall ist dieser Wert <code>null</code>.*/
public String deref;
/** Beschreibender Text. Dieser Text wird vom HBCI-Server der Bank generiert. */
public String text;
/** Optionale Parameter, die im Zusammenhang mit <code>text</code> zu interpretieren sind. */
public String[] params;
/** Lowlevel-Name des Nachrichtenelementes, auf das sich dieser R�ckgabewert bezieht.
Dieser Name kann nicht in jedem Fall bestimmt werden, der Wert dieses Feldes
kann dann auch <code>null</code> sein. */
public String element;
/** Wird von der <em>HBCI4Java</em>-Dialog-Engine aufgerufen */
public HBCIRetVal(String segref,String deref,String element,String code,String text,String[] params)
{
if (params==null)
params=new String[0];
this.code=code;
this.segref=segref;
this.deref=deref;
this.text=text;
this.params=params;
this.element=element;
}
/** Wird von der <em>HBCI4Java</em>-Dialog-Engine aufgerufen */
public HBCIRetVal(Properties result,String header)
{
this(result,header,null);
}
/** Wird von der <em>HBCI4Java</em>-Dialog-Engine aufgerufen */
public HBCIRetVal(Properties result,String header,String segref)
{
this.segref=segref;
code=result.getProperty(header+".code");
if (code==null)
throw new HBCI_Exception("*** no valid error");
deref=result.getProperty(header+".ref");
text=result.getProperty(header+".text");
element=null;
if (segref!=null) {
String path=result.getProperty(segref+((deref!=null)?":"+deref:""));
String value=(path!=null)?result.getProperty("orig_"+path):null;
element=path+((value!=null)?("="+value):"");
}
ArrayList<String> a=new ArrayList<String>();
int i=0;
String parm;
while ((parm=result.getProperty(HBCIUtilsInternal.withCounter(header+".parm",i)))!=null) {
a.add(parm);
i++;
}
params=new String[0];
if (a.size()!=0)
params=(a.toArray(params));
}
/** Gibt diesen R�ckgabewert in einer lesbaren Darstellung zur�ck.
@return einen String, der alle Informationen dieses Objektes kurz
zusammenfasst. */
public String toString()
{
StringBuffer ret=new StringBuffer();
ret.append(code).append(":").append(text);
for (int i=0;i<params.length;i++) {
ret.append(" p:").append(params[i]);
}
if (segref!=null) {
ret.append(" (");
ret.append(segref);
if (deref!=null) {
ret.append(":");
ret.append(deref);
}
if (element!=null) {
ret.append(": ");
ret.append(element);
}
ret.append(")");
}
return ret.toString().trim();
}
/** Gibt zur�ck, ob dieser R�ckgabewert eine Erfolgsmeldung vom
HBCI-Server darstellt */
public boolean isSuccess()
{
return (code!=null) && (code.charAt(0)=='0');
}
/** Gibt zur�ck, ob dieser R�ckgabewert eine Warnung vom
HBCI-Server darstellt */
public boolean isWarning()
{
return (code!=null) && (code.charAt(0)=='3');
}
/** Gibt zur�ck, ob dieser R�ckgabewert eine HBCI-Fehlermeldung darstellt */
public boolean isError()
{
return (code!=null) && (code.charAt(0)=='9');
}
public boolean equals(Object o)
{
boolean ret;
if (o instanceof HBCIRetVal) {
boolean equal=true;
HBCIRetVal other=(HBCIRetVal)o;
equal&=(code ==null && other.code ==null) || (code !=null && other.code !=null && code.equals(other.code));
equal&=(text ==null && other.text ==null) || (text !=null && other.text !=null && text.equals(other.text));
equal&=(segref==null && other.segref==null) || (segref!=null && other.segref!=null && segref.equals(other.segref));
equal&=(deref ==null && other.deref ==null) || (deref !=null && other.deref !=null && deref.equals(other.deref));
ret=equal;
} else {
ret=super.equals(o);
}
return ret;
}
}