tikhomirov@114: /* tikhomirov@114: * Copyright (c) 2011 TMate Software Ltd tikhomirov@114: * tikhomirov@114: * This program is free software; you can redistribute it and/or modify tikhomirov@114: * it under the terms of the GNU General Public License as published by tikhomirov@114: * the Free Software Foundation; version 2 of the License. tikhomirov@114: * tikhomirov@114: * This program is distributed in the hope that it will be useful, tikhomirov@114: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@114: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@114: * GNU General Public License for more details. tikhomirov@114: * tikhomirov@114: * For information on how to redistribute this software under tikhomirov@114: * the terms of a license other than GNU General Public License tikhomirov@130: * contact TMate Software at support@hg4j.com tikhomirov@114: */ tikhomirov@114: package org.tmatesoft.hg.internal; tikhomirov@114: tikhomirov@114: import java.util.regex.Pattern; tikhomirov@114: import java.util.regex.PatternSyntaxException; tikhomirov@114: tikhomirov@114: import org.tmatesoft.hg.core.Path; tikhomirov@114: import org.tmatesoft.hg.core.Path.Matcher; tikhomirov@114: tikhomirov@114: /** tikhomirov@114: * tikhomirov@114: * @author Artem Tikhomirov tikhomirov@114: * @author TMate Software Ltd. tikhomirov@114: */ tikhomirov@114: public class PathRegexpMatcher implements Matcher { tikhomirov@114: private Pattern[] patterns; tikhomirov@114: tikhomirov@114: // disjunction, matches if any pattern found tikhomirov@114: // uses pattern.find(), not pattern.matches() tikhomirov@114: public PathRegexpMatcher(Pattern... p) { tikhomirov@114: if (p == null) { tikhomirov@114: throw new IllegalArgumentException(); tikhomirov@114: } tikhomirov@114: patterns = p; tikhomirov@114: } tikhomirov@114: tikhomirov@114: public PathRegexpMatcher(String... p) throws PatternSyntaxException { tikhomirov@114: this(compile(p)); tikhomirov@114: } tikhomirov@114: tikhomirov@114: private static Pattern[] compile(String[] p) throws PatternSyntaxException { tikhomirov@114: // deliberately do no check for null, let it fail tikhomirov@114: Pattern[] rv = new Pattern[p.length]; tikhomirov@114: int i = 0; tikhomirov@114: for (String s : p) { tikhomirov@114: rv[i++] = Pattern.compile(s); tikhomirov@114: } tikhomirov@114: return rv; tikhomirov@114: } tikhomirov@114: tikhomirov@114: public boolean accept(Path path) { tikhomirov@114: for (Pattern p : patterns) { tikhomirov@114: if (p.matcher(path).find()) { tikhomirov@114: return true; tikhomirov@114: } tikhomirov@114: } tikhomirov@114: return false; tikhomirov@114: } tikhomirov@114: }