コード例 #1
0
ファイル: EliteDBIO.cs プロジェクト: Duke-Jones/ED-IBE
        /// <summary>
        /// loads the localized commodity names and check if 
        /// the self added names now included in the official dictionary
        /// </summary>
        internal void ImportCommodityLocalizations(DataSet DataNames, enLocalisationImportType importType = enLocalisationImportType.onlyNew)
        {
            DBConnector               lDBCon = null;
            dsEliteDB                 Data;
            Dictionary<String, Int32> foundLanguagesFromFile     = new Dictionary<String, Int32>();
            String                    sqlString;
            Int32                     currentSelfCreatedIndex;
            Int32                     Counter = 0;
            Boolean                   idColumnFound = false;
            String                    BaseName;
            DataRow[]                 Commodity;

            Data      = new dsEliteDB();

            try
            {
                lDBCon = new DBConnector(Program.DBCon.ConfigData, true);

                // gettin' some freaky performance
                lDBCon.Execute("set global innodb_flush_log_at_trx_commit=2");

                sqlString = "select min(id) As min_id from tbCommodity";
                lDBCon.Execute(sqlString, "minID", DataNames);

                if(Convert.IsDBNull(DataNames.Tables["minID"].Rows[0]["min_id"]))
                    currentSelfCreatedIndex = -1;
                else
                {
                    currentSelfCreatedIndex = ((Int32)DataNames.Tables["minID"].Rows[0]["min_id"]) - 1;
                    if(currentSelfCreatedIndex >= 0)
                        currentSelfCreatedIndex = -1;
                }

                lDBCon.TableRead("select * from tbLanguage", Data.tblanguage);
                lDBCon.TableRead("select * from tbCommodityLocalization", Data.tbcommoditylocalization);
                lDBCon.TableRead("select * from tbCommodity", Data.tbcommodity);

                if(DataNames.Tables["Names"] != null)
                { 
                    sendProgressEvent(new ProgressEventArgs() {Info="import commodity localization", CurrentValue=Counter, TotalValue=DataNames.Tables["Names"].Rows.Count });

                    // first check if there's a new language
                    foreach (DataColumn LanguageFromFile in DataNames.Tables["Names"].Columns)
                    {
                        if(!LanguageFromFile.ColumnName.Equals("id", StringComparison.InvariantCultureIgnoreCase))
                        {
                            DataRow[] LanguageName  = Data.tblanguage.Select("language  = " + DBConnector.SQLAString(LanguageFromFile.ColumnName));

                            if(LanguageName.Count() == 0)
                            {
                                // add a non existing language
                                DataRow newRow  = Data.tblanguage.NewRow();
                                int?    Wert    = DBConvert.To<int?>(Data.tblanguage.Compute("max(id)", ""));

                                if(Wert == null)
                                    Wert = 0;

                                Wert += 1;
                                newRow["id"]        = Wert;
                                newRow["language"]  = LanguageFromFile.ColumnName;

                                Data.tblanguage.Rows.Add(newRow);

                                foundLanguagesFromFile.Add(LanguageFromFile.ColumnName, (Int32)Wert);
                            }
                            else
                                foundLanguagesFromFile.Add((String)LanguageName[0]["language"], (Int32)LanguageName[0]["id"]);
                        }
                        else
                            idColumnFound = true;
                    
                    }
                
                    // submit changes (tbLanguage)
                    lDBCon.TableUpdate(Data.tblanguage);

                    // compare and add the localized names
                    foreach (DataRow LocalizationFromFile in DataNames.Tables["Names"].AsEnumerable())
                    {
                        int? commodityID = null;

                        if (idColumnFound)
                            commodityID  = DBConvert.To<int?>(LocalizationFromFile["id"]);

                        if (commodityID == 1)
                            Debug.Print("Stop");

                        BaseName  = (String)LocalizationFromFile[Program.BASE_LANGUAGE];

                        if ((commodityID == null) || (commodityID < 0))
                        {
                            // no id or selfcreated
                            Commodity = Data.tbcommodity.Select("commodity = " + DBConnector.SQLAString(DBConnector.DTEscape(BaseName)));
                        }
                        else
                        { 
                            // confirmed commodity with id    
                            Commodity = Data.tbcommodity.Select("id = " + commodityID);
                        }
                            

                        if (Commodity.Count() == 0)
                        { 
                            // completely unknown commodity - add first new entry to "tbCommodities"
                            DataRow newRow = Data.tbcommodity.NewRow();

                            newRow["id"]            = currentSelfCreatedIndex;
                            newRow["commodity"]     = BaseName;
                            newRow["is_rare"]       = 0;

                            Data.tbcommodity.Rows.Add(newRow);

                            currentSelfCreatedIndex -= 1;

                            // submit changes (tbCommodity)
                            lDBCon.TableUpdate(Data.tbcommodity);

                            Commodity             = Data.tbcommodity.Select("commodity = " + DBConnector.SQLAString(DBConnector.DTEscape(BaseName)));
                        }

                        foreach (KeyValuePair<String, Int32> LanguageFormFile in foundLanguagesFromFile)
                        {
                            DataRow[] currentLocalizations  = Data.tbcommoditylocalization.Select("     commodity_id  = " + Commodity[0]["id"] + 
                                                                                                  " and language_id   = " + LanguageFormFile.Value);

                            if(currentLocalizations.Count() == 0)
                            {
                                // add a new localization
                                DataRow newRow = Data.tbcommoditylocalization.NewRow();

                                newRow["commodity_id"]  = Commodity[0]["id"];
                                newRow["language_id"] = LanguageFormFile.Value;
                                if((String)LocalizationFromFile[LanguageFormFile.Key] == "")
                                    newRow["locname"] = BaseName;
                                else
                                    newRow["locname"] = (String)LocalizationFromFile[LanguageFormFile.Key];

                                Data.tbcommoditylocalization.Rows.Add(newRow);
                            }
                            else if((importType == enLocalisationImportType.overWriteAll) || 
                                   ((importType == enLocalisationImportType.overwriteNonBase) && (LanguageFormFile.Key != Program.BASE_LANGUAGE)))
                            {
                                if((String)LocalizationFromFile[LanguageFormFile.Key] != "")
                                    currentLocalizations[0]["locname"] = (String)LocalizationFromFile[LanguageFormFile.Key];
                            }

                        }

                        Counter++;
                        sendProgressEvent(new ProgressEventArgs() {Info="import commodity localization", CurrentValue=Counter, TotalValue=DataNames.Tables["Names"].Rows.Count });

                        //if((Counter % 50) == 0)
                        //    lDBCon.TableUpdate(Data.tbcommoditylocalization);
                    }
                }
                // submit changes
                lDBCon.TableUpdate(Data.tbcommoditylocalization);

                // gettin' some freaky performance
                lDBCon.Execute("set global innodb_flush_log_at_trx_commit=1");

                lDBCon.Dispose();

            }
            catch (Exception ex)
            {
                if(lDBCon != null)
                {
                    try
                    {
                        // reset freaky performance
                        lDBCon.Execute("set global innodb_flush_log_at_trx_commit=1");
                    }
                    catch (Exception) { }

                    lDBCon.Dispose();
                }

                throw new Exception("Error while loading commodity names", ex);
            }

        }
