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;
*/
public class ObjectTraversal {
+ public static final Logger LOGGER = Logger.getLogger(ObjectTraversal.class
+ .getName());
+
/**
* Visitor interface to be implemented for object traversal.
*
boolean visitArray(Object aArray);
}
+ private int level;
private ObjectVisitor visitor;
private List<ObjectElem> excluded;
* Visitor to use.
*/
public ObjectTraversal(ObjectVisitor aVisitor) {
+ level = 0;
visitor = aVisitor;
excluded = new ArrayList<ObjectElem>();
}
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) {
return;
if (alreadyProcessed(aObject)) {
return;
}
+ if (LOGGER.isLoggable(Level.FINEST)) {
+ level++;
+ LOGGER.finest(indent() + "obj: " + aObject);
+ }
if (aObject instanceof List) {
if (visitor.visitList((List) aObject)) {
getter.getReturnType() != Void.class) {
if (visitor.mustVisit(getter)) {
+ if (LOGGER.isLoggable(Level.FINEST)) {
+ LOGGER
+ .finest(indent() + "method: " + getter.getName());
+ }
acceptMethod(aObject, getter);
}
}
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);
}
}
}
}
- private void acceptPlainOrCollection(Object value) {
- if (value instanceof Set) {
- visitor.visitSet((Set) value);
- processSet((Set) value);
- } else if (value instanceof List) {
- processList((List) value);
- } else if (value instanceof Map) {
- processMap((Map<?, ?>) value);
- } else if (value.getClass().isArray()) {
- processArray(value);
+ private void acceptPlainOrCollection(Object aValue) {
+ if (aValue instanceof Set) {
+ visitor.visitSet((Set) aValue);
+ processSet((Set) aValue);
+ } else if (aValue instanceof List) {
+ processList((List) aValue);
+ } else if (aValue instanceof Map) {
+ processMap((Map<?, ?>) aValue);
+ } else if (aValue.getClass().isArray()) {
+ processArray(aValue);
} else {
- accept(value);
+ accept(aValue);
}
}