/** * An alternative JTree outputter. This one makes a considerably more visual * pleasing JTree. * @author Matthew MacKenzie * License: Same as JDOM. */ package org.jdom.contrib.output; import java.util.Iterator; import java.util.List; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeNode; import org.jdom.input.SAXBuilder; import org.jdom.Document; import org.jdom.Attribute; import org.jdom.Element; public class JTreeOutputter { public JTreeOutputter() { } public JTreeOutputter(boolean toBeCompatible) { // just here to mimic the legacy JTreeOutputter } /** * Output a Document. * @param Document The document to transform to TreeNode. * @param DefaultMutableTreeNode The root tree node. * @return void */ public void output(Document doc, DefaultMutableTreeNode root) { processElement(doc.getRootElement(),root); } /** * Output an Element. * @param Element The element to transform to TreeNode. * @param DefaultMutableTreeNode The root tree node. * @return void */ public void output(Element el, DefaultMutableTreeNode root) { processElement(el, root); } protected void processElement(Element el, DefaultMutableTreeNode dmtn) { DefaultMutableTreeNode dmtnLocal = new DefaultMutableTreeNode(el.getName()); String elText = el.getTextTrim(); if (elText != null && !elText.equals("")) { dmtnLocal.add(new DefaultMutableTreeNode(elText)); } processAttributes(el, dmtnLocal); Iterator iter = el.getChildren().iterator(); while (iter.hasNext()) { Element nextEl = (Element)iter.next(); processElement(nextEl, dmtnLocal); } dmtn.add(dmtnLocal); } protected void processAttributes(Element el, DefaultMutableTreeNode dmtn) { Iterator atts = el.getAttributes().iterator(); while (atts.hasNext()) { Attribute att = (Attribute)atts.next(); DefaultMutableTreeNode node = new DefaultMutableTreeNode("@" + att.getName()); node.add(new DefaultMutableTreeNode(att.getValue())); dmtn.add(node); } } }