Browse Source

Add a new <contains> condition that looks for substrings.

Names are open to discussion, of course.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271444 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 23 years ago
parent
commit
01b79d1810
5 changed files with 232 additions and 6 deletions
  1. +1
    -1
      WHATSNEW
  2. +26
    -0
      docs/manual/CoreTasks/conditions.html
  3. +12
    -5
      src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java
  4. +111
    -0
      src/main/org/apache/tools/ant/taskdefs/condition/Contains.java
  5. +82
    -0
      src/testcases/org/apache/tools/ant/taskdefs/condition/ContainsTest.java

+ 1
- 1
WHATSNEW View File

@@ -114,7 +114,7 @@ Other changes:
* Added a new condition <isset> that test for the existence of a * Added a new condition <isset> that test for the existence of a
property to the condition task. property to the condition task.


* Added a new conditions <checksum>, <http>, <socket>.
* Added a new conditions <checksum>, <http>, <socket>, <contains>.


* Ant's testcases require JUnit 3.7 or above as they now use the new * Ant's testcases require JUnit 3.7 or above as they now use the new
assertTrue method instead of assert. assertTrue method instead of assert.


+ 26
- 0
docs/manual/CoreTasks/conditions.html View File

@@ -212,6 +212,32 @@ or the filenames match the answer is so obvious the detailed test is omitted.
</tr> </tr>
</table> </table>


<h4>contains</h4>
<p>Tests whether the a given Strings contains another one.</p>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<td valign="top"><b>Attribute</b></td>
<td valign="top"><b>Description</b></td>
<td align="center" valign="top"><b>Required</b></td>
</tr>
<tr>
<td valign="top">string</td>
<td valign="top">The string to search in.</td>
<td valign="top" align="center">Yes</td>
</tr>
<tr>
<td valign="top">substring</td>
<td valign="top">The string to search for.</td>
<td valign="top" align="center">Yes</td>
</tr>
<tr>
<td valign="top">casesensitive</td>
<td valign="top">Perform a case sensitive comparision. Default is
true.</td>
<td valign="top" align="center">No</td>
</tr>
</table>

<hr> <hr>
<p align="center">Copyright &copy; 2001-2002 Apache Software <p align="center">Copyright &copy; 2001-2002 Apache Software
Foundation. All rights Reserved.</p> Foundation. All rights Reserved.</p>


+ 12
- 5
src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java View File

@@ -101,7 +101,7 @@ public abstract class ConditionBase extends ProjectComponent {
/** /**
* Add an &lt;checksum&gt; condition. * Add an &lt;checksum&gt; condition.
* *
* @since 1.4
* @since 1.4, Ant 1.5
*/ */
public void addChecksum(Checksum c) {conditions.addElement(c);} public void addChecksum(Checksum c) {conditions.addElement(c);}


@@ -150,31 +150,38 @@ public abstract class ConditionBase extends ProjectComponent {
/** /**
* Add an &lt;isset&gt; condition. * Add an &lt;isset&gt; condition.
* *
* @since 1.1
* @since 1.2, Ant 1.5
*/ */
public void addIsSet(IsSet i) {conditions.addElement(i);} public void addIsSet(IsSet i) {conditions.addElement(i);}


/** /**
* Add an &lt;http&gt; condition. * Add an &lt;http&gt; condition.
* *
* @since 1.7
* @since 1.7, Ant 1.5
*/ */
public void addHttp(Http h) {conditions.addElement(h);} public void addHttp(Http h) {conditions.addElement(h);}


/** /**
* Add a &lt;socket&gt; condition. * Add a &lt;socket&gt; condition.
* *
* @since 1.7
* @since 1.7, Ant 1.5
*/ */
public void addSocket(Socket s) {conditions.addElement(s);} public void addSocket(Socket s) {conditions.addElement(s);}


/** /**
* Add a &lt;filesmatch&gt; condition. * Add a &lt;filesmatch&gt; condition.
* *
* @since 1.8
* @since 1.8, Ant 1.5
*/ */
public void addFilesMatch(FilesMatch test) {conditions.addElement(test);} public void addFilesMatch(FilesMatch test) {conditions.addElement(test);}
/**
* Add a &lt;filesmatch&gt; condition.
*
* @since 1.10, Ant 1.5
*/
public void addContains(Contains test) {conditions.addElement(test);}
/** /**
* Inner class that configures those conditions with a project * Inner class that configures those conditions with a project
* instance that need it. * instance that need it.


+ 111
- 0
src/main/org/apache/tools/ant/taskdefs/condition/Contains.java View File

@@ -0,0 +1,111 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/

package org.apache.tools.ant.taskdefs.condition;

import org.apache.tools.ant.BuildException;

/**
* Is one string part of another string?
*
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @version $Revision$
*
* @since Ant 1.5
*/
public class Contains implements Condition {

private String string, subString;
private boolean caseSensitive = true;

/**
* The string to search in.
*
* @since 1.1, Ant 1.5
*/
public void setString(String a1) {
string = a1;
}

/**
* The string to search for.
*
* @since 1.1, Ant 1.5
*/
public void setSubstring(String a2) {
subString = a2;
}

/**
* Whether to search ignoring case or not.
*
* @since 1.1, Ant 1.5
*/
public void setCasesensitive(boolean b) {
caseSensitive = b;
}

/**
* @since 1.1, Ant 1.5
*/
public boolean eval() throws BuildException {
if (string == null || subString == null) {
throw new BuildException("both string and substring are required in contains");
}

return caseSensitive
? string.indexOf(subString) > -1
: string.toLowerCase().indexOf(subString.toLowerCase()) > -1;
}
}

+ 82
- 0
src/testcases/org/apache/tools/ant/taskdefs/condition/ContainsTest.java View File

@@ -0,0 +1,82 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/

package org.apache.tools.ant.taskdefs.condition;

import junit.framework.TestCase;

/**
* Testcase for the &lt;contains&gt; condition.
*
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @version $Revision$
*/
public class ContainsTest extends TestCase {

public ContainsTest(String name) {
super(name);
}

public void testCaseSensitive() {
Contains con = new Contains();
con.setString("abc");
con.setSubstring("A");
con.eval();
assertTrue(!con.eval());

con.setCasesensitive(false);
assertTrue(con.eval());
}

}

Loading…
Cancel
Save