package org.jmeld.util.file.cmd; import org.jmeld.util.file.*; import org.jmeld.util.node.*; import javax.swing.undo.*; import java.io.*; public class RemoveFileCmd extends AbstractCmd { private JMDiffNode diffNode; private FileNode fileNode; public RemoveFileCmd(JMDiffNode diffNode, FileNode fileNode) { this.diffNode = diffNode; this.fileNode = fileNode; } public void createCommands() throws Exception { addCommand(new RemoveCommand(fileNode.getFile())); addFinallyCommand(new ResetCommand(fileNode)); } class RemoveCommand extends Command { private File file; private File originalFile; RemoveCommand(File file) { this.file = file; } public void execute() throws Exception { if (file.exists()) { originalFile = FileUtil.createTempFile("jmeld", "backup"); if (debug) { System.out.println("copy : " + file + " -> " + originalFile); } FileUtil.copy(file, originalFile); } if (debug) { System.out.println("delete : " + file); } file.delete(); } public void undo() { try { if (originalFile != null) { if (debug) { System.out.println("copy : " + originalFile + " -> " + file); } FileUtil.copy(originalFile, file); } } catch (Exception ex) { throw new CannotUndoException(); } } @Override public void discard() { if (originalFile != null) { if (debug) { System.out.println("delete : " + originalFile); } originalFile.delete(); } } } class ResetCommand extends Command { private FileNode fileNode; ResetCommand(FileNode fileNode) { this.fileNode = fileNode; } public void execute() throws Exception { reset(); } public void undo() { reset(); } @Override public void discard() { reset(); } private void reset() { fileNode.resetContent(); diffNode.compareContents(); } } }