package org.vaadin.smartgwt.server.tree; import org.vaadin.smartgwt.server.grid.ListGridRecord; /* * Smart GWT (GWT for SmartClient) * Copyright 2008 and beyond, Isomorphic Software, Inc. * * Smart GWT is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3 * as published by the Free Software Foundation. Smart GWT is also * available under typical commercial license terms - see * http://smartclient.com/license * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ /** * Every node in the tree is represented by a TreeNode object which is an object literal with a set of properties that * configure the node. <p> When a Tree is supplied as {@link com.smartgwt.client.widgets.tree.TreeGrid#getData data} to * {@link com.smartgwt.client.widgets.tree.TreeGrid}, you can also set properties from {@link * com.smartgwt.client.widgets.grid.ListGridRecord} on the TreeNode (e.g. setting {@link * com.smartgwt.client.widgets.grid.ListGridRecord#getEnabled enabled}:<code>false</code> on the node). */ //@formatter:off public class TreeNode extends ListGridRecord { // public static TreeNode getOrCreateRef(JavaScriptObject jsObj) { // if(jsObj == null) return null; // RefDataClass obj = RefDataClass.getRef(jsObj); // if(obj != null && obj instanceof TreeNode) { // obj.setJsObj(jsObj); // return (TreeNode) obj; // } else { // return new TreeNode(jsObj); // } // } public TreeNode(){ } // public TreeNode(JavaScriptObject jsObj){ // super(jsObj); // } // ********************* Properties / Attributes *********************** /** * Governs whether dragged data (typically other <code>treeNode</code>s) may be dropped over this node. Only has an effect * if this node is displayed in a {@link com.smartgwt.client.widgets.tree.TreeGrid} where {@link * com.smartgwt.client.widgets.tree.TreeGrid#getCanAcceptDroppedRecords canAcceptDroppedRecords}, {@link * com.smartgwt.client.widgets.tree.TreeGrid#getCanReorderRecords canReorderRecords} or {@link * com.smartgwt.client.widgets.tree.TreeGrid#getCanReparentNodes canReparentNodes} is true. * <p><b>Note : </b> This is an advanced setting</p> * * @param canAcceptDrop canAcceptDrop Default value is null */ public void setCanAcceptDrop(Boolean canAcceptDrop) { setAttribute("canAcceptDrop", canAcceptDrop); } /** * Governs whether dragged data (typically other <code>treeNode</code>s) may be dropped over this node. Only has an effect * if this node is displayed in a {@link com.smartgwt.client.widgets.tree.TreeGrid} where {@link * com.smartgwt.client.widgets.tree.TreeGrid#getCanAcceptDroppedRecords canAcceptDroppedRecords}, {@link * com.smartgwt.client.widgets.tree.TreeGrid#getCanReorderRecords canReorderRecords} or {@link * com.smartgwt.client.widgets.tree.TreeGrid#getCanReparentNodes canReparentNodes} is true. * * * @return Boolean */ public Boolean getCanAcceptDrop() { return getAttributeAsBoolean("canAcceptDrop"); } /** * Governs whether this node can be dragged. Only has an effect if this node is displayed in a {@link * com.smartgwt.client.widgets.tree.TreeGrid} where {@link com.smartgwt.client.widgets.tree.TreeGrid#getCanDragRecordsOut * canDragRecordsOut}, {@link com.smartgwt.client.widgets.tree.TreeGrid#getCanReorderRecords canReorderRecords} or {@link * com.smartgwt.client.widgets.tree.TreeGrid#getCanReparentNodes canReparentNodes} is <code>true</code>. * <p><b>Note : </b> This is an advanced setting</p> * * @param canDrag canDrag Default value is null */ public void setCanDrag(Boolean canDrag) { setAttribute("canDrag", canDrag); } /** * Governs whether this node can be dragged. Only has an effect if this node is displayed in a {@link * com.smartgwt.client.widgets.tree.TreeGrid} where {@link com.smartgwt.client.widgets.tree.TreeGrid#getCanDragRecordsOut * canDragRecordsOut}, {@link com.smartgwt.client.widgets.tree.TreeGrid#getCanReorderRecords canReorderRecords} or {@link * com.smartgwt.client.widgets.tree.TreeGrid#getCanReparentNodes canReparentNodes} is <code>true</code>. * * * @return Boolean */ public Boolean getCanDrag() { return getAttributeAsBoolean("canDrag"); } /** * Default property name denoting whether this record is enabled. Property name may be modified for some grid via {@link * com.smartgwt.client.widgets.grid.ListGrid#getRecordEnabledProperty recordEnabledProperty}. * * @param enabled enabled Default value is null * @see <a href="http://www.smartclient.com/smartgwt/showcase/#grid_interaction_disabled_rows" target="examples">Disabled rows Example</a> */ public void setEnabled(Boolean enabled) { setAttribute("enabled", enabled); } /** * Default property name denoting whether this record is enabled. Property name may be modified for some grid via {@link * com.smartgwt.client.widgets.grid.ListGrid#getRecordEnabledProperty recordEnabledProperty}. * * * @return Boolean * @see <a href="http://www.smartclient.com/smartgwt/showcase/#grid_interaction_disabled_rows" target="examples">Disabled rows Example</a> */ public Boolean getEnabled() { return getAttributeAsBoolean("enabled"); } /** * This Property allows the developer to customize the icon displayed next to a node. Set <code>node.icon</code> to the URL * of the desired icon to display and it will be shown instead of the standard {@link * com.smartgwt.client.widgets.tree.TreeGrid#getNodeIcon nodeIcon} for this node.<br> Note that if {@link * com.smartgwt.client.widgets.tree.TreeNode#getShowOpenIcon showOpenIcon} and/or {@link * com.smartgwt.client.widgets.tree.TreeNode#getShowDropIcon showDropIcon} is true for this node, customized icons for * folder nodes will be appended with the {@link com.smartgwt.client.widgets.tree.TreeGrid#getOpenIconSuffix * openIconSuffix} or {@link com.smartgwt.client.widgets.tree.TreeGrid#getDropIconSuffix dropIconSuffix} suffixes on state * change as with the standard {@link com.smartgwt.client.widgets.tree.TreeGrid#getFolderIcon folderIcon} for this * treeGrid. Also note that for custom folder icons, the {@link * com.smartgwt.client.widgets.tree.TreeGrid#getClosedIconSuffix closedIconSuffix} will never be appended. <P>You can * change the name of this property by setting {@link com.smartgwt.client.widgets.tree.TreeGrid#getCustomIconProperty * customIconProperty}. * * @param icon icon Default value is null */ public void setIcon(String icon) { setAttribute("icon", icon); } /** * This Property allows the developer to customize the icon displayed next to a node. Set <code>node.icon</code> to the URL * of the desired icon to display and it will be shown instead of the standard {@link * com.smartgwt.client.widgets.tree.TreeGrid#getNodeIcon nodeIcon} for this node.<br> Note that if {@link * com.smartgwt.client.widgets.tree.TreeNode#getShowOpenIcon showOpenIcon} and/or {@link * com.smartgwt.client.widgets.tree.TreeNode#getShowDropIcon showDropIcon} is true for this node, customized icons for * folder nodes will be appended with the {@link com.smartgwt.client.widgets.tree.TreeGrid#getOpenIconSuffix * openIconSuffix} or {@link com.smartgwt.client.widgets.tree.TreeGrid#getDropIconSuffix dropIconSuffix} suffixes on state * change as with the standard {@link com.smartgwt.client.widgets.tree.TreeGrid#getFolderIcon folderIcon} for this * treeGrid. Also note that for custom folder icons, the {@link * com.smartgwt.client.widgets.tree.TreeGrid#getClosedIconSuffix closedIconSuffix} will never be appended. <P>You can * change the name of this property by setting {@link com.smartgwt.client.widgets.tree.TreeGrid#getCustomIconProperty * customIconProperty}. * * * @return String */ // public String getIcon() { // return getAttributeAsString("icon"); // } /** * Provides a name for the node that is unique among it's immediate siblings, thus allowing a unique path to be used to * identify the node, similar to a file system. See {@link com.smartgwt.client.widgets.tree.Tree#getPath Tree.getPath}. * <p> If the nameProperty is not set on a given node, the {@link com.smartgwt.client.widgets.tree.TreeNode#getId id} will * be used instead. If this is also missing, {@link com.smartgwt.client.widgets.tree.Tree#getName Tree.getName} and {@link * com.smartgwt.client.widgets.tree.Tree#getPath Tree.getPath} will auto-generate a unique name for you. Thus names are * not required, but if the dataset you are using already has usable names for each node, using them can make APIs such as * {@link com.smartgwt.client.widgets.tree.Tree#find Tree.find} more useful. Alternatively, if your dataset has unique ids * consider providing those as {@link com.smartgwt.client.widgets.tree.TreeNode#getId id}. <P> If a value provided for the * nameProperty of a node (e.g. node.name) is not a string, it will be converted to a string by the Tree via ""+value. <p> * This property is also used as the default title for the node (see {@link com.smartgwt.client.widgets.tree.Tree#getTitle * Tree.getTitle}) if {@link com.smartgwt.client.widgets.tree.TreeNode#getTitle title} is not specified. <p> Note: the name * of this property can be changed by setting {@link com.smartgwt.client.widgets.tree.Tree#getNameProperty nameProperty}. * * @param name name Default value is null, but see below * @see com.smartgwt.client.widgets.tree.Tree#setNameProperty * @see com.smartgwt.client.widgets.tree.Tree#setPathDelim * @see com.smartgwt.client.widgets.tree.Tree#getPath * @see com.smartgwt.client.widgets.tree.Tree#getTitle */ public void setName(String name) { setAttribute("name", name); } /** * Provides a name for the node that is unique among it's immediate siblings, thus allowing a unique path to be used to * identify the node, similar to a file system. See {@link com.smartgwt.client.widgets.tree.Tree#getPath Tree.getPath}. * <p> If the nameProperty is not set on a given node, the {@link com.smartgwt.client.widgets.tree.TreeNode#getId id} will * be used instead. If this is also missing, {@link com.smartgwt.client.widgets.tree.Tree#getName Tree.getName} and {@link * com.smartgwt.client.widgets.tree.Tree#getPath Tree.getPath} will auto-generate a unique name for you. Thus names are * not required, but if the dataset you are using already has usable names for each node, using them can make APIs such as * {@link com.smartgwt.client.widgets.tree.Tree#find Tree.find} more useful. Alternatively, if your dataset has unique ids * consider providing those as {@link com.smartgwt.client.widgets.tree.TreeNode#getId id}. <P> If a value provided for the * nameProperty of a node (e.g. node.name) is not a string, it will be converted to a string by the Tree via ""+value. <p> * This property is also used as the default title for the node (see {@link com.smartgwt.client.widgets.tree.Tree#getTitle * Tree.getTitle}) if {@link com.smartgwt.client.widgets.tree.TreeNode#getTitle title} is not specified. <p> Note: the name * of this property can be changed by setting {@link com.smartgwt.client.widgets.tree.Tree#getNameProperty nameProperty}. * * * @return String * @see com.smartgwt.client.widgets.tree.Tree#getNameProperty * @see com.smartgwt.client.widgets.tree.Tree#getPathDelim * @see com.smartgwt.client.widgets.tree.Tree#getPath * @see com.smartgwt.client.widgets.tree.Tree#getTitle */ public String getName() { return getAttributeAsString("name"); } /** * For folder nodes showing custom icons (set via {@link com.smartgwt.client.widgets.tree.TreeNode#getIcon icon}), this * property allows the developer to specify on a per-node basis whether a drop state icon should be displayed when the * user drop-hovers over this folder.<br> Set <code>node.showDropIcon</code> to true to show the drop state icon, or false * to suppress this.<br> If not specified, this behavior is determined by {@link * com.smartgwt.client.widgets.tree.TreeGrid#getShowCustomIconDrop showCustomIconDrop} for this node. <P>You can change the * name of this property by setting {@link com.smartgwt.client.widgets.tree.TreeGrid#getCustomIconDropProperty * customIconDropProperty}. * <p><b>Note : </b> This is an advanced setting</p> * * @param showDropIcon showDropIcon Default value is false * @see com.smartgwt.client.widgets.tree.TreeGrid#setCustomIconProperty * @see com.smartgwt.client.widgets.tree.TreeGrid#setShowCustomIconDrop */ public void setShowDropIcon(Boolean showDropIcon) { setAttribute("showDropIcon", showDropIcon); } /** * For folder nodes showing custom icons (set via {@link com.smartgwt.client.widgets.tree.TreeNode#getIcon icon}), this * property allows the developer to specify on a per-node basis whether a drop state icon should be displayed when the * user drop-hovers over this folder.<br> Set <code>node.showDropIcon</code> to true to show the drop state icon, or false * to suppress this.<br> If not specified, this behavior is determined by {@link * com.smartgwt.client.widgets.tree.TreeGrid#getShowCustomIconDrop showCustomIconDrop} for this node. <P>You can change the * name of this property by setting {@link com.smartgwt.client.widgets.tree.TreeGrid#getCustomIconDropProperty * customIconDropProperty}. * * * @return Boolean * @see com.smartgwt.client.widgets.tree.TreeGrid#getCustomIconProperty * @see com.smartgwt.client.widgets.tree.TreeGrid#getShowCustomIconDrop */ public Boolean getShowDropIcon() { return getAttributeAsBoolean("showDropIcon"); } /** * For folder nodes showing custom icons (set via {@link com.smartgwt.client.widgets.tree.TreeNode#getIcon icon}), this * property allows the developer to specify on a per-node basis whether an open state icon should be displayed when the * folder is open. Set <code>node.showOpenIcon</code> to true to show the open state icons, or false to suppress this.<br> * If not specified, this behavior is determined by {@link com.smartgwt.client.widgets.tree.TreeGrid#getShowCustomIconOpen * showCustomIconOpen} for this node. <P>You can change the name of this property by setting {@link * com.smartgwt.client.widgets.tree.TreeGrid#getCustomIconOpenProperty customIconOpenProperty}. * <p><b>Note : </b> This is an advanced setting</p> * * @param showOpenIcon showOpenIcon Default value is false * @see com.smartgwt.client.widgets.tree.TreeGrid#setCustomIconProperty * @see com.smartgwt.client.widgets.tree.TreeGrid#setShowCustomIconOpen */ public void setShowOpenIcon(Boolean showOpenIcon) { setAttribute("showOpenIcon", showOpenIcon); } /** * For folder nodes showing custom icons (set via {@link com.smartgwt.client.widgets.tree.TreeNode#getIcon icon}), this * property allows the developer to specify on a per-node basis whether an open state icon should be displayed when the * folder is open. Set <code>node.showOpenIcon</code> to true to show the open state icons, or false to suppress this.<br> * If not specified, this behavior is determined by {@link com.smartgwt.client.widgets.tree.TreeGrid#getShowCustomIconOpen * showCustomIconOpen} for this node. <P>You can change the name of this property by setting {@link * com.smartgwt.client.widgets.tree.TreeGrid#getCustomIconOpenProperty customIconOpenProperty}. * * * @return Boolean * @see com.smartgwt.client.widgets.tree.TreeGrid#getCustomIconProperty * @see com.smartgwt.client.widgets.tree.TreeGrid#getShowCustomIconOpen */ public Boolean getShowOpenIcon() { return getAttributeAsBoolean("showOpenIcon"); } /** * The title of the node as it should appear next to the node icon in the {@link com.smartgwt.client.widgets.tree.Tree}. * If left unset, the value of {@link com.smartgwt.client.widgets.tree.TreeNode#getName name} is used by default. See the * description in {@link com.smartgwt.client.widgets.tree.Tree#getTitle Tree.getTitle} for full details. <p> Note: the name * of this property can be changed by setting {@link com.smartgwt.client.widgets.tree.Tree#getTitleProperty titleProperty}. * * @param title title Default value is null * @see com.smartgwt.client.widgets.tree.Tree#setTitleProperty * @see com.smartgwt.client.widgets.tree.Tree#getTitle */ public void setTitle(String title) { setAttribute("title", title); } /** * The title of the node as it should appear next to the node icon in the {@link com.smartgwt.client.widgets.tree.Tree}. * If left unset, the value of {@link com.smartgwt.client.widgets.tree.TreeNode#getName name} is used by default. See the * description in {@link com.smartgwt.client.widgets.tree.Tree#getTitle Tree.getTitle} for full details. <p> Note: the name * of this property can be changed by setting {@link com.smartgwt.client.widgets.tree.Tree#getTitleProperty titleProperty}. * * * @return String * @see com.smartgwt.client.widgets.tree.Tree#getTitleProperty * @see com.smartgwt.client.widgets.tree.Tree#getTitle */ public String getTitle() { return getAttributeAsString("title"); } // ********************* Methods *********************** // ********************* Static Methods *********************** // *********************************************************** /** * Constructor * * @param name the name */ public TreeNode(String name) { setName(name); } /** * Constructor * * @param name the name * @param children the children nodes */ public TreeNode(String name, TreeNode... children) { setName(name); setChildren(children); } /** * For trees with {@link com.smartgwt.client.widgets.tree.Tree#getModelType modelType} "parent", this property * specifies the unique ID of this node. The unique ID of a node, together with the unique ID of its parent (see * {@link com.smartgwt.client.widgets.tree.TreeNode#getParentId parentId}) is used by {@link * com.smartgwt.client.widgets.tree.Tree#linkNodes} to link a list of nodes into a tree. <p> Note: the name of this * property can be changed by setting {@link com.smartgwt.client.widgets.tree.Tree#getIdField idField}. * * @param id id Default value is null */ public void setID(String id) { setAttribute("id", id); } /** * For trees with modelType "parent", this property specifies unique parent ID of this node. The unique ID of a * node, together with the unique ID of its parent is used by {@link com.smartgwt.client.widgets.tree.Tree#linkNodes} * to link a list of nodes into a tree. <p> Note: the name of this property can be changed by setting {@link * com.smartgwt.client.widgets.tree.Tree#getParentIdField parentIdField}. * * @param parentId parentId Default value is null */ public void setParentID(String parentID) { setAttribute("parentId", parentID); } /** * Set to <code>true</code> to explicitly mark this node as a folder. See {@link * com.smartgwt.client.widgets.tree.Tree#isFolder} for a full description of how the {@link * com.smartgwt.client.widgets.tree.Tree} determines whether a node is a folder or not. <p> Note: the name of this * property can be changed by setting {@link com.smartgwt.client.widgets.tree.Tree#getIsFolderProperty * isFolderProperty}. * * @param isFolder isFolder Default value is null */ public void setIsFolder(boolean isFolder) { setAttribute("isFolder", isFolder); } /** * For trees with the modelType "children", this property specifies the children of this TreeNode. <p> Note: the * name of this property can be changed by setting {@link com.smartgwt.client.widgets.tree.Tree#getChildrenProperty * childrenProperty} * * @param children children Default value is null */ public void setChildren(TreeNode[] children) { setAttribute("children", children); } //TODO getChildren }