/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */
package org.apache.tools.ant.taskdefs.condition;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Resource;
import org.apache.tools.ant.types.ResourceCollection;
import org.apache.tools.ant.types.resources.FileResource;
import org.apache.tools.ant.util.FileUtils;

<resourcecontains> Is a string contained in a resource (file currently)?
Since:Ant 1.7.1
/** * &lt;resourcecontains&gt; * Is a string contained in a resource (file currently)? * @since Ant 1.7.1 */
public class ResourceContains implements Condition { private Project project; private String substring; private Resource resource; private String refid; private boolean casesensitive = true;
Set this condition's Project.
Params:
  • project – Project
/** * Set this condition's Project. * @param project Project */
public void setProject(Project project) { this.project = project; }
Get this condition's Project.
Returns:Project
/** * Get this condition's Project. * @return Project */
public Project getProject() { return project; }
Sets the resource to search
Params:
  • r – the value to use.
/** * Sets the resource to search * @param r the value to use. */
public void setResource(String r) { this.resource = new FileResource(new File(r)); }
Sets the refid to search; should indicate a resource directly or by way of a single-element ResourceCollection.
Params:
  • refid – the value to use.
/** * Sets the refid to search; should indicate a resource directly * or by way of a single-element ResourceCollection. * @param refid the value to use. */
public void setRefid(String refid) { this.refid = refid; } private void resolveRefid() { try { if (getProject() == null) { throw new BuildException("Cannot retrieve refid; project unset"); } Object o = getProject().getReference(refid); if (!(o instanceof Resource)) { if (o instanceof ResourceCollection) { ResourceCollection rc = (ResourceCollection) o; if (rc.size() == 1) { o = rc.iterator().next(); } } else { throw new BuildException("Illegal value at '%s': %s", refid, o); } } this.resource = (Resource) o; } finally { refid = null; } }
Sets the substring to look for
Params:
  • substring – the value to use.
/** * Sets the substring to look for * @param substring the value to use. */
public void setSubstring(String substring) { this.substring = substring; }
Sets case sensitivity attribute.
Params:
  • casesensitive – the value to use.
/** * Sets case sensitivity attribute. * @param casesensitive the value to use. */
public void setCasesensitive(boolean casesensitive) { this.casesensitive = casesensitive; } private void validate() { if (resource != null && refid != null) { throw new BuildException("Cannot set both resource and refid"); } if (resource == null && refid != null) { resolveRefid(); } if (resource == null || substring == null) { throw new BuildException( "both resource and substring are required in <resourcecontains>"); } }
Evaluates the condition.
Throws:
Returns:true if the substring is contained in the resource
/** * Evaluates the condition. * @return true if the substring is contained in the resource * @throws BuildException if there is a problem. */
@Override public synchronized boolean eval() throws BuildException { validate(); if (substring.isEmpty()) { if (getProject() != null) { getProject().log("Substring is empty; returning true", Project.MSG_VERBOSE); } return true; } if (resource.getSize() == 0) { return false; } try (BufferedReader reader = new BufferedReader( new InputStreamReader(resource.getInputStream()))) { String contents = FileUtils.safeReadFully(reader); String sub = substring; if (!casesensitive) { contents = contents.toLowerCase(); sub = sub.toLowerCase(); } return contents.contains(sub); } catch (IOException e) { throw new BuildException("There was a problem accessing resource : " + resource); } } }