1 /* 2 * $HeadURL: $ 3 * $Date: $ 4 * $Revision: $ 5 * $Author: $ 6 * 7 * Copyright (c) 2006 MindTree Consulting Ltd. 8 * 9 * This file is part of Insight. 10 * 11 * Insight is free software: you can redistribute it and/or modify it under the 12 * terms of the GNU General Public License as published by the Free Software 13 * Foundation, either version 3 of the License, or (at your option) any later 14 * version. 15 * 16 * Insight is distributed in the hope that it will be useful, but 17 * WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 19 * Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License along with 22 * Insight. If not, see <http://www.gnu.org/licenses/>. 23 */ 24 package com.mindtree.techworks.insight.receiver; 25 26 import java.util.regex.Pattern; 27 28 /** 29 * The <code>WildCardMatcher<code> class matches wildcard expression that are 30 * normally file names. 31 * @author m1003308(Siva Sajja) 32 * @version 1.0, 06/01/03 33 * 34 */ 35 36 public final class WildCardMatcher { 37 38 /** 39 * Array of character constants 40 */ 41 private static char[] WILDCARD_CHARS = {'*', '?','<', '>'}; 42 private static char[] SPECIAL_CHARS = {'.', '[', ']', '$', '^', '+', '{', '}', '(', ')'}; 43 44 /** 45 * Array of replacement strings 46 */ 47 private static final String[][] REPLACEMENT_REGEXS = { 48 {"\\*", ".\\*"}, 49 {"\\<", "\\["}, 50 {"\\>", "\\]"}, 51 }; 52 53 /** 54 * The normal regular expression pattern 55 */ 56 private Pattern wildCardPattern; 57 58 /** 59 * Constructor for this class 60 * @param regexp the regular expression to match against 61 */ 62 public WildCardMatcher(String regexp){ 63 regexp = convertWildCardsToRegex(regexp); 64 this.wildCardPattern = Pattern.compile(regexp); 65 } 66 67 /** 68 * Matches the give string with the regular expression passed with the 69 * constructor 70 * @param name The name to be matched with the regular expression. 71 * @return true if it matches the expresson, false otherwise 72 */ 73 public boolean matches(String name){ 74 return this.wildCardPattern.matcher(name).matches(); 75 } 76 77 /** 78 * Checks for any wild card characters in the given string. 79 * @param input The input string. 80 * @return true if the input string has any wildcard characters, false otherwise 81 */ 82 public static boolean hasWildCardEntries(String input){ 83 for(int i = 0; i < WILDCARD_CHARS.length; i++){ 84 if(input.indexOf(WILDCARD_CHARS[i]) != -1) 85 return true; 86 } 87 return false; 88 } 89 90 /** 91 * Converts the wildcard characters in the given string to a java specific 92 * regular expresson. 93 * @param pattern wild card pattern. 94 * @return the java specific regular expression for the given wild card. 95 */ 96 private String convertWildCardsToRegex(String pattern){ 97 String resultString = pattern; 98 if(hasWildCardEntries(pattern)){ 99 resultString = convertSpecialChars(pattern); 100 for (int i =0; i < REPLACEMENT_REGEXS.length; i++) { 101 resultString = resultString.replaceAll(REPLACEMENT_REGEXS[i][0], REPLACEMENT_REGEXS[i][1]); 102 } 103 } 104 return resultString; 105 } 106 107 /** 108 * Escapes any special non wildcard characters. 109 * @param regexp the wild card pattern. 110 * @return the converted pattern. 111 */ 112 private static String convertSpecialChars(String regexp){ 113 for(int i = 0; i < SPECIAL_CHARS.length; i++){ 114 regexp = regexp.replaceAll("\\" + SPECIAL_CHARS[i], "\\\\" + SPECIAL_CHARS[i]); 115 } 116 return regexp; 117 } 118 }