|
Ant example source code file (MakeUrl.java)
The MakeUrl.java source code/* * 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 org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.util.FileUtils; import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.Path; import java.io.File; import java.util.List; import java.util.LinkedList; import java.util.ListIterator; /** * This task takes file and turns them into a URL, which it then assigns * to a property. Use when for setting up RMI codebases. * <p/> * 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 <code>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; 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); } /** * 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(StringBuffer 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; 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); } /** * 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 */ 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; } } Other Ant examples (source code examples)Here is a short list of links related to this Ant MakeUrl.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.