/// <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> /// adds objects for not yet existing localized commodities /// </summary> internal void addLocalized2RN(dsCommodities.NamesDataTable localizedCommodities) { EDCommoditiesExt EDCommodity = null; enLanguage foundLanguage = enLanguage.eng; bool changed = false; foreach (dsCommodities.NamesRow localizedItem in localizedCommodities) { // look if the name is available at least in one language foreach (enLanguage availableLanguage in Enum.GetValues(typeof(enLanguage))) { foundLanguage = availableLanguage; EDCommodity = m_Commodities.Find(x => x.Name.Equals(localizedItem[availableLanguage.ToString()].ToString(), StringComparison.InvariantCultureIgnoreCase)); if(EDCommodity != null) break; } if(EDCommodity != null) { // found if((foundLanguage != enLanguage.eng) && (localizedItem.eng != Program.COMMODITY_NOT_SET)) { // it's not the base(=english) name, but the base(=english) name is available -> change this EDCommodity.Name = localizedItem.eng; changed = true; } } else { // not found, add it with the available EDCommodity = new EDCommoditiesExt(); EDCommodity.Name = localizedItem.eng; if(EDCommodity.Name == Program.COMMODITY_NOT_SET) { // base(=english) name not available, get the next existing name foreach (enLanguage availableLanguage in Enum.GetValues(typeof(enLanguage))) { if(localizedItem[availableLanguage.ToString()].ToString() != Program.COMMODITY_NOT_SET) { // got it -> break EDCommodity.Name = localizedItem[availableLanguage.ToString()].ToString(); break; } } } EDCommodity.Id = m_Commodities.Max(x => x.Id) + 1; EDCommodity.AveragePrice = -1; m_Commodities.Add(EDCommodity); changed = true; } if(changed) saveRNCommodityData(@"./Data/commodities_RN.json", true); } }
/// <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); } }