package org.basex.gui.layout; import static org.basex.util.Token.*; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeWillExpandListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.ExpandVetoException; import org.basex.data.Data; import org.basex.data.MetaData; /** * JTree node for representing database content (raw files / documents). * * @author BaseX Team 2005-12, BSD License * @author Lukas Kircher */ public abstract class TreeNode extends DefaultMutableTreeNode implements TreeWillExpandListener { /** Node name. */ public final byte[] name; /** Relative path to this node. Starts with one slash, no trailing slashes. * File / folder name is not part of the path. */ final byte[] path; /** Tree reference for lazy loading. */ final BaseXTree tree; /** Data reference. */ final Data data; /** * Constructor. * @param nm displayed node name * @param pth folder path * @param bxt tree reference * @param d data reference */ TreeNode(final byte[] nm, final byte[] pth, final BaseXTree bxt, final Data d) { name = nm; path = pth; tree = bxt; data = d; tree.addTreeWillExpandListener(this); } /** * Prepares the given path to be used as a tree node. The returned path looks * the following: * the path ... * 1. is relative to the database root directory * 2. has one leading slash * 3. has no trailing slashes, no matter if it represents folder or file * @param path path to be prepared * @return path */ public static byte[] preparePath(final byte[] path) { String p = MetaData.normPath(string(path)); if(p.endsWith("/")) p = p.substring(0, p.length() - 1); return concat(SLASH, token(p)); } /** * Returns the complete path (path + name) of this node as a string. * @return path string */ public String path() { return string(preparePath(concat(concat(path, SLASH), name))); } /** * Lazy loading. */ abstract void load(); @Override public void treeWillExpand(final TreeExpansionEvent e) throws ExpandVetoException { if(equals(e.getPath().getLastPathComponent())) load(); } @Override public void treeWillCollapse(final TreeExpansionEvent e) throws ExpandVetoException { } @Override public String toString() { return string(name); } }