blob: ff0f759051d7b0a882a44609cd76769cedbc1352 [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed 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 dalvik.system;
import java.io.File;
/**
* Utility class to handle the setup of the core library's concept of
* what the "default temporary directory" is. Application code may
* call into this class with an appropriate base directory during its
* startup, as a reasonably easy way to get the standard property
* <code>java.io.tmpdir</code> to point at something useful.
*
* @hide
*/
public class TemporaryDirectory {
/** system property name for the temporary directory */
private static final String PROPERTY = "java.io.tmpdir";
/** final path component name for the temporary directory */
private static final String PATH_NAME = "tmp";
/** whether a temporary directory has been configured yet */
private static boolean configured = false;
/**
* Convenience method which is equivalent to
* <code>setupDirectory(new File(baseDir))</code>.
*
* @param baseDir the base directory of the temporary directory
*/
public static void setUpDirectory(String baseDir) {
setUpDirectory(new File(baseDir));
}
/**
* Sets up the temporary directory, but only if one isn't already
* defined for this process, and only if it is possible (e.g., the
* directory already exists and is read-write, or the directory
* can be created). This call will do one of three things:
*
* <ul>
* <li>return without error and without doing anything, if a
* previous call to this method succeeded</li>
* <li>return without error, having either created a temporary
* directory under the given base or verified that such a directory
* already exists</li>
* <li>throw <code>UnsupportedOperationException</code> if the
* directory could not be created or accessed</li>
* </ul>
*
* @param baseDir the base directory of the temporary directory
*/
public static synchronized void setUpDirectory(File baseDir) {
if (configured) {
System.logE("Already set to: " + System.getProperty(PROPERTY));
return;
}
File dir = new File(baseDir, PATH_NAME);
String absolute = dir.getAbsolutePath();
if (dir.exists()) {
if (!dir.isDirectory()) {
throw new UnsupportedOperationException(
"Name is used by a non-directory file: " +
absolute);
} else if (!(dir.canRead() && dir.canWrite())) {
throw new UnsupportedOperationException(
"Existing directory is not readable and writable: " +
absolute);
}
} else {
if (!dir.mkdirs()) {
throw new UnsupportedOperationException(
"Failed to create directory: " + absolute);
}
}
System.setProperty(PROPERTY, absolute);
configured = true;
}
}