/// <summary>
        /// Read the Settings data rows.
        /// </summary>
        /// <param name="environments"></param>
        /// <param name="worksheetNav"></param>
        /// <param name="nm"></param>
        /// <returns></returns>
        private static void ReadTable(SettingsFile settingsFile, List <EnvironmentSettings> environments, XPathNavigator worksheetNav, XmlNamespaceManager nm)
        {
            // Select all of the rows in the worksheet
            XPathNodeIterator rowsIterator = worksheetNav.Select("//ss:Row", nm);

            // skip header rows until we find Settings
            var cell0 = rowsIterator.Current.SelectSingleNode("ss:Cell[1]/ss:Data", nm);

            while (cell0 == null || cell0.Value != "Settings:")
            {
                if (rowsIterator.MoveNext())
                {
                    cell0 = rowsIterator.Current.SelectSingleNode("ss:Cell[1]/ss:Data", nm);
                }
                else
                {
                    throw new ArgumentException("The input file does not contain a row with a value in the first column equal to 'Settings:'.");
                }
            }

            // Loop through the rows
            while (rowsIterator.MoveNext())
            {
                // Select all of the cells in the row
                XPathNodeIterator cellsIterator = rowsIterator.Current.Select("ss:Cell", nm);

                // this is the null Value object used to list all possibile settings names
                Setting setting = new Setting()
                {
                    Originator = settingsFile.ApplicationName
                };

                // Look for setting name
                if (!cellsIterator.MoveNext())
                {
                    throw new ArgumentException("The input file has an empty row.");
                }
                XPathNavigator dataNav = cellsIterator.Current.SelectSingleNode("ss:Data", nm);
                if (dataNav == null)
                {
                    // no setting cell -> end of table
                    break;
                }

                setting.Name = dataNav.Value;
                // Select the comment value in the cell, if present
                XPathNavigator commentNav = cellsIterator.Current.SelectSingleNode("ss:Comment/ss:Data", nm);
                if (commentNav != null)
                {
                    setting.Comment = commentNav.Value;
                }

                string key = RegisterSetting(settingsFile, setting);

                // count from first env column
                int columnIndex = 0;
                // Loop through the remaining cells
                while (cellsIterator.MoveNext())
                {
                    // Select the data value in the cell, if present
                    string indexAttr = cellsIterator.Current.GetAttribute("Index", ss);
                    if (!string.IsNullOrEmpty(indexAttr))
                    {
                        // index = 1 === column A
                        // columnIndex = 0 === column B (i.e. Default Values environment)
                        columnIndex = Convert.ToInt32(indexAttr) - 2;
                    }

                    // Select the data value in the cell, if present
                    dataNav = cellsIterator.Current.SelectSingleNode("ss:Data", nm);
                    if (dataNav != null)
                    {
                        // environment has only "valued" cells
                        var cell = new Setting()
                        {
                            Name = setting.Name, Value = dataNav.Value, Originator = settingsFile.ApplicationName
                        };

                        // Select the comment value in the cell, if present
                        commentNav = cellsIterator.Current.SelectSingleNode("ss:Comment/ss:Data", nm);
                        if (commentNav != null)
                        {
                            cell.Comment = commentNav.Value;
                        }

                        environments[columnIndex].Settings.Add(key, cell);
                    }

                    columnIndex++;
                }
            }
        }
Ejemplo n.º 2
0
 internal virtual void ExportSettings(SettingsFile settingsFile, string outputFileName)
 {
     WriteFile(settingsFile, outputFileName);
 }
Ejemplo n.º 3
0
        private static void WriteData(SettingsFile settingsFile, XmlElement table)
        {
            XmlElement cell, data;

            /*
             * <Row>
             *  <Cell ss:StyleID="s72"><Data ss:Type="String">SampleSetting</Data><Comment
             *    ss:Author="Thomas Abraham"><ss:Data
             *     xmlns="http://www.w3.org/TR/REC-html40"><Font html:Face="Tahoma"
             *      x:CharSet="1" html:Size="8" html:Color="#000000">Cell comments will be exported to the output XML files</Font></ss:Data></Comment></Cell>
             *  <Cell ss:StyleID="Default"/>
             *  <Cell ss:StyleID="Default"><Data ss:Type="String">LocalDevValue</Data></Cell>
             *  <Cell ss:StyleID="Default"><Data ss:Type="String">SharedDevValue</Data></Cell>
             *  <Cell ss:StyleID="Default"><Data ss:Type="String">QAValue</Data></Cell>
             *  <Cell ss:StyleID="Default"><Data ss:Type="String">ProductionValue</Data></Cell>
             * </Row>
             */
            var allKeys = settingsFile.Settings.Keys;

            foreach (var key in allKeys)
            {
                var row = table.OwnerDocument.CreateElement("ss:Row", ss);

                Setting setting = settingsFile.Settings[key];

                // setting name
                cell = table.OwnerDocument.CreateElement("ss:Cell", ss);
                cell.SetAttribute("StyleID", ss, "s72");
                row.AppendChild(cell);
                data = table.OwnerDocument.CreateElement("ss:Data", ss);
                data.SetAttribute("Type", ss, "String");
                data.InnerText = setting.Name;
                cell.AppendChild(data);
                // setting comment
                if (!string.IsNullOrEmpty(setting.Comment))
                {
                    var comment = table.OwnerDocument.CreateElement("ss:Comment", ss);
                    data           = table.OwnerDocument.CreateElement("ss:Data", ss);
                    data.InnerText = setting.Comment;
                    comment.AppendChild(data);
                    cell.AppendChild(comment);
                }

                foreach (var env in settingsFile.Environments)
                {
                    // cell is added anyway
                    cell = table.OwnerDocument.CreateElement("ss:Cell", ss);
                    cell.SetAttribute("StyleID", ss, "Default");
                    row.AppendChild(cell);
                    if (env.Value.Settings.ContainsKey(key))
                    {
                        //data only if we have a value
                        var value = env.Value.Settings[key];
                        data = table.OwnerDocument.CreateElement("ss:Data", ss);
                        data.SetAttribute("Type", ss, "String");
                        data.InnerText = value.Value;
                        cell.AppendChild(data);
                        // setting's value comment
                        if (!string.IsNullOrEmpty(value.Comment))
                        {
                            var comment = table.OwnerDocument.CreateElement("ss:Comment", ss);
                            data           = table.OwnerDocument.CreateElement("ss:Data", ss);
                            data.InnerText = value.Comment;
                            comment.AppendChild(data);
                            cell.AppendChild(comment);
                        }
                    }
                }//for

                table.AppendChild(row);
            }//for
        }
 public BTDFEnvironmentSettings(System.IO.FileInfo fiEnvironmentSettings)
 {
     sf = (new SpreadsheetMLImporter()).ImportSettings(fiEnvironmentSettings.FullName);
 }