package org.knopflerfish.bundle.soap.desktop; import java.util.*; import java.io.*; public class PrintVisitor implements XSDVisitor { PrintWriter out; public PrintVisitor() { this(new PrintWriter(System.out)); } public PrintVisitor(PrintWriter out) { this.out = out; } public void visit(XSDObj obj, Object data, int level) { HashMap typeMap = (HashMap)data; String p = "org.knopflerfish.bundle.soap.desktop."; StringBuffer sb = new StringBuffer(); if(obj instanceof XSDElement) { XSDElement el = (XSDElement)obj; sb.append(obj.getClass().getName().substring(p.length())); sb.append(" "); sb.append(el.getName()); String type = el.getType(); if(type.startsWith("typens:")) { XSDElement ref =(XSDElement)typeMap.get(type.substring(7)); if(ref != null) { StringWriter sw = new StringWriter(); PrintVisitor pv = new PrintVisitor(new PrintWriter(sw)); XSDWalker.doVisit(ref, pv, typeMap, level + 1); sb.append("\n"); sb.append(sw.toString()); } else { sb.append(", unresolved " + type); } } else { if(!(obj instanceof XSDComplexType)) { if(!"".equals(el.getType())) { sb.append(", "); sb.append(el.getType()); } } } } else { sb.append(obj.getClass().getName().substring(p.length())); } out.println(indent(level) + sb.toString()); } String indent(int n) { StringBuffer sb = new StringBuffer(); while(n --> 0) { sb.append(" "); } return sb.toString(); } }