001 package edu.rice.cs.cunit.instrumentors;
002
003 import java.io.File;
004 import java.io.IOException;
005
006 /**
007 * Exception inside the file instrumentor, preventing it to delete and rename two files.
008 *
009 * @author Mathias Ricken
010 */
011 public class CouldNotDeleteAndRenameException extends RetryIOException {
012 /**
013 * File to delete.
014 */
015 private File _toDelete = null;
016
017 /**
018 * File to rename to _toDelete.
019 */
020 private File _toRename = null;
021
022 /**
023 * Constructs a new exception.
024 * @param toDelete file to delete
025 * @param toRename file to rename to the first file
026 */
027 public CouldNotDeleteAndRenameException(File toDelete, File toRename) {
028 super("Could not delete file " + toDelete.getPath()+ " or rename file " + toRename.getPath());
029 _toDelete = toDelete;
030 _toRename = toRename;
031 }
032
033 /**
034 * Retry the failed operation one more time.
035 * @throws java.io.IOException
036 */
037 public void retry() throws IOException {
038 if (_toDelete.exists() && _toRename.exists()) {
039 if (_toDelete.exists() && !(_toDelete.delete())) {
040 throw new IOException(getMessage());
041 }
042 if (_toRename.exists() && !(_toRename.renameTo(_toDelete))) {
043 throw new IOException(getMessage());
044 }
045 }
046 else {
047 throw new IOException(getMessage() + "; cannot fix, situation not applicable");
048 }
049 }
050
051
052 }