Example #1
0
        public virtual CaptureResponse Capture(XDocument xmlDocument)
        {
            var startDate = SystemContext.Clock.Now;

            _documentValidator.Validate(xmlDocument);

            var events      = _documentParser.Parse(xmlDocument.Root);
            var currentUser = _userProvider.GetCurrentUser();

            var request = new EpcisRequest
            {
                RecordTime   = SystemContext.Clock.Now,
                DocumentTime = DateTime.Parse(xmlDocument.Root.Attribute("creationDate").Value),
                User         = currentUser
            };

            foreach (var @event in events)
            {
                request.AddEvent(@event);
            }

            _requestPersister.Persist(request);

            return(new CaptureResponse
            {
                EventCount = request.Events.Count,
                CaptureStartDateUtc = startDate,
                CaptureEndDateUtc = SystemContext.Clock.Now,
                EventIds = request.Events.Select(e => e.Id.ToString()).ToArray()
            });
        }
Example #2
0
 public static RequestDto Create(EpcisRequest request, int userId)
 {
     return(new RequestDto
     {
         DocumentTime = request.DocumentTime,
         RecordTime = request.RecordTime,
         SchemaVersion = request.SchemaVersion,
         SubscriptionId = request.SubscriptionCallback?.SubscriptionId,
         UserId = userId
     });
 }
Example #3
0
        private static void ParseCallbackResult(XElement queryResults, EpcisRequest request)
        {
            var subscriptionId = queryResults.Element("subscriptionID")?.Value;
            var eventList      = queryResults.Element("resultsBody").Element("EventList");

            request.EventList.AddRange(XmlEventParser.ParseEvents(eventList));
            request.SubscriptionCallback = new SubscriptionCallback
            {
                CallbackType   = QueryCallbackType.Success,
                SubscriptionId = subscriptionId
            };
        }
Example #4
0
        public async Task Capture(EpcisRequest request, RequestContext context, CancellationToken cancellationToken)
        {
            using var transaction = _connection.BeginTransaction();
            var requestId = await StoreHeader(request, context.User, transaction, cancellationToken);

            await StoreStandardBusinessHeader(request.StandardBusinessHeader, requestId, transaction, cancellationToken);
            await StoreCallbackInformation(request.SubscriptionCallback, requestId, transaction, cancellationToken);
            await StoreEpcisEvents(request.EventList, requestId, transaction, cancellationToken);
            await StoreMasterData(request.MasterdataList, transaction, cancellationToken);

            transaction.Commit();
        }
Example #5
0
        public static EpcisRequest Parse(XElement root)
        {
            var request = new EpcisRequest
            {
                DocumentTime  = DateTime.Parse(root.Attribute("creationDate").Value),
                SchemaVersion = root.Attribute("schemaVersion").Value
            };

            ParseHeaderIntoRequest(root.Element("EPCISHeader"), request);
            ParseBodyIntoRequest(root.Element("EPCISBody"), request);

            return(request);
        }
Example #6
0
        private static void ParseHeaderIntoRequest(XElement epcisHeader, EpcisRequest request)
        {
            if (epcisHeader == null || epcisHeader.IsEmpty)
            {
                return;
            }

            var headerMasterdata = epcisHeader.Element("extension")?.Element("EPCISMasterData")?.Element("VocabularyList");

            if (headerMasterdata != null)
            {
                request.MasterdataList.AddRange(XmlMasterdataParser.ParseMasterdata(headerMasterdata));
            }
        }
Example #7
0
        private static void ParseBodyIntoRequest(XElement epcisBody, EpcisRequest request)
        {
            var element = epcisBody.Elements().First();

            switch (element.Name.LocalName)
            {
            case "QueryResults":
                ParseCallbackResult(element, request); break;

            case "QueryTooLargeException":
                ParseCallbackError(element, QueryCallbackType.QueryTooLargeException, request); break;

            case "ImplementationException":
                ParseCallbackError(element, QueryCallbackType.ImplementationException, request); break;

            case "EventList":
                request.EventList.AddRange(XmlEventParser.ParseEvents(element)); break;

            case "VocabularyList":
                request.MasterdataList.AddRange(XmlMasterdataParser.ParseMasterdata(element)); break;
            }
        }
Example #8
0
        public void CanSaveAndLoadEpcisRequest()
        {
            Guid id;

            using (var tx = session.BeginTransaction())
            {
                var request = new EpcisRequest
                {
                    DocumentTime = new DateTime(2017, 11, 11, 12, 38, 00),
                    RecordTime   = new DateTime(2017, 11, 11, 12, 42, 00)
                };
                request.AddEvent(new EpcisEvent
                {
                    EventType           = EventType.ObjectEvent,
                    Action              = EventAction.Add,
                    EventTime           = new DateTime(2017, 10, 10, 10, 10, 00),
                    EventTimezoneOffset = new TimeZoneOffset {
                        Representation = "+01:00"
                    }
                });

                id = (Guid)session.Save(request);
                tx.Commit();
            }

            session.Clear();

            using (var tx = session.BeginTransaction())
            {
                var request = session.Get <EpcisRequest>(id);

                Assert.AreEqual(request.DocumentTime, new DateTime(2017, 11, 11, 12, 38, 00));
                Assert.AreEqual(request.RecordTime, new DateTime(2017, 11, 11, 12, 42, 00));
                Assert.AreEqual(request.Events.Count, 1);

                tx.Commit();
            }
        }
Example #9
0
        public virtual IEnumerable <string> Capture(XDocument xmlDocument)
        {
            _documentValidator.Validate(xmlDocument);

            var events      = _documentParser.Parse(xmlDocument.Root);
            var currentUser = _userProvider.GetCurrentUser();

            var request = new EpcisRequest
            {
                RecordTime     = SystemContext.Clock.Now,
                DocumentTime   = DateTime.Parse(xmlDocument.Root.Attribute("creationDate").Value),
                SubscriptionId = TryExtractSubscriptionId(xmlDocument),
                User           = currentUser
            };

            foreach (var @event in events)
            {
                request.AddEvent(@event);
            }

            _requestPersister.Persist(request);

            return(request.Events.Select(e => e.Id.ToString()));
        }
Example #10
0
 public virtual void Persist(EpcisRequest request)
 {
     _requestRepository.Insert(request);
 }
Example #11
0
 public void Insert(EpcisRequest request)
 {
     _session.Save(request);
 }
Example #12
0
 private static void ParseCallbackError(XElement element, QueryCallbackType errorType, EpcisRequest request)
 {
     request.SubscriptionCallback = new SubscriptionCallback
     {
         CallbackType   = errorType,
         Reason         = element.Element("reason")?.Value,
         SubscriptionId = element.Element("subscriptionID")?.Value
     };
 }
Example #13
0
        private static async Task <int> StoreHeader(EpcisRequest request, User user, IDbTransaction transaction, CancellationToken cancellationToken)
        {
            var requestDto = RequestDto.Create(request, user.Id);

            return(await transaction.InsertAsync(requestDto, cancellationToken));
        }