package ru.testing.client.controllers; import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.scene.input.KeyCode; import ru.testing.client.MainApp; import ru.testing.client.common.HttpTypes; import ru.testing.client.common.objects.Header; import ru.testing.client.common.objects.HttpParameter; import ru.testing.client.elements.Dialogs; import ru.testing.client.elements.http.settings.HeadersCellFactory; import ru.testing.client.elements.http.settings.HttpParametersCellFactory; /** * Http headers controller */ public class HttpSettingsController { private final ObservableList<Header> headerObservableList = FXCollections.observableArrayList(); private final ObservableList<HttpParameter> httpParameterObservableList = FXCollections.observableArrayList(); @FXML private Accordion accordion; @FXML private TitledPane headersPane; @FXML private TitledPane parametersPane; @FXML private TextField headerName; @FXML private TextField headerValue; @FXML private TextField parameterName; @FXML private TextField parameterValue; @FXML private ListView<Header> hListView; @FXML private ListView<HttpParameter> pListView; @FXML private Label lbNoHeaders; @FXML private Label lbNoParameters; @FXML private void initialize() { if (MainApp.getMainController().getHttpType() == HttpTypes.WEBSOCKET) { accordion.setExpandedPane(headersPane); headersPane.setCollapsible(false); parametersPane.setVisible(false); parametersPane.setManaged(false); } // Prepare headers list hListView.setItems(headerObservableList); hListView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); hListView.setCellFactory(listView -> new HeadersCellFactory(headerObservableList)); hListView.getItems().addListener((ListChangeListener<Header>) change -> { if (change.next()) { int size = headerObservableList.size(); if (size > 0) { setListViewVisible(hListView, lbNoHeaders, true); } else { setListViewVisible(hListView, lbNoHeaders, false); lbNoHeaders.requestFocus(); } } }); // Prepare parameters list pListView.setItems(httpParameterObservableList); pListView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); pListView.setCellFactory(listView -> new HttpParametersCellFactory(httpParameterObservableList)); pListView.getItems().addListener((ListChangeListener<HttpParameter>) change -> { if (change.next()) { int size = httpParameterObservableList.size(); if (size > 0) { setListViewVisible(pListView, lbNoParameters, true); } else { setListViewVisible(pListView, lbNoParameters, false); lbNoParameters.requestFocus(); } } }); // Actions on headers text fields headerName.setOnKeyPressed(key -> { if (key.getCode() == KeyCode.ENTER) { addHeader(); } }); headerValue.setOnKeyPressed(key -> { if (key.getCode() == KeyCode.ENTER) { addHeader(); } }); // Actions on parameters text fields parameterName.setOnKeyPressed(key -> { if (key.getCode() == KeyCode.ENTER) { addParameter(); } }); parameterValue.setOnKeyPressed(key -> { if (key.getCode() == KeyCode.ENTER) { addParameter(); } }); } /** * Add header data to headers list */ @FXML private void addHeader() { final String name = headerName.getText(); final String value = headerValue.getText(); if (!name.isEmpty()) { if (!value.isEmpty()) { if (headerObservableList.size() < 9) { Platform.runLater(() -> { headerObservableList.add(new Header(name, value)); headerName.clear(); headerValue.clear(); }); headerName.requestFocus(); } else { new Dialogs().getWarningDialog("Headers max size is 9"); } } else { headerValue.requestFocus(); } } else { headerName.requestFocus(); } } /** * Add header data to headers list */ @FXML private void addParameter() { final String name = parameterName.getText(); final String value = parameterValue.getText(); if (!name.isEmpty()) { if (!value.isEmpty()) { Platform.runLater(() -> { httpParameterObservableList.add(new HttpParameter(name, value)); parameterName.clear(); parameterValue.clear(); }); parameterName.requestFocus(); } else { parameterValue.requestFocus(); } } else { parameterName.requestFocus(); } } /** * Get headers list * * @return ObservableList<Header> */ ObservableList<Header> getHeadersList() { return headerObservableList; } /** * Get http parameters list * * @return ObservableList<HttpParameter> */ ObservableList<HttpParameter> getHttpParametersList() { return httpParameterObservableList; } /** * Show or hide list view * * @param listView ListView * @param visible boolean visible status */ private void setListViewVisible(ListView listView, Label label, boolean visible) { listView.setVisible(visible); listView.setManaged(visible); label.setVisible(!visible); label.setManaged(!visible); } /** * Get header list view * * @return ListView<Header> */ public ListView<Header> getHeadersListView() { return hListView; } /** * Get http parameters list view * * @return ListView<HttpParameter> */ public ListView<HttpParameter> getParametersListView() { return pListView; } /** * Get parameters titled pane * * @return TitledPane */ TitledPane getParametersPane() { return parametersPane; } /** * Get headers titled pane * * @return TitledPane */ TitledPane getHeadersPane() { return headersPane; } /** * Get accordion * * @return Accordion */ Accordion getAccordion() { return accordion; } }