| using System; |
| using System.Messaging; |
| using System.Globalization; |
| using System.Text.RegularExpressions; |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| namespace Apache.NMS.MSMQ.Readers |
| { |
| /// <summary> |
| /// Utility routines for creating MSMQ message readers. |
| /// </summary> |
| public static class MessageReaderUtil |
| { |
| private static Regex basicSelectorRegex = |
| new Regex(@"^\s*" + |
| @"(NMSMessageId)\s*=\s*'([^']*)'|" + |
| @"(NMSCorrelationId)\s*=\s*'([^']*)'|" + |
| @"(LookupId)\s*=\s*([-+]{0,1}\d+)" + |
| @"\s*$", |
| RegexOptions.IgnoreCase | RegexOptions.Compiled); |
| |
| /// <summary> |
| /// Creates a message reader for the specified message selector. |
| /// </summary> |
| /// <param name="messageQueue">The MSMQ message queue from which |
| /// messages will be read.</param> |
| /// <param name="messageConverter">A message converter for mapping |
| /// MSMQ messages to NMS messages.</param> |
| /// <param name="selector">The message selector.</param> |
| /// <return>A reader for the specified selector.</return> |
| public static IMessageReader CreateMessageReader( |
| MessageQueue messageQueue, IMessageConverter messageConverter, |
| string selector) |
| { |
| IMessageReader reader; |
| |
| if(string.IsNullOrEmpty(selector)) |
| { |
| reader = new NonFilteringMessageReader(messageQueue, |
| messageConverter); |
| } |
| else |
| { |
| Match match = basicSelectorRegex.Match(selector); |
| if(match.Success) |
| { |
| if(!string.IsNullOrEmpty(match.Groups[1].Value)) |
| { |
| reader = new ByIdMessageReader(messageQueue, |
| messageConverter, match.Groups[2].Value); |
| } |
| else if(!string.IsNullOrEmpty(match.Groups[3].Value)) |
| { |
| reader = new ByCorrelationIdMessageReader(messageQueue, |
| messageConverter, match.Groups[4].Value); |
| } |
| else |
| { |
| Int64 lookupId = Int64.Parse(match.Groups[6].Value, |
| CultureInfo.InvariantCulture); |
| |
| reader = new ByLookupIdMessageReader(messageQueue, |
| messageConverter, lookupId); |
| } |
| } |
| else |
| { |
| reader = new BySelectorMessageReader(messageQueue, |
| messageConverter, selector); |
| } |
| } |
| |
| return reader; |
| } |
| } |
| } |