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
13
14
15
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 }