FileDocCategorySizeDatePackage
MakeUrl.javaAPI DocApache Ant 1.708724Wed Dec 13 06:16:24 GMT 2006org.apache.tools.ant.taskdefs

MakeUrl

public class MakeUrl extends org.apache.tools.ant.Task
This task takes file and turns them into a URL, which it then assigns to a property. Use when for setting up RMI codebases.

nested filesets are supported; if present, these are turned into the url with the given separator between them (default = " ").

ant.task
category="core" name="makeurl"

Fields Summary
private String
property
name of the property to set
private File
file
name of a file to turn into a URL
private String
separator
separator char
private List
filesets
filesets of nested files to add to this url
private List
paths
paths to add
private boolean
validate
validation flag
public static final String
ERROR_MISSING_FILE
Missing file
public static final String
ERROR_NO_PROPERTY
No property defined
public static final String
ERROR_NO_FILES
No files defined
Constructors Summary
Methods Summary
public voidaddFileSet(org.apache.tools.ant.types.FileSet fileset)
a fileset of jar files to include in the URL, each separated by the separator

param
fileset the fileset to be added.

        filesets.add(fileset);
    
public voidaddPath(org.apache.tools.ant.types.Path path)
add a path to the URL. All elements in the path will be converted to individual URL entries

param
path a path value.

        paths.add(path);
    
public voidexecute()
Create the url

throws
org.apache.tools.ant.BuildException if something goes wrong with the build

        validate();
        //now exit here if the property is already set
        if (getProject().getProperty(property) != null) {
            return;
        }
        String url;
        String filesetURL = filesetsToURL();
        if (file != null) {
            validateFile(file);
            url = toURL(file);
            //and add any files if also defined
            if (filesetURL.length() > 0) {
                url = url + separator + filesetURL;
            }
        } else {
            url = filesetURL;
        }
        //add path URLs
        String pathURL = pathsToURL();
        if (pathURL.length() > 0) {
            if (url.length() > 0) {
                url = url + separator + pathURL;
            } else {
                url = pathURL;
            }
        }
        log("Setting " + property + " to URL " + url, Project.MSG_VERBOSE);
        getProject().setNewProperty(property, url);
    
private java.lang.StringfilesetsToURL()
convert the filesets to urls.

return
null for no files

        if (filesets.isEmpty()) {
            return "";
        }
        int count = 0;
        StringBuffer urls = new StringBuffer();
        ListIterator list = filesets.listIterator();
        while (list.hasNext()) {
            FileSet set = (FileSet) list.next();
            DirectoryScanner scanner = set.getDirectoryScanner(getProject());
            String[] files = scanner.getIncludedFiles();
            for (int i = 0; i < files.length; i++) {
                File f = new File(scanner.getBasedir(), files[i]);
                validateFile(f);
                String asUrl = toURL(f);
                urls.append(asUrl);
                log(asUrl, Project.MSG_DEBUG);
                urls.append(separator);
                count++;
            }
        }
        //at this point there is one trailing space to remove, if the list is not empty.
        return stripTrailingSeparator(urls, count);
    
private java.lang.StringpathsToURL()
convert all paths to URLs

return
the paths as a separated list of URLs

        if (paths.isEmpty()) {
            return "";
        }
        int count = 0;
        StringBuffer urls = new StringBuffer();
        ListIterator list = paths.listIterator();
        while (list.hasNext()) {
            Path path = (Path) list.next();
            String[] elements = path.list();
            for (int i = 0; i < elements.length; i++) {
                File f = new File(elements[i]);
                validateFile(f);
                String asUrl = toURL(f);
                urls.append(asUrl);
                log(asUrl, Project.MSG_DEBUG);
                urls.append(separator);
                count++;
            }
        }
        //at this point there is one trailing space to remove, if the list is not empty.
        return stripTrailingSeparator(urls, count);
    
public voidsetFile(java.io.File file)
the name of a file to be converted into a URL

param
file the file to be converted.

        this.file = file;
    
public voidsetProperty(java.lang.String property)
set the name of a property to fill with the URL

param
property the name of the property.


                           
        
        this.property = property;
    
public voidsetSeparator(java.lang.String separator)
set the separator for the multi-url option.

param
separator the separator to use.

        this.separator = separator;
    
public voidsetValidate(boolean validate)
set this flag to trigger validation that every named file exists. Optional: default=true

param
validate a boolean value.

        this.validate = validate;
    
private java.lang.StringstripTrailingSeparator(java.lang.StringBuffer urls, int count)
convert the string buffer to a string, potentially stripping out any trailing separator

param
urls URL buffer
param
count number of URL entries
return
trimmed string, or empty string

        if (count > 0) {
            urls.delete(urls.length() - separator.length(), urls.length());
            return new String(urls);
        } else {
            return "";
        }
    
private java.lang.StringtoURL(java.io.File fileToConvert)
convert a file to a URL;

param
fileToConvert
return
the file converted to a URL

        String url;
        //create the URL
        //ant equivalent of  fileToConvert.toURI().toURL().toExternalForm();
        url = FileUtils.getFileUtils().toURI(fileToConvert.getAbsolutePath());

        return url;
    
private voidvalidate()
check for errors

throws
BuildException if we are not configured right

        //validation
        if (property == null) {
            throw new BuildException(ERROR_NO_PROPERTY);
        }
        if (file == null && filesets.isEmpty() && paths.isEmpty()) {
            throw new BuildException(ERROR_NO_FILES);
        }
    
private voidvalidateFile(java.io.File fileToCheck)
verify that the file exists, if {@link #validate} is set

param
fileToCheck file that may need to exist
throws
BuildException with text beginning {@link #ERROR_MISSING_FILE}

        if (validate && !fileToCheck.exists()) {
            throw new BuildException(ERROR_MISSING_FILE + fileToCheck.toString());
        }