package org.zstack.utils.data;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class FieldPrinterImpl implements FieldPrinter {
private List<String> doPrint(Object obj, Class<?> clazz) {
try {
Field[] fields = clazz.getDeclaredFields();
List<String> ret = new ArrayList<String>(fields.length);
for (Field f : fields) {
f.setAccessible(true);
String name = f.getName();
Object value = f.get(obj);
if (f.getType().isArray()) {
if (value != null) {
List<Object> lst = new ArrayList<Object>(Array.getLength(value));
Collections.addAll(lst, (Object[])value);
value = lst;
}
}
ret.add(String.format("%s=%s", name, value));
}
return ret;
} catch (Exception e) {
e.printStackTrace();
return new ArrayList<String>(0);
}
}
@Override
public String print(Object obj) {
if (obj == null) {
return new ArrayList<String>(0).toString();
}
return doPrint(obj, obj.getClass()).toString();
}
@Override
public String print(Object obj, boolean recursive) {
if (obj == null) {
return new ArrayList<String>(0).toString();
}
Class<?> clazz = obj.getClass();
List<String> ret = new ArrayList<String>();
do {
ret.addAll(doPrint(obj, clazz));
clazz = clazz.getSuperclass();
} while (clazz != null && clazz != Object.class);
return ret.toString();
}
}