home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 December / PCWorld_2000-12_cd.bin / Komunikace / Comanche / htmlfrontend / nodeTree.tcl
Text File  |  2000-11-02  |  4KB  |  159 lines

  1.  
  2. # ::webfe::
  3. # Web front end
  4.  
  5. # webfe::nodeManagement
  6. #
  7. #    Node Management object used by the web front end to store information about the nodes
  8. # of the namespace. The web module has a simple API and webfe::nodeManagement handles all the 
  9. # callbacks with the Namespace.
  10. #
  11. # It will store the following properties of the nodes:
  12. # Icon, text, parent node, children nodes, last time the node was modified (property page posted to it)
  13. #
  14. # It should be possible to do a [resolvePath network_services/apache_installation/server_management]
  15. # and will give us the corresponding node. This is useful for bookmarking, although not perfect (nodes with 
  16. # same name, etc. that will have to be handled as special cases)
  17. # If the URL was bookmarked some time ago and the server was restarted, the nodeManagement would interate 
  18. # and return the node
  19. #
  20. # webfe::nodeManagement public functions
  21. #
  22. # resolveNodeFromPath path
  23. #     Figure out a node from a certain URL
  24. #
  25. # populatePage pageObject node
  26. #     The nodeManagement will call then $pageObject addUpperMenu -icon icon -image image -url url
  27. #  and addLeftMenu
  28. #
  29. # Internal functions: 
  30. # getNodeProperties node
  31. # getNodeChildren parentNode
  32. # addNodeInfo parentNode nodeToAdd args (properties)
  33.  
  34.  
  35.  
  36. class nodeManagement {
  37.     
  38.     
  39.     variable namespace
  40.  
  41.  
  42.     variable plugIn
  43.  
  44.     variable nameMapping
  45.     variable containerMapping
  46.     variable childrenMapping
  47.     variable parentMapping
  48.     
  49.     variable addData
  50.     variable addStructure
  51.     variable addNode
  52.     variable addNewNode
  53.     
  54.     variable queryData
  55.     variable queryStructure
  56.     variable queryNode
  57.     variable queryNewNode
  58.  
  59.     constructor { ns webfeview } {
  60.     set namespace $ns
  61.     set view $webfeview
  62.  
  63.     set queryData [xuiStructure ::#auto]
  64.     set queryStructure [xuiStructure ::#auto]
  65.     $queryStructure setName data
  66.  
  67.     set queryCaller [xuiLabel ::#auto]
  68.     $queryCaller setName caller
  69.     $queryCaller setValue $view
  70.  
  71.     set queryNode [xuiNode ::#auto]
  72.     $queryNode setName node
  73.     
  74.     $queryData addComponent $queryCaller
  75.     $queryData addComponent $queryStructure
  76.     $queryStructure addComponent $queryNode  
  77.  
  78.     }
  79.     
  80.     method addNode
  81.     method removeNode
  82.     method setContainer
  83.     method getNodeName
  84.     method getContainer
  85.     method getChildrenByClass
  86.     method getPlugInNodeChildren
  87.     method getPlugInNodeChildrenByNodeName
  88.     method getRootNode
  89.     method getParentNode
  90. }
  91.  
  92. body nodeManagement::addNodeInfo { parentNode node args } {
  93.     array set options {\
  94.             -openIcon openFolder \
  95.             -closedIcon closedFolder \
  96.             -label {default label} \
  97.             -classes container \
  98.             -container {} \
  99.             -nodeName {} } 
  100.     array set options $args 
  101.     foreach arrayOption [array names options] {
  102.      
  103.     }
  104.     set nameMapping($node) $options(-nodeName)
  105.     set containerMapping($node) $options(-container)
  106.     lappend childrenMapping($parentNode) $node
  107.     set childrenMapping($node) {}
  108.     set parentMapping($node) $parentNode
  109.     return $node            
  110. }
  111.  
  112. body nodeManagement::removeNode { node } {
  113.     ::plugInUtils::removeNode $plugIn $namespace $node
  114.     unset nameMapping($node) 
  115.     unset containerMapping($node)
  116.     # lsearch and remove from list of parent node
  117.     set parentNode $parentMapping($node) 
  118.     lremove childrenMapping($parentNode) $node
  119.     unset childrenMapping($node) 
  120.     unset parentMapping($node) 
  121.     return
  122. }
  123.  
  124. body nodeManagement::getContainer { node } {
  125.     return $containerMapping($node)
  126. }
  127.  
  128. body nodeManagement::getNodeName { node } {
  129.     return $nameMapping($node)
  130. }
  131.  
  132. body nodeManagement::getChildrenByClass {parentNode class} {
  133.     $queryNode setId $parentNode
  134.     set childList [$ns getChildren $queryData] 
  135. }
  136.  
  137. body nodeManagement::getParentNode { node } {
  138.     return $parentMapping($node)
  139. }
  140.  
  141. body nodeManagement::getPlugInNodeChildrenByNodeName {parentNode nodeName} {
  142.     set result {}
  143.     foreach child [ getPlugInNodeChildren $parentNode] {
  144.     if { [getNodeName $child] == $nodeName } {
  145.         lappend result $child
  146.     }
  147.     }
  148.     return $result
  149. }
  150.  
  151. body nodeManagement::getPlugInNodeChildren {parentNode} {
  152.     return $childrenMapping($parentNode)
  153. }
  154.  
  155. body nodeManagement::getRootNode {} {
  156.     return root
  157. }
  158.  
  159.