001 /* 002 * Created on Jun 26, 2009 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 005 * in compliance with the License. You may obtain a copy of the License at 006 * 007 * http://www.apache.org/licenses/LICENSE-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, software distributed under the License 010 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 011 * or implied. See the License for the specific language governing permissions and limitations under 012 * the License. 013 * 014 * Copyright @2009-2010 the original author or authors. 015 */ 016 package org.fest.swing.util; 017 018 import static org.fest.swing.util.Patterns.format; 019 import static org.fest.swing.util.Strings.match; 020 import static org.fest.util.Arrays.isEmpty; 021 import static org.fest.util.Strings.quote; 022 023 import java.util.regex.Pattern; 024 025 /** 026 * Understands matching text to a group of <code>String</code> values. Matching is perform by equality or by regular 027 * expression matching. 028 * 029 * @author Alex Ruiz 030 */ 031 public class PatternTextMatcher implements TextMatcher { 032 033 private final Pattern[] patterns; 034 035 /** 036 * Creates a new </code>{@link PatternTextMatcher}</code>. 037 * @param patterns the regular expression patterns to match. 038 * @throws NullPointerException if the array of patterns is <code>null</code>. 039 * @throws IllegalArgumentException if the array of patterns is empty. 040 */ 041 public PatternTextMatcher(Pattern...patterns) { 042 if (patterns == null) throw new NullPointerException("The array of patterns should not be null"); 043 if (isEmpty(patterns)) throw new IllegalArgumentException("The array of patterns should not be empty"); 044 this.patterns = patterns; 045 } 046 047 /** 048 * Indicates whether the given text matches the regular expression patterns in this matcher. 049 * @param text the text to verify. 050 * @return <code>true</code> if the given text matches the <code>Pattern</code> values in this matcher, 051 * <code>false</code> otherwise. 052 * @throws NullPointerException if any of the regular expressions is <code>null</code>. 053 */ 054 public boolean isMatching(String text) { 055 for (Pattern pattern : patterns) 056 if (match(pattern, text)) return true; 057 return false; 058 } 059 060 /** 061 * Returns "pattern" if this matcher contains only one pattern, or "patterns" if this matcher contains more than one 062 * pattern. 063 * @return "pattern" if this matcher contains only one pattern, or "patterns" if this matcher contains more than one 064 * pattern. 065 */ 066 public String description() { 067 if (onlyOnePattern()) return "pattern"; 068 return "patterns"; 069 } 070 071 /** 072 * Returns the regular expression patterns in this matcher, formatted as a single <code>String</code>. 073 * @return the regular expression patterns in this matcher, formatted as a single <code>String</code>. 074 */ 075 public String formattedValues() { 076 if (onlyOnePattern()) return quote(patterns[0].pattern()); 077 return format(patterns); 078 } 079 080 private boolean onlyOnePattern() { 081 return patterns.length == 1; 082 } 083 }