Beispiel #1
0
        public ViewModelRetrieverResult <MessageListModel, MessageListModelError> Get(string storeName, int pageNumber, int pageSize = 100)
        {
            ViewModelRetrieverResult <MessageListModel, MessageListModelError> errorResult;
            IAmAMessageStoreViewer <Message> foundViewer = GetStoreViewer(storeName, out errorResult);

            if (foundViewer == null)
            {
                return(errorResult);
            }
            try
            {
                var messages         = foundViewer.Get(pageSize, pageNumber);
                var messageListModel = new MessageListModel(messages);

                return(new ViewModelRetrieverResult <MessageListModel, MessageListModelError>(messageListModel));
            }
            catch (Exception e)
            {
                return(new ViewModelRetrieverResult <MessageListModel, MessageListModelError>(MessageListModelError.StoreMessageViewerGetException, e));
            }
        }
Beispiel #2
0
        public ViewModelRetrieverResult <MessageListModel, MessageListModelError> Filter(string storeName, string searchTerm)
        {
            ViewModelRetrieverResult <MessageListModel, MessageListModelError> errorResult;
            IAmAMessageStoreViewer <Message> foundViewer = GetStoreViewer(storeName, out errorResult);

            if (foundViewer == null)
            {
                return(errorResult);
            }

            //in-memory VERY cheap search
            int pageSize   = 5000;
            int pageNumber = 1;

            var foundMessages = new List <Message>();

            try
            {
                IEnumerable <Message> messages;
                do
                {
                    messages = foundViewer.Get(pageSize, pageNumber);
                    foundMessages.AddRange(messages.Where(m => m.Body.Value.Contains(searchTerm) ||
                                                          m.Header.Topic.Contains(searchTerm) ||
                                                          m.Header.Bag.Keys.Any(k => k.Contains(searchTerm)) ||
                                                          m.Header.Bag.Values.Any(v => v.ToString().Contains(searchTerm)) ||
                                                          m.Header.TimeStamp.ToString().Contains(searchTerm)));

                    pageNumber++;
                } while (messages.Count() == pageSize);

                return(new ViewModelRetrieverResult <MessageListModel, MessageListModelError>(new MessageListModel(foundMessages)));
            }
            catch (Exception e)
            {
                return(new ViewModelRetrieverResult <MessageListModel, MessageListModelError>(MessageListModelError.StoreMessageViewerGetException, e));
            }
        }