public static IList <IBrowseFilterValue> GetValues(this IBrowseFilter filter) { IBrowseFilterValue[] result = null; var attributeFilter = filter as AttributeFilter; var rangeFilter = filter as RangeFilter; var priceRangeFilter = filter as PriceRangeFilter; var categoryFilter = filter as CategoryFilter; if (attributeFilter != null) { result = attributeFilter.Values?.OfType <IBrowseFilterValue>().ToArray(); } else if (rangeFilter != null) { result = rangeFilter.Values?.OfType <IBrowseFilterValue>().ToArray(); } else if (priceRangeFilter != null) { result = priceRangeFilter.Values?.OfType <IBrowseFilterValue>().ToArray(); } else if (categoryFilter != null) { result = categoryFilter.Values?.OfType <IBrowseFilterValue>().ToArray(); } return(result); }
protected virtual IFilter ConvertBrowseFilter(IBrowseFilter filter, IList <string> valueIds, ProductIndexedSearchCriteria criteria) { IFilter result = null; if (filter != null && valueIds != null) { var attributeFilter = filter as AttributeFilter; var rangeFilter = filter as BrowseFilters.RangeFilter; var priceRangeFilter = filter as PriceRangeFilter; if (attributeFilter != null) { result = ConvertAttributeFilter(attributeFilter, valueIds); } else if (rangeFilter != null) { result = ConvertRangeFilter(rangeFilter, valueIds); } else if (priceRangeFilter != null) { result = ConvertPriceRangeFilter(priceRangeFilter, valueIds, criteria); } } return(result); }
public static IBrowseFilter Copy(this IBrowseFilter filter, IList <string> keys) { IBrowseFilter result = null; if (filter != null && keys != null) { // get values that we have filters set for var values = filter.GetValues().Where(v => keys.Contains(v.Id, StringComparer.OrdinalIgnoreCase)); var attributeFilter = filter as AttributeFilter; var rangeFilter = filter as RangeFilter; var priceRangeFilter = filter as PriceRangeFilter; var categoryFilter = filter as CategoryFilter; if (attributeFilter != null) { var newFilter = new AttributeFilter(); newFilter.InjectFrom(filter); newFilter.Values = values.OfType <AttributeFilterValue>().ToArray(); result = newFilter; } else if (rangeFilter != null) { var newFilter = new RangeFilter(); newFilter.InjectFrom(filter); newFilter.Values = values.OfType <RangeFilterValue>().ToArray(); result = newFilter; } else if (priceRangeFilter != null) { var newFilter = new PriceRangeFilter(); newFilter.InjectFrom(filter); newFilter.Values = values.OfType <RangeFilterValue>().ToArray(); result = newFilter; } else if (categoryFilter != null) { var newFilter = new CategoryFilter(); newFilter.InjectFrom(filter); newFilter.Values = values.OfType <CategoryFilterValue>().ToArray(); result = newFilter; } } return(result); }
private void BrowseMessagesWorker(BlockingCollection <WsMessage> output, IBrowseFilter filter, CancellationToken ct, MQQueue queue, byte[] startingPointMessageId) { var browseOption = MQC.MQGMO_BROWSE_FIRST; if (startingPointMessageId != null) { if (SetBrowseCursorAtMessageId(queue, startingPointMessageId)) { browseOption = MQC.MQGMO_BROWSE_NEXT; } } var getMsgOpts = new MQGetMessageOptions() { Options = MQC.MQGMO_FAIL_IF_QUIESCING | browseOption }; try { while (!ct.IsCancellationRequested) { var msg = new MQMessage(); queue.Get(msg, getMsgOpts); var localMsg = new WsMessage(msg, this); if (filter == null || filter.IsMatch(localMsg)) { output.Add(localMsg, ct); } else { output.Add(null, ct); } getMsgOpts.Options = MQC.MQGMO_FAIL_IF_QUIESCING | MQC.MQGMO_BROWSE_NEXT; } } catch (OperationCanceledException) { } catch (MQException ex) { if (ex.ReasonCode != MQC.MQRC_NO_MSG_AVAILABLE) { throw; } } }
private static IBrowseFilter ConvertToFilter(AggregationProperty property, int order) { IBrowseFilter result = null; switch (property.Type) { case _attributeType: result = new AttributeFilter { Order = order, Key = property.Name, FacetSize = property.Size, Values = property.Values?.OrderBy(v => v, StringComparer.OrdinalIgnoreCase).Select(v => new AttributeFilterValue { Id = v }).ToArray(), }; break; case _rangeType: result = new RangeFilter { Order = order, Key = property.Name, Values = GetRangeFilterValues(property.Values), }; break; case _priceRangeType: result = new PriceRangeFilter { Order = order, Currency = property.Currency, Values = GetRangeFilterValues(property.Values), }; break; } return(result); }
public IEnumerable <IMessage> BrowseMessages(int numberOfMessages, CancellationToken ct, byte[] startingPointMessageId = null, IBrowseFilter filter = null, IProgress <int> progress = null) { MQQueue ibmQueue; var browseOption = MQC.MQGMO_BROWSE_FIRST; try { ibmQueue = OpenQueueCore(OpenQueueMode.ForBrowse); if (startingPointMessageId != null) { if (SetBrowseCursorAtMessageId(ibmQueue, startingPointMessageId)) { browseOption = MQC.MQGMO_BROWSE_NEXT; } } } catch (MQException ibmEx) { throw ibmEx.ToMqException(AddExtraInfoToError); } int count = 0; var getMsgOpts = new MQGetMessageOptions() { Options = MQC.MQGMO_FAIL_IF_QUIESCING | browseOption }; try { while (!ct.IsCancellationRequested) { var msg = new MQMessage(); try { ibmQueue.Get(msg, getMsgOpts); } catch (MQException ibmEx) { if (ibmEx.ReasonCode == MQC.MQRC_NO_MSG_AVAILABLE) { break; } throw ibmEx.ToMqException(AddExtraInfoToError); } count++; var localMsg = new WsMessage(msg, this); if (filter == null || filter.IsMatch(localMsg)) { progress?.Report(count); localMsg.Index = count; yield return(localMsg); } numberOfMessages--; if (numberOfMessages == 0) { break; } getMsgOpts.Options = MQC.MQGMO_FAIL_IF_QUIESCING | MQC.MQGMO_BROWSE_NEXT; } } finally { ibmQueue?.Close(); } }
public IEnumerable <IMessage> BrowseMessages(int numberOfMessages, CancellationToken ct, byte[] startingPointMessageId = null, IBrowseFilter filter = null, IProgress <int> progress = null) { SetupBrowseConnectionPool(); var workers = new List <Task>(); var pipeline = new BlockingCollection <WsMessage>(); var cts = new CancellationTokenSource(); Exception workerException = null; var qm = _browseConnectionPool[0]; MQQueue q = qm.OpenQueueCore(this.Name, OpenQueueMode.ForBrowse); workers.Add(Task.Run(() => BrowseMessagesWorker(pipeline, filter, cts.Token, q, startingPointMessageId))); Task.WhenAll(workers) .ContinueWith((t) => { pipeline.CompleteAdding(); // Inform that there are no more messages to read from the queue if (t.IsFaulted) { workerException = t.Exception.InnerException; } }); List <WsMessage> yieldBuffer = new List <WsMessage>(); int count = 0; while (!pipeline.IsCompleted) { if (ct != CancellationToken.None && ct.IsCancellationRequested) { cts.Cancel(); break; } ; WsMessage msg; if (pipeline.TryTake(out msg, 100)) { count++; if (msg != null) { yieldBuffer.Add(msg); msg.Index = count; yield return(msg); numberOfMessages--; if (numberOfMessages == 0) { cts.Cancel(); break; } } progress.Report(count); } } q?.Close(); if (workerException != null) { MQException ibmEx = workerException as MQException; if (ibmEx != null) { throw ibmEx.ToMqException(AddExtraInfoToError); } else { throw workerException; } } }