(no commit message)
[utils] / support / general / src / main / java / org / wamblee / reflection / ObjectTraversal.java
index d5955fc34d1c71b11cda7460a42eb147efe0bb9e..7b63729e425a3d459546041371fd466ea4157561 100644 (file)
@@ -25,6 +25,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.Map.Entry;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.wamblee.general.ObjectElem;
 
@@ -47,6 +49,8 @@ import org.wamblee.general.ObjectElem;
  * @author Erik Brakkee
  */
 public class ObjectTraversal {
+    
+    public static final Logger LOGGER = Logger.getLogger(ObjectTraversal.class.getName());
 
     /**
      * Visitor interface to be implemented for object traversal.
@@ -128,6 +132,7 @@ public class ObjectTraversal {
         boolean visitArray(Object aArray);
     }
 
+    private int level;
     private ObjectVisitor visitor;
     private List<ObjectElem> excluded;
 
@@ -138,6 +143,7 @@ public class ObjectTraversal {
      *            Visitor to use.
      */
     public ObjectTraversal(ObjectVisitor aVisitor) {
+        level = 0;
         visitor = aVisitor;
         excluded = new ArrayList<ObjectElem>();
     }
@@ -151,6 +157,14 @@ public class ObjectTraversal {
     public void addExcludedObject(Object aObject) {
         excluded.add(new ObjectElem(aObject));
     }
+    
+    private String indent() { 
+        StringBuffer buf = new StringBuffer();
+        for (int i = 1; i < level; i++) { 
+            buf.append("    ");
+        }
+        return buf.toString();
+    }
 
     public void accept(Object aObject) {
         if (aObject == null) {
@@ -169,6 +183,10 @@ public class ObjectTraversal {
         if (alreadyProcessed(aObject)) {
             return;
         }
+        if ( LOGGER.isLoggable(Level.FINEST)) {
+            level++;
+            LOGGER.finest(indent() + "obj: " + aObject);
+        }
 
         if (aObject instanceof List) {
             if (visitor.visitList((List) aObject)) {
@@ -207,6 +225,9 @@ public class ObjectTraversal {
                 getter.getReturnType() != Void.class) {
 
                 if (visitor.mustVisit(getter)) {
+                    if ( LOGGER.isLoggable(Level.FINEST)) { 
+                        LOGGER.finest(indent() + "method:  " + getter.getName());
+                    }
                     acceptMethod(aObject, getter);
                 }
             }
@@ -219,6 +240,9 @@ public class ObjectTraversal {
             if (!Modifier.isStatic(modifiers) && !Modifier.isFinal(modifiers)) {
                 field.setAccessible(true);
                 if (visitor.mustVisit(field)) {
+                    if ( LOGGER.isLoggable(Level.FINEST)) { 
+                        LOGGER.finest(indent() + "field:  " + field.getName());
+                    }
                     acceptField(aObject, field);
                 }
             }