private TableXsd ArchiveTableXsd(FileInfo path, ITable table, int tableNo)
        {
            if (path == null)
            {
                throw new ArgumentNullException(nameof(path));
            }
            if (table == null)
            {
                throw new ArgumentNullException(nameof(table));
            }
            if (tableNo < 1)
            {
                throw new DeliveryEngineRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.IllegalValue, tableNo, "tableNo"));
            }

            ReadOnlyObservableCollection <IFilter> fieldFilters = table.FieldFilters;

            var columnId = 1;
            var xsd      = new TableXsd(table, tableNo, path, _fileIndex);

            foreach (var field in table.Fields.Where(m => ExcludeField(m, fieldFilters) == false))
            {
                field.ColumnId = $"c{columnId++}";
                xsd.AddColumn(field.ColumnId, field.DatatypeOfTarget, field.Nullable);
            }

            xsd.Perist();
            return(xsd);
        }
        private int ArchiveTableXml(FileInfo path, TableXsd tableXsd, ITable table, IEnumerable <IEnumerable <IDataObjectBase> > dataRows, int tableNo, object syncRoot)
        {
            if (path == null)
            {
                throw new ArgumentNullException(nameof(path));
            }
            if (tableXsd == null)
            {
                throw new ArgumentNullException(nameof(tableXsd));
            }
            if (dataRows == null)
            {
                throw new ArgumentNullException(nameof(dataRows));
            }
            if (table == null)
            {
                throw new ArgumentNullException(nameof(table));
            }
            if (tableNo < 1)
            {
                throw new DeliveryEngineRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.IllegalValue, tableNo, "tableNo"));
            }
            if (syncRoot == null)
            {
                throw new ArgumentNullException(nameof(syncRoot));
            }

            ReadOnlyObservableCollection <IFilter> fieldFilters = table.FieldFilters;

            using (var tableXml = new TableXml(tableXsd, path, _fileIndex, tableNo))
            {
                var rowCount = 0;
                foreach (var dataRow in dataRows)
                {
                    tableXml.AddRow();
                    foreach (var dataObject in dataRow.Where(m => ExcludeField(m.Field, fieldFilters) == false))
                    {
                        var genericMethodForValue = dataObject.GetType()
                                                    .GetMethod("GetTargetValue", new Type[] { })
                                                    .MakeGenericMethod(dataObject.Field.DatatypeOfTarget);
                        var value = genericMethodForValue.Invoke(dataObject, null);
                        tableXml.AddField(dataObject.Field.ColumnId, value);
                    }
                    tableXml.CloseRow();
                    rowCount++;
                }

                tableXml.Persist(syncRoot);

                return(rowCount);
            }
        }