/// <summary>
        /// Add ImportQueueRecordFiles to database
        /// </summary>
        /// <param name="instances">ImportQueueRecordFile instance array</param>
        /// <param name="importQueueRecord">ImportQueueRecord instance for instances</param>
        /// <param name="saveAfterInsert">Save database after insertion</param>
        /// <param name="waitUntilSaving">Wait until saving</param>
        public void ImportQueueRecordFileInfoAdd(IEnumerable<ImportQueueRecordFileInfo> instances, ImportQueueRecord importQueueRecord, bool saveAfterInsert = true, bool waitUntilSaving = true)
        {
            try
            {
                if (instances == null)
                    throw new ArgumentNullException("instances");
                if (importQueueRecord == null)
                    throw new ArgumentNullException("importQueueRecord");
                instances = instances.Where(i => i != null).ToArray();
                try
                {
                    foreach (var i in instances)
                        i.ImportQueueRecord = importQueueRecord;

                    this.Context.ImportQueueRecordFileInfoes.AddRange(instances);
                    if (saveAfterInsert)
                        this.SaveChanges(waitUntilSaving);
                }
                catch (Exception ex)
                {
                    var e = new Exception(ex.Message, ex);
                    for (int i = 0; i < instances.Count();i++)
                        e.Data.Add(string.Format("instance_{0}", i), instances.ElementAt(i).ToString());
                    throw e;
                }
            }
            catch (Exception ex)
            {
                Helpers.Log.Add(ex, string.Format("Repository.ImportQueueRecordFileInfoAdd(instances=[{0}],saveAfterInsert={1},waitUntilSaving={2})", instances == null ? "NULL" : instances.Count().ToString(), saveAfterInsert, waitUntilSaving));
                throw;
            }
        }
 private void OnImportQueueRecordUpdated(ImportQueueRecord newValue, ImportQueueRecord oldValue)
 {
     if (oldValue != null)
         oldValue.PropertyChanged -= ImportQueueRecord_PropertyChanged;
     if (newValue != null)
         newValue.PropertyChanged += ImportQueueRecord_PropertyChanged;
     RaiseCommands();
 }
        //private Task<bool> SaveTask(ImportQueueRecord item)
        //{
        //    var startTask = Task.Factory.StartNew(() => 
        //    {
        //        IsBusy = true;
        //    }, GetCancellationToken(), TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());

        //    var clientTask = startTask.ContinueWith((t) => 
        //    {
        //        var client = new RoyaltyServiceWorker.AccountService.AccountServiceClient();
        //        try
        //        {
        //            return item.Id == default(Guid)
        //                ? client.PutImportQueueRecord(item)
        //                : client.UpdateImportQueueRecord(item);
        //        }
        //        finally
        //        {
        //            try { client.Close(); } catch { }
        //        }
        //    }, GetCancellationToken(), TaskContinuationOptions.AttachedToParent, TaskScheduler.Default);

        //    var taskRes = clientTask.ContinueWith((res) => 
        //    {
        //        try
        //        {
        //            if (res.Result.Error != null)
        //                throw new Exception(res.Result.Error);

        //            item.CopyObjectFrom(res.Result.Value);
                    
        //            return true;
        //        }
        //        catch(Exception ex)
        //        {
        //            Error = ex.ToString();
        //            return false;
        //        }
        //        finally
        //        {
        //            IsBusy = false;
        //        }
        //    }, GetCancellationToken(), TaskContinuationOptions.AttachedToParent, TaskScheduler.FromCurrentSynchronizationContext());

        //    return taskRes;
        //}

        private Task<ImportQueueRecord[]> DeleteTask(ImportQueueRecord[] items)
        {
            var startTask = Task.Factory.StartNew(() =>
            {
                IsBusy = true;
            }, GetCancellationToken(), TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());

            var clientTask = startTask.ContinueWith((t) =>
            {
                var client = new RoyaltyServiceWorker.AccountService.AccountServiceClient();
                try
                {
                    return client.RemoveImportQueueRecordRange(items.Select(i => i.Id).ToList());
                }
                finally
                {
                    try { client.Close(); } catch { }
                }
            }, GetCancellationToken(), TaskContinuationOptions.AttachedToParent, TaskScheduler.Default);

            var taskRes = clientTask.ContinueWith((res) =>
            {
                try
                {
                    if (res.Result.Error != null)
                        throw new Exception(res.Result.Error);

                    return items
                        .Where(i => !res.Result.Values.Contains(i.Id))
                        .ToArray();
                }
                catch (Exception ex)
                {
                    Error = ex.ToString();
                    return items;
                }
                finally
                {
                    IsBusy = false;
                }
            }, GetCancellationToken(), TaskContinuationOptions.AttachedToParent, TaskScheduler.FromCurrentSynchronizationContext());

            return taskRes;
        }
        private void DeleteFromCollection(ImportQueueRecord item)
        {
            if (item == null)
                return;

            var task = DeleteTask(new[] { item });
            task.ContinueWith((t) => {

                if (t.Exception != null)
                    return;

                if (t.Result.Length > 0)
                    return;

                localCollection.Remove(item);
            }, GetCancellationToken(), TaskContinuationOptions.AttachedToParent, TaskScheduler.FromCurrentSynchronizationContext());

        }
        private void InsertNew(string[] filePath, bool forAnalize, Encoding encoding)
        {
            IsBusy = true;
            var accountId = Account.Id;
            var cancellationToken = GetCancellationToken();
            var fullLoadTask = Task.Factory.StartNew(() => {
                var storageClient = new RoyaltyServiceWorker.StorageService.FileServiceClient();
                var accountClient = new RoyaltyServiceWorker.AccountService.AccountServiceClient();

                var loadFileTasks = storageClient.UploadFiles(filePath, encoding, cancellationToken);
                //wait upload all files
                Task.WaitAll(loadFileTasks);
                var loadFileResult = loadFileTasks.Select(t => t.Result).ToArray();

                var newRecord = new ImportQueueRecord() {
                    AccountUID = accountId,
                    FileInfoes = loadFileResult.Select(f =>
                    new ImportQueueRecordFileInfo()
                    {
                        ForAnalize = forAnalize,
                        SourceFilePath = f.FileName,
                        Files = (new[] { new ImportQueueRecordFileInfoFile() { FileUID = f.Id } }).ToList()
                    }
                    ).ToList()
                };

                var res = accountClient.PutImportQueueRecord(newRecord);
                if (res.Error != null)
                    throw new Exception(res.Error);

                newRecord.CopyObjectFrom(res.Value);
                return newRecord;
            }, GetCancellationToken(), TaskCreationOptions.None, TaskScheduler.Default)
            .ContinueWith(r => {
                IsBusy = false;
                if (r.Exception != null)
                    Error = r.Exception.ToString();
                localCollection.UpdateCollectionAddOrUpdate(new[] { r.Result });
            }, System.Threading.CancellationToken.None, TaskContinuationOptions.AttachedToParent, TaskScheduler.FromCurrentSynchronizationContext());
        }
