in struts/src/main/java/com/intellij/struts/core/JDOMClassExternalizer.java [24:109]
public static void writeExternal(Object data, Element parentNode) throws WriteExternalException {
Field[] fields = data.getClass().getFields();
for (Field field : fields) {
if (field.getName().indexOf('$') >= 0) continue;
int modifiers = field.getModifiers();
String value = null;
if ((modifiers & Modifier.PUBLIC) == 0 || (modifiers & Modifier.STATIC) != 0) continue;
field.setAccessible(true); // class might be non-public
Class type = field.getType();
try {
if (type.isPrimitive()) {
if (type.equals(byte.class)) {
value = Byte.toString(field.getByte(data));
}
else if (type.equals(short.class)) {
value = Short.toString(field.getShort(data));
}
else if (type.equals(int.class)) {
value = Integer.toString(field.getInt(data));
}
else if (type.equals(long.class)) {
value = Long.toString(field.getLong(data));
}
else if (type.equals(float.class)) {
value = Float.toString(field.getFloat(data));
}
else if (type.equals(double.class)) {
value = Double.toString(field.getDouble(data));
}
else if (type.equals(char.class)) {
value = "" + field.getChar(data);
}
else if (type.equals(boolean.class)) {
value = field.getBoolean(data) ? "true" : "false";
}
else {
continue;
}
}
else if (type.equals(String.class)) {
value = (String)field.get(data);
}
else if (type.equals(Color.class)) {
Color color = (Color)field.get(data);
if (color != null) {
value = Integer.toString(color.getRGB() & 0xFFFFFF, 16);
}
}
else if (Collection.class.isAssignableFrom(type)) {
Element element = new Element("option");
parentNode.addContent(element);
element.setAttribute("name", field.getName());
Collection<String> coll = (Collection)field.get(data);
for (String s : coll) {
Element val = new Element("option");
val.addContent(s);
element.addContent(val);
}
}
else {
Element element = new Element("option");
parentNode.addContent(element);
element.setAttribute("name", field.getName());
Object domValue = field.get(data);
if (domValue != null) {
Element valueElement = new Element("value");
element.addContent(valueElement);
writeExternal(domValue, valueElement);
}
continue;
}
}
catch (IllegalAccessException e) {
continue;
}
Element element = new Element("option");
parentNode.addContent(element);
element.setAttribute("name", field.getName());
if (value != null) {
element.setAttribute("value", value);
}
}
}