private static void UpdateStandardControl(XmlNodeList selectedNodes, TemplateDatabase templateDatabase, string typeWanted, ref List <string> errorMessages, ref List <string> dataLabels) { Debug.Assert(selectedNodes != null && selectedNodes.Count == 1, "Row update is supported for only a single XML element."); // assume the database is well formed and contains only a single row of the given standard type foreach (ControlRow control in templateDatabase.Controls) { if (control.Type == typeWanted) { CodeTemplateImporter.UpdateControl(selectedNodes[0], templateDatabase, typeWanted, control, ref errorMessages, ref dataLabels); return; } } throw new ArgumentOutOfRangeException(String.Format("Control of type {0} could not be found in database.", typeWanted)); }
public static void Import(string filePath, TemplateDatabase templateDatabase, out List <string> conversionErrors) { ThrowIf.IsNullArgument(templateDatabase, nameof(templateDatabase)); conversionErrors = new List <string>(); // Collect all the data labels as we come across them, as we have to ensure that a new data label doesn't have the same name as an existing one List <string> dataLabels = new List <string>(); // Load the XML document (the code template file) // Follows CA3075 pattern for loading XmlDocument xmlDoc = new XmlDocument() { XmlResolver = null }; System.IO.StringReader sreader = new System.IO.StringReader(File.ReadAllText(filePath)); XmlReader reader = XmlReader.Create(sreader, new XmlReaderSettings() { XmlResolver = null }); xmlDoc.Load(reader); // merge standard controls which existed in code templates // MarkForDeletion and Relative path weren't available in code templates // NOTE THAT WE NEED TO UPDATE THIS TO NEWER DELETEFLAG XmlNodeList selectedNodes = xmlDoc.SelectNodes(Constant.ImageXml.FilePath); // Convert the File type CodeTemplateImporter.UpdateStandardControl(selectedNodes, templateDatabase, Constant.DatabaseColumn.File, ref conversionErrors, ref dataLabels); selectedNodes = xmlDoc.SelectNodes(Constant.ImageXml.FolderPath); // Convert the Folder type CodeTemplateImporter.UpdateStandardControl(selectedNodes, templateDatabase, Constant.DatabaseColumn.Folder, ref conversionErrors, ref dataLabels); selectedNodes = xmlDoc.SelectNodes(Constant.ImageXml.DatePath); // Convert the Date type CodeTemplateImporter.UpdateStandardControl(selectedNodes, templateDatabase, Constant.DatabaseColumn.Date, ref conversionErrors, ref dataLabels); selectedNodes = xmlDoc.SelectNodes(Constant.ImageXml.TimePath); // Convert the Time type CodeTemplateImporter.UpdateStandardControl(selectedNodes, templateDatabase, Constant.DatabaseColumn.Time, ref conversionErrors, ref dataLabels); selectedNodes = xmlDoc.SelectNodes(Constant.ImageXml.ImageQualityPath); // Convert the Image Quality type CodeTemplateImporter.UpdateStandardControl(selectedNodes, templateDatabase, Constant.DatabaseColumn.ImageQuality, ref conversionErrors, ref dataLabels); // no flag controls to import // import notes selectedNodes = xmlDoc.SelectNodes(Constant.ImageXml.NotePath); for (int index = 0; index < selectedNodes.Count; index++) { ControlRow note = templateDatabase.AddUserDefinedControl(Constant.Control.Note); CodeTemplateImporter.UpdateControl(selectedNodes[index], templateDatabase, Constant.Control.Note, note, ref conversionErrors, ref dataLabels); } // import choices selectedNodes = xmlDoc.SelectNodes(Constant.ImageXml.FixedChoicePath); for (int index = 0; index < selectedNodes.Count; index++) { ControlRow choice = templateDatabase.AddUserDefinedControl(Constant.Control.FixedChoice); CodeTemplateImporter.UpdateControl(selectedNodes[index], templateDatabase, Constant.Control.FixedChoice, choice, ref conversionErrors, ref dataLabels); } // import counters selectedNodes = xmlDoc.SelectNodes(Constant.ImageXml.CounterPath); for (int index = 0; index < selectedNodes.Count; index++) { ControlRow counter = templateDatabase.AddUserDefinedControl(Constant.Control.Counter); CodeTemplateImporter.UpdateControl(selectedNodes[index], templateDatabase, Constant.Control.Counter, counter, ref conversionErrors, ref dataLabels); } if (reader != null) { reader.Dispose(); } }