diff --git a/gui/src/main/java/com/devonfw/ide/gui/CommandletController.java b/gui/src/main/java/com/devonfw/ide/gui/CommandletController.java new file mode 100644 index 0000000000..84566bc25c --- /dev/null +++ b/gui/src/main/java/com/devonfw/ide/gui/CommandletController.java @@ -0,0 +1,63 @@ +package com.devonfw.ide.gui; + +import java.util.List; + +import javafx.application.Platform; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.TextField; + +import com.devonfw.tools.ide.commandlet.Commandlet; +import com.devonfw.tools.ide.context.IdeContext; +import com.devonfw.tools.ide.property.Property; + +public class CommandletController { + + private Commandlet selectedCommandlet; + private final IdeContext context; + + @FXML + private ComboBox commandletSelector; + @FXML + private TextField parameterField; + @FXML + private Button runButton; + + public CommandletController(IdeContext context) { + this.context = context; + } + + @FXML + private void initialize() { + Platform.runLater(this::populateCommandletList); + } + + private void populateCommandletList() { + commandletSelector.getItems().clear(); + commandletSelector.getItems().addAll(context.getCommandletManager().getCommandlets().stream() + .map(Commandlet::getName) + .toList()); + } + + @FXML + private void runCommandlet() { + String name = commandletSelector.getValue(); + if (name == null) { + return; + } + + Commandlet commandlet = context.getCommandletManager().getCommandlet(name); + + String input = parameterField.getText(); + String[] tokens = input.split("\\s+"); + + List> values = commandlet.getValues(); + + for (int i = 0; i < tokens.length && (i + 1) < values.size(); i++) { + values.get(i + 1).setValueAsString(tokens[i], context); + } + + commandlet.run(); + } +} diff --git a/gui/src/main/java/com/devonfw/ide/gui/MainController.java b/gui/src/main/java/com/devonfw/ide/gui/MainController.java index 11e0f43993..9a9f18c9a1 100644 --- a/gui/src/main/java/com/devonfw/ide/gui/MainController.java +++ b/gui/src/main/java/com/devonfw/ide/gui/MainController.java @@ -1,14 +1,20 @@ package com.devonfw.ide.gui; import java.io.FileNotFoundException; +import java.io.IOException; import java.nio.file.NotDirectoryException; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; + import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; +import javafx.stage.Stage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,6 +55,9 @@ public class MainController { @FXML private Button vsCodeOpen; + @FXML + private Button commandletOpen; + private final String directoryPath; private final Map languageMap; @@ -185,6 +194,8 @@ private void setWorkspaceComboBox() { eclipseOpen.setDisable(false); intellijOpen.setDisable(false); vsCodeOpen.setDisable(false); + vsCodeOpen.setDisable(false); + commandletOpen.setDisable(false); }); } @@ -206,4 +217,21 @@ private void updateContext(String selectedProjectName, String selectedWorkspaceN errorDialog.showAndWait(); } } + + @FXML + private void openCommandlet() { + try { + FXMLLoader loader = new FXMLLoader(getClass().getResource("commandlet-view.fxml")); + loader.setResources(this.nlsService.getResourceBundle()); + loader.setController(new CommandletController(IdeGuiStateManager.getInstance().getCurrentContext())); + Parent root = loader.load(); + + Stage stage = (Stage) selectedProject.getScene().getWindow(); + stage.setScene(new Scene(root)); + } catch (IOException e) { + LOG.error("Failed to load commandlet view", e); + new IdeDialog(IdeDialog.AlertType.ERROR, e.getMessage()).showAndWait(); + } + } + } diff --git a/gui/src/main/resources/com/devonfw/ide/gui/commandlet-view.fxml b/gui/src/main/resources/com/devonfw/ide/gui/commandlet-view.fxml new file mode 100644 index 0000000000..8e6df8c660 --- /dev/null +++ b/gui/src/main/resources/com/devonfw/ide/gui/commandlet-view.fxml @@ -0,0 +1,53 @@ + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
diff --git a/gui/src/main/resources/com/devonfw/ide/gui/main-view.fxml b/gui/src/main/resources/com/devonfw/ide/gui/main-view.fxml index 348a398d29..2382cad2f2 100644 --- a/gui/src/main/resources/com/devonfw/ide/gui/main-view.fxml +++ b/gui/src/main/resources/com/devonfw/ide/gui/main-view.fxml @@ -166,6 +166,7 @@ +