/// <summary> Add a quality control profile with user settings, such as which /// division types to include for selection </summary> /// <param name="New_Profile"> New profile to add </param> public void Add_Profile(QualityControl_Profile New_Profile) { // Add to the dictionary of profiles profiles[New_Profile.Profile_Name] = New_Profile; // Was this the default profile? if (New_Profile.Default_Profile) defaultProfile = New_Profile; }
/// <summary> Add a quality control profile with user settings, such as which /// division types to include for selection </summary> /// <param name="New_Profile"> New profile to add </param> public void Add_Profile(QualityControl_Profile New_Profile) { // Add to the dictionary of profiles Profiles.Add(New_Profile); profilesDictionary[New_Profile.Profile_Name] = New_Profile; // Was this the default profile? if (New_Profile.Default_Profile) { DefaultProfile = New_Profile.Profile_Name; } }
/// <summary> Static constructor for the QualityControl_Configuration class </summary> public QualityControl_Configuration() { // Declare all the new collections in this configuration profiles = new Dictionary<string, QualityControl_Profile>(); // Set some default values attemptedRead = false; defaultProfile = null; string baseDirectory = AppDomain.CurrentDomain.BaseDirectory; sobekcm_qc_configfilePath=(baseDirectory + "config\\default\\sobekcm_qc.config"); if (!Read_Metadata_Configuration(sobekcm_qc_configfilePath)) // Set default reader/writer values to have a baseline in case there is // no file to be read Set_Default_Values(); }
private void read_qc_profiles(XmlReader ReaderXml) { int unnamed_profile_counter = 1; while (ReaderXml.Read()) { if (ReaderXml.NodeType == XmlNodeType.Element) { switch (ReaderXml.Name.ToLower()) { case "profile": QualityControl_Profile profile = new QualityControl_Profile(); XmlReader child_readerXml = ReaderXml.ReadSubtree(); if (ReaderXml.MoveToAttribute("name")) profile.Profile_Name = ReaderXml.Value.Trim(); if (ReaderXml.MoveToAttribute("description")) profile.Profile_Description = ReaderXml.Value; if (ReaderXml.MoveToAttribute("isDefault")) { bool tempValue; if (bool.TryParse(ReaderXml.Value, out tempValue)) { profile.Default_Profile = tempValue; } } // Enforce a name for this profile (should have one according to XSD) if (profile.Profile_Name.Length == 0) { profile.Profile_Name = "Unnamed" + unnamed_profile_counter; unnamed_profile_counter++; } while (child_readerXml.Read()) { if (child_readerXml.NodeType == XmlNodeType.Element && child_readerXml.Name.ToLower() == "divisiontype") // while (readerXml.ReadToNextSibling("DivisionType")) { if (child_readerXml.Name.ToLower() == "divisiontype") { QualityControl_Division_Config thisConfig = new QualityControl_Division_Config(); if (child_readerXml.MoveToAttribute("type")) { thisConfig.TypeName = child_readerXml.Value; } if (child_readerXml.MoveToAttribute("isNameable")) thisConfig.isNameable = Convert.ToBoolean(child_readerXml.Value); profile.Add_Division_Type(thisConfig); } } } Add_Profile(profile); // Add_METS_Writing_Profile(profile); break; case "package_scope": break; case "division_scope": break; case "file_scope": break; case "dmdsec": break; case "amdsec": break; //case "readerwriterref": // if (readerXml.MoveToAttribute("ID")) // { // string id = readerXml.Value.ToUpper(); // if ((readerWriters.ContainsKey(id)) && (profile != null)) // { // METS_Section_ReaderWriter_Config readerWriter = readerWriters[id]; // if (inPackage) // { // if (inDmdSec) // profile.Add_Package_Level_DmdSec_Writer_Config(readerWriter); // else // profile.Add_Package_Level_AmdSec_Writer_Config(readerWriter); // } // else if (inDivision) // { // if (inDmdSec) // profile.Add_Division_Level_DmdSec_Writer_Config(readerWriter); // else // profile.Add_Division_Level_AmdSec_Writer_Config(readerWriter); // } // else if (inFile) // { // if (inDmdSec) // profile.Add_File_Level_DmdSec_Writer_Config(readerWriter); // else // profile.Add_File_Level_AmdSec_Writer_Config(readerWriter); // } // } // } // break; } } } }
private void Clear() { profiles.Clear(); defaultProfile = null; }
/// <summary> Set the default profile with the default values </summary> public void Set_Default_Values() { // Clear everything, just in case Clear(); // Create the default profile QualityControl_Profile newProfile = new QualityControl_Profile { Default_Profile = true, Profile_Name = "System Default", Profile_Description = "Default profile used when no config file is present" }; Add_Profile(newProfile); // Add back cover QualityControl_Division_Config div1 = new QualityControl_Division_Config { ID = 1, TypeName = "Back Cover", isActive = true, isNameable = false, BaseTypeName = "Cover" }; div1.Add_Translation(Web_Language_Enum.Spanish, "Portada Posterior"); div1.Add_Translation(Web_Language_Enum.French, "Couverture Arrière"); newProfile.Add_Division_Type(div1); // Add back matter QualityControl_Division_Config div2 = new QualityControl_Division_Config { ID = 2, TypeName = "Back Matter", isActive = true, isNameable = false }; div2.Add_Translation(Web_Language_Enum.Spanish, "Materia Posterior"); div2.Add_Translation(Web_Language_Enum.French, "Matière Arrière"); newProfile.Add_Division_Type(div2); // Add chapter ( misorder of the object names here and below matters not) QualityControl_Division_Config div4 = new QualityControl_Division_Config { ID = 3, TypeName = "Chapter", isActive = true, isNameable = true }; div4.Add_Translation(Web_Language_Enum.Spanish, "Capítulo"); div4.Add_Translation(Web_Language_Enum.French, "Chapitre"); newProfile.Add_Division_Type(div4); // Add front cover QualityControl_Division_Config div3 = new QualityControl_Division_Config { ID = 4, TypeName = "Front Cover", isActive = true, isNameable = false, BaseTypeName = "Cover" }; div3.Add_Translation(Web_Language_Enum.Spanish, "Portada Delantera"); div3.Add_Translation(Web_Language_Enum.French, "Couverture Frente"); newProfile.Add_Division_Type(div3); // Add front matter QualityControl_Division_Config div5 = new QualityControl_Division_Config { ID = 5, TypeName = "Front Matter", isActive = true, isNameable = false }; div5.Add_Translation(Web_Language_Enum.Spanish, "Materia Delantera"); div5.Add_Translation(Web_Language_Enum.French, "Préliminaires"); newProfile.Add_Division_Type(div5); // Add index QualityControl_Division_Config div6 = new QualityControl_Division_Config { ID = 6, TypeName = "Index", isActive = true, isNameable = true }; div6.Add_Translation(Web_Language_Enum.Spanish, "Indice"); div6.Add_Translation(Web_Language_Enum.French, "Indice"); newProfile.Add_Division_Type(div6); // Add introduction QualityControl_Division_Config div7 = new QualityControl_Division_Config { ID = 7, TypeName = "Introduction", isActive = true, isNameable = false, BaseTypeName = "Chapter" }; div7.Add_Translation(Web_Language_Enum.Spanish, "Introducción"); div7.Add_Translation(Web_Language_Enum.French, "Introduction"); newProfile.Add_Division_Type(div7); // Add spine QualityControl_Division_Config div8 = new QualityControl_Division_Config { ID = 8, TypeName = "Spine", isActive = true, isNameable = false }; div8.Add_Translation(Web_Language_Enum.Spanish, "Canto"); div8.Add_Translation(Web_Language_Enum.French, "Épine de livre"); newProfile.Add_Division_Type(div8); // Add table of contents QualityControl_Division_Config div9 = new QualityControl_Division_Config { ID = 9, TypeName = "Table of Contents", isActive = true, isNameable = false, BaseTypeName = "Contents" }; div9.Add_Translation(Web_Language_Enum.Spanish, "Contenidos"); div9.Add_Translation(Web_Language_Enum.French, "Table des Matières"); newProfile.Add_Division_Type(div9); // Add title page QualityControl_Division_Config div10 = new QualityControl_Division_Config { ID = 10, TypeName = "Title Page", isActive = true, isNameable = false, BaseTypeName = "Title" }; div10.Add_Translation(Web_Language_Enum.Spanish, "Titre"); div10.Add_Translation(Web_Language_Enum.French, "Titulario"); newProfile.Add_Division_Type(div10); }
/// <summary> Constructor for a new instance of the QC_ItemViewer class, used to perform quality control and /// create the structural metadata ( page names and divisions ) for an online digital resource </summary> /// <param name="BriefItem"> Digital resource object </param> /// <param name="CurrentUser"> Current user, who may or may not be logged on </param> /// <param name="CurrentRequest"> Information about the current request </param> /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering </param> public QC_ItemViewer(BriefItemInfo BriefItem, User_Object CurrentUser, Navigation_Object CurrentRequest, Custom_Tracer Tracer ) { // Save the arguments for use later this.BriefItem = BriefItem; this.CurrentUser = CurrentUser; this.CurrentRequest = CurrentRequest; // If there is no user, send to the login if (CurrentUser == null) { CurrentRequest.Mode = Display_Mode_Enum.My_Sobek; CurrentRequest.My_Sobek_Type = My_Sobek_Type_Enum.Logon; UrlWriterHelper.Redirect(CurrentRequest); return; } // If the user cannot edit this item, go back if (!CurrentUser.Can_Edit_This_Item(BriefItem.BibID, BriefItem.Type, BriefItem.Behaviors.Source_Institution_Aggregation, BriefItem.Behaviors.Holding_Location_Aggregation, BriefItem.Behaviors.Aggregation_Code_List)) { CurrentRequest.ViewerCode = String.Empty; UrlWriterHelper.Redirect(CurrentRequest); return; } //If there are no pages for this item, redirect to the image upload screen if ((BriefItem.Images == null ) || ( BriefItem.Images.Count == 0 )) { CurrentRequest.Mode = Display_Mode_Enum.My_Sobek; CurrentRequest.My_Sobek_Type = My_Sobek_Type_Enum.Page_Images_Management; UrlWriterHelper.Redirect(CurrentRequest); return; } // Get the links for the METS string greenstoneLocation = BriefItem.Web.Source_URL + "/"; complete_mets = greenstoneLocation + BriefItem.BibID + "_" + BriefItem.VID + ".mets.xml"; // MAKE THIS USE THE FILES.ASPX WEB PAGE if this is restricted (or dark) if ((BriefItem.Behaviors.Dark_Flag) || (BriefItem.Behaviors.IP_Restriction_Membership > 0)) { complete_mets = CurrentRequest.Base_URL + "files/" + BriefItem.BibID + "/" + BriefItem.VID + "/" + BriefItem.BibID + "_" + BriefItem.VID + ".mets.xml"; } // Get the special qc_item, which matches the passed in Current_Object, at least the first time. // If the QC work is already in process, we may find a temporary METS file to read. // Determine the in process directory for this userInProcessDirectory = UI_ApplicationCache_Gateway.Settings.Servers.In_Process_Submission_Location + "\\" + CurrentUser.UserName.Replace(".", "").Replace("@", "") + "\\qcwork\\" + BriefItem.BibID + "_" + BriefItem.VID; if (CurrentUser.ShibbID.Trim().Length > 0) userInProcessDirectory = UI_ApplicationCache_Gateway.Settings.Servers.In_Process_Submission_Location + "\\" + CurrentUser.ShibbID + "\\qcwork\\" + BriefItem.BibID + "_" + BriefItem.VID; // Make the folder for the user in process directory if (!Directory.Exists(userInProcessDirectory)) Directory.CreateDirectory(userInProcessDirectory); // Create the name for the tempoary METS file? metsInProcessFile = userInProcessDirectory + "\\" + BriefItem.BibID + "_" + BriefItem.VID + ".mets.xml"; // Is this work in the user's SESSION state? qc_item = HttpContext.Current.Session[BriefItem.BibID + "_" + BriefItem.VID + " QC Work"] as SobekCM_Item; if (qc_item == null) { //// Try to pull the full item //Tracer.Add_Trace("Edit_Item_Behaviors_MySobekViewer.Constructor", "Try to pull this sobek complete item"); //qc_item = SobekEngineClient.Items.Get_Sobek_Item(BriefItem.BibID, BriefItem.VID, CurrentUser.UserID, Tracer); //if (qc_item == null) //{ // Tracer.Add_Trace("Edit_Item_Behaviors_MySobekViewer.Constructor", "Unable to build complete item"); // CurrentRequest.Mode = Display_Mode_Enum.Error; // CurrentRequest.Error_Message = "Invalid Request : Unable to build complete item"; // return; //} ////Save to the User's session //HttpContext.Current.Session[BriefItem.BibID + "_" + BriefItem.VID + " QC Work"] = qc_item; // Is there a temporary METS for this item, which is not expired? if ((File.Exists(metsInProcessFile)) && (File.GetLastWriteTime(metsInProcessFile).Subtract(DateTime.Now).Hours < 8)) { // Read the temporary METS file, and use that to build the qc_item qc_item = SobekCM_Item_Factory.Get_Item(metsInProcessFile, BriefItem.BibID, BriefItem.VID, null, Tracer); qc_item.Source_Directory = SobekFileSystem.Resource_Network_Uri(BriefItem); } else { // Just read the normal otherwise ( if we had the ability to deep copy a SobekCM_Item, we could skip this ) qc_item = SobekCM_Item_Factory.Get_Item(BriefItem.BibID, BriefItem.VID, null, Tracer); } // Save to the session, so it is easily available for next time HttpContext.Current.Session[BriefItem.BibID + "_" + BriefItem.VID + " QC Work"] = qc_item; } // If no QC item, this is an error if (qc_item == null) { throw new ApplicationException("Unable to retrieve the item for Quality Control in QC_ItemViewer.Constructor"); } // perform pre-display work Perform_PreDisplay_Work(Tracer); // If there are NO pages, then send this to the upload if (qc_item.Divisions.Page_Count == 0) { CurrentRequest.Mode = Display_Mode_Enum.My_Sobek; CurrentRequest.My_Sobek_Type = My_Sobek_Type_Enum.Page_Images_Management; UrlWriterHelper.Redirect(CurrentRequest); return; } // Get the default QC profile qc_profile = UI_ApplicationCache_Gateway.Configuration.QualityControlTool.Get_Default_Profile(); // If this was a post-back keep the required height and width for the qc area allThumbnailsOuterDiv1Width = -1; allThumbnailsOuterDiv1Height = -1; string temp_width = HttpContext.Current.Request.Form["QC_window_width"] ?? String.Empty; string temp_height = HttpContext.Current.Request.Form["QC_window_height"] ?? String.Empty; if ((temp_width.Length > 0) && (temp_height.Length > 0)) { // Parse the values and save to the session if (Int32.TryParse(temp_width, out allThumbnailsOuterDiv1Width)) HttpContext.Current.Session["QC_AllThumbnailsWidth"] = allThumbnailsOuterDiv1Width; if (Int32.TryParse(temp_height, out allThumbnailsOuterDiv1Height)) HttpContext.Current.Session["QC_AllThumbnailsHeight"] = allThumbnailsOuterDiv1Height; } else { object session_width = HttpContext.Current.Session["QC_AllThumbnailsWidth"]; if (session_width != null) allThumbnailsOuterDiv1Width = (int)session_width; object session_height = HttpContext.Current.Session["QC_AllThumbnailsHeight"]; if (session_height != null) allThumbnailsOuterDiv1Height = (int)session_height; } // See if there were hidden requests hidden_request = HttpContext.Current.Request.Form["QC_behaviors_request"] ?? String.Empty; hidden_main_thumbnail = HttpContext.Current.Request.Form["Main_Thumbnail_File"] ?? String.Empty; hidden_move_relative_position = HttpContext.Current.Request.Form["QC_move_relative_position"] ?? String.Empty; hidden_move_destination_fileName = HttpContext.Current.Request.Form["QC_move_destination"] ?? String.Empty; autonumber_number_system = HttpContext.Current.Request.Form["Autonumber_number_system"] ?? String.Empty; string temp = HttpContext.Current.Request.Form["autonumber_mode_from_form"] ?? "0"; Int32.TryParse(temp, out autonumber_mode_from_form); autonumber_text_only = HttpContext.Current.Request.Form["Autonumber_text_without_number"] ?? String.Empty; autonumber_number_only = HttpContext.Current.Request.Form["Autonumber_number_only"] ?? String.Empty; autonumber_number_system = HttpContext.Current.Request.Form["Autonumber_number_system"] ?? String.Empty; hidden_autonumber_filename = HttpContext.Current.Request.Form["Autonumber_last_filename"] ?? String.Empty; temp = HttpContext.Current.Request.Form["QC_sortable_option"] ?? "-1"; // Check for sortable ( aka, Drag and drop pages ) setting - is it different than user's setting? if (Int32.TryParse(temp, out makeSortable) && (makeSortable > 0) && (makeSortable <= 3)) { if (makeSortable.ToString() != CurrentUser.Get_Setting("QC_ItemViewer:SortableMode", "NULL")) { CurrentUser.Add_Setting("QC_ItemViewer:SortableMode", makeSortable); SobekCM_Database.Set_User_Setting(CurrentUser.UserID, "QC_ItemViewer:SortableMode", makeSortable.ToString()); } } // Check for the autonumber option - is it different than user's setting? temp = HttpContext.Current.Request.Form["QC_autonumber_option"] ?? "-1"; if ((Int32.TryParse(temp, out autonumber_mode)) && (autonumber_mode >= 0) && (autonumber_mode <= 2)) { if (autonumber_mode.ToString() != CurrentUser.Get_Setting("QC_ItemViewer:AutonumberingMode", "NULL")) { CurrentUser.Add_Setting("QC_ItemViewer:AutonumberingMode", autonumber_mode); SobekCM_Database.Set_User_Setting(CurrentUser.UserID, "QC_ItemViewer:AutonumberingMode", autonumber_mode.ToString()); } } // Check for size of thumbnail specified from the URL - is it different than user's settings? if (CurrentRequest.Size_Of_Thumbnails > 0) { if (CurrentRequest.Size_Of_Thumbnails.ToString() != CurrentUser.Get_Setting("QC_ItemViewer:ThumbnailSize", "NULL")) { CurrentUser.Add_Setting("QC_ItemViewer:ThumbnailSize", CurrentRequest.Size_Of_Thumbnails); SobekCM_Database.Set_User_Setting(CurrentUser.UserID, "QC_ItemViewer:ThumbnailSize", CurrentRequest.Size_Of_Thumbnails.ToString()); } } //Get any notes/comments entered by the user notes = HttpContext.Current.Request.Form["txtComments"] ?? String.Empty; if (!(Int32.TryParse(HttpContext.Current.Request.Form["QC_Sortable"], out makeSortable))) makeSortable = 3; // If the hidden move relative position is BEFORE, it is before the very first page if (hidden_move_relative_position == "Before") hidden_move_destination_fileName = "[BEFORE FIRST]"; try { //Call the JavaScript autosave function based on the option selected bool autosaveCacheValue = true; bool autosaveCache = false; //Conversion result of autosaveCacheValue(conversion successful or not) saved in autosaveCache if (HttpContext.Current.Session["autosave_option"] != null) autosaveCache = bool.TryParse(HttpContext.Current.Session["autosave_option"].ToString(), out autosaveCacheValue); bool convert = bool.TryParse(HttpContext.Current.Request.Form["Autosave_Option"], out autosave_option); if (!convert && !autosaveCache) { autosave_option = true; } else if (!convert && autosaveCache) { autosave_option = autosaveCacheValue; } else { HttpContext.Current.Session["autosave_option"] = autosave_option; } } catch (Exception e) { throw new ApplicationException("Error retrieving auto save option. " + e.Message); } // Check for a previously set main thumbnail, or one from the requesting form if (!String.IsNullOrEmpty(hidden_main_thumbnail)) { HttpContext.Current.Session["main_thumbnail_" + qc_item.BibID + "_" + qc_item.VID] = hidden_main_thumbnail; } else if (HttpContext.Current.Session["main_thumbnail_" + qc_item.BibID + "_" + qc_item.VID] == null) { hidden_main_thumbnail = qc_item.Behaviors.Main_Thumbnail.Replace("thm.jpg", ""); HttpContext.Current.Session["main_thumbnail_" + qc_item.BibID + "_" + qc_item.VID] = hidden_main_thumbnail; } else { hidden_main_thumbnail = HttpContext.Current.Session["main_thumbnail_" + qc_item.BibID + "_" + qc_item.VID].ToString(); } //Get the list of associated errors for this item from the database int itemID = SobekCM_Item_Database.Get_ItemID(BriefItem.BibID, BriefItem.VID); Get_QC_Errors(itemID); // Perform any requested actions switch (hidden_request) { case "autosave": case "save": case "complete": //Save the current time HttpContext.Current.Session["QC_timeUpdated"] = DateTime.Now.ToString("hh:mm tt"); // Read the data from the http form, perform all requests, and // update the qc_item (also updates the session and temporary files) // Save this updated information in the temporary folder's METS file for reading later if necessary. if ((Save_From_Form_Request_To_Item(String.Empty, String.Empty)) && ((hidden_request == "save") || (hidden_request == "complete"))) { // If the user selected SAVE or COMPLETE, roll out the new version Move_Temp_Changes_To_Production(); // Redirect differently depending on SAVE or COMPLETE if (hidden_request == "save") { // Forward back to the QC form HttpContext.Current.Response.Redirect(HttpContext.Current.Request.RawUrl, false); HttpContext.Current.ApplicationInstance.CompleteRequest(); CurrentRequest.Request_Completed = true; } else if (hidden_request == "complete") { // Forward to the item CurrentRequest.ViewerCode = String.Empty; UrlWriterHelper.Redirect(CurrentRequest); } } break; case "cancel": Cancel_Current_QC(); // Forward back to the default item view CurrentRequest.ViewerCode = String.Empty; UrlWriterHelper.Redirect(CurrentRequest); break; case "clear_pagination": ClearPagination(); HttpContext.Current.Response.Redirect(HttpContext.Current.Request.RawUrl, false); HttpContext.Current.ApplicationInstance.CompleteRequest(); CurrentRequest.Request_Completed = true; break; case "clear_reorder": Clear_Pagination_And_Reorder_Pages(); HttpContext.Current.Response.Redirect(HttpContext.Current.Request.RawUrl, false); HttpContext.Current.ApplicationInstance.CompleteRequest(); CurrentRequest.Request_Completed = true; break; case "save_error": string error_code = HttpContext.Current.Request.Form["QC_error_number"] ?? String.Empty; string affected_page_index = HttpContext.Current.Request.Form["QC_affected_file"] ?? String.Empty; SaveQcError(itemID, error_code, affected_page_index); break; case "delete_page": // Read the data from the http form, perform all requests, and // update the qc_item (also updates the session and temporary files) string filename_to_delete = HttpContext.Current.Request.Form["QC_affected_file"] ?? String.Empty; if (Save_From_Form_Request_To_Item(String.Empty, filename_to_delete)) { Delete_Resource_File(filename_to_delete); } // Since we deleted a page, we need to roll out our new version Move_Temp_Changes_To_Production(); HttpContext.Current.Response.Redirect(HttpContext.Current.Request.RawUrl, false); HttpContext.Current.ApplicationInstance.CompleteRequest(); CurrentRequest.Request_Completed = true; break; case "delete_selected_pages": // Read the data from the http form, perform all requests, and // update the qc_item (also updates the session and temporary files) List<QC_Viewer_Page_Division_Info> selected_page_div_from_form; if (Save_From_Form_Request_To_Item(String.Empty, String.Empty, out selected_page_div_from_form)) { foreach (QC_Viewer_Page_Division_Info thisPage in selected_page_div_from_form) { if (( thisPage.METS_StructMap_Page_Node.Files != null ) && ( thisPage.METS_StructMap_Page_Node.Files.Count > 0 )) Delete_Resource_File(thisPage.METS_StructMap_Page_Node.Files[0].File_Name_Sans_Extension); } } // Since we deleted a page, we need to roll out our new version Move_Temp_Changes_To_Production(); HttpContext.Current.Response.Redirect(HttpContext.Current.Request.RawUrl, false); HttpContext.Current.ApplicationInstance.CompleteRequest(); CurrentRequest.Request_Completed = true; break; case "move_selected_pages": // Read the data from the http form, perform all requests, and // update the qc_item (also updates the session and temporary files) Save_From_Form_Request_To_Item(hidden_move_destination_fileName, String.Empty); HttpContext.Current.Response.Redirect(HttpContext.Current.Request.RawUrl, false); HttpContext.Current.ApplicationInstance.CompleteRequest(); CurrentRequest.Request_Completed = true; break; } // Get the pages pre-order to be used everywhere else static_pages = qc_item.Divisions.Physical_Tree.Pages_PreOrder_With_Files; if (static_pages == null) static_pages = new List<abstract_TreeNode>(); }
private static void read_qc_profiles(XmlReader ReaderXml, QualityControl_Configuration Config ) { int unnamed_profile_counter = 1; while (ReaderXml.Read()) { if (ReaderXml.NodeType == XmlNodeType.Element) { switch (ReaderXml.Name.ToLower()) { case "profile": QualityControl_Profile profile = new QualityControl_Profile(); XmlReader child_readerXml = ReaderXml.ReadSubtree(); if (ReaderXml.MoveToAttribute("name")) profile.Profile_Name = ReaderXml.Value.Trim(); if (ReaderXml.MoveToAttribute("description")) profile.Profile_Description = ReaderXml.Value; if (ReaderXml.MoveToAttribute("isDefault")) { bool tempValue; if (bool.TryParse(ReaderXml.Value, out tempValue)) { profile.Default_Profile = tempValue; } } // Enforce a name for this profile (should have one according to XSD) if (profile.Profile_Name.Length == 0) { profile.Profile_Name = "Unnamed" + unnamed_profile_counter; unnamed_profile_counter++; } QualityControl_Division_Config thisConfig = new QualityControl_Division_Config(); while (child_readerXml.Read()) { if (child_readerXml.NodeType == XmlNodeType.Element && child_readerXml.Name.ToLower() == "divisiontype") { thisConfig = new QualityControl_Division_Config(); if (child_readerXml.MoveToAttribute("type")) { thisConfig.TypeName = child_readerXml.Value; } if (child_readerXml.MoveToAttribute("isNameable")) thisConfig.isNameable = Convert.ToBoolean(child_readerXml.Value); if (child_readerXml.MoveToAttribute("base")) { string baseType = child_readerXml.Value; if (!String.Equals(baseType, thisConfig.TypeName, StringComparison.OrdinalIgnoreCase)) { thisConfig.BaseTypeName = baseType; } } profile.Add_Division_Type(thisConfig); } else if (child_readerXml.NodeType == XmlNodeType.Element && child_readerXml.Name.ToLower() == "translation") { if (thisConfig != null) { string language = (child_readerXml.MoveToAttribute("language")) ? child_readerXml.Value : String.Empty; string text = (child_readerXml.MoveToAttribute("text")) ? child_readerXml.Value : String.Empty; if ((!String.IsNullOrEmpty(language)) && (!String.IsNullOrEmpty(text))) { thisConfig.Add_Translation(Web_Language_Enum_Converter.Code_To_Enum(language), text ); } } } } Config.Add_Profile(profile); break; } } } }