package gui; import static data.Enums.solar.SolarFilters.*; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import javafx.application.HostServices; import javafx.scene.control.Hyperlink; import org.controlsfx.control.CheckComboBox; import data.Corpus; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.layout.AnchorPane; import util.Util; public class FiltersForSolar { @FXML public AnchorPane solarFiltersTabPane; @FXML public CheckComboBox solarRegijaCCB; @FXML public CheckComboBox solarPredmetCCB; @FXML public CheckComboBox solarRazredCCB; @FXML public CheckComboBox solarLetoCCB; @FXML public CheckComboBox solarSolaCCB; @FXML public CheckComboBox solarVrstaBesedilaCCB; @FXML public Label selectedFiltersLabel; @FXML private Hyperlink helpH; private HashMap> selectedFilters; private Corpus corpus; private StringAnalysisTabNew2 satNew2Controller; private OneWordAnalysisTab oneWordTabController; private CharacterAnalysisTab catController; //private WordFormationTab wfController; private WordLevelTab wlController; private HostServices hostService; @SuppressWarnings("unchecked") public void initialize() { selectedFilters = new HashMap<>(); solarRegijaCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener) c -> { selectedFilters.put(REGIJA, solarRegijaCCB.getCheckModel().getCheckedItems()); updateSolarFilterLabel(); }); solarPredmetCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener) c -> { selectedFilters.put(PREDMET, solarPredmetCCB.getCheckModel().getCheckedItems()); updateSolarFilterLabel(); }); solarRazredCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener) c -> { selectedFilters.put(RAZRED, solarRazredCCB.getCheckModel().getCheckedItems()); updateSolarFilterLabel(); }); solarLetoCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener) c -> { selectedFilters.put(LETO, solarLetoCCB.getCheckModel().getCheckedItems()); updateSolarFilterLabel(); }); solarSolaCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener) c -> { selectedFilters.put(SOLA, solarSolaCCB.getCheckModel().getCheckedItems()); updateSolarFilterLabel(); }); solarVrstaBesedilaCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener) c -> { selectedFilters.put(TIP, solarVrstaBesedilaCCB.getCheckModel().getCheckedItems()); updateSolarFilterLabel(); }); helpH.setOnAction(e -> openHelpWebsite()); } public void initFilters() { solarRegijaCCB.getItems().removeAll(); solarRegijaCCB.getItems().setAll(corpus.getSolarFilters().get(REGIJA)); solarRegijaCCB.getItems().sorted(); solarPredmetCCB.getItems().removeAll(); solarPredmetCCB.getItems().setAll(corpus.getSolarFilters().get(PREDMET)); solarPredmetCCB.getItems().sorted(); solarRazredCCB.getItems().removeAll(); solarRazredCCB.getItems().setAll(corpus.getSolarFilters().get(RAZRED)); solarRazredCCB.getItems().sorted(); solarLetoCCB.getItems().removeAll(); solarLetoCCB.getItems().setAll(corpus.getSolarFilters().get(LETO)); solarLetoCCB.getItems().sorted(); solarSolaCCB.getItems().removeAll(); solarSolaCCB.getItems().setAll(corpus.getSolarFilters().get(SOLA)); solarSolaCCB.getItems().sorted(); solarVrstaBesedilaCCB.getItems().removeAll(); solarVrstaBesedilaCCB.getItems().setAll(corpus.getSolarFilters().get(TIP)); solarVrstaBesedilaCCB.getItems().sorted(); } private void updateSolarFilterLabel() { if (Util.isMapEmpty(selectedFilters)) { setSOlarFIlterLabelText("/"); } else { StringBuilder allFilters = new StringBuilder(); for (Map.Entry> entry : selectedFilters.entrySet()) { ArrayList values = new ArrayList<>(entry.getValue()); if (!values.isEmpty()) { allFilters.append(entry.getKey()) .append(": "); for (int i = 0; i < values.size(); i++) { allFilters.append(values.get(i)); if (i < values.size() - 1) { // so we won't append a comma after the last element allFilters.append(", "); } } allFilters.append("\n\n"); } } setSOlarFIlterLabelText(allFilters.toString()); } HashMap> solarFiltersMap = new HashMap<>(); for (Map.Entry> e : selectedFilters.entrySet()) { HashSet values = new HashSet<>(); values.addAll(e.getValue()); solarFiltersMap.put(e.getKey(), values); } satNew2Controller.setSolarFiltersMap(solarFiltersMap); oneWordTabController.setSolarFiltersMap(solarFiltersMap); catController.setSolarFiltersMap(solarFiltersMap); //wfController.setSolarFiltersMap(solarFiltersMap); wlController.setSolarFiltersMap(solarFiltersMap); } private void openHelpWebsite(){ hostService.showDocument(Messages.HELP_URL); } private void setSOlarFIlterLabelText(String content) { selectedFiltersLabel.setText(content); satNew2Controller.setSelectedFiltersLabel(content); oneWordTabController.setSelectedFiltersLabel(content); catController.setSelectedFiltersLabel(content); //wfController.setSelectedFiltersLabel(content); wlController.setSelectedFiltersLabel(content); } public void setCorpus(Corpus corpus) { this.corpus = corpus; } public void setSatNew2Controller(StringAnalysisTabNew2 satNew2Controller) { this.satNew2Controller = satNew2Controller; } public void setOneWordTabController(OneWordAnalysisTab oneWordTabController) { this.oneWordTabController = oneWordTabController; } public void setCatController(CharacterAnalysisTab catController) { this.catController = catController; } /*public void setWfController(WordFormationTab wfController) { this.wfController = wfController; }*/ public void setWlController(WordLevelTab wlController) { this.wlController = wlController; } public void setHostServices(HostServices hostServices){ this.hostService = hostServices; } }