001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018: package org.apache.tools.ant.taskdefs.condition;
019:
020: import org.apache.tools.ant.BuildException;
021: import org.apache.tools.ant.ProjectComponent;
022: import org.apache.tools.ant.util.regexp.Regexp;
023: import org.apache.tools.ant.types.RegularExpression;
024: import org.apache.tools.ant.util.regexp.RegexpMatcher;
025:
026: /**
027: * Simple regular expression condition.
028: *
029: * @since Ant 1.7
030: */
031: public class Matches extends ProjectComponent implements Condition {
032:
033: private String string;
034: private boolean caseSensitive = true;
035: private boolean multiLine = false;
036: private boolean singleLine = false;
037: private RegularExpression regularExpression;
038:
039: /**
040: * Set the string
041: *
042: * @param string the string to match
043: */
044: public void setString(String string) {
045: this .string = string;
046: }
047:
048: /**
049: * Set the regular expression to match against
050: *
051: * @param pattern the regular expression pattern
052: */
053: public void setPattern(String pattern) {
054: if (regularExpression != null) {
055: throw new BuildException(
056: "Only one regular expression is allowed.");
057: }
058: regularExpression = new RegularExpression();
059: regularExpression.setPattern(pattern);
060: }
061:
062: /**
063: * A regular expression.
064: * You can use this element to refer to a previously
065: * defined regular expression datatype instance
066: * @param regularExpression the regular expression object
067: * to be configured as an element
068: */
069: public void addRegexp(RegularExpression regularExpression) {
070: if (this .regularExpression != null) {
071: throw new BuildException(
072: "Only one regular expression is allowed.");
073: }
074: this .regularExpression = regularExpression;
075: }
076:
077: /**
078: * Whether to ignore case or not.
079: * @param b if false, ignore case.
080: * @since Ant 1.7
081: */
082: public void setCasesensitive(boolean b) {
083: caseSensitive = b;
084: }
085:
086: /**
087: * Whether to match should be multiline.
088: * @param b the value to set.
089: */
090: public void setMultiline(boolean b) {
091: multiLine = b;
092: }
093:
094: /**
095: * Whether to treat input as singleline ('.' matches newline).
096: * Corresponsds to java.util.regex.Pattern.DOTALL.
097: * @param b the value to set.
098: */
099: public void setSingleLine(boolean b) {
100: singleLine = b;
101: }
102:
103: /**
104: * @return true if the string matches the regular expression pattern
105: * @exception BuildException if the attributes are not set correctly
106: */
107: public boolean eval() throws BuildException {
108: if (string == null) {
109: throw new BuildException(
110: "Parameter string is required in matches.");
111: }
112: if (regularExpression == null) {
113: throw new BuildException("Missing pattern in matches.");
114: }
115: int options = RegexpMatcher.MATCH_DEFAULT;
116: if (!caseSensitive) {
117: options = options | RegexpMatcher.MATCH_CASE_INSENSITIVE;
118: }
119: if (multiLine) {
120: options = options | RegexpMatcher.MATCH_MULTILINE;
121: }
122: if (singleLine) {
123: options = options | RegexpMatcher.MATCH_SINGLELINE;
124: }
125: Regexp regexp = regularExpression.getRegexp(getProject());
126: return regexp.matches(string, options);
127: }
128: }
|