Beispiel #1
0
        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));
        }
Beispiel #2
0
        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();
            }
        }