Пример #1
0
        /// <summary>
        /// Populate the DataView with the DB2 Data.
        /// </summary>
        private void PopulateDataView(IDBCDStorage storage, ref DataTable data)
        {
            foreach (var rowData in storage.Values)
            {
                var row = data.NewRow();

                foreach (string columnName in rowData.GetDynamicMemberNames())
                {
                    var columnValue = rowData[columnName];

                    if (columnValue.GetType().IsArray)
                    {
                        Array columnValueArray = (Array)columnValue;
                        for (var i = 0; i < columnValueArray.Length; ++i)
                        {
                            row[columnName + i] = columnValueArray.GetValue(i);
                        }
                    }
                    else
                    {
                        row[columnName] = columnValue;
                    }
                }

                data.Rows.Add(row);
            }
        }
Пример #2
0
        /// <summary>
        /// Populate the DataView with the DB2 Columns.
        /// </summary>
        private void PopulateColumns(IDBCDStorage storage, ref DataTable data)
        {
            if (storage.Values.Count == 0)
            {
                data.Columns.Add("No data");
                return;
            }

            var firstItem = storage.Values.First();

            foreach (string columnName in firstItem.GetDynamicMemberNames())
            {
                var columnValue = firstItem[columnName];

                if (columnValue.GetType().IsArray)
                {
                    Array columnValueArray = (Array)columnValue;
                    for (var i = 0; i < columnValueArray.Length; ++i)
                    {
                        data.Columns.Add(columnName + i);
                    }
                }
                else
                {
                    data.Columns.Add(columnName);
                }
            }
        }
Пример #3
0
        private async Task <byte[]> GenerateCSVStream(IDBCDStorage storage, Parameters parameters, bool newLinesInStrings = true)
        {
            if (storage.AvailableColumns.Length == 0)
            {
                throw new Exception("No columns found!");
            }

            // NOTE: if newLinesInStrings is obsolete then use StringToCSVCell in ctor
            Func <string, string> formatter = newLinesInStrings switch
            {
                true => StringToCSVCell,
                _ => StringToCSVCellSingleLine
            };

            var viewFilter = new DBCViewFilter(storage, parameters, formatter);

            using var exportStream = new MemoryStream();
            using var exportWriter = new StreamWriter(exportStream);

            // write header
            await exportWriter.WriteLineAsync(string.Join(",", GetColumnNames(storage)));

            // write records
            foreach (var item in viewFilter.GetRecords())
            {
                await exportWriter.WriteLineAsync(string.Join(",", item));
            }

            exportWriter.Flush();

            return(exportStream.ToArray());
        }
Пример #4
0
        private IEnumerable <string> GetColumnNames(IDBCDStorage storage)
        {
            var record = storage.Values.FirstOrDefault();

            if (record == null)
            {
                yield break;
            }

            for (var i = 0; i < storage.AvailableColumns.Length; ++i)
            {
                var name = storage.AvailableColumns[i];

                if (record[name] is Array array)
                {
                    // explode arrays by suffixing the ordinal
                    for (var j = 0; j < array.Length; j++)
                    {
                        yield return(name + $"[{j}]");
                    }
                }
                else
                {
                    yield return(name);
                }
            }
        }
Пример #5
0
        private void OpenDBItems_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            // Clear DataGrid
            DB2DataGrid.Columns.Clear();
            DB2DataGrid.ItemsSource = new List <string>();

            currentOpenDB2 = (string)OpenDBItems.SelectedItem;
            if (currentOpenDB2 == null)
            {
                return;
            }

            if (dbLoader.LoadedDBFiles.TryGetValue(currentOpenDB2, out IDBCDStorage storage))
            {
                var stopWatch = new Stopwatch();
                stopWatch.Start();

                var data = new DataTable();
                PopulateColumns(storage, ref data);
                if (storage.Values.Count > 0)
                {
                    PopulateDataView(storage, ref data);
                }

                stopWatch.Stop();
                Console.WriteLine($"Populating Grid: {currentOpenDB2} Elapsed Time: {stopWatch.Elapsed}");

                openedDB2Storage        = storage;
                DB2DataGrid.ItemsSource = data.DefaultView;
            }

            Title = $"WDBXEditor2  -  {Constants.Version}  -  {currentOpenDB2}";
        }
Пример #6
0
        public DBCViewFilter(IDBCDStorage storage, IReadOnlyDictionary <string, string> parameters, Func <string, string> stringFormatter = null)
        {
            Storage         = storage;
            Parameters      = parameters;
            StringFormatter = stringFormatter;

            InitialiseSort();
            InitialiseSearch();
            Initialise();
        }
