private async Task RefreshSaga(SagaInfo originatingSaga)
        {
            _eventAggregator.Publish(new WorkStarted("Loading message body..."));

            if (Data == null || Data.SagaId != originatingSaga.SagaId)
            {
                Data = await _serviceControl.GetSagaById(originatingSaga.SagaId.ToString());

                if (Data == SagaData.Empty)
                {
                    ShowSagaNotFoundWarning = true;
                    Data = null;
                }
                else if (Data != null && Data.Changes != null)
                {
                    ProcessDataValues(Data.Changes);
                }
                else
                {
                    Data = null;
                }
            }

            if (ShowMessageData)
            {
                RefreshMessageProperties();
            }

            RefreshShowData();

            _eventAggregator.Publish(new WorkFinished());
        }
Пример #2
0
        public void When_initiating_message_can_not_be_found_doesnot_throw()
        {
            var sagaId   = Guid.NewGuid();
            var timeouts = new List <SagaTimeoutMessage> {
                new SagaTimeoutMessage {
                    DeliverAt = DateTime.Now, Timeout = TimeSpan.FromMinutes(1)
                }
            };
            var update = new SagaUpdate {
                InitiatingMessage = null, OutgoingMessages = timeouts
            };

            var sagaChanges = new List <SagaUpdate> {
                update
            };
            var sagaList = new List <SagaInfo> {
                new SagaInfo {
                    SagaId = sagaId
                }
            };
            var sagaData = new SagaData {
                Changes = sagaChanges
            };

            messageSelectionContext.SelectedMessage = new StoredMessage {
                InvokedSagas = sagaList
            };
            serviceControl.GetSagaById(Arg.Is(sagaId)).Returns(sagaData);
            var selectedMessageChanged = new SelectedMessageChanged();

            Assert.DoesNotThrowAsync(() => viewModel.Handle(selectedMessageChanged));
        }
        void RefreshSaga(SagaInfo originatingSaga)
        {
            try
            {
                eventAggregator.PublishOnUIThread(new WorkStarted("Loading message body..."));

                var previousSagaId = Guid.Empty;

                if (Data == null || Data.SagaId != originatingSaga.SagaId)
                {
                    if (Data != null)
                    {
                        previousSagaId = Data.SagaId;
                    }

                    Data = serviceControl.GetSagaById(originatingSaga.SagaId);

                    if (Data != null)
                    {
                        if (Data.SagaId == Guid.Empty)
                        {
                            ShowSagaNotFoundWarning = true;
                            Data = null;
                        }
                        else if (Data.Changes != null)
                        {
                            ProcessDataValues(Data.Changes);
                        }
                        else
                        {
                            Data = null;
                        }
                    }
                }

                if (Data == null || Data.Changes == null)
                {
                    return;
                }

                // Skip refreshing if we already displaying the correct saga data
                if (previousSagaId == Data.SagaId)
                {
                    return;
                }

                RefreshShowData();

                if (ShowMessageData)
                {
                    RefreshMessageProperties();
                }
            }
            finally
            {
                eventAggregator.PublishOnUIThread(new WorkFinished());
            }
        }
Пример #4
0
        private SagaData FetchOrderedSagaData(Guid sagaId)
        {
            var sagaData = serviceControl.GetSagaById(sagaId);

            if (sagaData?.Changes != null)
            {
                sagaData.Changes = sagaData.Changes.OrderBy(x => x.StartTime)
                                   .ThenBy(x => x.FinishTime)
                                   .ToList();

                foreach (var timeout in sagaData.Changes.SelectMany(update => update.TimeoutMessages))
                {
                    timeout.HasBeenProcessed =
                        sagaData.Changes.Any(update => update.InitiatingMessage.MessageId == timeout.MessageId);
                }
            }

            return(sagaData);
        }