aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/MakeUrl.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/MakeUrl.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/MakeUrl.java298
1 files changed, 298 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/MakeUrl.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/MakeUrl.java
new file mode 100644
index 00000000..e23c0253
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/MakeUrl.java
@@ -0,0 +1,298 @@
+/*
+ * 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;
+
+/**
+ * <p>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>
+ *
+ * <p>nested filesets are supported; if present, these are turned into the
+ * url with the given separator between them (default = " ").</p>
+ *
+ * @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<FileSet> filesets = new LinkedList<FileSet>();
+
+ /**
+ * paths to add
+ */
+ private List<Path> paths = new LinkedList<Path>();
+
+ /**
+ * 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</code> 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<FileSet> 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<Path> 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;
+ }
+
+}