using System;
using System.Data;
using Kreta.Framework;
using Kreta.Framework.Util;
namespace Kreta.DataAccessManual.Util
{
public sealed class DictionaryItemCacheUtil
{
private const string DictionaryNamePostfix = "_DNAME";
private const string SeparatorString = ",;";
///
/// Létrehoz új oszlopokat processedTable-ben {ColumnName}_DNAME névvel(ha még ilyen nevű oszlopok nem léteznek).
/// Kitölti a DictionaryCache-ből a columnNamesString értéke alapján {ColumnName}_DNAME értékét.
/// Ha már létezik a {ColumnName}_DNAME oszlop, akkor felülírja az oszlop tartalmát.
///
///
///
public static void TableColumnFromDictionaryCache(DataTable processedTable, string columnNamesString)
{
#region Argumentnull-ellenőrzés
if (processedTable == null)
{
throw new ArgumentNullException(nameof(processedTable));
}
if (columnNamesString == null)
{
throw new ArgumentNullException(nameof(columnNamesString));
}
#endregion
#region Oszlopnevek kinyerése columnNamesString argumentumból
// oszlopnevek szeparálása
var separator = SeparatorString.ToCharArray();
var columnNames = columnNamesString.Split(separator);
var columnCount = columnNames.Length;
#endregion
#region Egzisztencia-ellenőrzés
for (var i = 0; i < columnCount; i++)
{
var columnName = columnNames[i];
if (processedTable.Columns.Contains(columnName) == false)
{
throw new ArgumentOutOfRangeException(nameof(columnNamesString), columnNamesString, @"The columnNamesString parameter contains columnName that not exists in the specified table!");
}
}
#endregion
#region Oszlopok hozzáadása
for (var i = 0; i < columnCount; i++)
{
var newColumnName = columnNames[i] + DictionaryNamePostfix;
if (processedTable.Columns[newColumnName] == null)
{
processedTable.Columns.Add(newColumnName);
}
}
#endregion
#region Szövegek beállítása a cache-selt szótárból (nyelvesen)
// DNAME beállítás a cache-ből
foreach (DataRow dataRow in processedTable.Rows)
{
for (var i = 0; i < columnCount; i++)
{
var rowHasValue = true;
var newColumnName = columnNames[i] + DictionaryNamePostfix;
if (dataRow[columnNames[i]] == DBNull.Value || string.IsNullOrWhiteSpace(dataRow[columnNames[i]].ToString()))
{
rowHasValue = false;
}
if (rowHasValue)
{
var strActCache = Convert.ToInt32(dataRow[columnNames[i]]).GetItemNameFromCache(UserContext.Instance.SelectedTanevId);
dataRow[newColumnName] = strActCache;
}
else
{
dataRow[newColumnName] = string.Empty;
}
}
}
#endregion
}
}
}