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 rename two files.
008 *
009 * @author Mathias Ricken
010 */
011 public class CouldNotRenameException extends RetryIOException {
012 /**
013 * Old file, to be renamed to _newFile.
014 */
015 private File _oldFile = null;
016
017 /**
018 * New file.
019 */
020 private File _newFile = null;
021
022 /**
023 * Constructs a new exception.
024 * @param oldFile old file to be renamed to newFile
025 * @param newFile new file
026 */
027 public CouldNotRenameException(File oldFile, File newFile) {
028 super("Could not rename file " + oldFile.getPath()+ " to " + newFile.getPath());
029 _oldFile = oldFile;
030 _newFile = newFile;
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 (_oldFile.exists() && !_newFile.exists()) {
039 if (_oldFile.exists() && !(_oldFile.renameTo(_newFile))) {
040 throw new IOException(getMessage());
041 }
042 }
043 else {
044 throw new IOException(getMessage() + "; cannot fix, situation not applicable");
045 }
046 }
047
048
049 }