Esempio n. 1
0
        /// <summary>
        /// Load the Batch part info in memory, in a SyncTable
        /// </summary>
        internal virtual Task <(SyncContext context, SyncTable syncTable)> InternalLoadTableFromBatchInfoAsync(
            SyncContext context, BatchInfo batchInfo, string tableName, string schemaName = default, DataRowState?dataRowState = default)
        {
            if (batchInfo == null || batchInfo.SanitizedSchema == null)
            {
                return(Task.FromResult <(SyncContext, SyncTable)>((context, null)));
            }

            // get the sanitazed table (without any readonly / non updatable columns) from batchinfo
            var schemaTable = batchInfo.SanitizedSchema.Tables[tableName, schemaName];
            var table       = schemaTable.Clone();

            var localSerializer = new LocalJsonSerializer();

            var interceptorsReading = this.interceptors.GetInterceptors <DeserializingRowArgs>();

            if (interceptorsReading.Count > 0)
            {
                localSerializer.OnReadingRow(async(schemaTable, rowString) =>
                {
                    var args = new DeserializingRowArgs(context, schemaTable, rowString);
                    await this.InterceptAsync(args).ConfigureAwait(false);
                    return(args.Result);
                });
            }
            // Gets all BPI containing this table
            foreach (var bpi in batchInfo.GetBatchPartsInfo(tableName, schemaName))
            {
                // Get full path of my batchpartinfo
                var fullPath = batchInfo.GetBatchPartInfoPath(bpi).FullPath;

                if (!File.Exists(fullPath))
                {
                    continue;
                }

                if (bpi.Tables == null || bpi.Tables.Count() < 1)
                {
                    return(Task.FromResult <(SyncContext, SyncTable)>((context, null)));
                }

                foreach (var syncRow in localSerializer.ReadRowsFromFile(fullPath, schemaTable))
                {
                    if (!dataRowState.HasValue || dataRowState == default || syncRow.RowState == dataRowState)
                    {
                        table.Rows.Add(syncRow);
                    }
                }
            }


            return(Task.FromResult((context, table)));
        }
Esempio n. 2
0
        /// <summary>
        /// Load the Batch part info in memory, in a SyncTable
        /// </summary>
        internal Task <SyncTable> InternalLoadTableFromBatchPartInfoAsync(SyncContext context, BatchInfo batchInfo, BatchPartInfo batchPartInfo, DataRowState?dataRowState = default)
        {
            if (batchInfo == null || batchInfo.SanitizedSchema == null)
            {
                return(Task.FromResult <SyncTable>(null));
            }

            var localSerializer = new LocalJsonSerializer();

            // Get full path of my batchpartinfo
            var fullPath = batchInfo.GetBatchPartInfoPath(batchPartInfo).FullPath;

            if (!File.Exists(fullPath))
            {
                return(Task.FromResult <SyncTable>(null));
            }

            if (batchPartInfo.Tables == null || batchPartInfo.Tables.Count() < 1)
            {
                return(Task.FromResult <SyncTable>(null));
            }

            var schemaTable = batchInfo.SanitizedSchema.Tables[batchPartInfo.Tables[0].TableName, batchPartInfo.Tables[0].SchemaName];

            var table = schemaTable.Clone();

            var interceptorsReading = this.interceptors.GetInterceptors <DeserializingRowArgs>();

            if (interceptorsReading.Count > 0)
            {
                localSerializer.OnReadingRow(async(schemaTable, rowString) =>
                {
                    var args = new DeserializingRowArgs(context, schemaTable, rowString);
                    await this.InterceptAsync(args).ConfigureAwait(false);
                    return(args.Result);
                });
            }

            foreach (var syncRow in localSerializer.ReadRowsFromFile(fullPath, schemaTable))
            {
                if (!dataRowState.HasValue || dataRowState == default || syncRow.RowState == dataRowState)
                {
                    table.Rows.Add(syncRow);
                }
            }

            return(Task.FromResult(table));
        }
Esempio n. 3
0
        internal async Task <SyncContext> InternalSaveTableToBatchPartInfoAsync(SyncContext context, BatchInfo batchInfo, BatchPartInfo batchPartInfo, SyncTable syncTable)
        {
            var localSerializer = new LocalJsonSerializer();

            // Get full path of my batchpartinfo
            var fullPath = batchInfo.GetBatchPartInfoPath(batchPartInfo).FullPath;

            if (File.Exists(fullPath))
            {
                File.Delete(fullPath);
            }

            var interceptorsWriting = this.interceptors.GetInterceptors <SerializingRowArgs>();

            if (interceptorsWriting.Count > 0)
            {
                localSerializer.OnWritingRow(async(schemaTable, rowArray) =>
                {
                    var args = new SerializingRowArgs(context, schemaTable, rowArray);
                    await this.InterceptAsync(args).ConfigureAwait(false);
                    return(args.Result);
                });
            }
            // open the file and write table header
            await localSerializer.OpenFileAsync(fullPath, syncTable).ConfigureAwait(false);

            foreach (var row in syncTable.Rows)
            {
                await localSerializer.WriteRowToFileAsync(row, syncTable).ConfigureAwait(false);
            }

            // Close file
            await localSerializer.CloseFileAsync(fullPath, syncTable).ConfigureAwait(false);

            return(context);
        }