Class is used to read the item aggregation configuration XML files (when they exist) and populate the home page source files, banner information, highlights, and the browse and informational pages connected to the item aggregation.
        /// <summary> Gets a fully built item aggregation object for a particular aggregation code   </summary>
        /// <param name="AggregationCode">Code for this aggregation object</param>
        /// <param name="Tracer">Trace object keeps a list of each method executed and important milestones in rendering</param>
        /// <returns>Fully built item aggregation object for the particular aggregation code and language code</returns>
        /// <remarks>Item aggregation object is also placed in the cache.<br /><br />
        /// Building of an item aggregation always starts by pulling the item from the database ( either <see cref="Engine_Database.Get_Item_Aggregation"/> or <see cref="Engine_Database.Get_Main_Aggregation"/> ).<br /><br />
        /// Then, either the Item Aggregation XML file is read (if present) or the entire folder hierarchy is analyzed to find the browses, infos, banners, etc..</remarks>
        public static Complete_Item_Aggregation Get_Complete_Item_Aggregation(string AggregationCode, Custom_Tracer Tracer)
        {
            if (Tracer != null)
            {
                Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "Creating '" + AggregationCode + "' item aggregation");
            }

            // Get the information about this collection and this entry point
            Complete_Item_Aggregation hierarchyObject;
            if ((AggregationCode.Length > 0) && (AggregationCode != "all"))
                hierarchyObject = Engine_Database.Get_Item_Aggregation(AggregationCode, false, Tracer);
            else
                hierarchyObject = Engine_Database.Get_Main_Aggregation(Tracer);

            // If no value was returned, don't do anything else here
            if (hierarchyObject != null)
            {
                // Add all the values to this object
                string xmlDataFile = Engine_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + hierarchyObject.ObjDirectory + "\\" + hierarchyObject.Code + ".xml";
                if (File.Exists(xmlDataFile))
                {
                    if (Tracer != null)
                    {
                        Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "Reading aggregation XML configuration file");
                    }

                    // Add the ALL and NEW browses
                    Add_All_New_Browses(hierarchyObject);

                    // Add all the other data from the XML file
                    Item_Aggregation_XML_Reader reader = new Item_Aggregation_XML_Reader();
                    reader.Add_Info_From_XML_File(hierarchyObject, xmlDataFile);
                }
                else
                {
                    if (Tracer != null)
                    {
                        Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "Aggregation XML configuration file missing.. will try to build");

                        Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "Adding banner, home, and all/new browse information");
                    }

                    Add_HTML(hierarchyObject);
                    Add_All_New_Browses(hierarchyObject);
                    Add_Browse_Files(hierarchyObject, Tracer);

                    // If no HTML found, just add one
                    if ((hierarchyObject.Home_Page_File_Dictionary == null) || (hierarchyObject.Home_Page_File_Dictionary.Count == 0))
                    {
                        hierarchyObject.Add_Home_Page_File("html\\home\\text.html", Web_Language_Enum.DEFAULT, false);
                    }

                    // If no banner found, just add one
                    if ((hierarchyObject.Banner_Dictionary == null) || (hierarchyObject.Banner_Dictionary.Count == 0))
                    {
                        hierarchyObject.Add_Banner_Image("images/banners/coll.jpg", Web_Language_Enum.DEFAULT);
                    }

                    if (Tracer != null)
                    {
                        Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "Write aggregation XML configuration from built object");
                    }

                    // Since there was no configuration file, save one
                    hierarchyObject.Write_Configuration_File(Engine_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + hierarchyObject.ObjDirectory);
                }

                // Now, look for any satellite configuration files
                string contactFormFile = Engine_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + hierarchyObject.ObjDirectory + "\\config\\sobekcm_contactform.config";
                if (File.Exists(contactFormFile))
                {
                    if (Tracer != null)
                    {
                        Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "Found aggregation-specific contact form configuration file");
                    }

                    hierarchyObject.ContactForm = ContactForm_Configuration_Reader.Read_Config(contactFormFile);
                }

                // Return this built hierarchy object
                return hierarchyObject;
            }

            if (Tracer != null)
            {
                Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "NULL value returned from database");
            }
            return null;
        }
        /// <summary> Gets a fully built item aggregation object for a particular aggregation code   </summary>
        /// <param name="AggregationCode">Code for this aggregation object</param>
        /// <param name="Tracer">Trace object keeps a list of each method executed and important milestones in rendering</param>
        /// <returns>Fully built item aggregation object for the particular aggregation code and language code</returns>
        /// <remarks>Item aggregation object is also placed in the cache.<br /><br />
        /// Building of an item aggregation always starts by pulling the item from the database ( either <see cref="Engine_Database.Get_Item_Aggregation"/> or <see cref="Engine_Database.Get_Main_Aggregation"/> ).<br /><br />
        /// Then, either the Item Aggregation XML file is read (if present) or the entire folder hierarchy is analyzed to find the browses, infos, banners, etc..</remarks>
        public static Complete_Item_Aggregation Get_Complete_Item_Aggregation(string AggregationCode, Custom_Tracer Tracer)
        {
            if (Tracer != null)
            {
                Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "Creating '" + AggregationCode + "' item aggregation");
            }

            // Get the information about this collection and this entry point
            Complete_Item_Aggregation hierarchyObject;

            if ((AggregationCode.Length > 0) && (AggregationCode != "all"))
            {
                hierarchyObject = Engine_Database.Get_Item_Aggregation(AggregationCode, false, Tracer);
            }
            else
            {
                hierarchyObject = Engine_Database.Get_Main_Aggregation(Tracer);
            }

            // If no value was returned, don't do anything else here
            if (hierarchyObject != null)
            {
                // Add all the values to this object
                string xmlDataFile = Engine_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + hierarchyObject.ObjDirectory + "\\" + hierarchyObject.Code + ".xml";
                if (File.Exists(xmlDataFile))
                {
                    if (Tracer != null)
                    {
                        Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "Reading aggregation XML configuration file");
                    }

                    // Add the ALL and NEW browses
                    Add_All_New_Browses(hierarchyObject);

                    // Add all the other data from the XML file
                    Item_Aggregation_XML_Reader reader = new Item_Aggregation_XML_Reader();
                    reader.Add_Info_From_XML_File(hierarchyObject, xmlDataFile);
                }
                else
                {
                    if (Tracer != null)
                    {
                        Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "Aggregation XML configuration file missing.. will try to build");

                        Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "Adding banner, home, and all/new browse information");
                    }

                    Add_HTML(hierarchyObject);
                    Add_All_New_Browses(hierarchyObject);
                    Add_Browse_Files(hierarchyObject, Tracer);

                    // If no HTML found, just add one
                    if ((hierarchyObject.Home_Page_File_Dictionary == null) || (hierarchyObject.Home_Page_File_Dictionary.Count == 0))
                    {
                        hierarchyObject.Add_Home_Page_File("html\\home\\text.html", Web_Language_Enum.DEFAULT, false);
                    }

                    // If no banner found, just add one
                    if ((hierarchyObject.Banner_Dictionary == null) || (hierarchyObject.Banner_Dictionary.Count == 0))
                    {
                        hierarchyObject.Add_Banner_Image("images/banners/coll.jpg", Web_Language_Enum.DEFAULT);
                    }

                    if (Tracer != null)
                    {
                        Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "Write aggregation XML configuration from built object");
                    }

                    // Since there was no configuration file, save one
                    hierarchyObject.Write_Configuration_File(Engine_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + hierarchyObject.ObjDirectory);
                }

                // Now, look for any satellite configuration files
                string contactFormFile = Engine_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + hierarchyObject.ObjDirectory + "\\config\\sobekcm_contactform.config";
                if (File.Exists(contactFormFile))
                {
                    if (Tracer != null)
                    {
                        Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "Found aggregation-specific contact form configuration file");
                    }

                    hierarchyObject.ContactForm = ContactForm_Configuration_Reader.Read_Config(contactFormFile);
                }

                // Return this built hierarchy object
                return(hierarchyObject);
            }

            if (Tracer != null)
            {
                Tracer.Add_Trace("Item_Aggregation_Utilities.Get_Item_Aggregation", "NULL value returned from database");
            }
            return(null);
        }