XML Tree: Simple XML utility class : XML Tree : XML : Java examples (example source code) Organized by topic

Java
C++
Java Home »  XML   » [  XML Tree  ]  Screenshots 
 



XML Tree: Simple XML utility class

/*
Java Swing, 2nd Edition
By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole
ISBN: 0-596-00408-7
Publisher: O'Reilly 
*/
// VSX2.java
//VSX2: A <b>Reasonably</b> Simple XML utility class.
//Currently this class has two main methods: parse() and write().
//Both work with the TreeModel class and are meant to help you
//view XML documents with JTree. This version will embed icons
//and tool tip text in nodes if <code>icon</code> or
//<code>tiptext</code> attributes are found in the tag.
//

import java.awt.Color;
import java.awt.Component;
import java.io.File;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.ToolTipManager;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreeModel;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class VSX2 {

  public TreeModel parse(String filename) {
    SAXParserFactory factory = SAXParserFactory.newInstance();
    XMLIconTreeHandler handler = new XMLIconTreeHandler();
    try {
      // Parse the input
      SAXParser saxParser = factory.newSAXParser();
      saxParser.parse(new File(filename), handler);
    catch (Exception e) {
      System.err.println("File Read Error: " + e);
      e.printStackTrace();
      return new DefaultTreeModel(new DefaultMutableTreeNode("error"));
    }
    return new DefaultTreeModel(handler.getRoot());
  }

  public static class XMLIconTreeHandler extends DefaultHandler {
    private DefaultMutableTreeNode root, currentNode;

    public DefaultMutableTreeNode getRoot() {
      return root;
    }

    // SAX Parser Handler methods...
    public void startElement(String namespaceURI, String lName, // local
        // name
        String qName, // qualified name
        Attributes attrsthrows SAXException {
      String eName = lName; // element name
      if ("".equals(eName))
        eName = qName;
      ITag t = new ITag(eName, attrs);
      DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(t);
      if (currentNode == null) {
        root = newNode;
      else {
        // must not be the root node...
        currentNode.add(newNode);
      }
      currentNode = newNode;
    }

    public void endElement(String namespaceURI, String sName, // simple name
        String qName // qualified name
    throws SAXException {
      currentNode = (DefaultMutableTreeNodecurrentNode.getParent();
    }

    public void characters(char buf[]int offset, int len)
        throws SAXException {
      String s = new String(buf, offset, len).trim();
      ((ITagcurrentNode.getUserObject()).addData(s);
    }
  }

  public static class ITag implements IconAndTipCarrier {
    private String name;

    private String data;

    private Attributes attr;

    private Icon icon;

    private String tipText;

    public ITag(String n, Attributes a) {
      name = n;
      attr = a;
      for (int i = 0; i < attr.getLength(); i++) {
        String aname = attr.getQName(i);
        String value = attr.getValue(i);
        if (aname.equals("icon")) {
          tipText = value;
          icon = new ImageIcon(value);
          break;
        }
      }
    }

    public String getName() {
      return name;
    }

    public Attributes getAttributes() {
      return attr;
    }

    public void setData(String d) {
      data = d;
    }

    public String getData() {
      return data;
    }

    public String getToolTipText() {
      return tipText;
    }

    public Icon getIcon() {
      return icon;
    }

    public void addData(String d) {
      if (data == null) {
        setData(d);
      else {
        data += d;
      }
    }

    public String getAttributesAsString() {
      StringBuffer buf = new StringBuffer(256);
      for (int i = 0; i < attr.getLength(); i++) {
        buf.append(attr.getQName(i));
        buf.append("=\"");
        buf.append(attr.getValue(i));
        buf.append("\"");
      }
      return buf.toString();
    }

    public String toString() {
      String a = getAttributesAsString();
      return name + ": " + a + (data == null "" " (" + data + ")");
    }
  }

  public static void main(String args[]) {
    if (args.length != 1) {
      System.err.println("Usage is: java VSX2 testfile.xml");
      System.exit(1);
    }
    JFrame frame = new JFrame("Tree Renderer Test");
    VSX2 parser = new VSX2();
    JTree tree = new JTree(parser.parse(args[0]));

    // Steal the default icons from the default renderer...
    DefaultTreeCellRenderer rend1 = new DefaultTreeCellRenderer();
    IconAndTipRenderer rend2 = new IconAndTipRenderer(rend1.getOpenIcon(),
        rend1.getClosedIcon(), rend1.getLeafIcon());
    tree.setCellRenderer(rend2);
    ToolTipManager.sharedInstance().registerComponent(tree);

    frame.getContentPane().add(new JScrollPane(tree));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300400);
    frame.setVisible(true);
  }
}

//IconAndTipCarrier.java
//A simple interface that can be used with IconAndTipRenderer
//tree cell renderer.

interface IconAndTipCarrier {
  public Icon getIcon();

  public String getToolTipText();
}

//IconAndTipRenderer.java
//A renderer for our tree cells that have icons and tooltips.
//

class IconAndTipRenderer extends JLabel implements TreeCellRenderer {

  Color backColor = new Color(0xFF0xCC0xFF);

  Icon openIcon, closedIcon, leafIcon;

  String tipText = "";

  public IconAndTipRenderer(Icon open, Icon closed, Icon leaf) {
    openIcon = open;
    closedIcon = closed;
    leafIcon = leaf;
    setBackground(backColor);
    setForeground(Color.black);
  }

  public Component getTreeCellRendererComponent(JTree tree, Object value,
      boolean selected, boolean expanded, boolean leaf, int row,
      boolean hasFocus) {
    setText(value.toString());
    if (selected) {
      setOpaque(true);
    else {
      setOpaque(false);
    }

    // Try to find an IconAndTipCarrier version of the current node.
    IconAndTipCarrier itc = null;
    if (value instanceof DefaultMutableTreeNode) {
      Object uo = ((DefaultMutableTreeNodevalue).getUserObject();
      if (uo instanceof IconAndTipCarrier) {
        itc = (IconAndTipCarrieruo;
      }
    else if (value instanceof IconAndTipCarrier) {
      itc = (IconAndTipCarriervalue;
    }
    if ((itc != null&& (itc.getIcon() != null)) {
      // Great! Use itc's values to customize this label
      setIcon(itc.getIcon());
      tipText = itc.getToolTipText();
    else {
      // Hmmm, nothing available, so rely on the defaults.
      tipText = " ";
      if (expanded) {
        setIcon(openIcon);
      else if (leaf) {
        setIcon(leafIcon);
      else {
        setIcon(closedIcon);
      }
    }
    return this;
  }

  // Override the default to send back different strings for folders and
  // leaves.
  public String getToolTipText() {
    return tipText;
  }
}

           
       
Related examples in the same category
1.  A simple XML parser that builds a tree from SAX events A simple XML parser that builds a tree from SAX events
2.  DOM Tree Walker Tree Model
3.  Demo Tree Walker Demo Tree Walker
4.  XML Tree View XML Tree View
5.  SAX Tree Viewer SAX Tree Viewer








Home| Contact Us
Copyright 2003 - 04 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.