001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018: package org.apache.tools.ant.taskdefs;
019:
020: import java.io.File;
021: import org.apache.tools.ant.BuildException;
022: import org.apache.tools.ant.Task;
023: import org.apache.tools.ant.util.FileUtils;
024:
025: /**
026: * This task sets a property to the name of a temporary file.
027: * Unlike {@link File#createTempFile}, this task does not actually create the
028: * temporary file, but it does guarantee that the file did not
029: * exist when the task was executed.
030: * <p>
031: * Examples
032: * <pre><tempfile property="temp.file" /></pre>
033: * create a temporary file
034: * <pre><tempfile property="temp.file" suffix=".xml" /></pre>
035: * create a temporary file with the .xml suffix.
036: * <pre><tempfile property="temp.file" destDir="build"/></pre>
037: * create a temp file in the build subdir
038: *@since Ant 1.5
039: *@ant.task
040: */
041:
042: public class TempFile extends Task {
043:
044: private static final FileUtils FILE_UTILS = FileUtils
045: .getFileUtils();
046:
047: /**
048: * Name of property to set.
049: */
050: private String property;
051:
052: /**
053: * Directory to create the file in. Can be null.
054: */
055: private File destDir = null;
056:
057: /**
058: * Prefix for the file.
059: */
060: private String prefix;
061:
062: /**
063: * Suffix for the file.
064: */
065: private String suffix = "";
066:
067: /** deleteOnExit flag */
068: private boolean deleteOnExit;
069:
070: /**
071: * Sets the property you wish to assign the temporary file to.
072: *
073: * @param property The property to set
074: * @ant.attribute group="required"
075: */
076: public void setProperty(String property) {
077: this .property = property;
078: }
079:
080: /**
081: * Sets the destination directory. If not set,
082: * the basedir directory is used instead.
083: *
084: * @param destDir The new destDir value
085: */
086: public void setDestDir(File destDir) {
087: this .destDir = destDir;
088: }
089:
090: /**
091: * Sets the optional prefix string for the temp file.
092: *
093: * @param prefix string to prepend to generated string
094: */
095: public void setPrefix(String prefix) {
096: this .prefix = prefix;
097: }
098:
099: /**
100: * Sets the optional suffix string for the temp file.
101: *
102: * @param suffix suffix including any "." , e.g ".xml"
103: */
104: public void setSuffix(String suffix) {
105: this .suffix = suffix;
106: }
107:
108: /**
109: * Set whether the tempfile created by this task should be set
110: * for deletion on normal VM exit.
111: * @param deleteOnExit boolean flag.
112: */
113: public void setDeleteOnExit(boolean deleteOnExit) {
114: this .deleteOnExit = deleteOnExit;
115: }
116:
117: /**
118: * Learn whether deleteOnExit is set for this tempfile task.
119: * @return boolean deleteOnExit flag.
120: */
121: public boolean isDeleteOnExit() {
122: return deleteOnExit;
123: }
124:
125: /**
126: * Creates the temporary file.
127: *
128: *@exception BuildException if something goes wrong with the build
129: */
130: public void execute() throws BuildException {
131: if (property == null || property.length() == 0) {
132: throw new BuildException("no property specified");
133: }
134: if (destDir == null) {
135: destDir = getProject().resolveFile(".");
136: }
137: File tfile = FILE_UTILS.createTempFile(prefix, suffix, destDir,
138: deleteOnExit);
139:
140: getProject().setNewProperty(property, tfile.toString());
141: }
142: }
|