コード例 #2
0
ファイル: EliteDBIO.cs プロジェクト: Duke-Jones/ED-IBE
        public void ImportLocalizationDataFromCSV(string fileName, EliteDBIO.enLocalizationType activeSetting, enLocalisationImportType importType = enLocalisationImportType.onlyNew)
        {
            String sqlString = "";
            Int32 counter = 0;
            String infoString = "";
            String idString = "";
            String dataLine;
            DataSet importData;
            DataTable importTable;

            try
            {
                switch (activeSetting)
                {
                    case enLocalizationType.Commodity:
                        infoString = "import commodity localization...";
                        idString = "Commodity_ID;Language;Name";
                        break;
                    case enLocalizationType.Category:
                        infoString = "import category localization...";
                        idString = "Category_ID;Language;Name";
                        break;
                    case enLocalizationType.Economylevel:
                        infoString = "import economylevel localization...";
                        idString = "EconomyLevel_ID;Language;Name";
                        break;
                    default:
                        throw new Exception("unknown setting :  " + activeSetting);
                }

                List<string> dataLines = File.ReadAllLines(fileName).ToList();
                
                if(dataLines[0].Equals(idString, StringComparison.InvariantCultureIgnoreCase))
                {
                    importData  = new DataSet();
                    importTable = new DataTable("Names");
                    importData.Tables.Add(importTable);
                    DataColumn column;

                    column = new DataColumn("id", Type.GetType("System.Int32"));
                    column.AllowDBNull = false;
                    column.Unique       = true;
                    importTable.Columns.Add(column);

                    for (int i = 1; i < dataLines.Count; i++)
        			{
                        if(!String.IsNullOrEmpty(dataLines[i]))
                        {
                            switch (activeSetting)
                            {
                                case enLocalizationType.Commodity:
                                    List<String> data = dataLines[i].Split(new char[] {';'}).ToList();
                                    Int32 currentID = Int32.Parse(data[0]);

                                    if (!importTable.Columns.Contains(data[1]))
                                    {

                                        Debug.Print(Type.GetType("System.String").ToString());
                                        // add a new language in table
                                        column = new DataColumn(data[1], Type.GetType("System.String"));
                                        column.DefaultValue = "";
                                        importTable.Columns.Add(column);
                                    }

                                    DataRow currentrow;

                                    var rowForID = importTable.Select("id = " + currentID);
                                    
                                    if (rowForID.Count() == 0)
                                    {
                                        // add a new row
                                        currentrow        = importTable.NewRow();
                                        currentrow["id"]  = currentID;
                                        importTable.Rows.Add(currentrow);
                                    }
                                    else
                                        currentrow = rowForID[0];

                                    currentrow[data[1]] = data[2].Trim();

                                    break;
                                case enLocalizationType.Category:
                                    break;
                                case enLocalizationType.Economylevel:
                                    break;
                                default:
                                    throw new Exception("unknown setting :  " + activeSetting);
                            }
                        }

                        counter++;
                    }
                
                    switch (activeSetting)
                    {
                        case enLocalizationType.Commodity:
                            ImportCommodityLocalizations(importData, importType);
                            break;
                        case enLocalizationType.Category:
                            infoString = "import category localization...";
                            idString = "Category_ID;Language;Name";
                            break;
                        case enLocalizationType.Economylevel:
                            infoString = "import economylevel localization...";
                            idString = "EconomyLevel_ID;Language;Name";
                            break;
                        default:
                            throw new Exception("unknown setting :  " + activeSetting);
                    }

                }
                else
                {
                    sendProgressEvent(new ProgressEventArgs() { Info="abort: file has wrong header", CurrentValue=1, TotalValue=1, ForceRefresh=true });
                }

                dataLines.Clear();
            }
            catch (Exception ex)
            {
                throw new Exception("Error while importing localization data from csv", ex);
            }
        }