package org.springframework.roo.project;
import org.apache.commons.lang3.Validate;
import org.springframework.roo.file.monitor.FileMonitorService;
import org.springframework.roo.file.monitor.MonitoringRequest;
import org.springframework.roo.file.undo.UndoManager;
import org.springframework.roo.file.undo.UndoableOperation;
/**
* Allows {@link org.springframework.roo.file.monitor.MonitoringRequest}s to be
* applied as {@link org.springframework.roo.file.undo.UndoableOperation}s.
*
* @author Ben Alex
* @since 1.0
*/
public class UndoableMonitoringRequest implements UndoableOperation {
private final boolean add;
private final FileMonitorService fileMonitorService;
private final MonitoringRequest monitoringRequest;
private boolean resetRequired;
public UndoableMonitoringRequest(final UndoManager undoManager,
final FileMonitorService fileMonitorService, final MonitoringRequest monitoringRequest,
final boolean add) {
Validate.notNull(undoManager, "Undo manager required");
Validate.notNull(fileMonitorService, "File monitor service required");
Validate.notNull(monitoringRequest, "Request required");
this.fileMonitorService = fileMonitorService;
this.monitoringRequest = monitoringRequest;
this.add = add;
if (add) {
resetRequired = fileMonitorService.add(monitoringRequest);
} else {
resetRequired = fileMonitorService.remove(monitoringRequest);
}
undoManager.add(this);
}
public void reset() {}
public boolean undo() {
if (!resetRequired) {
return true;
}
try {
if (add) {
fileMonitorService.remove(monitoringRequest);
} else {
fileMonitorService.add(monitoringRequest);
}
return true;
} catch (final RuntimeException e) {
return false;
}
}
}