All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.tools.ant.taskdefs.MakeUrl Maven / Gradle / Ivy

There is a newer version: 1.10.15
Show newest version
/*
 *  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
 *
 *      http://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;


import java.io.File;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.util.FileUtils;

/**
 * 

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" */ public class MakeUrl extends Task { /** * name of the property to set */ private String property; /** * name of a file to turn into a URL */ private File file; /** * separator char */ private String separator = " "; /** * filesets of nested files to add to this url */ private List filesets = new LinkedList(); /** * paths to add */ private List paths = new LinkedList(); /** * validation flag */ private boolean validate = true; // error message strings /** Missing file */ public static final String ERROR_MISSING_FILE = "A source file is missing: "; /** No property defined */ public static final String ERROR_NO_PROPERTY = "No property defined"; /** No files defined */ public static final String ERROR_NO_FILES = "No files defined"; /** * set the name of a property to fill with the URL * * @param property the name of the property. */ public void setProperty(String property) { this.property = property; } /** * the name of a file to be converted into a URL * * @param file the file to be converted. */ public void setFile(File file) { this.file = file; } /** * a fileset of jar files to include in the URL, each * separated by the separator * * @param fileset the fileset to be added. */ public void addFileSet(FileSet fileset) { filesets.add(fileset); } /** * set the separator for the multi-url option. * * @param separator the separator to use. */ public void setSeparator(String separator) { this.separator = separator; } /** * set this flag to trigger validation that every named file exists. * Optional: default=true * * @param validate a boolean value. */ public void setValidate(boolean validate) { this.validate = validate; } /** * add a path to the URL. All elements in the path * will be converted to individual URL entries * * @param path a path value. */ public void addPath(Path path) { paths.add(path); } /** * convert the filesets to urls. * * @return null for no files */ private String filesetsToURL() { if (filesets.isEmpty()) { return ""; } int count = 0; StringBuilder urls = new StringBuilder(); ListIterator list = filesets.listIterator(); while (list.hasNext()) { FileSet set = 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); } /** * 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 */ private String stripTrailingSeparator(StringBuilder urls, int count) { if (count > 0) { urls.delete(urls.length() - separator.length(), urls.length()); return new String(urls); } else { return ""; } } /** * convert all paths to URLs * * @return the paths as a separated list of URLs */ private String pathsToURL() { if (paths.isEmpty()) { return ""; } int count = 0; StringBuilder urls = new StringBuilder(); ListIterator list = paths.listIterator(); while (list.hasNext()) { 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); } /** * 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} */ private void validateFile(File fileToCheck) { if (validate && !fileToCheck.exists()) { throw new BuildException(ERROR_MISSING_FILE + fileToCheck.toString()); } } /** * Create the url * * @throws org.apache.tools.ant.BuildException * if something goes wrong with the build */ @Override public void execute() throws BuildException { 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); } /** * check for errors * @throws BuildException if we are not configured right */ private void validate() { //validation if (property == null) { throw new BuildException(ERROR_NO_PROPERTY); } if (file == null && filesets.isEmpty() && paths.isEmpty()) { throw new BuildException(ERROR_NO_FILES); } } /** * convert a file to a URL; * * @param fileToConvert * @return the file converted to a URL */ private String toURL(File fileToConvert) { String url; //create the URL //ant equivalent of fileToConvert.toURI().toURL().toExternalForm(); url = FileUtils.getFileUtils().toURI(fileToConvert.getAbsolutePath()); return url; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy