aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/FileList.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/FileList.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/FileList.java219
1 files changed, 219 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/FileList.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/FileList.java
new file mode 100644
index 00000000..42e27635
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/FileList.java
@@ -0,0 +1,219 @@
+/*
+ * 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.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.resources.FileResourceIterator;
+
+/**
+ * FileList represents an explicitly named list of files. FileLists
+ * are useful when you want to capture a list of files regardless of
+ * whether they currently exist. By contrast, FileSet operates as a
+ * filter, only returning the name of a matched file if it currently
+ * exists in the file system.
+ */
+public class FileList extends DataType implements ResourceCollection {
+
+ private List<String> filenames = new ArrayList<String>();
+ private File dir;
+
+ /**
+ * The default constructor.
+ *
+ */
+ public FileList() {
+ super();
+ }
+
+ /**
+ * A copy constructor.
+ *
+ * @param filelist a <code>FileList</code> value
+ */
+ protected FileList(FileList filelist) {
+ this.dir = filelist.dir;
+ this.filenames = filelist.filenames;
+ setProject(filelist.getProject());
+ }
+
+ /**
+ * Makes this instance in effect a reference to another FileList
+ * instance.
+ *
+ * <p>You must not set another attribute or nest elements inside
+ * this element if you make it a reference.</p>
+ * @param r the reference to another filelist.
+ * @exception BuildException if an error occurs.
+ */
+ public void setRefid(Reference r) throws BuildException {
+ if ((dir != null) || (filenames.size() != 0)) {
+ throw tooManyAttributes();
+ }
+ super.setRefid(r);
+ }
+
+ /**
+ * Set the dir attribute.
+ *
+ * @param dir the directory this filelist is relative to.
+ * @exception BuildException if an error occurs
+ */
+ public void setDir(File dir) throws BuildException {
+ checkAttributesAllowed();
+ this.dir = dir;
+ }
+
+ /**
+ * @param p the current project
+ * @return the directory attribute
+ */
+ public File getDir(Project p) {
+ if (isReference()) {
+ return getRef(p).getDir(p);
+ }
+ return dir;
+ }
+
+ /**
+ * Set the filenames attribute.
+ *
+ * @param filenames a string contains filenames, separated by , or
+ * by whitespace.
+ */
+ public void setFiles(String filenames) {
+ checkAttributesAllowed();
+ if (filenames != null && filenames.length() > 0) {
+ StringTokenizer tok = new StringTokenizer(
+ filenames, ", \t\n\r\f", false);
+ while (tok.hasMoreTokens()) {
+ this.filenames.add(tok.nextToken());
+ }
+ }
+ }
+
+ /**
+ * Returns the list of files represented by this FileList.
+ * @param p the current project
+ * @return the list of files represented by this FileList.
+ */
+ public String[] getFiles(Project p) {
+ if (isReference()) {
+ return getRef(p).getFiles(p);
+ }
+
+ if (dir == null) {
+ throw new BuildException("No directory specified for filelist.");
+ }
+
+ if (filenames.size() == 0) {
+ throw new BuildException("No files specified for filelist.");
+ }
+
+ return filenames.toArray(new String[filenames.size()]);
+ }
+
+ /**
+ * Performs the check for circular references and returns the
+ * referenced FileList.
+ * @param p the current project
+ * @return the FileList represented by a referenced filelist.
+ */
+ protected FileList getRef(Project p) {
+ return (FileList) getCheckedRef(p);
+ }
+
+ /**
+ * Inner class corresponding to the &lt;file&gt; nested element.
+ */
+ public static class FileName {
+ private String name;
+
+ /**
+ * The name attribute of the file element.
+ *
+ * @param name the name of a file to add to the file list.
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return the name of the file for this element.
+ */
+ public String getName() {
+ return name;
+ }
+ }
+
+ /**
+ * Add a nested &lt;file&gt; nested element.
+ *
+ * @param name a configured file element with a name.
+ * @since Ant 1.6.2
+ */
+ public void addConfiguredFile(FileName name) {
+ if (name.getName() == null) {
+ throw new BuildException(
+ "No name specified in nested file element");
+ }
+ filenames.add(name.getName());
+ }
+
+ /**
+ * Fulfill the ResourceCollection contract.
+ * @return an Iterator of Resources.
+ * @since Ant 1.7
+ */
+ public Iterator<Resource> iterator() {
+ if (isReference()) {
+ return getRef(getProject()).iterator();
+ }
+ return new FileResourceIterator(getProject(), dir,
+ filenames.toArray(new String[filenames.size()]));
+ }
+
+ /**
+ * Fulfill the ResourceCollection contract.
+ * @return number of elements as int.
+ * @since Ant 1.7
+ */
+ public int size() {
+ if (isReference()) {
+ return ((FileList) getRef(getProject())).size();
+ }
+ return filenames.size();
+ }
+
+ /**
+ * Always returns true.
+ * @return true indicating that all elements will be FileResources.
+ * @since Ant 1.7
+ */
+ public boolean isFilesystemOnly() {
+ return true;
+ }
+
+}