/// <summary> /// adds a new commodity the the dictionary /// </summary> /// <param name="commodity"></param> /// <param name="language"></param> private void addCommodity(string commodity, enLanguage language) { dsCommodities ownCommodities = new dsCommodities(); if(File.Exists(@".\Data\Commodities_own.xml")) ownCommodities.ReadXml(@".\Data\Commodities_own.xml"); dsCommodities.NamesRow newCommodity = (dsCommodities.NamesRow)_commodities.Names.NewRow(); dsCommodities.NamesRow newOwnCommodity = (dsCommodities.NamesRow)ownCommodities.Names.NewRow(); foreach (enLanguage availableLanguage in Enum.GetValues(typeof(enLanguage))) newOwnCommodity[availableLanguage.ToString()] = Program.COMMODITY_NOT_SET; newOwnCommodity[language.ToString()] = commodity; foreach (enLanguage availableLanguage in Enum.GetValues(typeof(enLanguage))) newCommodity[availableLanguage.ToString()] = newOwnCommodity[availableLanguage.ToString()]; // add to both dictionaries ownCommodities.Names.AddNamesRow(newOwnCommodity); _commodities.Names.AddNamesRow(newCommodity); // save to "own" file ownCommodities.WriteXml(@".\Data\Commodities_own_new.xml"); FileSaver.rotateSaveFiles(@".\Data\Commodities_own.xml"); // reload in working array loadCommodities(RegulatedNoiseSettings.Language); }
/// <summary> /// loads the localized commodity names and check if /// the self added names now included in the official dictionary /// </summary> private void prepareCommodityNames() { dsCommodities ownCommodities = new dsCommodities(); List<dsCommodities.NamesRow> forDeleting = new List<dsCommodities.NamesRow>(); bool found; try { _commodities.ReadXml(@".\Data\Commodities.xml"); if(File.Exists(@".\Data\Commodities_own.xml")) { ownCommodities.ReadXml(@".\Data\Commodities_own.xml"); foreach (dsCommodities.NamesRow Commodity in ownCommodities.Tables["Names"].Rows) { found = false; foreach (enLanguage language in Enum.GetValues(typeof(enLanguage))) { dsCommodities.NamesRow[] existing = (dsCommodities.NamesRow[])(_commodities.Tables["Names"].Select(String.Format("{0} = '{1}'" , language.ToString(), EscapeLikeValue(Commodity[language.ToString()].ToString())))); Debug.Print(String.Format("{0} = '{1}'" , language.ToString(), Commodity[language.ToString()])); if(existing.GetUpperBound(0) == 0) { // commodity exists in the official directory found = true; break; } } // if commodity is existing at least in one language we remove it if(found) forDeleting.Add(Commodity); } } // now delete the existing double commodities and save the cleaned data again foreach (dsCommodities.NamesRow item in forDeleting) ownCommodities.Tables["Names"].Rows.Remove(item); // save the reviewed "own" commodity list ownCommodities.WriteXml(@".\Data\Commodities_own_new.xml"); FileSaver.rotateSaveFiles(@".\Data\Commodities_own.xml"); // merge both tables _commodities.Tables["Names"].Merge(ownCommodities.Tables["Names"]); } catch (Exception ex) { throw new Exception("Error while loading commodity names", ex); } }