/** * Set the classpath to use for loading a custom selector by using * a reference. * @param r a reference to the classpath */ public void setClasspathref(Reference r) { if (isReference()) { throw tooManyAttributes(); } createClasspath().setRefid(r); }
/** * Specify the classpath to use to load the Selector (nested element). * @return a classpath to be configured */ public final Path createClasspath() { if (isReference()) { throw noChildrenAllowed(); } if (this.classpath == null) { this.classpath = new Path(getProject()); } return this.classpath.createPath(); }
/** * These are errors specific to ExtendSelector only. If there are * errors in the custom selector, it should throw a BuildException * when isSelected() is called. */ public void verifySettings() { // Creation is done here rather than in isSelected() because some // containers may do a validation pass before running isSelected(), // but we need to check for the existence of the created class. if (dynselector == null) { selectorCreate(); } if (classname == null || classname.length() < 1) { setError("The classname attribute is required"); } else if (dynselector == null) { setError("Internal Error: The custom selector was not created"); } else if (!(dynselector instanceof ExtendFileSelector) && !parameters.isEmpty()) { setError( "Cannot set parameters on custom selector that does not implement ExtendFileSelector"); } }
/** * Set the classpath to load the classname specified using an attribute. * @param classpath the classpath to use */ public final void setClasspath(Path classpath) { if (isReference()) { throw tooManyAttributes(); } if (this.classpath == null) { this.classpath = classpath; } else { this.classpath.append(classpath); } }
= getProject().createClassLoader(classpath); c = Class.forName(classname, true, al); final Project p = getProject(); if (p != null) { p.setProjectReference(dynselector); setError("Selector " + classname + " not initialized, no such class"); } catch (InstantiationException iexcept) { setError("Selector " + classname + " not initialized, could not create class"); } catch (IllegalAccessException iaexcept) { setError("Selector " + classname + " not initialized, class not accessible"); setError("There is no classname specified");
/** * Allows the custom selector to choose whether to select a file. This * is also where the Parameters are passed to the custom selector, * since we know we must have them all by now. And since we must know * both classpath and classname, creating the class is deferred to here * as well. * @param basedir The the base directory. * @param filename The name of the file to check. * @param file A File object for this filename. * @return whether the file should be selected or not. * @exception BuildException if an error occurs. */ public boolean isSelected(File basedir, String filename, File file) throws BuildException { validate(); if (!parameters.isEmpty() && dynselector instanceof ExtendFileSelector) { // We know that dynselector must be non-null if no error message ((ExtendFileSelector) dynselector).setParameters( parameters.toArray(new Parameter[parameters.size()])); } return dynselector.isSelected(basedir, filename, file); }