Beispiel #1
0
        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();

                    }
                }
            }
        }
Beispiel #2
0
 public ImportItem ToImportItem()
 {
     ImportItem i = new ImportItem();
     AnvilEntity e = new AnvilEntity(this);
     e.CopyTo(i);
     return i;
 }
Beispiel #3
0
        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);
            }
        }