package ch20annotation.display;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Description of this file.
*
* @author XiongNeng
* @version 1.0
* @since 14-3-24
*/
public class DisplayUtil {
static Set<Class> classes = new HashSet<Class>() {{
add(Integer.TYPE);
add(Integer.class);
add(Long.TYPE);
add(Long.class);
add(String.class);
add(Short.TYPE);
add(Short.class);
add(Character.TYPE);
add(Character.class);
add(Byte.TYPE);
add(Byte.class);
add(Float.TYPE);
add(Float.class);
add(Double.TYPE);
add(Double.class);
add(Boolean.TYPE);
add(Boolean.class);
}};
public static void feedList(List<MonitorNode> disList, List<MonitorNode> thrList, Object val) {
Class cl = val.getClass();
try {
for (Field f : cl.getDeclaredFields()) {
if (classes.contains(f.getType()) || List.class.isInstance(f.get(val))) {
Display display = f.getAnnotation(Display.class);
if (display != null) {
if (display.threshold() >= 0) {
thrList.add(new MonitorNode(
display.name(), String.valueOf(f.get(val)), display.threshold()));
} else {
disList.add(new MonitorNode(display.name(), String.valueOf(f.get(val)), -1));
}
}
} else {
feedList(disList, thrList, f.get(val));
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
public static class MonitorNode {
public String name;
public String value;
public double threshold;
public MonitorNode(String name, String value, double threshold) {
this.name = name;
this.value = value;
this.threshold = threshold;
}
}
public static void main(String[] args) {
Dea.Logging ll = new Dea.Logging();
ll.filename = "ll.filename";
ll.level = "INFO";
Dea.Config cc = new Dea.Config();
cc.logging = ll;
cc.price = 22.22;
cc.request_name = "request_name";
cc.years = 4444L;
Dea dea = new Dea();
dea.beautiful = true;
dea.config = cc;
dea.core = 1;
dea.cpu = 0.2;
dea.name = "dea name";
dea.uuid = "ADGDDDDDDDDDDDDDDXX";
dea.uris = new ArrayList<String>() {{
add("api.orchard.com");
add("ddd");
}};
List<MonitorNode> dList = new ArrayList<>();
List<MonitorNode> sList = new ArrayList<>();
feedList(dList, sList, dea);
for (MonitorNode node : dList) {
System.out.println(node.name);
System.out.println(node.value);
}
System.out.println("======================================");
for (MonitorNode node : sList) {
System.out.println(node.name);
System.out.println(node.value);
System.out.println(node.threshold);
}
}
}