public static void writeExternal()

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);
      }
    }
  }