1. Positions the debug window to the right
2. Keeps a test button underneath the debug window
3. Creates a dynamic tree window on the left
4. Creates a text window underneath
5. Reads a URL for getting a list of folders and paints them in the tree window
6. Expands and collapses the tree using dynamic data
7. Tree window scrolls
1. when an item in a folder is selected, put the text in the text window
2. Simulate an outlook kind of interface
To make the code fit, at a couple of places, I have broken long lines between quotes. If you want to try this code you have to reattach those lines.
<!-- ************************************************ * Setup the development pad ************************************************ --> <canvas height="500" width="1000" debug="true"> <debug x="450" y="0" height="300"/> <button x="550" y="320" onclick="processButton()">Show Alert</button> <!-- ************************************************ * Include tree base classes ************************************************ --> <include href="lz/tree.lzx"/> <!-- ************************************************ * Get hold of a dataset ************************************************ --> <dataset type="http" name="foldersDataSet" request="true" src="http://localhost:8181/akc/display" querystring="url=ShowFiledReportsViewJSPURL &ownerUserId=ccp &aspire_output_format=object-xml"/> <dataset type="http" name="folderDetailsDS" request="false" src="http://localhost:8181/akc/display" /> <dataset type="http" name="OnlyFoldersDS" request="true" src="http://localhost:8181/akc/display" querystring="url=ShowFiledReportsViewJSPURL &ownerUserId=ccp &aspire_output_format=user-aspire-templates &akc_templatereportId=745"/> <dataset name="sampleDS"> <e1>e1text</e1> <e2>e2text</e2> <e2>e2text</e2> <e2>e2text</e2> </dataset> <dataset name="fromDS"> <e1>e1text</e1> <e2>e2text</e2> </dataset> <dataset name="toDS"> <e3>e1text</e3> <e4>e2text</e4> </dataset> <dataset name="foldersDS1"> <folder name="f1"> <file id="i1"> <shortname>ddd</shortname> <description>abc</description> </file> <file id="i1"> <shortname>ddd</shortname> <description>abc</description> </file> </folder> <folder name="f2"> <file id="i2"> <shortname>ddd</shortname> <description>abc</description> </file> <file id="i2"> <shortname>ddd</shortname> <description>abc</description> </file> <file id="i2"> <shortname>A root filename</shortname> <description>abc</description> </file> <folder name="f1"> <file id="i1"> <shortname>ddd</shortname> <description>abc</description> </file> <file id="i1"> <shortname>ddd</shortname> <description>abc</description> </file> </folder> </folder> <file id="i2"> <shortname>A root filename</shortname> <description>abc</description> </file> </dataset> <!-- ************************************************ * A dynamic tree ************************************************ <simplelayout axis="x" spacing="200"/> --> <window width="400" height="200" x="0" resizable="true" title="Knowled Folders for DCE"> <view name="outerview" width="${immediateParent.width}" height="${immediateParent.height}" clip="true"> <view width="${treeroot.width}" height="${treeroot.height}" > <simplelayout axis="y" spacing="10"/> <tree name="treeroot" datapath="OnlyFoldersDS:/" icon="null" showroot="false" autoscroll="true"> <tree datapath="*" text="${getText(this)}" recurse="true" autoscroll="true"> <method event="onopen"> openFolder(this); </method> </tree> </tree> </view> <scrollbar/> <scrollbar axis="x" /> </view> </window> <window width="400" height="200" y="220" title="See your item description here"> <text>No item selected</text> </window> <script> function resizeRootView(parentWindow) { Debug.write("Expanding the root view"); parentWindow.outerview.width=parentWindow.width - 20; parentWindow.outerview.height=parentWindow.height; } </script> <script> function openFolder(treeNode) { var dpath = treeNode.getAttribute("datapath"); var folderName = dpath.getNodeAttribute("name"); Debug.write("Open folder:" + folderName); var numOfChildren = dpath.getNodeCount(); if (numOfChildren == 0) { Debug.write("There are no children to this node"); var fds = canvas.folderDetailsDS; //var childQueryString = getQueryStringForFolderName(folderName); var childQueryParam = getQueryParamForFolderName(folderName); Debug.write("Setting query string:" + childQueryParam.serialize()); fds.setQueryString(childQueryParam); fds.doRequest(); printDataSet(fds); copyChildrenDP(fds,dpath); printDataSet(canvas.OnlyFoldersDS); treeNode.createChildTrees(); } } function getText(treeNode) { var dpath = treeNode.getAttribute("datapath"); var nameAttribute = dpath.getAttribute("name"); var text = dpath.getNodeText() var name = dpath.getNodeName(); Debug.write("Processing node:" + name); var elementName="none"; if (name == "folder") { elementName = dpath.getNodeAttribute("name"); } else if (name == "file") { elementId = dpath.getNodeAttribute("id"); treeNode.setAttribute("isleaf",true); var filename = dpath.xpathQuery("shortname/text()"); Debug.write(filename); return filename; } return elementName; } </script> <!-- ************************************************ * Alert support ************************************************ --> <alert name="myalert" width="100" y="330"> hi </alert> <script> function getQueryStringForFolderName(folderName) { qs = "url=NotesMPURL&ownerUserId=dce&folderName="; qs += folderName; qs += "&aspire_output_format=object-xml"; return qs; } function getQueryParamForFolderName(folderName) { var qs = new LzParam(); qs.addValue("url","NotesMPURL",true); qs.addValue("ownerUserId","ccp",true); qs.addValue("folderName",folderName,true); qs.addValue("aspire_output_format","user-aspire-templates",true); qs.addValue("akc_templatereportid","746",true); return qs; } function treeNodeOpen1(OpenedNode) { } function treeNodeOpen(OpenedNode) { Debug.write("A tree node is open"); Debug.write("Opened node is:" + OpenedNode.getAttribute("text")); //If the tree node has any children don't open it any more var leafNode = OpenedNode.getAttribute("isleaf"); Debug.write("isleafnode is:" + leafNode); //Get a new datapath and attach it to this node //OpenedNode.setAttribute("datapath", var curXPath = OpenedNode.getAttribute("datapath").getAttribute("xpath"); Debug.write("The data path:" + curXPath); if (curXPath == "*") { OpenedNode.setAttribute("datapath","sampleDS:/*"); OpenedNode.setAttribute("recurse","true"); OpenedNode.setAttribute("text","Hello"); } else { } } function printDataSet(dataset) { Debug.write(dataset.serialize()); } function processButton() { //printDataSet(canvas.sampleDS); //duplicateChildren(canvas.foldersDS1, canvas.sampleDS); //printDataSet(canvas.sampleDS); //Debug.write(getQueryString()); testCopyChildrenUsingXPath(); } function getQueryString() { s1 = "url=NotesMPURL"; s2 = "&folderName=Bugs-Reported"; s3 = "&aspire_output_format=user-aspire-templates"; s4 = "&akc_templatereportid=746"; s5 = "&ownerUserId=ccp"; return s1 + s2 + s3 + s4 + s5; } /* ********************************************************* * Deep copy all the children "srcDataNode" * as children of the "targetDataNode" ********************************************************* */ function copyChildren(srcDataNode, targetDataNode) { var nextChild = srcDataNode.getFirstChild(); var firstTargetChild = targetDataNode.getFirstChild(); while(nextChild != null) { targetDataNode.insertBefore(nextChild.cloneNode(true),firstTargetChild); nextChild = nextChild.getNextSibling(); } } function copyChildrenDP(srcDataNode, targetDataPath) { //srcDataNode is a data set Debug.write("Get the source data pointer"); var rootDP = srcDataNode.getPointer(); var numberOfChildren = rootDP.getNodeCount(); Debug.write("There are " + numberOfChildren + " children in this data set"); var hasChild = rootDP.selectChild(); while (hasChild != false) { Debug.write("Adding a node"); targetDataPath.addNodeFromPointer(rootDP); hasChild = rootDP.selectNext(); } } function copyChildrenUsingXPath(parentXPath, targetDataPointer) { Debug.write("Creating a new data pointer"); var srcDataPointer = new LzDatapointer(); Debug.write("setting its xpath"); srcDataPointer.setAttribute("xpath",parentXPath); Debug.write("Number of children are:" + srcDataPointer.getNodeCount()); var hasChild = srcDataPointer.selectChild(); while (hasChild != false) { Debug.write("Adding a node"); targetDataPointer.addNodeFromPointer(srcDataPointer); hasChild = srcDataPointer.selectNext(); } } function testCopyChildrenUsingXPath() { var targetDataPointer = canvas.toDS.getPointer(); copyChildrenUsingXPath("fromDS:/",targetDataPointer); printDataSet(canvas.toDS); } function copyChildrenDP1(srcDataNode, targetDataPath) { //srcDataNode is a data set Debug.write("Get the source data pointer"); var rootDP = srcDataNode.getPointer(); var numberOfChildren = rootDP.getNodeCount(); rootDP.setXPath("/*"); targetDataPath.addNodeFromPointer(rootDP); } </script> <method name="hi"> canvas.myalert.open(); </method> <!-- ************************************************ * comments begin ************************************************ --> <!-- begin comments end comments --> <!-- ************************************************ * comments end ************************************************ --> </canvas>