Hello,
Attached is a update to ContainsSelector.java (based on 1.5.3) that allows the
users to specify the text attribute is to be used as a regular expression. I
found it useful when we needed to select files based on more than a simple
string comparison.
Could this patch be applied to the base?
Thanks,
Jay van der Meer
--- ContainsSelector.java 2003-04-08 10:24:06.000000000 -0500
+++ /tmp/ContainsSelector.java 2003-04-09 17:59:11.000000000 -0500
@@ -63,6 +63,8 @@
import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Parameter;
import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.types.RegularExpression;
+import org.apache.tools.ant.util.regexp.Regexp;
/**
* Selector that filters files based on whether they contain a
@@ -75,8 +77,12 @@
private String contains = null;
private boolean casesensitive = true;
+ private boolean textisregexp = false;
+ private RegularExpression MyRegExp = null;
+ private Regexp MyExpression = null;
public final static String CONTAINS_KEY = "text";
public final static String CASE_KEY = "casesensitive";
+ public final static String REGEXP_KEY = "regularexpression";
public ContainsSelector() {
@@ -91,6 +97,12 @@
} else {
buf.append("false");
}
+ buf.append(" regularexpression: ");
+ if (textisregexp) {
+ buf.append("true");
+ } else {
+ buf.append("false");
+ }
buf.append("}");
return buf.toString();
}
@@ -112,6 +124,15 @@
public void setCasesensitive(boolean casesensitive) {
this.casesensitive = casesensitive;
}
+
+ /**
+ * Whether to use the text as a regular expression or not.
+ *
+ * @param use text as a regular expression
+ */
+ public void setRegularExpression(boolean textisregexp) {
+ this.textisregexp = textisregexp;
+ }
/**
* When using this as a custom selector, this method will be called.
@@ -131,6 +152,10 @@
setCasesensitive(Project.toBoolean(
parameters[i].getValue()));
}
+ else if (REGEXP_KEY.equalsIgnoreCase(paramname)) {
+ setRegularExpression(Project.toBoolean(
+ parameters[i].getValue()));
+ }
else {
setError("Invalid parameter " + paramname);
}
@@ -159,30 +184,48 @@
* @return whether the file should be selected or not
*/
public boolean isSelected(File basedir, String filename, File file) {
-
+ boolean mymatch = false;
+ String userstr = contains;
+
// throw BuildException on error
validate();
if (file.isDirectory()) {
return true;
}
-
- String userstr = contains;
- if (!casesensitive) {
- userstr = contains.toLowerCase();
- }
+
+ if (textisregexp == true) {
+ if (MyRegExp == null) {
+ MyRegExp = new RegularExpression();
+ MyRegExp.setPattern(contains);
+ MyExpression = MyRegExp.getRegexp(getProject());
+ }
+ }
+ else {
+ if (!casesensitive) {
+ userstr = contains.toLowerCase();
+ }
+ }
+
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(
new FileInputStream(file)));
String teststr = in.readLine();
while (teststr != null) {
- if (!casesensitive) {
- teststr = teststr.toLowerCase();
- }
- if (teststr.indexOf(userstr) > -1) {
- return true;
- }
+ if (textisregexp == true) {
+ mymatch = MyExpression.matches(teststr);
+ if (mymatch == true)
+ return true;
+ }
+ else {
+ if (!casesensitive) {
+ teststr = teststr.toLowerCase();
+ }
+ if (teststr.indexOf(userstr) > -1) {
+ return true;
+ }
+ }
teststr = in.readLine();
}
return false;
--- selectors.html 2003-04-08 10:24:19.000000000 -0500
+++ /tmp/selectors.html 2003-04-09 17:59:17.000000000 -0500
@@ -86,6 +86,13 @@
</td>
<td valign="top" align="center">No</td>
</tr>
+ <tr>
+ <td valign="top">regularexpression</td>
+ <td valign="top">Use the <code>text</code> attribute as a
+ regular expression. Default is No.
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
</table>
<p>Here is an example of how to use the Contains Selector:</p>