diff --git a/commander/src/main/java/hse/java/commander/MainController.java b/commander/src/main/java/hse/java/commander/MainController.java index 5de3b66d..12304ddb 100644 --- a/commander/src/main/java/hse/java/commander/MainController.java +++ b/commander/src/main/java/hse/java/commander/MainController.java @@ -1,45 +1,158 @@ package hse.java.commander; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.ListView; -import java.nio.file.Path; - public class MainController { + @FXML public ListView left; + + @FXML public ListView right; + + @FXML public Button copy; + + @FXML public Button move; - @FXML - public ListView left; + @FXML public Button delete; - @FXML - public ListView right; + private Path leftDir; + private Path rightDir; + private ListView activePanel; - @FXML - public Button move; + public void setInitialDirs(Path leftStart, Path rightStart) { + this.leftDir = leftStart; + this.rightDir = rightStart; + updatePanel(left, leftDir); + updatePanel(right, rightDir); + } - private Path leftDir; - private Path rightDir; + public void initialize() { + left.setOnMouseClicked(event -> { + activePanel = left; + if (event.getClickCount() == 2) { + navigatePanel(left, leftDir, true); + } + }); - // for testing - public void setInitialDirs(Path leftStart, Path rightStart) { - this.leftDir = leftStart; - this.rightDir = rightStart; + right.setOnMouseClicked(event -> { + activePanel = right; + if (event.getClickCount() == 2) { + navigatePanel(right, rightDir, false); + } + }); + + copy.setOnAction(event -> copyFile()); + move.setOnAction(event -> moveFile()); + delete.setOnAction(event -> deleteFile()); + } + + private void updatePanel(ListView panel, Path dir) { + panel.getItems().clear(); + panel.getItems().add("..."); + File[] files = dir.toFile().listFiles(); + if (files != null) { + for (File file : files) { + panel.getItems().add(file.getName()); + } + } + } + + private void navigatePanel(ListView panel, Path currentDir, + boolean isLeft) { + String selected = panel.getSelectionModel().getSelectedItem(); + if (selected == null) + return; + + if (selected.equals("...")) { + Path parent = currentDir.getParent(); + if (parent != null) { + if (isLeft) { + leftDir = parent; + updatePanel(left, leftDir); + } else { + rightDir = parent; + updatePanel(right, rightDir); + } + } + } else { + Path newPath = currentDir.resolve(selected); + if (Files.isDirectory(newPath)) { + if (isLeft) { + leftDir = newPath; + updatePanel(left, leftDir); + } else { + rightDir = newPath; + updatePanel(right, rightDir); + } + } } + } + + private void copyFile() { + if (activePanel == null) + return; + String selected = activePanel.getSelectionModel().getSelectedItem(); + if (selected == null || selected.equals("...")) + return; + + Path sourceDir = (activePanel == left) ? leftDir : rightDir; + Path targetDir = (activePanel == left) ? rightDir : leftDir; + ListView targetPanel = (activePanel == left) ? right : left; + + Path source = sourceDir.resolve(selected); + Path target = targetDir.resolve(selected); + + try { + Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING); + updatePanel(targetPanel, targetDir); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void moveFile() { + if (activePanel == null) + return; + String selected = activePanel.getSelectionModel().getSelectedItem(); + if (selected == null || selected.equals("...")) + return; + + Path sourceDir = (activePanel == left) ? leftDir : rightDir; + Path targetDir = (activePanel == left) ? rightDir : leftDir; + ListView targetPanel = (activePanel == left) ? right : left; + + Path source = sourceDir.resolve(selected); + Path target = targetDir.resolve(selected); + + try { + Files.move(source, target, StandardCopyOption.REPLACE_EXISTING); + updatePanel(activePanel, sourceDir); + updatePanel(targetPanel, targetDir); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void deleteFile() { + if (activePanel == null) + return; + String selected = activePanel.getSelectionModel().getSelectedItem(); + if (selected == null || selected.equals("...")) + return; + + Path currentDir = (activePanel == left) ? leftDir : rightDir; + Path toDelete = currentDir.resolve(selected); - public void initialize() { - move.setOnMouseClicked(event -> { - - }); - System.out.println(System.getProperty("user.home")); - left.getItems().add("Kek"); - - left.setOnMouseClicked(event -> { - if (event.getClickCount() == 2) { - int index = left.getSelectionModel().getSelectedIndex(); - if (index >= 0) { - left.getItems().set(index, "clicked"); - } - } - }); + try { + Files.deleteIfExists(toDelete); + updatePanel(activePanel, currentDir); + } catch (IOException e) { + e.printStackTrace(); } + } }