/* $Id: HBCICallbackSwing.java,v 1.1 2011/05/04 22:37:52 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.callback; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Date; import java.util.Hashtable; import java.util.StringTokenizer; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; import org.kapott.hbci.exceptions.AbortedException; import org.kapott.hbci.exceptions.HBCI_Exception; import org.kapott.hbci.exceptions.InvalidUserDataException; import org.kapott.hbci.manager.HBCIUtils; import org.kapott.hbci.manager.HBCIUtilsInternal; import org.kapott.hbci.passport.AbstractPinTanPassport; import org.kapott.hbci.passport.HBCIPassport; import org.kapott.hbci.passport.INILetter; /** Default-Implementation einer Callback-Klasse f�r Anwendungen mit GUI. Diese Klasse �berschreibt die <code>callback()</code>-Methode. Ben�tigte Nutzereingaben werden hier nicht mehr �ber STDIN abgefragt, sondern es wird ein neues Top-Level-Window erzeugt, welches die entsprechende Meldung sowie ein Feld zur Eingabe der Antwort enth�lt. Kernel-Meldungen und erwartete Nutzeraktionen werden ebenfalls durch ein neues Top-Level-Window realisiert. Die Methoden <code>log()</code> und <code>status()</code> werden nicht �berschrieben, so dass diese weiterhin das Verhalten der {@link org.kapott.hbci.callback.HBCICallbackConsole}-Klasse zeigen. */ public class HBCICallbackSwing extends HBCICallbackConsole { public static final boolean ACTION_BLOCKING=true; public static final boolean ACTION_NOT_BLOCKING=false; public static final boolean DIALOG_MODAL=true; public static final boolean DIALOG_NOT_MODAL=false; private final class SyncObject { private boolean stopCalled=false; public synchronized void startWaiting() { if (!stopCalled) { try { wait(); } catch (Exception e) { throw new HBCI_Exception("*** error in sync object",e); } } } public synchronized void stopWaiting() { stopCalled=true; notify(); } } protected Hashtable<HBCIPassport, Hashtable<String, Object>> passports; public HBCICallbackSwing() { super(); passports=new Hashtable<HBCIPassport, Hashtable<String, Object>>(); } public void callback(final HBCIPassport passport,int reason,String msg,int datatype,StringBuffer retData) { if (msg==null) msg=""; Hashtable<String, Object> currentData= passports.get(passport); if (currentData==null) { currentData=new Hashtable<String, Object>(); currentData.put("passport",passport); currentData.put("dataRequested",Boolean.FALSE); currentData.put("proxyRequested",Boolean.FALSE); currentData.put("msgcounter",new Integer(0)); passports.put(passport,currentData); } currentData.put("reason",new Integer(reason)); currentData.put("msg",msg); if (retData!=null) currentData.put("retData",retData); try { switch (reason) { case NEED_PASSPHRASE_LOAD: case NEED_PASSPHRASE_SAVE: needSecret(currentData,"passphrase"); break; case NEED_SOFTPIN: needSecret(currentData,"softpin"); break; case NEED_PT_PIN: needSecret(currentData,"ptpin"); break; case NEED_PT_TAN: case NEED_PT_PHOTOTAN: needSecret(currentData,"pttan"); break; case NEED_COUNTRY: if (!((Boolean)currentData.get("dataRequested")).booleanValue()) needRDHData(currentData); retData.replace(0,retData.length(),(String)currentData.get("data_country")); break; case NEED_BLZ: if (!((Boolean)currentData.get("dataRequested")).booleanValue()) needRDHData(currentData); retData.replace(0,retData.length(),(String)currentData.get("data_blz")); break; case NEED_HOST: if (!((Boolean)currentData.get("dataRequested")).booleanValue()) needRDHData(currentData); retData.replace(0,retData.length(),(String)currentData.get("data_host")); break; case NEED_PORT: if (!((Boolean)currentData.get("dataRequested")).booleanValue()) needRDHData(currentData); retData.replace(0,retData.length(),(String)currentData.get("data_port")); break; case NEED_FILTER: if (!((Boolean)currentData.get("dataRequested")).booleanValue()) needRDHData(currentData); retData.replace(0,retData.length(),(String)currentData.get("data_filter")); break; case NEED_USERID: if (!((Boolean)currentData.get("dataRequested")).booleanValue()) needRDHData(currentData); retData.replace(0,retData.length(),(String)currentData.get("data_userid")); break; case NEED_CUSTOMERID: if (!((Boolean)currentData.get("dataRequested")).booleanValue()) needRDHData(currentData); retData.replace(0,retData.length(),(String)currentData.get("data_customerid")); break; case NEED_CHIPCARD: needAction(currentData,ACTION_NOT_BLOCKING,"chipcard"); break; case NEED_HARDPIN: needAction(currentData,ACTION_NOT_BLOCKING,"hardpin"); break; case NEED_REMOVE_CHIPCARD: needAction(currentData,ACTION_BLOCKING,"remove"); break; case HAVE_CHIPCARD: removeActionWindow(currentData,"chipcard"); break; case HAVE_HARDPIN: removeActionWindow(currentData,"hardpin"); break; case NEED_NEW_INST_KEYS_ACK: ackInstKeys(currentData,"ackinstkeys"); break; case HAVE_NEW_MY_KEYS: haveNewMyKeys(currentData,"ackmykeys"); break; case HAVE_INST_MSG: showInstMessage(currentData,"instmsg",retData!=null); break; case NEED_CONNECTION: case CLOSE_CONNECTION: showConnectionMessage(currentData,"connmsg"); break; case HAVE_CRC_ERROR: correctAccountData(currentData,"crcerror"); break; case HAVE_IBAN_ERROR: correctIBANData(currentData,"ibanerror"); break; case HAVE_ERROR: handleError(currentData,"error"); break; case NEED_SIZENTRY_SELECT: needSIZEntrySelect(currentData,"sizentryselect"); break; case NEED_PT_SECMECH: needPTSecMech(currentData,"pt_method"); break; case NEED_PROXY_USER: if (!((Boolean)currentData.get("proxyRequested")).booleanValue()) needProxyData(currentData); retData.replace(0,retData.length(),(String)currentData.get("proxy_user")); break; case NEED_PROXY_PASS: if (!((Boolean)currentData.get("proxyRequested")).booleanValue()) needProxyData(currentData); retData.replace(0,retData.length(),(String)currentData.get("proxy_pass")); break; case NEED_INFOPOINT_ACK: ackInfoPoint(currentData,"accinfopoint"); break; default: throw new HBCI_Exception(HBCIUtilsInternal.getLocMsg("EXCMSG_CALLB_UNKNOWN",Integer.toString(reason))); } } catch (Exception e) { throw new HBCI_Exception(HBCIUtilsInternal.getLocMsg("EXCMSG_CALLB_ERR"),e); } } private void needSecret(final Hashtable<String, Object> currentData,final String winname) { final SyncObject sync=new SyncObject(); final int[] aborted=new int[1]; aborted[0]=0; SwingUtilities.invokeLater(new Runnable() { public void run() { final Container win=createWin(currentData,"HBCI",winname); Box framebox=Box.createHorizontalBox(); win.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel((String)currentData.get("msg"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(10)); final JPasswordField input=new JPasswordField(10); mainbox.add(input); mainbox.add(Box.createVerticalStrut(8)); JPasswordField tempinput=null; if (((Integer)currentData.get("reason")).intValue()==NEED_PASSPHRASE_SAVE) { tempinput=new JPasswordField(10); mainbox.add(tempinput); mainbox.add(Box.createVerticalStrut(8)); } final JPasswordField input2=tempinput; box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton ok=new JButton("OK"); box2.add(ok); ((JComponent)win).getRootPane().setDefaultButton(ok); JButton cancel=new JButton(HBCIUtilsInternal.getLocMsg("CANCEL")); box2.add(cancel); box2.add(Box.createHorizontalGlue()); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String passphrase=String.valueOf(input.getPassword()); if (input2!=null) { String passphrase2=String.valueOf(input2.getPassword()); if (!passphrase.equals(passphrase2)) { aborted[0]=2; } } if (aborted[0]==0) { StringBuffer retData=(StringBuffer)currentData.get("retData"); retData.replace(0,retData.length(),passphrase); } removeWin(currentData,winname); sync.stopWaiting(); }}); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { removeWin(currentData,winname); aborted[0]=1; sync.stopWaiting(); }}); input.requestFocus(); drawWin(currentData,winname); }}); sync.startWaiting(); if (aborted[0]==1) throw new AbortedException(HBCIUtilsInternal.getLocMsg("EXCMSG_USR_ABORT")); else if (aborted[0]==2) throw new InvalidUserDataException(HBCIUtilsInternal.getLocMsg("EXCMSG_PWDONTMATCH")); } private void correctAccountData(final Hashtable<String, Object> currentData,final String winname) { final SyncObject sync=new SyncObject(); final boolean[] aborted=new boolean[1]; aborted[0]=false; SwingUtilities.invokeLater(new Runnable() { public void run() { final Container win=createWin(currentData,"HBCI",winname); Box framebox=Box.createHorizontalBox(); win.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel((String)currentData.get("msg"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(10)); JPanel table=new JPanel(new GridBagLayout()); mainbox.add(table); GridBagConstraints constr=new GridBagConstraints(); constr.anchor=GridBagConstraints.NORTHWEST; constr.insets=new Insets(2,2,2,2); final StringBuffer retData=(StringBuffer)currentData.get("retData"); int idx=retData.indexOf("|"); constr.gridx=0; constr.gridy=0; l=new JLabel(HBCIUtilsInternal.getLocMsg("BLZ")); table.add(l,constr); constr.gridx++; final JTextField blz=new JTextField(retData.substring(0,idx),10); table.add(blz,constr); constr.gridx=0; constr.gridy++; l=new JLabel(HBCIUtilsInternal.getLocMsg("ACCNUMBER")); table.add(l,constr); constr.gridx++; final JTextField number=new JTextField(retData.substring(idx+1),10); table.add(number,constr); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton ok=new JButton("OK"); box2.add(ok); ((JComponent)win).getRootPane().setDefaultButton(ok); JButton cancel=new JButton(HBCIUtilsInternal.getLocMsg("CANCEL")); box2.add(cancel); box2.add(Box.createHorizontalGlue()); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { retData.replace(0,retData.length(),blz.getText()+ "|"+ number.getText()); removeWin(currentData,winname); sync.stopWaiting(); }}); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { removeWin(currentData,winname); aborted[0]=true; sync.stopWaiting(); }}); blz.requestFocus(); drawWin(currentData,winname); }}); sync.startWaiting(); if (aborted[0]) throw new AbortedException(HBCIUtilsInternal.getLocMsg("EXCMSG_USR_ABORT")); } private void correctIBANData(final Hashtable<String, Object> currentData,final String winname) { final SyncObject sync=new SyncObject(); final boolean[] aborted=new boolean[1]; aborted[0]=false; SwingUtilities.invokeLater(new Runnable() { public void run() { final Container win=createWin(currentData,"HBCI",winname); Box framebox=Box.createHorizontalBox(); win.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel((String)currentData.get("msg"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(10)); JPanel table=new JPanel(new GridBagLayout()); mainbox.add(table); GridBagConstraints constr=new GridBagConstraints(); constr.anchor=GridBagConstraints.NORTHWEST; constr.insets=new Insets(2,2,2,2); final StringBuffer retData=(StringBuffer)currentData.get("retData"); constr.gridx=0; constr.gridy=0; l=new JLabel(HBCIUtilsInternal.getLocMsg("IBAN")); table.add(l,constr); constr.gridx++; final JTextField iban=new JTextField(retData.toString(),10); table.add(iban,constr); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton ok=new JButton("OK"); box2.add(ok); ((JComponent)win).getRootPane().setDefaultButton(ok); JButton cancel=new JButton(HBCIUtilsInternal.getLocMsg("CANCEL")); box2.add(cancel); box2.add(Box.createHorizontalGlue()); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { retData.replace(0,retData.length(),iban.getText()); removeWin(currentData,winname); sync.stopWaiting(); }}); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { removeWin(currentData,winname); aborted[0]=true; sync.stopWaiting(); }}); iban.requestFocus(); drawWin(currentData,winname); }}); sync.startWaiting(); if (aborted[0]) throw new AbortedException(HBCIUtilsInternal.getLocMsg("EXCMSG_USR_ABORT")); } private void needRDHData(final Hashtable<String, Object> currentData) { final SyncObject sync=new SyncObject(); final boolean[] aborted=new boolean[1]; aborted[0]=false; SwingUtilities.invokeLater(new Runnable() { public void run() { final Container win=createWin(currentData,"HBCI","rdhdata"); Box framebox=Box.createHorizontalBox(); win.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel(HBCIUtilsInternal.getLocMsg("CALLB_NEEDRDHDATA"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(10)); JPanel table=new JPanel(new GridBagLayout()); mainbox.add(table); mainbox.add(Box.createVerticalStrut(8)); GridBagConstraints constr=new GridBagConstraints(); constr.anchor=GridBagConstraints.NORTHWEST; constr.fill=GridBagConstraints.HORIZONTAL; constr.insets=new Insets(4,0,4,8); HBCIPassport passport=(HBCIPassport)currentData.get("passport"); constr.gridx=0;constr.gridy=0; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("COUNTRY")),constr); final JTextField input_country=new JTextField(passport.getCountry(),3); constr.gridx++; table.add(input_country,constr); constr.gridx=0;constr.gridy++; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("BLZ")),constr); final JTextField input_blz=new JTextField(passport.getBLZ(),25); constr.gridx++; table.add(input_blz,constr); constr.gridx=0;constr.gridy++; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("HOST")),constr); final JTextField input_host=new JTextField(passport.getHost(),25); constr.gridx++; table.add(input_host,constr); constr.gridx=0;constr.gridy++; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("PORT")),constr); final JTextField input_port=new JTextField(passport.getPort().toString(),25); constr.gridx++; table.add(input_port,constr); constr.gridx=0;constr.gridy++; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("FILTER")),constr); final JTextField input_filter=new JTextField(passport.getFilterType(),25); constr.gridx++; table.add(input_filter,constr); constr.gridx=0;constr.gridy++; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("USERID")),constr); final JTextField input_userid=new JTextField(passport.getUserId(),25); constr.gridx++; table.add(input_userid,constr); constr.gridx=0;constr.gridy++; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("CUSTOMERID")),constr); final JTextField input_customerid=new JTextField(passport.getCustomerId(),25); constr.gridx++;constr.weightx=1;constr.weighty=1; table.add(input_customerid,constr); box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton ok=new JButton("OK"); box2.add(ok); ((JComponent)win).getRootPane().setDefaultButton(ok); JButton cancel=new JButton(HBCIUtilsInternal.getLocMsg("CANCEL")); box2.add(cancel); box2.add(Box.createHorizontalGlue()); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { currentData.put("data_country",input_country.getText()); currentData.put("data_blz",input_blz.getText()); currentData.put("data_host",input_host.getText()); currentData.put("data_port",input_port.getText()); currentData.put("data_filter",input_filter.getText()); currentData.put("data_userid",input_userid.getText()); currentData.put("data_customerid",input_customerid.getText()); currentData.put("dataRequested",Boolean.TRUE); removeWin(currentData,"rdhdata"); sync.stopWaiting(); }}); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { removeWin(currentData,"rdhdata"); aborted[0]=true; sync.stopWaiting(); }}); input_country.requestFocus(); drawWin(currentData,"rdhdata"); }}); sync.startWaiting(); if (aborted[0]) throw new AbortedException(HBCIUtilsInternal.getLocMsg("EXCMSG_USR_ABORT")); } private void needProxyData(final Hashtable<String, Object> currentData) { final SyncObject sync=new SyncObject(); final boolean[] aborted=new boolean[1]; aborted[0]=false; SwingUtilities.invokeLater(new Runnable() { public void run() { final Container win=createWin(currentData,"HBCI","proxydata"); Box framebox=Box.createHorizontalBox(); win.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel(HBCIUtilsInternal.getLocMsg("CALLB_NEED_PROXYDATA"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(10)); JPanel table=new JPanel(new GridBagLayout()); mainbox.add(table); mainbox.add(Box.createVerticalStrut(8)); GridBagConstraints constr=new GridBagConstraints(); constr.anchor=GridBagConstraints.NORTHWEST; constr.fill=GridBagConstraints.HORIZONTAL; constr.insets=new Insets(4,0,4,8); AbstractPinTanPassport passport=(AbstractPinTanPassport)currentData.get("passport"); constr.gridx=0;constr.gridy=0; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("CALLB_PROXY_USERNAME")),constr); final JTextField input_user=new JTextField(passport.getProxyUser(),3); constr.gridx++; table.add(input_user,constr); constr.gridx=0;constr.gridy++; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("CALLB_PROXY_PASSWD")),constr); final JPasswordField input_pass=new JPasswordField(passport.getProxyPass(),25); constr.gridx++; table.add(input_pass,constr); box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton ok=new JButton("OK"); box2.add(ok); ((JComponent)win).getRootPane().setDefaultButton(ok); JButton cancel=new JButton(HBCIUtilsInternal.getLocMsg("CANCEL")); box2.add(cancel); box2.add(Box.createHorizontalGlue()); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { currentData.put("proxy_user",input_user.getText()); currentData.put("proxy_pass",new String(input_pass.getPassword())); removeWin(currentData,"proxydata"); sync.stopWaiting(); }}); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { removeWin(currentData,"proxydata"); aborted[0]=true; sync.stopWaiting(); }}); input_user.requestFocus(); drawWin(currentData,"proxydata"); }}); sync.startWaiting(); if (aborted[0]) throw new AbortedException(HBCIUtilsInternal.getLocMsg("EXCMSG_USR_ABORT")); } private void needAction(final Hashtable<String, Object> currentData,final boolean blocking,final String winname) { final SyncObject sync=new SyncObject(); SwingUtilities.invokeLater(new Runnable() { public void run() { Container tempWin=createWin(currentData,"HBCI",winname); Box framebox=Box.createHorizontalBox(); tempWin.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel((String)currentData.get("msg"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(10)); box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton cancel=new JButton(HBCIUtilsInternal.getLocMsg("CLOSE")); box2.add(cancel); box2.add(Box.createHorizontalGlue()); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { removeWin(currentData,winname); sync.stopWaiting(); }}); if (!blocking) { sync.stopWaiting(); } drawWin(currentData,winname); }}); sync.startWaiting(); } private void removeActionWindow(Hashtable<String, Object> currentData,String winname) { removeWin(currentData,winname); } private void ackInstKeys(final Hashtable<String, Object> currentData,final String winname) { final SyncObject sync=new SyncObject(); SwingUtilities.invokeLater(new Runnable() { public void run() { try { final Container win=createWin(currentData,"HBCI",winname); Box framebox=Box.createHorizontalBox(); win.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel(HBCIUtilsInternal.getLocMsg("CALLB_NEW_INST_KEYS"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(10)); JPanel table=new JPanel(new GridBagLayout()); mainbox.add(table); mainbox.add(Box.createVerticalStrut(8)); GridBagConstraints constr=new GridBagConstraints(); constr.anchor=GridBagConstraints.NORTHWEST; constr.fill=GridBagConstraints.HORIZONTAL; constr.insets=new Insets(4,0,4,8); HBCIPassport passport=(HBCIPassport)currentData.get("passport"); INILetter iniletter=new INILetter(passport,INILetter.TYPE_INST); String exp_st=HBCIUtils.data2hex(iniletter.getKeyExponentDisplay()); String mod_st=HBCIUtils.data2hex(iniletter.getKeyModulusDisplay()); String hash_st=HBCIUtils.data2hex(iniletter.getKeyHashDisplay()); Font font=new Font("Monospaced",Font.PLAIN,10); constr.gridx=0;constr.gridy=0;constr.gridheight=8; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("EXPONENT")),constr); constr.gridx++;constr.gridheight=1; for (int i=0;i<=exp_st.length()/3/16;i++) { if (i==0) constr.insets=new Insets(8,0,1,8); else constr.insets=new Insets(1,0,1,8); l=new JLabel(exp_st.substring(i*16*3, Math.min((i+1)*16*3-1, exp_st.length()))); l.setFont(font); l.setForeground(Color.BLUE); table.add(l,constr); constr.gridy++; } constr.gridx=0;constr.gridheight=8; constr.insets=new Insets(4,0,4,8); table.add(new JLabel(HBCIUtilsInternal.getLocMsg("MODULUS")),constr); constr.gridx++;constr.gridheight=1; for (int i=0;i<=mod_st.length()/3/16;i++) { if (i==0) constr.insets=new Insets(8,0,1,8); else constr.insets=new Insets(1,0,1,8); l=new JLabel(mod_st.substring(i*16*3, Math.min((i+1)*16*3-1, mod_st.length()))); l.setFont(font); l.setForeground(Color.BLUE); table.add(l,constr); constr.gridy++; } constr.gridx=0;constr.gridheight=2; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("HASH")),constr); constr.insets=new Insets(4,0,4,8); constr.gridx++;constr.gridheight=1; for (int i=0;i<=hash_st.length()/3/10;i++) { if (i==0) constr.insets=new Insets(8,0,1,8); else constr.insets=new Insets(1,0,1,8); l=new JLabel(hash_st.substring(i*10*3, Math.min((i+1)*10*3-1, hash_st.length()))); l.setFont(font); l.setForeground(Color.MAGENTA); table.add(l,constr); constr.gridy++; } box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton ok=new JButton("OK"); box2.add(ok); ((JComponent)win).getRootPane().setDefaultButton(ok); JButton cancel=new JButton(HBCIUtilsInternal.getLocMsg("CANCEL")); box2.add(cancel); box2.add(Box.createHorizontalGlue()); final StringBuffer retData=(StringBuffer)currentData.get("retData"); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { retData.replace(0,retData.length(),""); removeWin(currentData,winname); sync.stopWaiting(); }}); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { retData.replace(0,retData.length(),"ERROR"); removeWin(currentData,winname); sync.stopWaiting(); }}); ok.requestFocus(); drawWin(currentData,winname); } catch (Exception e) { throw new HBCI_Exception(HBCIUtilsInternal.getLocMsg("EXCMSG_CALLB_ERR"),e); } }}); sync.startWaiting(); } private void handleError(final Hashtable<String, Object> currentData,final String winname) { final SyncObject sync=new SyncObject(); SwingUtilities.invokeLater(new Runnable() { public void run() { try { final Container win=createWin(currentData,"HBCI",winname); Box framebox=Box.createHorizontalBox(); win.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel(HBCIUtilsInternal.getLocMsg("CALLB_ERROR_OCCURED"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(6)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel((String)currentData.get("msg"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(10)); box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton ok=new JButton(HBCIUtilsInternal.getLocMsg("IGNORE")); box2.add(ok); ((JComponent)win).getRootPane().setDefaultButton(ok); JButton cancel=new JButton(HBCIUtilsInternal.getLocMsg("ABORT")); box2.add(cancel); box2.add(Box.createHorizontalGlue()); final StringBuffer retData=(StringBuffer)currentData.get("retData"); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { retData.replace(0,retData.length(),""); removeWin(currentData,winname); sync.stopWaiting(); }}); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { retData.replace(0,retData.length(),"ERROR"); removeWin(currentData,winname); sync.stopWaiting(); }}); ok.requestFocus(); drawWin(currentData,winname); } catch (Exception e) { throw new HBCI_Exception(HBCIUtilsInternal.getLocMsg("EXCMSG_CALLB_ERR"),e); } }}); sync.startWaiting(); } private void haveNewMyKeys(final Hashtable<String, Object> currentData,final String winname) { final SyncObject sync=new SyncObject(); SwingUtilities.invokeLater(new Runnable() { public void run() { try { final Container win=createWin(currentData,"HBCI",winname); Box framebox=Box.createHorizontalBox(); win.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel(HBCIUtilsInternal.getLocMsg("CALLB_NEW_USER_KEYS"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(10)); JPanel table=new JPanel(new GridBagLayout()); mainbox.add(table); mainbox.add(Box.createVerticalStrut(8)); GridBagConstraints constr=new GridBagConstraints(); constr.anchor=GridBagConstraints.NORTHWEST; constr.fill=GridBagConstraints.HORIZONTAL; constr.insets=new Insets(4,0,4,8); HBCIPassport passport=(HBCIPassport)currentData.get("passport"); INILetter iniletter=new INILetter(passport,INILetter.TYPE_USER); String exp_st=HBCIUtils.data2hex(iniletter.getKeyExponentDisplay()); String mod_st=HBCIUtils.data2hex(iniletter.getKeyModulusDisplay()); String hash_st=HBCIUtils.data2hex(iniletter.getKeyHashDisplay()); Font font=new Font("Monospaced",Font.PLAIN,10); Date date=new Date(); constr.gridx=0;constr.gridy=0; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("DATE")),constr); constr.gridx++; table.add(new JLabel(HBCIUtils.date2StringLocal(date)),constr); constr.gridx=0;constr.gridy++; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("TIME")),constr); constr.gridx++; table.add(new JLabel(HBCIUtils.time2StringLocal(date)),constr); constr.gridx=0;constr.gridy++; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("BLZ")),constr); constr.gridx++; table.add(new JLabel(passport.getBLZ()),constr); constr.gridx=0;constr.gridy++; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("USERID")),constr); constr.gridx++; table.add(new JLabel(passport.getUserId()),constr); constr.gridx=0;constr.gridy++; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("KEYNUM")),constr); constr.gridx++; table.add(new JLabel(passport.getMyPublicSigKey().num),constr); constr.gridx=0;constr.gridy++; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("KEYVERSION")),constr); constr.gridx++; table.add(new JLabel(passport.getMyPublicSigKey().version),constr); constr.gridx=0;constr.gridy++;constr.gridheight=8; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("EXPONENT")),constr); constr.gridx++;constr.gridheight=1; for (int i=0;i<=exp_st.length()/3/16;i++) { if (i==0) constr.insets=new Insets(8,0,1,8); else constr.insets=new Insets(1,0,1,8); l=new JLabel(exp_st.substring(i*16*3, Math.min((i+1)*16*3-1, exp_st.length()))); l.setFont(font); l.setForeground(Color.BLUE); table.add(l,constr); constr.gridy++; } constr.gridx=0;constr.gridheight=8; constr.insets=new Insets(4,0,4,8); table.add(new JLabel(HBCIUtilsInternal.getLocMsg("MODULUS")),constr); constr.gridx++;constr.gridheight=1; for (int i=0;i<=mod_st.length()/3/16;i++) { if (i==0) constr.insets=new Insets(8,0,1,8); else constr.insets=new Insets(1,0,1,8); l=new JLabel(mod_st.substring(i*16*3, Math.min((i+1)*16*3-1, mod_st.length()))); l.setFont(font); l.setForeground(Color.BLUE); table.add(l,constr); constr.gridy++; } constr.gridx=0;constr.gridheight=2; table.add(new JLabel(HBCIUtilsInternal.getLocMsg("HASH")),constr); constr.insets=new Insets(4,0,4,8); constr.gridx++;constr.gridheight=1; for (int i=0;i<=hash_st.length()/3/10;i++) { if (i==0) constr.insets=new Insets(8,0,1,8); else constr.insets=new Insets(1,0,1,8); l=new JLabel(hash_st.substring(i*10*3, Math.min((i+1)*10*3-1, hash_st.length()))); l.setFont(font); l.setForeground(Color.MAGENTA); table.add(l,constr); constr.gridy++; } box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton ok=new JButton("OK"); box2.add(ok); box2.add(Box.createHorizontalGlue()); ((JComponent)win).getRootPane().setDefaultButton(ok); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { removeWin(currentData,winname); sync.stopWaiting(); }}); ok.requestFocus(); sync.stopWaiting(); drawWin(currentData,winname); } catch (Exception e) { throw new HBCI_Exception(HBCIUtilsInternal.getLocMsg("EXCMSG_CALLB_ERR"),e); } }}); sync.startWaiting(); } protected void showInstMessage(final Hashtable<String, Object> currentData,final String winname) { showInstMessage(currentData,winname,true); } protected void showInstMessage(final Hashtable<String, Object> currentData,final String winname,final boolean blocking) { final SyncObject sync=new SyncObject(); SwingUtilities.invokeLater(new Runnable() { public void run() { final int msgcounter=((Integer)currentData.get("msgcounter")).intValue(); final String winname2=winname+"_"+(msgcounter); final Container win=createWin(currentData,"HBCI",winname2); currentData.put("msgcounter",new Integer(msgcounter+1)); Box framebox=Box.createHorizontalBox(); win.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel label=new JLabel(HBCIUtilsInternal.getLocMsg("GUI_HAVEINSTMSG")); label.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(label); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(4)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel((String)currentData.get("msg"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton cancel=new JButton("OK"); box2.add(cancel); box2.add(Box.createHorizontalGlue()); ((JComponent)win).getRootPane().setDefaultButton(cancel); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { removeWin(currentData,winname2); sync.stopWaiting(); }}); if (!blocking) { sync.stopWaiting(); } drawWin(currentData,winname2); }}); sync.startWaiting(); } protected void showConnectionMessage(final Hashtable<String, Object> currentData,final String winname) { final SyncObject sync=new SyncObject(); SwingUtilities.invokeLater(new Runnable() { public void run() { final Container win=createWin(currentData,"HBCI",winname); Box framebox=Box.createHorizontalBox(); win.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel((String)currentData.get("msg"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton ok=new JButton("OK"); box2.add(ok); box2.add(Box.createHorizontalGlue()); ((JComponent)win).getRootPane().setDefaultButton(ok); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { removeWin(currentData,winname); sync.stopWaiting(); }}); drawWin(currentData,winname); }}); sync.startWaiting(); } private void needSIZEntrySelect(final Hashtable<String, Object> currentData,final String winname) { final SyncObject sync=new SyncObject(); final boolean[] aborted=new boolean[1]; aborted[0]=false; SwingUtilities.invokeLater(new Runnable() { public void run() { final Container win=createWin(currentData,"HBCI",winname); Box framebox=Box.createHorizontalBox(); win.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel((String)currentData.get("msg"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(10)); final StringBuffer retData=(StringBuffer)currentData.get("retData"); String[] tableCols={"ID",HBCIUtilsInternal.getLocMsg("BLZ"),HBCIUtilsInternal.getLocMsg("USERID")}; ArrayList<String[]> data=new ArrayList<String[]>(); StringTokenizer tok=new StringTokenizer(retData.toString(),"|"); while (tok.hasMoreTokens()) { String entry=tok.nextToken(); StringTokenizer tok2=new StringTokenizer(entry,";"); data.add(new String[] {tok2.nextToken(),tok2.nextToken(),tok2.nextToken()}); } String[][] tableData= data.toArray(new String[data.size()][]); final JTable table=new JTable(tableData,tableCols); table.setCellSelectionEnabled(false); table.setColumnSelectionAllowed(false); table.setRowSelectionAllowed(true); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); mainbox.add(table); mainbox.add(Box.createVerticalStrut(10)); box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton ok=new JButton("OK"); box2.add(ok); ((JComponent)win).getRootPane().setDefaultButton(ok); JButton cancel=new JButton(HBCIUtilsInternal.getLocMsg("CANCEL")); box2.add(cancel); box2.add(Box.createHorizontalGlue()); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { retData.replace(0,retData.length(),table.getModel().getValueAt(table.getSelectedRow(),0).toString()); removeWin(currentData,winname); sync.stopWaiting(); }}); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { removeWin(currentData,winname); aborted[0]=true; sync.stopWaiting(); }}); drawWin(currentData,winname); }}); sync.startWaiting(); if (aborted[0]) throw new AbortedException(HBCIUtilsInternal.getLocMsg("EXCMSG_USR_ABORT")); } private void needPTSecMech(final Hashtable<String, Object> currentData,final String winname) { final SyncObject sync=new SyncObject(); final boolean[] aborted=new boolean[1]; aborted[0]=false; SwingUtilities.invokeLater(new Runnable() { public void run() { final Container win=createWin(currentData,"HBCI",winname); Box framebox=Box.createHorizontalBox(); win.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel((String)currentData.get("msg"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(10)); final StringBuffer retData=(StringBuffer)currentData.get("retData"); String[] tableCols={"ID","Name"}; ArrayList<String[]> data=new ArrayList<String[]>(); String[] entries=retData.toString().split("\\|"); int len=entries.length; for (int i=0;i<len;i++) { String entry=entries[i]; String[] values=entry.split(":"); data.add(new String[] {values[0], values[1]}); } String[][] tableData= data.toArray(new String[data.size()][]); final JTable table=new JTable(tableData,tableCols); table.setCellSelectionEnabled(false); table.setColumnSelectionAllowed(false); table.setRowSelectionAllowed(true); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); mainbox.add(table); mainbox.add(Box.createVerticalStrut(10)); box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton ok=new JButton("OK"); box2.add(ok); ((JComponent)win).getRootPane().setDefaultButton(ok); JButton cancel=new JButton(HBCIUtilsInternal.getLocMsg("CANCEL")); box2.add(cancel); box2.add(Box.createHorizontalGlue()); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { retData.replace(0,retData.length(),table.getModel().getValueAt(table.getSelectedRow(),0).toString()); removeWin(currentData,winname); sync.stopWaiting(); }}); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { removeWin(currentData,winname); aborted[0]=true; sync.stopWaiting(); }}); drawWin(currentData,winname); }}); sync.startWaiting(); if (aborted[0]) throw new AbortedException(HBCIUtilsInternal.getLocMsg("EXCMSG_USR_ABORT")); } private void ackInfoPoint(final Hashtable<String, Object> currentData,final String winname) { final SyncObject sync=new SyncObject(); SwingUtilities.invokeLater(new Runnable() { public void run() { try { final Container win=createWin(currentData,"HBCI",winname); Box framebox=Box.createHorizontalBox(); win.add(framebox); framebox.add(Box.createHorizontalStrut(8)); Box mainbox=Box.createVerticalBox(); framebox.add(mainbox); framebox.add(Box.createHorizontalStrut(8)); mainbox.add(Box.createVerticalStrut(8)); Box box2=Box.createHorizontalBox(); mainbox.add(box2); JLabel l=new JLabel("Passport: "+ (String)((HBCIPassport)currentData.get("passport")).getClientData("init")); l.setFont(new Font("Arial",Font.PLAIN,10)); box2.add(Box.createHorizontalGlue()); box2.add(l); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(8)); box2=Box.createHorizontalBox(); mainbox.add(box2); box2.add(new JLabel(HBCIUtilsInternal.getLocMsg("GUI_ACKINFOPOINT"))); box2.add(Box.createHorizontalGlue()); mainbox.add(Box.createVerticalStrut(10)); box2=Box.createHorizontalBox(); mainbox.add(box2); mainbox.add(Box.createVerticalStrut(4)); box2.add(Box.createHorizontalGlue()); JButton yes=new JButton(HBCIUtilsInternal.getLocMsg("YES")); box2.add(yes); ((JComponent)win).getRootPane().setDefaultButton(yes); JButton no=new JButton(HBCIUtilsInternal.getLocMsg("NO")); box2.add(no); box2.add(Box.createHorizontalGlue()); final StringBuffer retData=(StringBuffer)currentData.get("retData"); yes.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { retData.replace(0,retData.length(),""); removeWin(currentData,winname); sync.stopWaiting(); }}); no.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { retData.replace(0,retData.length(),"ERROR"); removeWin(currentData,winname); sync.stopWaiting(); }}); yes.requestFocus(); drawWin(currentData,winname); } catch (Exception e) { throw new HBCI_Exception(HBCIUtilsInternal.getLocMsg("EXCMSG_CALLB_ERR"),e); } }}); sync.startWaiting(); } protected Container createWin(Hashtable<String, Object> currentData,String title,String winname) { JDialog swingDialog=new JDialog((JFrame)(null),title,DIALOG_MODAL); swingDialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); swingDialog.setResizable(false); currentData.put("win_"+winname,swingDialog); return swingDialog.getContentPane(); } protected void removeWin(Hashtable<String, Object> currentData,String winname) { JDialog swingDialog=(JDialog)currentData.get("win_"+winname); swingDialog.dispose(); } protected void drawWin(Hashtable<String, Object> currentData,String winname) { JDialog swingDialog=(JDialog)currentData.get("win_"+winname); swingDialog.pack(); swingDialog.setVisible(true); } }