001/*
002 * Cobertura - http://cobertura.sourceforge.net/
003 *
004 * Copyright (C) 2005 Mark Doliner
005 * Copyright (C) 2006 John Lewis
006 *
007 * Note: This file is dual licensed under the GPL and the Apache
008 * Source License (so that it can be used from both the main
009 * Cobertura classes and the ant tasks).
010 *
011 * Cobertura is free software; you can redistribute it and/or modify
012 * it under the terms of the GNU General Public License as published
013 * by the Free Software Foundation; either version 2 of the License,
014 * or (at your option) any later version.
015 *
016 * Cobertura is distributed in the hope that it will be useful, but
017 * WITHOUT ANY WARRANTY; without even the implied warranty of
018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019 * General Public License for more details.
020 *
021 * You should have received a copy of the GNU General Public License
022 * along with Cobertura; if not, write to the Free Software
023 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
024 * USA
025 */
026
027package net.sourceforge.cobertura.util;
028
029import java.util.Collection;
030import java.util.Iterator;
031
032import org.apache.log4j.Logger;
033import org.apache.oro.text.regex.MalformedPatternException;
034import org.apache.oro.text.regex.Pattern;
035import org.apache.oro.text.regex.Perl5Compiler;
036import org.apache.oro.text.regex.Perl5Matcher;
037
038/**
039 * Abstract, not to be instantiated utility class for Regex functions.
040 * 
041 * @author John Lewis (logic copied from MethodInstrumenter)
042 */
043public abstract class RegexUtil
044{
045
046        private static final Logger logger = Logger.getLogger(RegexUtil.class);
047
048        private final static Perl5Matcher pm = new Perl5Matcher();
049
050        /**
051         * <p>
052         * Check to see if one of the regular expressions in a collection match
053         * an input string.
054         * </p>
055         *
056         * @param regexs The collection of regular expressions.
057         * @param str The string to check for a match.
058         * @return True if a match is found.
059         */
060        public static boolean matches(Collection regexs, String str)
061        {
062                Iterator iter = regexs.iterator();
063                while (iter.hasNext())
064                {
065                        Pattern regex = (Pattern)iter.next();
066                        if (pm.matches(str, regex))
067                        {
068                                return true;
069                        }
070                }
071
072                return false;
073        }
074
075        public static void addRegex(Collection list, String regex)
076        {
077                try
078                {
079                        Perl5Compiler pc = new Perl5Compiler();
080                        Pattern pattern = pc.compile(regex);
081                        list.add(pattern);
082                }
083                catch (MalformedPatternException e)
084                {
085                        logger.warn("The regular expression " + regex + " is invalid: "
086                                        + e.getLocalizedMessage());
087                }
088        }
089
090}