001: /*
002: ItsNat Java Web Application Framework
003: Copyright (C) 2007 Innowhere Software Services S.L., Spanish Company
004: Author: Jose Maria Arranz Santamaria
005:
006: This program is free software: you can redistribute it and/or modify
007: it under the terms of the GNU Affero General Public License as published by
008: the Free Software Foundation, either version 3 of the License, or
009: (at your option) any later version. See the GNU Affero General Public
010: License for more details. See the copy of the GNU Affero General Public License
011: included in this program. If not, see <http://www.gnu.org/licenses/>.
012: */
013:
014: package org.itsnat.core.domutil;
015:
016: import org.w3c.dom.Element;
017:
018: /**
019: * Used by {@link ElementTreeNode} objects to obtain the required
020: * element of the tree node markup.
021: *
022: * @see org.itsnat.core.ItsNatDocument#createDefaultElementTreeNodeStructure()
023: * @author Jose Maria Arranz Santamaria
024: */
025: public interface ElementTreeNodeStructure {
026: /**
027: * Returns the content element of a tree node.
028: *
029: * <p>The intend of the content element is to contain the markup of handle,
030: * icon and label, it does not contain the child nodes if any. Should be return null
031: * if these constrains can not be accomplished (take account that handle and icon may be optional).</p>
032: *
033: * <p>Default implementation returns the first child element of the
034: * effective tree node parent element if tree node is not part of a tree-table.
035: * If a tree-table returns the first <td> if parent tree node element
036: * is an HTML row otherwise returns the parent element (<code>treeNode</code>).</p>
037: *
038: * <p>The "effective" tree node parent element
039: * differs from <code>treeNode</code> when this node is an HTML row, in this
040: * case the effective node parent is the first child <td></p>
041: *
042: * @param treeNode the target tree node.
043: * @param nodeParent the element containing the tree node markup.
044: * Is a hint, if provided should be obtained by calling <code>treeNode.getParentElement()</code>.
045: * @return the content element. May be null (rare case).
046: */
047: public Element getContentElement(ElementTreeNode treeNode,
048: Element nodeParent);
049:
050: /**
051: * Returns the handle element of a tree node.
052: *
053: * <p>The handle element is the element containing the markup of the tree node handle,
054: * this handle is usually used to control "folders".</p>
055: *
056: * <p>Default implementation returns the first child element of the content
057: * element or null if no handle is detected in the content markup.</p>
058: *
059: * @param treeNode the target tree node.
060: * @param nodeParent the element containing the tree node markup.
061: * Is a hint, if provided should be obtained by calling <code>treeNode.getParentElement()</code>.
062: * @return the handle element. May be null (no handle).
063: */
064: public Element getHandleElement(ElementTreeNode treeNode,
065: Element nodeParent);
066:
067: /**
068: * Returns the icon element of a tree node.
069: *
070: * <p>The icon element is the element containing the markup of the tree node icon,
071: * this icon is usually used to show the type of node (a folder a final leaf etc).</p>
072: *
073: * <p>Default implementation returns the next sibling of the handle
074: * element or null if no icon is detected in the content markup.</p>
075: *
076: * @param treeNode the target tree node.
077: * @param nodeParent the element containing the tree node markup.
078: * Is a hint, if provided should be obtained by calling <code>treeNode.getParentElement()</code>.
079: * @return the icon element. May be null (no icon).
080: */
081: public Element getIconElement(ElementTreeNode treeNode,
082: Element nodeParent);
083:
084: /**
085: * Returns the label element of a tree node.
086: *
087: * <p>The label element is the element containing the markup of the tree node text info.</p>
088: *
089: * <p>Default implementation returns the next sibling of the icon
090: * element, or the content element itself if no icon and handle is detected.</p>
091: *
092: * @param treeNode the target tree node.
093: * @param nodeParent the element containing the tree node markup.
094: * Is a hint, if provided should be obtained by calling <code>treeNode.getParentElement()</code>.
095: * @return the label element. May be null (rare case).
096: */
097: public Element getLabelElement(ElementTreeNode treeNode,
098: Element nodeParent);
099:
100: /**
101: * Returns the element containing the child tree nodes of the specified tree node.
102: *
103: * <p>Default implementation returns null if the tree node is part
104: * of a tree-table, otherwise returns the next sibling of the content
105: * element.</p>
106: *
107: * <p>If not a tree-table and a null is returned, then
108: * the tree node cannot have child nodes.</p>
109: *
110: * @param treeNode the target tree node.
111: * @param nodeParent the element containing the tree node markup.
112: * Is a hint, if provided should be obtained by calling <code>treeNode.getParentElement()</code>.
113: * @return the element containing the child list. May be null (is a tree-table or tree node has not child nodes).
114: */
115: public Element getChildListElement(ElementTreeNode treeNode,
116: Element nodeParent);
117: }
|