public void ParseItems(StreamReader reader) { this.Record(); int index = 0; ItemType = System.Type.GetType(FullAssemblyTypeName); while (!reader.EndOfStream) { string l = reader.ReadLine(); if (l == null) break; if (index == 0) { try { FieldNames = l.Split(Delimiter.ToCharArray()[0]); index++; } catch (Exception ex) { AnvilExceptionCollector ec = new AnvilExceptionCollector(ex); ec.Insert(0, "Could not parse the columns from the first line"); throw ec.ToException(); } } else { if (l.Contains("CONSULT")) { int x = 0; x++; } object sourceItem = null; try { sourceItem = ParseLine(l); } catch (Exception ex) { ImportItem i = new ImportItem() { ImportItemId = Guid.NewGuid(), SessionId = SessionId, Description = l, EntityStatus = ImportEntityStatus.Error, EntryDate = DateTime.Now, LineIndex = index - 1, Comment = string.Join("\n", (new Anvil.v2015.v001.Domain.Exceptions.AnvilExceptionCollector(ex)).ToArray()) }; try { db.ImportItems.Add(i); db.SaveChanges(); } catch (Exception ex2) { AnvilExceptionCollector iEx = new AnvilExceptionCollector(ex2); throw iEx.ToException(); } } index++; if (sourceItem != null) { IImportStatus iis = sourceItem as IImportStatus; if (iis == null) throw new Exception("Parse import file failed. The items must implement IImportStatus"); IImportEntity iie = sourceItem as IImportEntity; if (iie == null) throw new Exception("Parse import file failed. The items must implement IImportEntity"); try { iis.LineIndex = index - 1; iis.ImportItemId = Guid.NewGuid(); iis.SessionId = this.SessionId; iis.EntryDate = DateTime.Now; Byte[] _bytes = SerializeItem(sourceItem); iis.SerializedData = _bytes; iis.SourceItem = sourceItem; } catch (Exception ex) { AnvilExceptionCollector ec = new AnvilExceptionCollector(ex); ec.Insert(0, string.Format("Could not serialize item at index {0}", index.ToString())); ec.Insert(0, l); throw ec.ToException(); } try { try { iis.Validate(); } catch (Exception ex) { AnvilExceptionCollector ec = new AnvilExceptionCollector(ex); iis.Comment = string.Join("\n", ec.ToArray()); iis.EntityStatus = ImportEntityStatus.Error; } if (iis.EntityStatus == ImportEntityStatus.Error) goto completesync; if (iie.TargetExists()) { if (UpdateIfExists) { if (iie.IsSyncJustified()) iis.EntityStatus = ImportEntityStatus.Update; else iis.EntityStatus = ImportEntityStatus.None; } else iis.EntityStatus = ImportEntityStatus.Ignore; } else { if (AddIfNotExist) iis.EntityStatus = ImportEntityStatus.Create; else iis.EntityStatus = ImportEntityStatus.Ignore; } } catch (Exception ex) { throw new Exception("Could not get sync status of this item", ex); } completesync: iis.SerializedData = SerializeItem(iis); iis.Record(); } } } }
public void Import() { List<ImportItem> cc = db.ImportItems.Where(x => x.SessionId.Equals(this.SessionId) & (x.EntityStatus == ImportEntityStatus.Create | x.EntityStatus == ImportEntityStatus.Update)).ToList(); System.Type t = System.Type.GetType(FullAssemblyTypeName); foreach (ImportItem item in cc) { object i = DeserializeItem(t, item.SerializedData); IImportEntity entity = i as IImportEntity; switch (item.EntityStatus) { case ImportEntityStatus.Create: try { entity.Create(); item.Comment = "Added successfuly"; item.ImportStatus = ImportResultStatus.success; } catch (Exception ex) { AnvilExceptionCollector ec = new AnvilExceptionCollector(new Exception("Could not create entity", ex)); item.Comment = string.Join("\n", ec.ToArray()); item.ImportStatus = ImportResultStatus.danger; } break; case ImportEntityStatus.Update: try { entity.Update(); item.Comment = "Synced successfuly"; item.ImportStatus = ImportResultStatus.success; } catch (Exception ex) { AnvilExceptionCollector ec = new AnvilExceptionCollector(new Exception("Could not modify entity", ex)); item.Comment = string.Join("\n", ec.ToArray()); item.ImportStatus = ImportResultStatus.danger; } break; } db.Entry(item).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } }