/* $Id: SyntaxCheck.java,v 1.1 2011/05/04 22:37:45 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.tools; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Enumeration; import java.util.Properties; import org.kapott.hbci.callback.HBCICallbackConsole; import org.kapott.hbci.comm.Comm; import org.kapott.hbci.manager.HBCIUtils; import org.kapott.hbci.manager.MsgGen; import org.kapott.hbci.protocol.MSG; import org.w3c.dom.Element; import org.w3c.dom.NodeList; public final class SyntaxCheck { private static String getArg(String[] args,int idx,String st) throws IOException { String ret=null; if (args!=null && idx<args.length) { ret=args[idx]; } else { System.out.print(st+": "); System.out.flush(); ret=new BufferedReader(new InputStreamReader(System.in)).readLine(); } return ret; } public static void main(String[] args) throws IOException { String ifilename=getArg(args,0,"Dateiname der Datei mit der HBCI-Nachricht"); String version=getArg(args,1,"HBCI-Version"); String msgName=getArg(args,2,"Name der Nachricht"); String checkSeq_st=getArg(args,3,"Sequenznummern validieren (0/1)"); boolean checkSeq=checkSeq_st.equals("1"); String checkValids_st=getArg(args,4,"Auf g�ltige Werte testen (0/1)"); boolean checkValids=checkValids_st.equals("1"); Properties props=new Properties(); props.setProperty("log.loglevel.default", "6"); HBCIUtils.init(props,new HBCICallbackConsole()); FileInputStream fi=new FileInputStream(ifilename); byte[] buffer=new byte[1024]; int len; StringBuffer st=new StringBuffer(); while ((len=fi.read(buffer))>0) { st.append(new String(buffer,0,len,Comm.ENCODING)); } fi.close(); MsgGen gen=new MsgGen(SyntaxCheck.class.getClassLoader().getResourceAsStream("hbci-"+version+".xml")); if (msgName!=null && msgName.length()!=0) { MSG msg=new MSG(msgName,st.toString(),st.length(),gen,checkSeq,checkValids); String st2=msg.toString(0); if (st2.equals(st.toString())) { System.out.println("ok"); } else { System.out.println("detected, but different in- and output"); System.out.println(st2); } Properties p=msg.getData(); ArrayList al=new ArrayList(); for (Enumeration e=p.propertyNames();e.hasMoreElements();) { al.add(e.nextElement()); } String[] sa=(String[])al.toArray(new String[al.size()]); Arrays.sort(sa); for (int i=0;i<sa.length;i++) { String value=p.getProperty(sa[i]); System.out.println(sa[i]+" = "+value+" ("+value.length()+" Bytes)"); } } else { NodeList list=gen.getSyntax().getElementsByTagName("MSGdef"); int size=list.getLength(); MSG msg; for (int i=0;i<size;i++) { msgName=((Element)list.item(i)).getAttribute("id"); System.out.println("checking for '"+msgName+"'"); try { msg=new MSG(msgName,st.toString(),st.length(),gen,checkSeq,checkValids); } catch (Exception e) { msg=null; } if (msg!=null) { String st2=msg.toString(0); if (st2.equals(st.toString())) { System.out.println("ok"); } else { System.out.println("detected, but different in- and output"); System.out.println(st2); } } } } } }