blob: e03ecbebd481c83fe462063ab7038344000f8532 [file] [log] [blame]
/* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.xmlbeans.samples.xmltree;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeSelectionModel;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
/**
* A tree view on XML, with nodes representing both elements and attributes. See
* {@link XmlEntry}and {@link XmlModel}for information on how information
* about the underlying XML is retrieved for use in the tree. Those classes use
* XMLBeans to provide a wrapper by which the tree exposes the underlying XML.
*/
final class XmlTree extends JTree
{
/**
* Receives <root> XML instance, executing methods that
* edit the received instance or create a new one.
*
* @param args An array in which the first item is a
* path to the XML instance file.
*/
public static void main(String[] args)
{
System.out.println("Creating XmlTree.\n");
File xmlFile = new File(args[0]);
XmlTreeFrame thisSample = new XmlTreeFrame(xmlFile);
}
/**
* Constructs the tree using <em>xmlFile</em> as an original source of
* nodes.
*
* @param xmlFile The XML file the new tree should represent.
*/
public XmlTree(File xmlFile)
{
setXmlFile(xmlFile);
}
/**
* Sets the XML file that should be used to build the tree; the tree will be
* refreshed to represent <em>xmlFile</em>.
*
* @param xmlFile The XML file the new tree should represent.
*/
public void setXmlFile(File xmlFile)
{
initComponents(xmlFile);
}
/**
* Parses <em>xmlFile</em> into XMLBeans types (XmlObject instances),
* returning the instance representing the root.
*
* @param xmlFile The XML file to parse.
* @return An XmlObject representing the root of the parsed XML.
*/
private static XmlObject parseXml(File xmlFile)
{
XmlObject xml = XmlObject.Factory.newInstance();
try
{
xml = XmlObject.Factory.parse(xmlFile);
} catch (XmlException xmle)
{
System.err.println(xmle.toString());
} catch (IOException ioe)
{
System.err.println(ioe.toString());
}
return xml;
}
/**
* Sets up the components that make up this tree.
*
* @param xmlFile The XML file the new tree should represent.
*/
private void initComponents(File xmlFile)
{
// Parse the XML create an XmlModel from its root.
XmlEntry rootEntry = new XmlEntry(parseXml(xmlFile));
XmlModel treemodel = new XmlModel(rootEntry);
// Set UI properties.
setModel(treemodel);
setRootVisible(true);
setShowsRootHandles(true);
setAutoscrolls(true);
setEditable(false);
getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
// Uncomment these lines to provide your own GIF files for
// tree icons.
// renderer.setLeafIcon(createImageIcon("images/leaf.gif"));
// renderer.setOpenIcon(createImageIcon("images/minus.gif"));
// renderer.setClosedIcon(createImageIcon("images/plus.gif"));
setCellRenderer(renderer);
setRootVisible(false);
setAutoscrolls(false);
}
/**
* Creates an icon from a path that points at a GIF file. This method is
* called to create tree node icons.
*
* @param path The path to a GIF file.
* @return An icon instance.
*/
private static ImageIcon createImageIcon(String path)
{
File imgFile = new File(path);
URL imgUrl = null;
try
{
imgUrl = imgFile.toURL();
} catch (MalformedURLException e)
{
e.printStackTrace();
}
if (imgUrl != null)
{
return new ImageIcon(imgUrl);
} else
{
System.err.println("Couldn't find file: " + path);
return null;
}
}
}