package org.peerbox.delete;
import java.nio.file.Path;
import javafx.application.Platform;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import org.hive2hive.core.exceptions.NoPeerConnectionException;
import org.hive2hive.core.file.FileUtil;
import org.peerbox.ResultStatus;
import org.peerbox.app.AppContext;
import org.peerbox.app.ClientContext;
import org.peerbox.app.config.UserConfig;
import org.peerbox.app.manager.node.INodeManager;
import org.peerbox.app.manager.user.IUserManager;
import org.peerbox.utils.DialogUtils;
import org.peerbox.watchservice.IFileEventManager;
import com.google.inject.Inject;
public class FileDeleteHandler implements IFileDeleteHandler {
private Path fileToDelete;
private final AppContext appContext;
private ClientContext clientContext;
@Inject
public FileDeleteHandler(AppContext appContext) {
this.appContext = appContext;
}
@Override
public void deleteFile(final Path fileToDelete) {
this.fileToDelete = fileToDelete;
clientContext = appContext.getCurrentClientContext();
ResultStatus res = checkPreconditions();
if (res.isOk()) {
IFileEventManager fileEventManager = clientContext.getFileEventManager();
fileEventManager.onLocalFileHardDelete(fileToDelete);
} else {
showError(res);
}
}
private void showError(ResultStatus res) {
showError(res.getErrorMessage());
}
private void showError(final String message) {
Runnable dialog = new Runnable() {
@Override
public void run() {
Alert dlg = DialogUtils.createAlert(AlertType.ERROR);
dlg.setTitle("Error - Delete.");
dlg.setHeaderText("Could not delete file(s).");
dlg.setContentText(message);
dlg.showAndWait();
}
};
if (Platform.isFxApplicationThread()) {
dialog.run();
} else {
Platform.runLater(dialog);
}
}
private ResultStatus checkPreconditions() {
INodeManager nodeManager = null;
IUserManager userManager = null;
UserConfig userConfig = null;
if (clientContext == null) {
// if there is no client context, the user did not connect / log in yet
return ResultStatus.error("There is no client connected and logged in.");
}
nodeManager = clientContext.getNodeManager();
if (!nodeManager.isConnected()) {
return ResultStatus.error("There is no connection to the network.");
}
userManager = clientContext.getUserManager();
try {
if (!userManager.isLoggedIn()) {
return ResultStatus.error("The user is not logged in. Please login.");
}
} catch (NoPeerConnectionException e) {
return ResultStatus.error("There is no connection to the network.");
}
userConfig = clientContext.getUserConfig();
if (!FileUtil.isInH2HDirectory(fileToDelete.toFile(), userConfig.getRootPath().toFile())) {
return ResultStatus.error("The file is not in the root directory.");
}
return ResultStatus.ok();
}
}