1dfb59d50631968ab1a13002ea5421ece93169851chrismair/* 2dfb59d50631968ab1a13002ea5421ece93169851chrismair * Copyright 2008 the original author or authors. 3dfb59d50631968ab1a13002ea5421ece93169851chrismair * 4dfb59d50631968ab1a13002ea5421ece93169851chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 5dfb59d50631968ab1a13002ea5421ece93169851chrismair * you may not use this file except in compliance with the License. 6dfb59d50631968ab1a13002ea5421ece93169851chrismair * You may obtain a copy of the License at 7dfb59d50631968ab1a13002ea5421ece93169851chrismair * 8dfb59d50631968ab1a13002ea5421ece93169851chrismair * http://www.apache.org/licenses/LICENSE-2.0 9dfb59d50631968ab1a13002ea5421ece93169851chrismair * 10dfb59d50631968ab1a13002ea5421ece93169851chrismair * Unless required by applicable law or agreed to in writing, software 11dfb59d50631968ab1a13002ea5421ece93169851chrismair * distributed under the License is distributed on an "AS IS" BASIS, 12dfb59d50631968ab1a13002ea5421ece93169851chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dfb59d50631968ab1a13002ea5421ece93169851chrismair * See the License for the specific language governing permissions and 14dfb59d50631968ab1a13002ea5421ece93169851chrismair * limitations under the License. 15dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 16dfb59d50631968ab1a13002ea5421ece93169851chrismairpackage org.mockftpserver.core.util; 17dfb59d50631968ab1a13002ea5421ece93169851chrismair 18dfb59d50631968ab1a13002ea5421ece93169851chrismair/** 19dfb59d50631968ab1a13002ea5421ece93169851chrismair * Contains static utility methods related to pattern-matching and regular expressions. 20dfb59d50631968ab1a13002ea5421ece93169851chrismair * 21dfb59d50631968ab1a13002ea5421ece93169851chrismair * @author Chris Mair 22dfb59d50631968ab1a13002ea5421ece93169851chrismair * @version $Revision$ - $Date$ 23dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 24dfb59d50631968ab1a13002ea5421ece93169851chrismairpublic class PatternUtil { 25dfb59d50631968ab1a13002ea5421ece93169851chrismair 26dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 27dfb59d50631968ab1a13002ea5421ece93169851chrismair * Return true if the specified String contains one or more wildcard characters ('?' or '*') 28dfb59d50631968ab1a13002ea5421ece93169851chrismair * 29dfb59d50631968ab1a13002ea5421ece93169851chrismair * @param string - the String to check 30dfb59d50631968ab1a13002ea5421ece93169851chrismair * @return true if the String contains wildcards 31dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 32dfb59d50631968ab1a13002ea5421ece93169851chrismair public static boolean containsWildcards(String string) { 33dfb59d50631968ab1a13002ea5421ece93169851chrismair return string.indexOf("*") != -1 || string.indexOf("?") != -1; 34dfb59d50631968ab1a13002ea5421ece93169851chrismair } 35dfb59d50631968ab1a13002ea5421ece93169851chrismair 36dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 37dfb59d50631968ab1a13002ea5421ece93169851chrismair * Convert the specified String, optionally containing wildcards (? or *), to a regular expression String 38dfb59d50631968ab1a13002ea5421ece93169851chrismair * 39dfb59d50631968ab1a13002ea5421ece93169851chrismair * @param stringWithWildcards - the String to convert, optionally containing wildcards (? or *) 40dfb59d50631968ab1a13002ea5421ece93169851chrismair * @return an equivalent regex String 41dfb59d50631968ab1a13002ea5421ece93169851chrismair * @throws AssertionError - if the stringWithWildcards is null 42dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 43dfb59d50631968ab1a13002ea5421ece93169851chrismair public static String convertStringWithWildcardsToRegex(String stringWithWildcards) { 44dfb59d50631968ab1a13002ea5421ece93169851chrismair Assert.notNull(stringWithWildcards, "stringWithWildcards"); 45dfb59d50631968ab1a13002ea5421ece93169851chrismair 46dfb59d50631968ab1a13002ea5421ece93169851chrismair StringBuffer result = new StringBuffer(); 47dfb59d50631968ab1a13002ea5421ece93169851chrismair for (int i = 0; i < stringWithWildcards.length(); i++) { 48dfb59d50631968ab1a13002ea5421ece93169851chrismair char ch = stringWithWildcards.charAt(i); 49dfb59d50631968ab1a13002ea5421ece93169851chrismair switch (ch) { 50dfb59d50631968ab1a13002ea5421ece93169851chrismair case '*': 51dfb59d50631968ab1a13002ea5421ece93169851chrismair result.append(".*"); 52dfb59d50631968ab1a13002ea5421ece93169851chrismair break; 53dfb59d50631968ab1a13002ea5421ece93169851chrismair case '?': 54dfb59d50631968ab1a13002ea5421ece93169851chrismair result.append('.'); 55dfb59d50631968ab1a13002ea5421ece93169851chrismair break; 56dfb59d50631968ab1a13002ea5421ece93169851chrismair case '$': 57dfb59d50631968ab1a13002ea5421ece93169851chrismair case '|': 58dfb59d50631968ab1a13002ea5421ece93169851chrismair case '[': 59dfb59d50631968ab1a13002ea5421ece93169851chrismair case ']': 60dfb59d50631968ab1a13002ea5421ece93169851chrismair case '(': 61dfb59d50631968ab1a13002ea5421ece93169851chrismair case ')': 62dfb59d50631968ab1a13002ea5421ece93169851chrismair case '.': 63dfb59d50631968ab1a13002ea5421ece93169851chrismair case ':': 64dfb59d50631968ab1a13002ea5421ece93169851chrismair case '{': 65dfb59d50631968ab1a13002ea5421ece93169851chrismair case '}': 66dfb59d50631968ab1a13002ea5421ece93169851chrismair case '\\': 67dfb59d50631968ab1a13002ea5421ece93169851chrismair case '^': 68dfb59d50631968ab1a13002ea5421ece93169851chrismair case '+': 69dfb59d50631968ab1a13002ea5421ece93169851chrismair result.append('\\'); 70dfb59d50631968ab1a13002ea5421ece93169851chrismair result.append(ch); 71dfb59d50631968ab1a13002ea5421ece93169851chrismair break; 72dfb59d50631968ab1a13002ea5421ece93169851chrismair default: 73dfb59d50631968ab1a13002ea5421ece93169851chrismair result.append(ch); 74dfb59d50631968ab1a13002ea5421ece93169851chrismair } 75dfb59d50631968ab1a13002ea5421ece93169851chrismair } 76dfb59d50631968ab1a13002ea5421ece93169851chrismair return result.toString(); 77dfb59d50631968ab1a13002ea5421ece93169851chrismair } 78dfb59d50631968ab1a13002ea5421ece93169851chrismair 79dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 80dfb59d50631968ab1a13002ea5421ece93169851chrismair * Private constructor to prevent instantiation. All members are static. 81dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 82dfb59d50631968ab1a13002ea5421ece93169851chrismair private PatternUtil() { 83dfb59d50631968ab1a13002ea5421ece93169851chrismair } 84dfb59d50631968ab1a13002ea5421ece93169851chrismair 85dfb59d50631968ab1a13002ea5421ece93169851chrismair} 86