private void recurse_and_set_values(Search_Result_Item_TreeNode parent_node, string parent_value)
 {
     foreach (Search_Result_Item_TreeNode childNode in parent_node.ChildNodes)
     {
         childNode.Value = parent_value + "_" + childNode.Name;
         nodeHash[childNode.Value] = childNode;
         recurse_and_set_values(childNode, childNode.Value);
     }
 }
示例#2
0
        /// <summary> Event handler loads the nodes on request to the serial hierarchy trees when the user requests them
        /// by expanding a node </summary>
        /// <param name="Sender"> TreeView object that fired this event </param>
        /// <param name="E"> Event arguments includes the tree node which was expanded </param>
        void treeView1_TreeNodePopulate(object Sender, TreeNodeEventArgs E)
        {
            // Determine the index of this result within the entire page of results
            string resultsIndex = E.Node.Value;
            string node_value   = E.Node.Value;

            if (E.Node.Value.IndexOf("_") > 0)
            {
                resultsIndex = E.Node.Value.Substring(0, E.Node.Value.IndexOf("_"));
                node_value   = node_value.Substring(resultsIndex.Length + 1);
            }

            // Get the appropriate title result
            iSearch_Title_Result titleResult = PagedResults[Convert.ToInt32(resultsIndex)];

            // Is this tree built?
            if (titleResult.Item_Tree == null)
            {
                titleResult.Build_Item_Tree(resultsIndex);
            }

            Search_Result_Item_TreeNode retrieved_node = titleResult.Item_Tree.Get_Node_By_Value(node_value);

            if (retrieved_node == null)
            {
                return;
            }

            string base_url = RequestSpecificValues.Current_Mode.Base_URL;

            if (RequestSpecificValues.Current_Mode.Writer_Type == Writer_Type_Enum.HTML_LoggedIn)
            {
                base_url = RequestSpecificValues.Current_Mode.Base_URL + "l/";
            }

            foreach (Search_Result_Item_TreeNode childNode in retrieved_node.ChildNodes)
            {
                TreeNode childViewNode = new TreeNode
                {
                    Value        = resultsIndex + "_" + childNode.Value,
                    SelectAction = TreeNodeSelectAction.None
                };

                string name    = UI_ApplicationCache_Gateway.Translation.Get_Translation(childNode.Name, RequestSpecificValues.Current_Mode.Language);
                string tooltip = String.Empty;
                if (name.Length > 100)
                {
                    tooltip = name;
                    name    = name.Substring(0, 100) + "...";
                }

                if (childNode.Link.Length > 0)
                {
                    childViewNode.ToolTip = tooltip;
                    childViewNode.Text    = "<a href=\"" + base_url + childNode.Link + textRedirectStem + "\">" + name + "</a>";
                }
                else
                {
                    childViewNode.ToolTip = tooltip;
                    childViewNode.Text    = name;
                }
                if (childNode.ChildNodes.Count > 0)
                {
                    childViewNode.PopulateOnDemand = true;
                }
                E.Node.ChildNodes.Add(childViewNode);
            }
        }
 /// <summary> Add new root node to this tree </summary>
 /// <param name="Name"> Display name for this new root node (title of the item group at the root node level) </param>
 /// <param name="Link"> Link for this new root node of the tree, or empty if no link </param>
 /// <param name="Value"> Value of this new root node (actually the BibID + '_' + VID) </param>
 /// <returns> Built sorted tree node object </returns>
 public Search_Result_Item_TreeNode Add_Root_Node(string Name, string Link, string Value)
 {
     Search_Result_Item_TreeNode newRootNode = new Search_Result_Item_TreeNode(Name, Link, Value);
     rootNodes.Add(newRootNode);
     return newRootNode;
 }
        /// <summary> Builds the tree of items under this title, for multiple item titles </summary>
        public void Build_Item_Tree(string ResultsIndex)
        {
            // Create the tree
            itemTree = new Search_Result_Item_Tree();

            // Add a root node
            Search_Result_Item_TreeNode myRootNode = itemTree.Add_Root_Node("ROOT", String.Empty, bibid);

            // Is this a newspaper type (handles display slightly differently)
            bool newspaper = false;

            if (materialtype.ToUpper().IndexOf("NEWSPAPER") >= 0)
            {
                newspaper = true;
            }

            // Placeholders for the day that we begin having four levels of serial hierarchy
            string    thischildLevel4Text  = String.Empty;
            const int thischildLevel4Index = -1;

            // Add each seperate child row to the Items_Within_Title set
            Dictionary <string, Search_Result_Item_TreeNode> level1Nodes = new Dictionary <string, Search_Result_Item_TreeNode>();
            Dictionary <string, Search_Result_Item_TreeNode> level2Nodes = new Dictionary <string, Search_Result_Item_TreeNode>();
            Dictionary <string, Search_Result_Item_TreeNode> level3Nodes = new Dictionary <string, Search_Result_Item_TreeNode>();

            foreach (iSearch_Item_Result thisChild in itemList)
            {
                // Determine the final link for this item
                string itemLink = bibid + "/" + thisChild.VID;

                string level1Text = thisChild.Level1_Text;
                string level2Text = thisChild.Level2_Text;
                string level3Text = thisChild.Level3_Text;
                string level4Text = thischildLevel4Text;

                // The logic to add all the nodes for this item.  This is large in an attempt to make it
                // frighteningly quick
                if (level4Text.Length > 0)
                {
                    if (level3Nodes.ContainsKey(level1Text + "_" + level2Text + "_" + level3Text))
                    {
                        level3Nodes[level1Text + "_" + level2Text + "_" + level3Text].Add_Child_Node(level4Text, itemLink, thischildLevel4Index);
                    }
                    else
                    {
                        if (level2Nodes.ContainsKey(level1Text + "_" + level2Text))
                        {
                            level3Nodes[level1Text + "_" + level2Text + "_" + level3Text] = level2Nodes[level1Text + "_" + level2Text].Add_Child_Node(level3Text, String.Empty, thisChild.Level3_Index);
                        }
                        else
                        {
                            if (level1Nodes.ContainsKey(level1Text))
                            {
                                level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, String.Empty, thisChild.Level2_Index);
                            }
                            else
                            {
                                level1Nodes[level1Text] = myRootNode.Add_Child_Node(level1Text, String.Empty, 0);
                                level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, String.Empty, thisChild.Level2_Index);
                            }
                            level3Nodes[level1Text + "_" + level2Text + "_" + level3Text] = level2Nodes[level1Text + "_" + level2Text].Add_Child_Node(level3Text, String.Empty, thisChild.Level3_Index);
                        }
                        level3Nodes[level1Text + "_" + level2Text + "_" + level3Text].Add_Child_Node(level4Text, itemLink, thischildLevel4Index);
                    }
                }
                else
                {
                    if (level3Text.Length > 0)
                    {
                        if ((newspaper) && (level3Text.IndexOf(level2Text) < 0) && (level3Text.IndexOf(level1Text) < 0))
                        {
                            string date = level2Text + " " + level3Text + ", " + level1Text;
                            if (level2Nodes.ContainsKey(level1Text + "_" + level2Text))
                            {
                                level3Nodes[level1Text + "_" + level2Text + "_" + level3Text] = level2Nodes[level1Text + "_" + level2Text].Add_Child_Node(date, itemLink, thisChild.Level3_Index);
                            }
                            else
                            {
                                if (level1Nodes.ContainsKey(level1Text))
                                {
                                    level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, String.Empty, thisChild.Level2_Index);
                                }
                                else
                                {
                                    level1Nodes[level1Text] = myRootNode.Add_Child_Node(level1Text, String.Empty, thisChild.Level1_Index);
                                    level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, String.Empty, thisChild.Level2_Index);
                                }
                                level3Nodes[level1Text + "_" + level2Text + "_" + level3Text] = level2Nodes[level1Text + "_" + level2Text].Add_Child_Node(date, itemLink, thisChild.Level3_Index);
                            }
                        }
                        else
                        {
                            if (level2Nodes.ContainsKey(level1Text + "_" + level2Text))
                            {
                                level3Nodes[level1Text + "_" + level2Text + "_" + level3Text] = level2Nodes[level1Text + "_" + level2Text].Add_Child_Node(level3Text, itemLink, thisChild.Level3_Index);
                            }
                            else
                            {
                                if (level1Nodes.ContainsKey(level1Text))
                                {
                                    level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, String.Empty, thisChild.Level2_Index);
                                }
                                else
                                {
                                    level1Nodes[level1Text] = myRootNode.Add_Child_Node(level1Text, String.Empty, thisChild.Level1_Index);
                                    level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, String.Empty, thisChild.Level2_Index);
                                }
                                level3Nodes[level1Text + "_" + level2Text + "_" + level3Text] = level2Nodes[level1Text + "_" + level2Text].Add_Child_Node(level3Text, itemLink, thisChild.Level3_Index);
                            }
                        }
                    }
                    else
                    {
                        if (level2Text.Length > 0)
                        {
                            if (level1Nodes.ContainsKey(level1Text))
                            {
                                level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, itemLink, thisChild.Level2_Index);
                            }
                            else
                            {
                                level1Nodes[level1Text] = myRootNode.Add_Child_Node(level1Text, String.Empty, thisChild.Level1_Index);
                                level2Nodes[level1Text + "_" + level2Text] = level1Nodes[level1Text].Add_Child_Node(level2Text, itemLink, thisChild.Level2_Index);
                            }
                        }
                        else
                        {
                            if (level1Text.Length > 0)
                            {
                                level1Nodes[level1Text] = myRootNode.Add_Child_Node(level1Text, itemLink, thisChild.Level1_Index);
                            }
                            else
                            {
                                level1Nodes[thisChild.Title] = myRootNode.Add_Child_Node(thisChild.Title, itemLink, 0);
                            }
                        }
                    }
                }
            }

            // Set the hash values, for lookup by id
            itemTree.Set_Values();
        }