Пример #7
0
        /// <summary>
        /// Close the currently opened DB2 file.
        /// </summary>
        private void Close_Click(object sender, RoutedEventArgs e)
        {
            Title = $"WDBXEditor2  -  {Constants.Version}";

            // Remove the DB2 file from the open files.
            OpenDBItems.Items.Remove(currentOpenDB2);

            // Clear DataGrid
            DB2DataGrid.Columns.Clear();

            currentOpenDB2   = string.Empty;
            openedDB2Storage = null;
        }
Пример #8
0
        private void OpenDBItems_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            // Clear DataGrid
            DB2DataGrid.Columns.Clear();
            DB2DataGrid.ItemsSource = new List <string>();

            DB2InfoDataGrid.Columns.Clear();
            DB2InfoDataGrid.ItemsSource = new List <string>();


            currentOpenDB2 = (string)OpenDBItems.SelectedItem;
            if (currentOpenDB2 == null)
            {
                return;
            }

            if (dbLoader.LoadedDBFiles.TryGetValue(currentOpenDB2, out IDBCDStorage storage))
            {
                var stopWatch = new Stopwatch();
                stopWatch.Start();

                var data = new DataTable();
                PopulateColumns(storage, ref data);
                if (storage.Values.Count > 0)
                {
                    PopulateDataView(storage, ref data);
                }

                stopWatch.Stop();
                Console.WriteLine($"Populating Grid: {currentOpenDB2} Elapsed Time: {stopWatch.Elapsed}");

                openedDB2Storage        = storage;
                DB2DataGrid.ItemsSource = data.DefaultView;

                //info data
                var datainfo = new DataTable();
                DBFileReaderLib.DBParser dp = storage.parser;
                datainfo.Columns.Add("Field");
                datainfo.Columns.Add("Data");
                datainfo.Columns.Add("Comments");

                string strComment = "db2 header";
                datainfo.Rows.Add("RecordsCount", dp.RecordsCount, strComment);
                datainfo.Rows.Add("FieldsCount", dp.FieldsCount, strComment);
                datainfo.Rows.Add("RecordSize", dp.RecordSize, strComment);
                datainfo.Rows.Add("StringTableSize", dp.StringTableSize, strComment);
                datainfo.Rows.Add("TableHash", dp.TableHash, strComment);
                datainfo.Rows.Add("LayoutHash", dp.LayoutHash, strComment);
                datainfo.Rows.Add("min_id", dp.min_id, strComment);
                datainfo.Rows.Add("max_id", dp.max_id, strComment);
                datainfo.Rows.Add("local", dp.local, strComment);
                datainfo.Rows.Add("Flags", (int)dp.Flags, strComment);
                datainfo.Rows.Add("IdFieldIndex", dp.IdFieldIndex, strComment);
                datainfo.Rows.Add("total_field_count", dp.FieldsCount, strComment);
                datainfo.Rows.Add("bitpacked_data_offset", dp.bitpacked_data_offset, strComment);
                datainfo.Rows.Add("lookupColumnCount", dp.lookupColumnCount, strComment);
                datainfo.Rows.Add("field_info_size", dp.field_info_size, strComment);
                datainfo.Rows.Add("commonDataSize", dp.commonDataSize, strComment);
                datainfo.Rows.Add("palletDataSize", dp.palletDataSize, strComment);
                datainfo.Rows.Add("SectionsCount", dp.SectionsCount, strComment);

                //section info
                for (int i = 0; i < dp.SectionHeaders.Count; i++)
                {
                    strComment = String.Format("Section{0} header", i);
                    datainfo.Rows.Add("tact_key_hash", dp.SectionHeaders[i].TactKeyLookup, strComment);
                    datainfo.Rows.Add("FileOffset", dp.SectionHeaders[i].FileOffset, strComment);
                    datainfo.Rows.Add("NumRecords", dp.SectionHeaders[i].NumRecords, strComment);
                    datainfo.Rows.Add("StringTableSize", dp.SectionHeaders[i].StringTableSize, strComment);
                    datainfo.Rows.Add("OffsetRecordsEndOffset", dp.SectionHeaders[i].OffsetRecordsEndOffset, strComment);
                    datainfo.Rows.Add("IndexDataSize", dp.SectionHeaders[i].IndexDataSize, strComment);
                    datainfo.Rows.Add("ParentLookupDataSize", dp.SectionHeaders[i].ParentLookupDataSize, strComment);
                    datainfo.Rows.Add("OffsetMapIDCount", dp.SectionHeaders[i].OffsetMapIDCount, strComment);
                    datainfo.Rows.Add("CopyTableCount", dp.SectionHeaders[i].CopyTableCount, strComment);
                }

                DB2InfoDataGrid.ItemsSource = datainfo.DefaultView;
            }

            Title = $"WDBXEditor2  -  {Constants.Version}  -  {currentOpenDB2}";
        }