View Javadoc

1   package org.springframework.roo.file.undo;
2   
3   import java.io.File;
4   import java.io.IOException;
5   import java.util.logging.Logger;
6   
7   import org.springframework.roo.support.logging.HandlerUtils;
8   import org.springframework.roo.support.util.Assert;
9   import org.springframework.roo.support.util.FileCopyUtils;
10  
11  /**
12   * {@link UndoableOperation} to delete a file.
13   * 
14   * @author Ben Alex
15   * @since 1.0
16   *
17   */
18  public class DeleteFile implements UndoableOperation {
19  	private static final Logger logger = HandlerUtils.getLogger(DeleteFile.class);
20  
21  	private FilenameResolver filenameResolver;
22  	private File actual;
23  	private File backup;
24  	
25  	public DeleteFile(UndoManager undoManager, FilenameResolver filenameResolver, File actual) {
26  		Assert.notNull(undoManager, "Undo manager required");
27  		Assert.notNull(actual, "File required");
28  		Assert.notNull(filenameResolver, "Filename resolver required");
29  		Assert.isTrue(actual.exists(), "File '" + actual + "' must exist");
30  		Assert.isTrue(actual.isFile(), "Path '" + actual + "' must be a file (not a directory)");
31  		this.filenameResolver = filenameResolver;
32  		
33  		try {
34  			backup = File.createTempFile("DeleteFile", "tmp");
35  			FileCopyUtils.copy(actual, backup);
36  		} catch (IOException ioe) {
37  			throw new IllegalStateException("Unable to make a backup of file '" + this.actual + "'", ioe);
38  		}
39  		this.actual = actual;
40  		this.actual.delete();
41  		undoManager.add(this);
42  		logger.fine("Deleted " + filenameResolver.getMeaningfulName(actual));
43  	}
44  	
45  	public void reset() {}
46  
47  	public boolean undo() {
48  		try {
49  			FileCopyUtils.copy(backup, actual);
50  			logger.fine("Undo delete " + filenameResolver.getMeaningfulName(actual));
51  			return true;
52  		} catch (IOException ioe) {
53  			logger.fine("Undo failed " + filenameResolver.getMeaningfulName(actual));
54  			return false;
55  		}
56  	}
57  	
58  }