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