package de.axone.tools; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Enumeration; public class Dumper { private DumpFormatter formatter = new DumpFormatter(); public <T> String dump( T o ){ return dump( o, true ); } public <T> String dump( T o, boolean recurse ){ StringBuilder result = new StringBuilder(); if( o == null ){ return "NULL"; } else if( o instanceof Class<?> ){ return ""; } else if( o instanceof String ){ return "\"" + o.toString() + "\""; } else if( o instanceof Number ){ return o.toString(); } else if( o instanceof Enumeration<?> ){ Enumeration<?> enu = (Enumeration<?>) o; result.append( '[' ); boolean first = true; while( enu.hasMoreElements() ){ if( first ) first=false; else result.append( ", " ); result.append( dump( enu.nextElement(), true ) ); } result.append( ']' ); return result.toString(); } else { if( ! recurse ) return ""; result.append( o.getClass().getName() ); result.append( "\n-----------------------\n" ); Class<?> c = o.getClass(); result.append( "Methods\n" ); for( Method m : c.getMethods() ){ result.append( formatter.format( m ) ); Class<?>[] p = m.getParameterTypes(); if( p.length == 0 && m.getName().matches( "^get.*" ) ){ try { Object res = m.invoke( o, (Object[])null ); result.append( ": " ).append( dump( res, false ) ); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } result.append( '\n' ); } return result.toString(); } } }