package abbot.editor; import java.awt.*; import java.io.*; import java.util.*; import abbot.script.*; import abbot.finder.Hierarchy; /** Provides support for writing out a GUI hierarchy as XML. */ public class HierarchyWriter { private Hierarchy hierarchy; public HierarchyWriter(Hierarchy h) { this.hierarchy = h; } /** Write to the given writer the GUI hierarchy represented by the given * set of root windows. */ public void writeHierarchy(Writer writer) throws IOException { Resolver r = new Script(hierarchy); writer.write("<awtHierarchy>\r\n"); Iterator iter = hierarchy.getRoots().iterator(); while (iter.hasNext()) { writeComponent(writer, r, (Window)iter.next(), 1); } writer.write("</awtHierarchy>\r\n"); writer.close(); } // FIXME should include java.awt.MenuBar private void writeComponent(Writer writer, Resolver r, Component c, int level) throws IOException { ComponentReference ref = new ComponentReference(r, c); final String INDENT = " "; String xml = ref.toXMLString(); for (int i=0;i < level;i++) { writer.write(INDENT); } Collection set = hierarchy.getComponents(c); if (set.size() != 0) { writer.write(xml.substring(0, xml.length() - 2)); writer.write(">\r\n"); Iterator iter = set.iterator(); while (iter.hasNext()) { writeComponent(writer, r, (Component)iter.next(), level + 1); } for (int i=0;i < level;i++) { writer.write(INDENT); } writer.write("</component>\r\n"); } else { writer.write(xml); writer.write("\r\n"); } } }