/* $Id: HBCIUtilsInternal.java,v 1.1 2011/05/04 22:37:47 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.manager; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.MessageFormat; import java.util.Hashtable; import java.util.Locale; import java.util.Map; import java.util.MissingResourceException; import java.util.Properties; import java.util.ResourceBundle; import org.kapott.hbci.callback.HBCICallback; import org.kapott.hbci.passport.HBCIPassport; import org.kapott.hbci.passport.HBCIPassportInternal; public class HBCIUtilsInternal { public static Properties blzs; public static Map<String,BankInfo> banks = null; public static Hashtable<ThreadGroup, HBCICallback> callbacks; // threadgroup->callbackObject public static Hashtable<ThreadGroup, ResourceBundle> locMsgs; // threadgroup->resourceBundle public static Hashtable<ThreadGroup, Locale> locales; // threadgroup->Locale private static InfoPointConnector infoPointConnector; public static String bigDecimal2String(BigDecimal value) { DecimalFormat format=new DecimalFormat("0.##"); DecimalFormatSymbols symbols=format.getDecimalFormatSymbols(); symbols.setDecimalSeparator('.'); format.setDecimalFormatSymbols(symbols); format.setDecimalSeparatorAlwaysShown(false); return format.format(value); } /** * Liefert die Zeile aus der blz.properties mit der angegebenen BLZ. * @param blz die BLZ. * @return die Zeile aus der blz.properties * @deprecated Bitte {@link HBCIUtils#getBankInfo(String)} verwenden. */ public static String getBLZData(String blz) { return blz!=null?blzs.getProperty(blz,"|||||"):"|||||"; } /** * Liefert den n-ten Datensatz (beginnend bei 1) aus der Zeile. * @param st die Zeile. * @param idx der Index, beginnend bei 1. * @return der Wert oder Leerstring. * @deprecated Bitte {@link HBCIUtils#getBankInfo(String)} verwenden. */ public static String getNthToken(String st,int idx) { String[] parts=st.split("\\|"); String ret=null; if ((idx-1)<parts.length) { ret=parts[idx-1]; } else { ret=""; } return ret; } /** * Liefert das Pruefziffern-Verfahren fuer diese Bank. * @param blz die BLZ. * @return das Pruefziffern-Verfahren fuer diese Bank. */ public static String getAlgForBLZ(String blz) { BankInfo info = banks.get(blz); if (info == null) return ""; return info.getChecksumMethod() != null ? info.getChecksumMethod() : ""; } public static HBCICallback getCallback() { ThreadGroup group=Thread.currentThread().getThreadGroup(); return callbacks.get(group); } public static String getLocMsg(String key) { ThreadGroup group=Thread.currentThread().getThreadGroup(); try { return locMsgs.get(group).getString(key); } catch (MissingResourceException re) { // tolerieren wir HBCIUtils.log(re,HBCIUtils.LOG_ERR); return key; } } public static String getLocMsg(String key,Object o) { return HBCIUtilsInternal.getLocMsg(key,new Object[] {o}); } public static String getLocMsg(String key,Object[] o) { return MessageFormat.format(getLocMsg(key),o); } public static boolean ignoreError(HBCIPassport passport,String paramName,String msg) { boolean ret=false; String paramValue=HBCIUtils.getParam(paramName,"no"); if (paramValue.equals("yes")) { HBCIUtils.log(msg,HBCIUtils.LOG_ERR); HBCIUtils.log("ignoring error because param "+paramName+"=yes",HBCIUtils.LOG_ERR); ret=true; } else if (paramValue.equals("callback")) { StringBuffer sb=new StringBuffer(); getCallback().callback(passport, HBCICallback.HAVE_ERROR, msg, HBCICallback.TYPE_BOOLEAN, sb); if (sb.length()==0) { HBCIUtils.log(msg,HBCIUtils.LOG_ERR); HBCIUtils.log("ignoring error because param "+paramName+"=callback",HBCIUtils.LOG_ERR); ret=true; } } return ret; } public static long string2Long(String st,long factor) { BigDecimal result = new BigDecimal(st); result = result.multiply(new BigDecimal(factor)); return result.longValue(); } public static String withCounter(String st, int idx) { return st + ((idx!=0)?"_"+Integer.toString(idx+1):""); } public static String[] getNextRelativePathElem(String currentPath,String targetPath) { String[] ret=null; if (targetPath.startsWith(currentPath+".")) { ret=new String[2]; String subPath=targetPath.substring(currentPath.length()+1); int dotPosi=subPath.indexOf('.'); if (dotPosi==-1) { dotPosi=subPath.length(); } String nextPath=subPath.substring(0,dotPosi); String nextName=nextPath; int underscorePosi=nextPath.lastIndexOf('_'); if (underscorePosi!=-1) { nextName=nextPath.substring(0,underscorePosi); } ret[0]=nextName; ret[1]=nextPath; } return ret; } public static int getPosiOfNextDelimiter(String st, int posi) { int len=st.length(); boolean quoting=false; while (posi<len) { char ch=st.charAt(posi); if (!quoting) { if (ch=='?') { quoting=true; } else if (ch=='@') { int endpos=st.indexOf('@',posi+1); String binlen_st=st.substring(posi+1,endpos); int binlen=Integer.parseInt(binlen_st); posi+=binlen_st.length()+1+binlen; } else if (ch=='\'' || ch=='+' || ch==':') { // Ende gefunden break; } } else { quoting=false; } posi++; } return posi; } public static String ba2string(byte[] ba) { StringBuffer ret=new StringBuffer(); for (int i=0;i<ba.length;i++) { int x=ba[i]; if (x<0) { x+=256; } String st=Integer.toString(x,16); if (st.length()==1) { st="0"+st; } ret.append(st+" "); } return ret.toString(); } public static String stripLeadingZeroes(String st) { String ret=null; if (st!=null) { int start=0; int l=st.length(); while (start<l && st.charAt(start)=='0') { start++; } ret=st.substring(start); } return ret; } private static synchronized InfoPointConnector getInfoPointConnector() { if (infoPointConnector==null) { infoPointConnector=new InfoPointConnector(); } return infoPointConnector; } public static void infoPointSendBPD(HBCIPassportInternal passport, Properties msgData) { if (HBCIUtils.getParam("infoPoint.enabled", "0").equals("1")) { getInfoPointConnector().sendBPD(passport, msgData); } } public static void infoPointSendPublicKeys(HBCIPassportInternal passport, Properties msgData) { if (HBCIUtils.getParam("infoPoint.enabled", "0").equals("1")) { getInfoPointConnector().sendPublicKeys(passport, msgData); } } }