Nodes in the tree
Hi,
Database: ORacle 11g
Query1:
SELECT rank() OVER (PARTITION BY mgr ORDER BY empno) r,
empno, ename,mgr FROM emp
start with mgr=7839
connect by prior empno = mgr
Result set:
r empno ename mgr
1
7788
SCOTT
7566
2
7902
FORD
7566
1
7499
ALLEN
7698
2
7521
WARD
7698
3
7654
MARTIN
7698
4
7844
TURNER
7698
5
7900
JAMES
7698
1
7934
MILLER
7782
1
7876
ADAMS
7788
1
7566
JONES
7839
2
7698
BLAKE
7839
3
7782
CLARK
7839
1
7369
SMITH
7902
Query2:
SELECT LTRIM(SYS_CONNECT_BY_PATH(r, '.'), '.') node ,
LPAD (' ', 2 * (LEVEL - 1)) || mgr , struc.*
FROM
SELECT rank() OVER (PARTITION BY mgr ORDER BY empno) r,
empno, ename,mgr FROM emp
start with mgr=7839
connect by prior empno = mgr
) struc
start with mgr=7839
connect by prior empno = mgr
Result set:
node mgr r empno ename mgr
1
7839
1
7566
JONES
7839
1.1
7566
1
7788
SCOTT
7566
1.1.1
7788
1
7876
ADAMS
7788
1.2
7566
2
7902
FORD
7566
1.2.1
7902
1
7369
SMITH
7902
2
7839
2
7698
BLAKE
7839
2.1
7698
1
7499
ALLEN
7698
2.2
7698
2
7521
WARD
7698
2.3
7698
3
7654
MARTIN
7698
2.4
7698
4
7844
TURNER
7698
2.5
7698
5
7900
JAMES
7698
3
7839
3
7782
CLARK
7839
3.1
7782
1
7934
MILLER
7782
Is this representation of node column is correct?
Can anyone pplease explain to me step by step how the above query2 executes
Thanks
Hi,
GopalaKrishna wrote:
Hi Frank,
Actually I thought there might be some standard representation of node structure in hierarchical tree.That's why I have asked is that representation of node structure correct or not?
Sorry I am newbie in this concepts.
I was expecting the below type of result set but it turned out as above result set in original request.More over I did nt understand sys_connect_by_path at that time I will get back to you once I understand the previous request of mine where you explained it nicely...
1
7839
1.1
7566
1.1.1
7788
1.1.1.1
7876
1.1.2
7902
1.1.2.1
7369
1.2
7698
1.2.1
7900
1.2.2
7521
1.2.3
7499
1.2.4
7654
1.2.5
7844
1.3
7782
1.3.1
7934
Sometimes people attach numbers to the tree like you did, but most of the time they don't find it necessary.
So, you were expecting to see 14 rows of output, starting with the node that represents 'KING'. Instead, you got 13 rows, starting with the people who report directly to 'KING'. If you want to start with 'KING', then change the START WITH clause to start with 'KING':
WITH got_child_num AS
SELECT empno, mgr, ename
, ROW_NUMBER () OVER ( PARTITION BY mgr
ORDER BY empno
) AS child_num
FROM scott.emp
SELECT SUBSTR ( SYS_CONNECT_BY_PATH (child_num, '.')
, 2
) AS node
, LPAD ( ' '
, 2 * (LEVEL - 1)
) || empno AS iempno
, empno, ename, mgr
FROM got_child_num
START WITH mgr IS NULL
CONNECT BY mgr = PRIOR empno
Output:
NODE IEMPNO EMPNO ENAME MGR
1 7839 7839 KING
1.1 7566 7566 JONES 7839
1.1.1 7788 7788 SCOTT 7566
1.1.1.1 7876 7876 ADAMS 7788
1.1.2 7902 7902 FORD 7566
1.1.2.1 7369 7369 SMITH 7902
1.2 7698 7698 BLAKE 7839
1.2.1 7499 7499 ALLEN 7698
1.2.2 7521 7521 WARD 7698
1.2.3 7654 7654 MARTIN 7698
1.2.4 7844 7844 TURNER 7698
1.2.5 7900 7900 JAMES 7698
1.3 7782 7782 CLARK 7839
1.3.1 7934 7934 MILLER 7782
I find it rather neat how the first 2 columns stay a fixed difference apart in this output. As the node column gets bigger or smaller, there is correspondingly more or less padding in the iempno column.
Similar Messages
-
Displaying the entire text of a tree node when the tree isn�t wide enough
Hi,
I have a JTree displayed in a JScrollPane, so there is a chance that some of the tree data may be hidden if the tree's width is insufficient, so when the user moves the cursor over a tree node whose text is not completely visible (cut off by the right edge of the scroll pane and/or window), a tooltip is displayed to show the entire node text. So far so good!
If the user double click a node in the tree a new window is supposed to be opened. This works fine if the tooltip hasn�t been displayed jet, but if it has then the user has to click 3 times to open the window.
The first time to remove the tooltip and the next 2 opens the window.
How can I awoid this?
Thanks!!!!
:-)LisaAny ideas, please?
-
JTree - How to Expand all Nodes in the Tree
I have a tree that has one primary node, two sub-nodes, and multiple sub-sub-nodes under those. I want to expand (show) all these nodes in the tree when the tree first loads. I tried expandRow() but that only seems to expand one row at a time by entering a single integer for the row. Is there any way to expand all rows/nodes when loading the tree?
see
http://forum.java.sun.com/thread.jsp?forum=57&thread=148793 -
JTree - need to get the value of a node at a specific node in the tree
For Example here is a tree:
Root
-Item1
A
B
C
-Item2
A
B
C
Scenario: Somebody selects B in Item2 from the tree and drags it to a JList. Need to be able to tell the JList that the B came from Item2 and not Item1. So how do I get the Item1, Item2 value? Thanks in advance for all your help.
Here is the code I am working with...so I have a TreeSelectionEvent(e), a DefaultMutableTreeNode(node) and my JTree(mainTree)
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) mainTree.getLastSelectedPathComponent();
getChildren(node);public void valueChanged(TreeSelectionEvent e) {
javax.swing.tree.TreePath path = e.getPath();
...Then use path.getLastPathComponent() and path.getParentPath().getLastPathComponent() methods.
Tristan -
Program to add node / delete node in the tree control via abap object
Hi all,
i am new to abap objects.
Can anyone help me out to give program about add node , delete node at
a particular point in tree hierarchy.
folder1 -- level 1
subfolder1 -- level 2
*********subfolder1 -- level 3
*********subfolder2 -- level 3
subfolder2 -- level 2
folder2 -- level 1
if i select level3 and click on ADD button .....i get a facility to add new node
at level 3 and and same thing can happen at level1 and level2 ............ if i select
and folder at level3 and click on delete button ....it should delete that folder...
if you do not have such program ........then guide me how to achieve this target via object oriented because i have to split the screen also and have to show some alve display in that.
just guide me how to add and delete node at a particular level in tree structure....
thanks in advance........Hello Ravi,
Try this demo program:
<b>BCALV_TREE_01</b>
<b>BCALV_TREE_DEMO</b>
BCALV_TREE_SIMPLE_DEMO
Also try:
BCALV_TREE_02
BCALV_TREE_03
BCALV_TREE_04
BCALV_TREE_05
BCALV_TREE_06
regards,
Beejal
**reward if this helps -
How to add a button in the child node of the Tree Table?
Hi All,
I am having a requirement to create a tree table and it should have a delete button to each child node (screenshot attached).
Can anyone provide me a sample for how to implement this.
Thanks in Advance
AravindhHi Aravindhan,
Try something like this:
var ttDesvios = new sap.ui.table.TreeTable();
var cbDesviacion = new sap.ui.commons.CheckBox();
ttDesvios.addColumn(new sap.ui.table.Column({
label: new sap.ui.commons.Label({text: "Col1"}),
template: new sap.ui.commons.Label({text: "Info"}),
width: "50px",
ttDesvios.addColumn(new sap.ui.table.Column({
label: new sap.ui.commons.Label({text: "Action"}),
template: new sap.ui.commons.Button({text: "Delete"}).bindProperty("visible", "pathPropertyChild", function(value){
if(value .............){ return true;} //For child
else{ return false;} //For parent
width: "160px",
Regards
EDIT: Wrong paste code, that's better! -
ToolTip for each node of the Tree in JTreeTable?
Hello! I have the problem that a ToolTip i have set in the TreeCellRenderer would not been displayed! Only one ToolTip will pop up over the JTreeTable with the ToolTipText that was set in the first CellRenderer. Does everybody have an idea?
OK! Its done! The solution does not help exact, but it gives my the way! With the coordinates of the MouseEvent I can get the Value of the current table row and set the ToolTip text new. Teh ToolTipManager automatically repaints the ToolTip whit the new text and position.
-
How to make the tree sibling nodes sorting in memory per the VO default?
Hi,
I have a question on the uncommitted tree nodes sorting. The tree was built using the same VO with the view link to itself (parent/child relation). I have defined a default sorting on my VO. Now if I insert a node to the tree, the sibling nodes may not sort correctly if it is not committed. I tried to insert it to the RowsetIterator at the right position, it seems OK. but when you right click or something that make the tree to refresh, the order will mess up. If I do an auto save after each action, everything looks OK. But the fusion pattern is to do a global save, I have to manipulate the tree with the uncommitted data. I know I can set the view object's SQL mode to do the in-memory sorting. But not sure if it works on the tree structure, because it is not a single RowsetIteroator.. Can someone give an advice? Many thanks.
Edited by: user736572 on Jan 20, 2012 2:48 PMThanks Sudipto for trying to help. I did try that, and as I mentioned in the previous posting, it doesn't work for the tree nodes (multiple RowSetIterator). the following is my code, where the treeVO is the vo instance for the firstLevel tree nodes and it has view link to its children. I am not sure how to sort all children for each level. Even for the first level where I did the explicit sorting in memory, it still not sorting at all.
treeVO.setSortBy("code");
treeVO.setQueryMode(ViewObject.QUERY_MODE_SCAN_ENTITY_ROWS|ViewObject..QUERY_MODE_SCAN_DATABASE_TABLES);
treeVO.executeQuery(); -
How to make the leaf node of the APEX tree downloadable
Hi All,
I am trying to build a "library" page for my application, with the documents as the leaf nodes of the tree. The documents come from a database table, and each document is a BLOB.
My question is, how should I write the "link" part of the APEX tree query to make the lead node document downloadable for the end users?
Thanks,
ChristineHilary helped me out of this by creating a new form page with two new items there corresponding to the PK and BLOB column, then in the tree query use apex_util.get_blob_file_src function as the link. Below is the email from Hilary:
1. Created Form, page 13, based upon your table storing the documents as BLOBs. The form page has just two associated items: P13_DOC and P13_DOC_ID. The item P13_DOC is of type FILE and contains a source type of DB column, which is the first required parameters of the function get_blob_file_src. NOTE: I could have created a form region on the same page as your tree, but chose to generate a separate page. You may choose to change this yourself.
2. Updated the Tree query on pg 12 to use the following link for tree nodes of level 4:
apex_util.get_blob_file_src('P13_DOC',v.attr3)
...where P13_DOC is the application page item mentioned in step 1 above, and v.attr3 should hold the unique ID associated with the document. Your tree now allows users to download the listed documents. -
I want to make only one node draggable in the tree. How?
I want to make only one node draggable in the tree. How?
when we have only
tree.setDragEnable(true)which makes draggable the entire nodes in the tree.
Thanks -Hi Andrea
Just to clarify things up: is this what you want?
package treeDnD;
* DragJustOneNode.java
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.io.*;
import javax.swing.*;
import javax.swing.tree.*;
public class DragJustOneNode extends JFrame {
private JTree tree;
private DefaultTreeModel model;
private DefaultMutableTreeNode root;
public DragJustOneNode() {
super("Only child 1 is draggable!");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(400,300);
setLocationRelativeTo(null);
tree = new JTree();
tree.setDragEnabled(true);
getContentPane().add(new JScrollPane(tree), BorderLayout.CENTER);
tree.setTransferHandler(new TreeTransferHandler());
root = new DefaultMutableTreeNode(new NodeData(0, "root"));
root.add(new DefaultMutableTreeNode(new NodeData(1, "child 1")));
root.add(new DefaultMutableTreeNode(new NodeData(2, "child 2")));
root.add(new DefaultMutableTreeNode(new NodeData(3, "child 3")));
root.add(new DefaultMutableTreeNode(new NodeData(4, "child 4")));
model = new DefaultTreeModel(root);
tree.setModel(model);
public static void main(final String args[]) {new DragJustOneNode().setVisible(true);}
class NodeData{
private int id;
private String data;
public NodeData(final int id, final String data){
this.id = id;
this.data = data;
public int getId() {return id;}
public void setId(final int id) {this.id = id;}
public String getData() {return data;}
public void setData(final String data) {this.data = data;}
public String toString() {return data;}
class TreeTransferable implements Transferable{
private NodeData nodeData;
public TreeTransferable(NodeData nodeData){
this.nodeData = nodeData;
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{DataFlavor.stringFlavor};
public boolean isDataFlavorSupported(DataFlavor flavor) {
return true;
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
return nodeData;
class TreeTransferHandler extends TransferHandler{
private DefaultMutableTreeNode sourceNode, targetNode;
public boolean canImport(final JComponent comp, final DataFlavor[] transferFlavors) {
NodeData nodeData = (NodeData) (sourceNode).getUserObject();
if(nodeData.getId() == 1) return true;
return false;
protected Transferable createTransferable(final JComponent c) {
JTree tree = ((JTree)c);
sourceNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
return new TreeTransferable((NodeData) sourceNode.getUserObject());
public int getSourceActions(final JComponent c) {return DnDConstants.ACTION_MOVE;}
public boolean importData(final JComponent comp, final Transferable t) {
JTree tree = ((JTree)comp);
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
targetNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
DefaultMutableTreeNode parent = (DefaultMutableTreeNode)targetNode.getParent();
if(parent == null) return false;
model.removeNodeFromParent(sourceNode);
model.insertNodeInto(sourceNode, parent, parent.getIndex(targetNode));
tree.setSelectionPath(new TreePath(model.getPathToRoot(sourceNode)));
return true;
} -
How to get UIComponent of the selected node in af:tree with drag and drop
Hi
Are there examples showing how one could get a UIComponent using DropEvent to be used with a Popup showing as a custom "context menu" at the target node ?
Right now, with dropEvent.getDropComponent, we could only get the tree.
We like to get its selected node so that the popup shows at the node level, not at the tree level.
ThanksHi Frank
Thanks for responding.
We like to show on our custom "context menu" using PopupHints (not using facet name contextmenu) with 3 commandMenuItems.
Since component id is needed by PopupHints to place this custom "context menu", we tried
RichTree dropTree = (RichTree)dropEvent.getDropComponent();
alignId = dropTree.getClientId(context);
// alignId = pt1:pt_region1:1:pt1:pc1:navTree
getClientId returns us the tree id and hence the context menu is placed next to tree.
We like to place the context menu next to a target node of the tree when dragging and dropping.
But we couldn't figure out how to get that node id.
In your suggestion,
List dropRowKey = (List) dropEvent.getDropSite();
RichTree dropComponent = (RichTree) dropEvent.getDropComponent();
dropCompoent.setRowKey(dropRowKey);
how do we then get the id of this node then ? What's the method ?
Thanks Frank -
Can't remove a node from a tree
I am using the custom tree dataDescriptor provided in Flex live
doc. It works for creating the tree and add notes, however when I
try to remove a node from the tree it cant work. Does anyone have
any idea?
This is the code for MyCustomeTreeDataDescriptor.as
package
import mx.collections.ArrayCollection;
import mx.collections.CursorBookmark;
import mx.collections.ICollectionView;
import mx.collections.IViewCursor;
import mx.events.CollectionEvent;
import mx.events.CollectionEventKind;
import mx.controls.treeClasses.*;
public class MyCustomTreeDataDescriptor implements
ITreeDataDescriptor
// The getChildren method requires the node to be an Object
// with a children field.
// If the field contains an ArrayCollection, it returns the
field
// Otherwise, it wraps the field in an ArrayCollection.
public function getChildren(node:Object,
model:Object=null):ICollectionView
try
if (node is Object) {
if(node.children is ArrayCollection){
return node.children;
}else{
return new ArrayCollection(node.children);
catch (e:Error) {
trace("[Descriptor] exception checking for getChildren");
return null;
// The isBranch method simply returns true if the node is an
// Object with a children field.
// It does not support empty branches, but does support null
children
// fields.
public function isBranch(node:Object,
model:Object=null):Boolean {
try {
if (node is Object) {
if (node.children != null) {
return true;
catch (e:Error) {
trace("[Descriptor] exception checking for isBranch");
return false;
// The hasChildren method Returns true if the node actually
has children.
public function hasChildren(node:Object,
model:Object=null):Boolean {
if (node == null)
return false;
var children:ICollectionView = getChildren(node, model);
try {
if (children.length > 0)
return true;
catch (e:Error) {
return false;
// The getData method simply returns the node as an Object.
public function getData(node:Object,
model:Object=null):Object {
try {
return node;
catch (e:Error) {
return null;
// The addChildAt method does the following:
// If the parent parameter is null or undefined, inserts
// the child parameter as the first child of the model
parameter.
// If the parent parameter is an Object and has a children
field,
// adds the child parameter to it at the index parameter
location.
// It does not add a child to a terminal node if it does not
have
// a children field.
public function addChildAt(parent:Object, child:Object,
index:int,
model:Object=null):Boolean {
var event:CollectionEvent = new
CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
event.kind = CollectionEventKind.ADD;
event.items = [child];
event.location = index;
if (!parent) {
var iterator:IViewCursor = model.createCursor();
iterator.seek(CursorBookmark.FIRST, index);
iterator.insert(child);
else if (parent is Object) {
if (parent.children != null) {
if(parent.children is ArrayCollection) {
parent.children.addItemAt(child, index);
if (model){
model.dispatchEvent(event);
model.itemUpdated(parent);
return true;
else {
parent.children.splice(index, 0, child);
if (model)
model.dispatchEvent(event);
return true;
return false;
// The removeChildAt method does the following:
// If the parent parameter is null or undefined, removes
// the child at the specified index in the model.
// If the parent parameter is an Object and has a children
field,
// removes the child at the index parameter location in the
parent.
public function removeChildAt(parent:Object, child:Object,
index:int, model:Object=null):Boolean
var event:CollectionEvent = new
CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
event.kind = CollectionEventKind.REMOVE;
event.items = [child];
event.location = index;
//handle top level where there is no parent
if (!parent)
var iterator:IViewCursor = model.createCursor();
iterator.seek(CursorBookmark.FIRST, index);
iterator.remove();
if (model)
model.dispatchEvent(event);
return true;
else if (parent is Object)
if (parent.children != undefined)
parent.children.splice(index, 1);
if (model)
model.dispatchEvent(event);
return true;
return false;
This is my tree definition:
<mx:Tree width="143" top="0" bottom="0" left="0"
height="100%"
id="publicCaseTree"
dataDescriptor="{new MyCustomTreeDataDescriptor()}"
dataProvider="{ac}"
defaultLeafIcon="@Embed('assets/caseIcon.png')"
change="publicTreeChanged(event)"
dragEnabled="true"
dragMoveEnabled="false"/>
This is how I remove the selected node from the tree. When
Delete button is clicked, the doDeleteCase function is
exectuted.
public function publicTreeChanged(event:Event):void {
selectedNode =
publicCaseTree.dataDescriptor.getData(Tree(event.target).selectedItem,
ac);
public function doDeleteCase(event:Event):void{
publicCaseTree.dataDescriptor.removeChildAt(publicCaseTree.firstVisibleItem,
selectedNode, 0, ac);
Any help would be appreciated.Thanks.Finally I removed nodes from tree, but not sure I did in the
right way. Anybody encounter the same problem, please
discuss. -
How to go back to item that were just on in the tree if data block info has an error?
I have a tree that lists information about a Client (addresses, quotes, etc). When the user clicks on a node in the tree, a data block on the right gets populated with the information for that node. If the user enters invalid information for that node and then clicks on another node in the tree, the error appears, the data block keeps the information for the offending node, but the node in the tree that is selected is for the one the user just clicked on, not the offending node. How do I get the selected node in the tree to remain at the offending data block?
hi tina,
create a 'when-mouse-enter' trigger in the 'tree block'.. check the record displayed on the data block is correct.. if not disable the tree item.. so the user will not be able to select any other node without correcting it..
another alternative is to store the current node in a global variable.. check the validation in 'when-tree-node-selected' trigger.. if it fails then search for the treenode and position it back.. a l'il difficult
hope this will help u..
ajith -
Selecting/highlighting a node in Flex Tree using HierarchicalCollectionView as DataProvider
Hi,
I am using GroupingCollection2 as the dataprovider for HierarchicalCollectionView. The GroupingCollection2 takes its data from an ArrayCollection. And finally I have a Tree whose dataprovider is the HierarchicalCollectionView . I want to acheive 2 things:
1) I want to programatically select/highlight a node in this tree. Using expandItem and passing the Object from the arraycollection is not working.
2) Refresh the tree if there is a change in the arrayCollection.
For the second task, I have a Java Layer that gives me the ArrayCollection (dp for GroupingCollection2) when I fire a CairngormEvent. But the problem is that every node in the tree is duplicated. I can clearly see that say there are 8 items in the array collection but still the tree shows 16 items ( Each item duplicated as the node in the tree.)
I have been trying to figure this out for many days now without any luck. Any sort of suggestion would be appreciated.
Thank u in advance.I got the refreshing of the tree part by myself. One needs to call the refresh method on the GroupingCollection2 and HierarchicalCollectionView objects when the arraycollection has just arrived from the database.
But I still havent been able to figure out how to highlight or open a tree node programatically. I am repeating that using (calling / setting) tree.expandItem() and tree.openItems is not helping me. Plz somebody help. -
Can anyone give me some link about the axample about the tree
Dear All:
I am learning something about the tree, is there any one can provide a link about a an example for tree node deletion /add?
and I also need an example about drop and drag a node from the tree too.
Thank you very much !Start with this section from the Swing tutorial on "How to Use Trees":
http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html
The Swing Connections has a couple of articles that might help:
http://java.sun.com/products/jfc/tsc/articles/
Maybe you are looking for
-
How many authorized computers can you authorize on an itunes account?
How many authorized computers can you authorize on an itunes account? and where is the option to deauthorize all computers on the itunes account screen in the new itunes 9? i cant find it? its to deauthorize all the comps on your account at once. tha
-
I made a mistake configuring the domain-name on my ISE appliance. I issued to the no ip domain-name and then added the domain-name I'd like to show up. It seems to have partially worked, as the FQDN on the appliance is now correct but the redirect
-
Find a specific paragraph style within a table and apply a specific cell style?
I'm a total beginner when it comes to scripting, but I would like to create a script that finds the paragraph style "resultsUL" within a large table and applies the cell style "female". Sure wish the find/replace was able to account for cell styles a
-
Is it possible to use common Corporate BEA Portal server and able to run different Business Unit applications on different BEA Application Servers?
-
Using Java/JVM as a Scripting Component in C++
I've been doing some research into the JNI and had a couple questions. Specifically, what I'm looking for is the use of Java / the JVM as a scripting language for a C++ application. I'd like to combine the speed of C++ as the application's core with