/*
 *  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.types.resources.selectors;

import org.apache.tools.ant.AntTypeDefinition;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.ComponentHelper;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.types.Resource;

InstanceOf ResourceSelector.
Since:Ant 1.7
/** * InstanceOf ResourceSelector. * @since Ant 1.7 */
public class InstanceOf implements ResourceSelector { private static final String ONE_ONLY = "Exactly one of class|type must be set."; private Project project; private Class<?> clazz; private String type; private String uri;
Set the Project instance for this InstanceOf selector.
Params:
  • p – the Project instance used for type comparisons.
/** * Set the Project instance for this InstanceOf selector. * @param p the Project instance used for type comparisons. */
public void setProject(Project p) { project = p; }
Set the class to compare against.
Params:
  • c – the class.
/** * Set the class to compare against. * @param c the class. */
public void setClass(Class<?> c) { if (clazz != null) { throw new BuildException("The class attribute has already been set."); } clazz = c; }
Set the Ant type to compare against.
Params:
  • s – the type name.
/** * Set the Ant type to compare against. * @param s the type name. */
public void setType(String s) { type = s; }
Set the URI in which the Ant type, if specified, should be defined.
Params:
  • u – the URI.
/** * Set the URI in which the Ant type, if specified, should be defined. * @param u the URI. */
public void setURI(String u) { uri = u; }
Get the comparison class.
Returns:the Class object.
/** * Get the comparison class. * @return the Class object. */
public Class<?> getCheckClass() { return clazz; }
Get the comparison type.
Returns:the String typename.
/** * Get the comparison type. * @return the String typename. */
public String getType() { return type; }
Get the type's URI.
Returns:the String URI.
/** * Get the type's URI. * @return the String URI. */
public String getURI() { return uri; }
Return true if this Resource is selected.
Params:
  • r – the Resource to check.
Throws:
Returns:whether the Resource was selected.
/** * Return true if this Resource is selected. * @param r the Resource to check. * @return whether the Resource was selected. * @throws BuildException if an error occurs. */
public boolean isSelected(Resource r) { if ((clazz == null) == (type == null)) { throw new BuildException(ONE_ONLY); } Class<?> c = clazz; if (type != null) { if (project == null) { throw new BuildException( "No project set for InstanceOf ResourceSelector; the type attribute is invalid."); } AntTypeDefinition d = ComponentHelper.getComponentHelper( project).getDefinition(ProjectHelper.genComponentName(uri, type)); if (d == null) { throw new BuildException("type %s not found.",type); } try { c = d.innerGetTypeClass(); } catch (ClassNotFoundException e) { throw new BuildException(e); } } return c.isAssignableFrom(r.getClass()); } }