private static void Process()
        {
            do
            {
                Log("-----------------------------");
                Log("  GV = GraphViz");
                Log("  CX = Convert .csv to .xml");
                Log("  TH = Convert .txt to .html");
                Log("  XT = XML table");
                Log("-----------------------------");
                List <string> commands = new List <string>()
                {
                    "GV", "CX", "TH", "XT"
                };

                string command = cw.Ask(new QAManager(commands, "GV", "Select a tool"));
                switch (command.ToUpper())
                {
                case "C":
                {
                    return;
                }

                case "GV":
                {
                    GraphViz();
                    break;
                }

                case "CX":
                {
                    csvToXml = new CsvToXml(ow, configXml);
                    csvToXml.Start();
                    break;
                }

                case "TH":
                {
                    txtToHtml = new TxtToHtml(ow, configXml);
                    txtToHtml.Start();
                    break;
                }

                case "XT":
                {
                    xDbM = new XmlDBManager(ow, configXml);
                    xDbM.LoadDFD();
                    xDbM.SaveDFD();
                    break;
                }
                }
                Log(OK);
                xm.Save();
            } while (true);
        }
        public void XmlDBManager()
        {
            sm = new SettingsManager(configXml, "xmldbmanager");
            Assert.IsNotEmpty(sm.SelectElementValue("baseFolderPath"));
            Assert.IsNotEmpty(sm.SelectElementValue("dBFileName"));
            string DBPath      = Path.Combine(sm.SelectElementValue("baseFolderPath"), sm.SelectElementValue("dBFileName"));
            string DBPath_Test = Path.Combine(sm.SelectElementValue("baseFolderPath"), "DB_Test.xml");
            var    dm          = new XmlDBManager(configXml);

            // Load DFD
            dm.DFDPath = DBPath;
            dm.LoadDFD();
            // Delete Test DFD
            dm.DFDPath = DBPath_Test;
            dm.DeleteDFD();
            Assert.IsFalse(File.Exists(DBPath_Test));
            // Create Test DFD
            dm.DFDPath = DBPath_Test;
            dm.SaveDFD();
            Assert.IsTrue(File.Exists(DBPath_Test));
            // Create a table in Test DFD
            dm.DFDPath = DBPath_Test;
            XElement newTable1 =
                new XElement("table", new XAttribute("name", "coordinates"),
                             new XElement("Name", new XAttribute("type", "string")),
                             new XElement("Latitude", new XAttribute("type", "int")),
                             new XElement("Longitude", new XAttribute("type", "int")));

            dm.CreateDFDTable(newTable1);
            Assert.IsNotNull(dm.GetTableRef("coordinates"));
            // Delete the table in Test DFD
            dm.DeleteDFDTable("coordinates");
            Assert.IsNull(dm.GetTableRef("coordinates"));
            // Create table "coordinates" again (now from existing DFD)
            newTable1 =
                new XElement("table", new XAttribute("name", "coordinates"),
                             new XElement("Name", new XAttribute("type", "string")),
                             new XElement("Latitude", new XAttribute("type", "int")),
                             new XElement("Longitude", new XAttribute("type", "int")));
            dm.CreateDFDTable(newTable1);
            // Create a second table "people"
            XElement newTable2 =
                new XElement("table", new XAttribute("name", "people"),
                             new XElement("Firstname", new XAttribute("type", "string")),
                             new XElement("Lastname", new XAttribute("type", "string")),
                             new XElement("Initials", new XAttribute("type", "string")));

            dm.CreateDFDTable(newTable2);
            // Delete 2nd table
            dm.DeleteDFDTable("people");
            Assert.IsNull(dm.GetTableRef("people"));
            Assert.IsNotNull(dm.GetTableRef("coordinates"));
            // Add 2nd table again
            newTable2 =
                new XElement("table", new XAttribute("name", "people"),
                             new XElement("Firstname", new XAttribute("type", "string")),
                             new XElement("Lastname", new XAttribute("type", "string")),
                             new XElement("Initials", new XAttribute("type", "string")));
            dm.CreateDFDTable(newTable2);
            // Save to disk, load and verify that the 2 tables must exist.
            dm.SaveDFD();
            dm.LoadDFD();
            Assert.IsNotNull(dm.GetTableRef("coordinates"));
            Assert.IsNotNull(dm.GetTableRef("people"));
            // Delete 1st table
            dm.DeleteDFDTable("coordinates");
            Assert.IsNull(dm.GetTableRef("coordinates"));
            Assert.IsNotNull(dm.GetTableRef("people"));
            // Delete 2nd table
            dm.DeleteDFDTable("people");
            Assert.IsNull(dm.GetTableRef("people"));
            // Save to disk, load and verify that the 2 tables do not exist.
            dm.SaveDFD();
            dm.LoadDFD();
            Assert.IsNull(dm.GetTableRef("coordinates"));
            Assert.IsNull(dm.GetTableRef("people"));
        }