001: /*
002: * Enhydra Java Application Server Project
003: *
004: * The contents of this file are subject to the Enhydra Public License
005: * Version 1.1 (the "License"); you may not use this file except in
006: * compliance with the License. You may obtain a copy of the License on
007: * the Enhydra web site ( http://www.enhydra.org/ ).
008: *
009: * Software distributed under the License is distributed on an "AS IS"
010: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
011: * the License for the specific terms governing rights and limitations
012: * under the License.
013: *
014: * The Initial Developer of the Enhydra Application Server is Lutris
015: * Technologies, Inc. The Enhydra Application Server and portions created
016: * by Lutris Technologies, Inc. are Copyright Lutris Technologies, Inc.
017: * All Rights Reserved.
018: *
019: * Contributor(s):
020: *
021: * $Id: TmpDir.java,v 1.2 2006-06-15 13:47:01 sinisa Exp $
022: */
023:
024: package com.lutris.util;
025:
026: import java.io.File;
027: import java.io.IOException;
028:
029: /**
030: * Class for creating and manage a temporary directory.
031: *
032: * @version $Revision: 1.2 $
033: * @author Mark Diekhans
034: * @since Jolt1.0
035: */
036: class TmpDir {
037: File dir;
038:
039: /**
040: * Create a tmp directory.
041: *
042: * @param dirPath Path of directory to generate the temporary file in.
043: * @param baseName Prefix name of the directory.
044: * @exception java.io.IOException if unable to create the directory.
045: */
046: public TmpDir(String path, String baseName) throws IOException {
047: int dirNum = 0;
048:
049: /*
050: * Generate a unique directory.
051: */
052: while (true) {
053: dir = new File(path, baseName + "."
054: + System.currentTimeMillis() + "." + dirNum
055: + ".tmp");
056: if (dir.mkdirs()) {
057: break;
058: }
059: if (!dir.exists()) {
060: /*
061: * Didn't fail because it already exists, must be an access error.
062: */
063: throw new IOException(
064: "no permission to create directory "
065: + dir.getAbsolutePath());
066: }
067: dirNum++;
068: if (dirNum >= 25) {
069: throw new IOException(
070: "failed to create tmp directory named in the "
071: + "form \"" + dir.getAbsolutePath()
072: + "\" after " + dirNum + " trys");
073:
074: }
075: }
076: }
077:
078: /**
079: * Get the File object describing the directory.
080: *
081: * @return Reference to the file object.
082: */
083: public File file() {
084: return dir;
085: }
086:
087: /**
088: * Recursive delete files.
089: */
090: void recursiveDelete(File dirPath) {
091: String[] ls = dirPath.list();
092:
093: for (int idx = 0; idx < ls.length; idx++) {
094: File file = new File(dirPath, ls[idx]);
095: if (file.isDirectory())
096: recursiveDelete(file);
097: file.delete();
098: }
099: }
100:
101: /**
102: * Delete the directory and its contents
103: *
104: * @exception java.io.IOException if unable to remove the directory.
105: */
106: public void delete() throws IOException {
107: recursiveDelete(dir);
108: if (dir.exists()) {
109: throw new IOException(
110: "Unable to delete directory hierarchy \""
111: + dir.getAbsolutePath() + "\"");
112: }
113: }
114:
115: /**
116: * Create the specified directory in the tmp directory if it doesn't exist.
117: *
118: * @param path Path of directory relative to the tmp directory.
119: * @return A File naming the new directory.
120: * @exception java.io.IOException if unable to create the directory.
121: */
122: public File mkdirs(String path) throws IOException {
123: File newDir = new File(dir.getAbsolutePath(), path);
124: newDir.mkdirs();
125: if (!newDir.exists()) {
126: throw new IOException("Unable to create directory \""
127: + dir.getAbsolutePath() + "\"");
128: }
129: return newDir;
130: }
131: }
|