Example #6
0
 /// <summary>
 /// Remove ImportQueueRecord from database
 /// </summary>
 /// <param name="instance">ImportQueueRecord instance</param>
 /// <param name="saveAfterRemove">Save database after removing</param>
 /// <param name="waitUntilSaving">Wait until saving</param>
 public void ImportQueueRecordRemove(ImportQueueRecord instance, bool saveAfterRemove = true, bool waitUntilSaving = true)
 {
     ImportQueueRecordRemove(new ImportQueueRecord[] { instance }, saveAfterRemove, waitUntilSaving);
 }
Example #7
0
 /// <summary>
 /// Add ImportQueueRecord to database
 /// </summary>
 /// <param name="instance">ImportQueueRecord instance</param>
 /// <param name="saveAfterInsert">Save database after insertion</param>
 /// <param name="waitUntilSaving">Wait until saving</param>
 public void ImportQueueRecordAdd(ImportQueueRecord instance, bool saveAfterInsert = true, bool waitUntilSaving = true)
 {
     ImportQueueRecordAdd(new ImportQueueRecord[] { instance }, saveAfterInsert, waitUntilSaving);
 }
Example #8
0
        /// <summary>
        /// Create/Get new ImportQueueRecord without any link to database
        /// </summary>
        /// <param name="ImportQueueRecordNumber">ImportQueueRecord number</param>
        /// <returns>ImportQueueRecord instance</returns>
        public ImportQueueRecord ImportQueueRecordNew(Account account = null)
        {
            try
            {
                var res = new ImportQueueRecord() 
                { 
                    ImportQueueRecordUID = Guid.NewGuid(), 
                    Account = account,
                    CreatedDate = DateTime.UtcNow,
                };

                if (account != null)
                    account.ImportQueue.Add(res);
                return res;
            }
            catch (Exception ex)
            {
                Helpers.Log.Add(ex, string.Format("Repository.ImportQueueRecordNew(account='{0}')", account == null ? "NULL" : account.ToString()));
                throw;
            }
        }
 /// <summary>
 /// Add ImportQueueRecordFile to database
 /// </summary>
 /// <param name="instance">ImportQueueRecordFile instance</param>
 /// <param name="importQueueRecord">ImportQueueRecord instance for instance</param>
 /// <param name="saveAfterInsert">Save database after insertion</param>
 /// <param name="waitUntilSaving">Wait until saving</param>
 public void ImportQueueRecordFileInfoAdd(ImportQueueRecordFileInfo instance, ImportQueueRecord importQueueRecord, bool saveAfterInsert = true, bool waitUntilSaving = true)
 {
     ImportQueueRecordFileInfoAdd(new ImportQueueRecordFileInfo[] { instance }, importQueueRecord, saveAfterInsert, waitUntilSaving);
 }
Example #10
0
 /// <summary>
 /// Create/Get new ImportQueueRecordFile instance without any link to database
 /// </summary>
 /// <returns>ImportQueueRecordFile instance</returns>
 public ImportQueueRecordFileInfo ImportQueueRecordFileInfoNew(ImportQueueRecord importQueueRecord = null, object anonymousFiller = null)
 {
     try
     {
         var dt = DateTime.UtcNow;
         var res = new ImportQueueRecordFileInfo()
         { 
             ImportQueueRecordFileInfoUID = Guid.NewGuid(),
             ImportQueueRecordState = ImportQueueRecordStateGetDefault(),
         };
         if (anonymousFiller != null)
             res.FillFromAnonymousType(anonymousFiller);
         importQueueRecord = importQueueRecord ?? res.ImportQueueRecord;
         if (importQueueRecord != null)
             importQueueRecord.FileInfoes.Add(res);
         return res;
     }
     catch(Exception ex)
     {
         Helpers.Log.Add(ex, string.Format("Repository.ImportQueueRecordFileInfoNew()"));
         throw;
     }
 }