/* $Id: ShowCumulatedLowlevelParams.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.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Hashtable; import java.util.List; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** Dieses Tool ist nur f�r interne Verwendung bei der Entwicklung von HBCI4Java * gedacht. Damit l�sst sich pr�fen, ob die Highlevel-Klassen f�r die einzelnen * GVs tats�chlich alle m�glichen Lowlevel-Parameter eines bestimmten GV * kennen und mit richtigen Werten f�llen (jeweils abh�ngig von den bankseitig * unterst�tzten GV-Versionen) */ public class ShowCumulatedLowlevelParams { private static void extractParams(Document doc, Element node, String path, List<String> params) { NodeList childs=node.getChildNodes(); int l=childs.getLength(); for (int i=0; i<l; i++) { Node child=childs.item(i); if (child.getNodeType()==Node.ELEMENT_NODE) { Element ref=(Element)child; String refnode=ref.getNodeName(); String reftype=ref.getAttribute("type"); String refname=ref.getAttribute("name"); String refbez=(refname!=null && refname.length()!=0)?refname:reftype; String localPath=path; if (localPath.length()!=0) { localPath+="."; } localPath+=refbez; if (refnode.equals("DE")) { if (!params.contains(localPath)) { params.add(localPath); } } else if (refnode.equals("DEG")) { Element def=doc.getElementById(reftype); if (def==null) { // System.out.println("warning: type '"+reftype+"' referenced in '"+localPath+"' not found"); String p=localPath+" (+)"; if (!params.contains(p)) { params.add(p); } } else { extractParams(doc,def,localPath,params); } } } } } public static void main(String[] args) throws Exception { DocumentBuilderFactory fac=DocumentBuilderFactory.newInstance(); fac.setIgnoringComments(true); fac.setIgnoringElementContentWhitespace(true); fac.setNamespaceAware(false); fac.setValidating(false); DocumentBuilder builder=fac.newDocumentBuilder(); File f=new File(args[0]); Document doc=builder.parse(f); Element root=doc.getDocumentElement(); NodeList segdefs=root.getElementsByTagName("SEGdef"); int l=segdefs.getLength(); Map<String, List<String>> paramsByJob=new Hashtable<String, List<String>>(); for (int i=0; i<l; i++) { Element segdef=(Element)segdefs.item(i); String segdefid=segdef.getAttribute("id"); String segcode=null; String segversion=null; NodeList values=segdef.getElementsByTagName("value"); int l2=values.getLength(); for (int j=0; j<l2; j++) { Element value=(Element)values.item(j); String path=value.getAttribute("path"); if (path.equals("SegHead.code")) { segcode=value.getFirstChild().getNodeValue(); } else if (path.equals("SegHead.version")) { segversion=value.getFirstChild().getNodeValue(); } } if (segcode==null || segversion==null) { System.out.println("warning: SEGdef with id "+segdefid+" has no segcode or segversion"); continue; } String plainJobName=segdefid.substring(0,segdefid.length()-segversion.length()); List<String> params= paramsByJob.get(plainJobName); if (params==null) { params=new ArrayList<String>(); paramsByJob.put(plainJobName,params); } extractParams(doc, segdef,"",params); } String[] jobnames=paramsByJob.keySet().toArray(new String[0]); Arrays.sort(jobnames); l=jobnames.length; for (int i=0; i<l; i++) { String jobname=jobnames[i]; System.out.println(jobname+":"); List<String> params=paramsByJob.get(jobname); String[] _params= params.toArray(new String[0]); Arrays.sort(_params); int l2=_params.length; for (int j=0; j<l2; j++) { System.out.println(" "+_params[j]); } } } }