diff --git a/projects/samskivert/src/java/com/samskivert/util/ObjectUtil.java b/projects/samskivert/src/java/com/samskivert/util/ObjectUtil.java index 690a462a..43284959 100644 --- a/projects/samskivert/src/java/com/samskivert/util/ObjectUtil.java +++ b/projects/samskivert/src/java/com/samskivert/util/ObjectUtil.java @@ -1,8 +1,28 @@ // -// $Id: ObjectUtil.java,v 1.1 2003/08/18 21:53:59 ray Exp $ +// $Id: ObjectUtil.java,v 1.2 2004/02/25 13:19:49 mdb Exp $ +// +// samskivert library - useful routines for java programs +// Copyright (C) 2001 Michael Bayne +// +// This library is free software; you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as published +// by the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA package com.samskivert.util; +import java.lang.reflect.Field; +import java.io.PrintStream; + /** * Utility methods that don't fit anywhere else. */ @@ -15,4 +35,70 @@ public class ObjectUtil { return (o1 == null) ? (o2 == null) : o1.equals(o2); } + + /** + * Dumps the contents of the supplied object instance, listing the + * class name, hash code and toString() data for each + * field in the supplied object and then dumps each field in turn. + */ + public static void dumpInstance (PrintStream out, Object object) + { + dumpInstance(out, object, true); + } + + /** + * Dumps the contents of the supplied object instance, listing the + * class name, hash code and optionally, the toString() + * data for each field in the supplied object and then dumps each + * field in turn. + */ + public static void dumpInstance (PrintStream out, Object object, + boolean includeToString) + { + dumpInstance(out, object, includeToString, ""); + } + + /** + * Helper function. + */ + protected static void dumpInstance ( + PrintStream out, Object object, boolean includeToString, String indent) + { + // summarize the current object + summarizeObject(out, object, includeToString, indent); + // increment the indentation level + indent += " "; + // summarize the object's fields + Field[] fields = object.getClass().getDeclaredFields(); + for (int i = 0; i < fields.length; i++) { + try { + Object field = fields[i].get(object); + dumpInstance(out, field, includeToString, indent); + } catch (Exception e) { + out.println(indent + "*** unable to fetch field " + + "[field=" + fields[i] + ", error=" + e + "]"); + } + } + } + + /** + * Prints out the object class name, hash code and optionally the + * toString() data for the supplied object. + * + * @param out the print stream on which to dump the object. + * @param object the object to be dumped. + * @param includeToString true if the result of {@link + * Object#toString} should be included in the output. + * @param prefix a prefix to prepend to the output. + */ + public static void summarizeObject ( + PrintStream out, Object object, boolean includeToString, String prefix) + { + out.print(prefix + object.getClass().getName()); + out.print(" [" + object.hashCode()); + if (includeToString) { + out.print(", " + object.toString()); + } + out.println("]"); + } }