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 ImportItem ToImportItem() { ImportItem i = new ImportItem(); AnvilEntity e = new AnvilEntity(this); e.CopyTo(i); return i; }
public static void Record(ImportItem item, LcpsDbContext db) { try { db.ImportItems.Add(item); db.SaveChanges(); } catch (Exception ex) { throw new Exception("A fatal error occured while recording import item status", ex); } }