001    /*
002     * Sonar, open source software quality management tool.
003     * Copyright (C) 2008-2011 SonarSource
004     * mailto:contact AT sonarsource DOT com
005     *
006     * Sonar is free software; you can redistribute it and/or
007     * modify it under the terms of the GNU Lesser General Public
008     * License as published by the Free Software Foundation; either
009     * version 3 of the License, or (at your option) any later version.
010     *
011     * Sonar is distributed in the hope that it will be useful,
012     * but WITHOUT ANY WARRANTY; without even the implied warranty of
013     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014     * Lesser General Public License for more details.
015     *
016     * You should have received a copy of the GNU Lesser General Public
017     * License along with Sonar; if not, write to the Free Software
018     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
019     */
020    
021    package net.sourceforge.pmd.util.filter;
022    
023    import java.util.regex.Pattern;
024    
025    /**
026     * A filter to which uses a regular expression to match upon Strings.
027     */
028    public class RegexStringFilter implements Filter<String> {
029    
030            protected String regex;
031    
032            protected Pattern pattern;
033    
034            public RegexStringFilter() {
035            }
036    
037            public RegexStringFilter(String regex) {
038                    this.regex = regex;
039            }
040    
041            public String getRegex() {
042                    return regex;
043            }
044    
045            public void setRegex(String regex) {
046                    this.regex = regex;
047                    this.pattern = null;
048            }
049    
050            public boolean filter(String obj) {
051                    if (pattern == null) {
052                            pattern = Pattern.compile(regex);
053                    }
054                    return pattern.matcher(obj).matches();
055            }
056    
057            public String toString() {
058                    return "matches " + regex;
059            }
060    }