Class ::acs::SiteNode

::acs::SiteNode[i] create ...

Class Relations

  • class: ::nx::Class[i]
  • superclass: ::nx::Object[i]
::nx::Class create ::acs::SiteNode \
     -superclass ::nx::Object

Methods (to be applied on instances)

  • flush_cache (scripted)

  • get (scripted)

    if {$url eq "" && $node_id eq ""} {
        error "site_node::get \"must pass in either url or node_id\""
    }
    
    #
    # Make sure, we have a node_id.
    #
    if {$node_id eq ""} {
        set node_id [:get_node_id -url $url]
    }
    
    return [:properties -node_id $node_id]
  • get_children (scripted)

    if {$all} {
        #
        # The following query is just for PG.  Note that
        # the query should not return the root of the
        # tree.
        #
        set sql [subst {
            WITH RECURSIVE site_node_tree(node_id, parent_id) AS (
              select node_id, parent_id from site_nodes where node_id = :node_id
            UNION ALL
              select child.node_id, child.parent_id from site_node_tree, site_nodes child
              where  child.parent_id = site_node_tree.node_id
            ) select [acs::dc map_function_name site_node__url(node_id)]
            from site_node_tree where node_id != :node_id
        }]
        if {[db_driverkey ""] eq "oracle"} {
            set sql [string map [list "WITH RECURSIVE" "WITH"$sql]
        }
    
        set child_urls [::acs::dc list -prepare integer [current method]-all $sql]
    } else {
        if {$package_key ne ""} {
            #
            # Simple optimization for package_keys; seems to be frequently used.
            # We leave the logic below unmodified, which could be optimized as well.
            #
            set package_key_clause "and package_id = object_id and package_key = :package_key"
            set from "site_nodes, apm_packages"
        } else {
            set package_key_clause ""
            set from "site_nodes"
        }
        set sql [subst {
            select [::acs::dc map_function_name {site_node__url(node_id)}]
            from $from
            where parent_id = :node_id $package_key_clause
        }]
        set child_urls [::acs::dc list dbqd..[current method] $sql]
    }
    
    if { $package_type ne "" } {
        lappend filters package_type $package_type
    } elseif$package_key ne "" } {
        lappend filters package_key $package_key
    }
    
    if { [llength $filters] > 0 } {
        set return_val [list]
        foreach child_url $child_urls {
            array unset site_node
            if {![catch {array set site_node [:get -url $child_url]}]} {
    
                set passed_p 1
                foreach { elm val } $filters {
                    if { $site_node($elm) ne $val } {
                        set passed_p 0
                        break
                    }
                }
                if { $passed_p } {
                    if { $element ne "" } {
                        lappend return_val $site_node($element)
                    } else {
                        lappend return_val $child_url
                    }
                }
            }
        }
    } elseif$element ne "" } {
        set return_val [list]
        foreach child_url $child_urls {
            array unset site_node
            if {![catch {array set site_node [:get -url $child_url]}]} {
                lappend return_val $site_node($element)
            }
        }
    } else {
        set return_val $child_urls
    }
    
    return $return_val
  • get_node_id (forward)

  • get_package_url (scripted)

    return [lindex [:get_urls_from_package_key -package_key $package_key] 0]
  • get_url (forward)

  • get_urls_from_object_id (scripted)

    set child_urls [::acs::dc list -prepare integer dbqd..[current method]-all [subst {
        select [acs::dc map_function_name site_node__url(node_id)] as url
        from site_nodes
        where object_id = :object_id
        order by url desc
    }]]
  • get_urls_from_package_key (scripted)

    return [::acs::dc list -prepare varchar dbqd..[current method]-urls-from-package-key [subst {
        select [acs::dc map_function_name site_node__url(node_id)]
        from site_nodes n, apm_packages p
        where p.package_key = :package_key
        and n.object_id = p.package_id
    }]]