From 4d9008fde2d83b97110291d85ef04f3094ce9860 Mon Sep 17 00:00:00 2001 From: Joshua Perry <45966243+jpez-development@users.noreply.github.com> Date: Fri, 3 Feb 2023 18:01:58 +0000 Subject: [PATCH] filters added --- .../java/com/r0r5chach/CompetitorList.java | 1 + .../java/com/r0r5chach/competitor/Rank.java | 2 + .../r0r5chach/competitor/r6/R6Attacker.java | 1 + .../r0r5chach/competitor/r6/R6Defender.java | 1 + .../competitor/valorant/ValorantAgent.java | 1 + .../controllers/FiltersController.java | 82 ++++++++++++++-- .../r0r5chach/controllers/ViewController.java | 96 ++++++++++++++++--- .../com/r0r5chach/pages/filters.fxml | 25 +++-- 8 files changed, 183 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/r0r5chach/CompetitorList.java b/src/main/java/com/r0r5chach/CompetitorList.java index be3dad0..5cbe57b 100644 --- a/src/main/java/com/r0r5chach/CompetitorList.java +++ b/src/main/java/com/r0r5chach/CompetitorList.java @@ -110,6 +110,7 @@ public class CompetitorList { case SILVER -> freqs[1] += 1; case GOLD -> freqs[2] += 1; case PLATINUM -> freqs[3] += 1; + default -> throw new IllegalArgumentException("Unexpected value: " + player.getPlayerLevel()); } } return freqs; diff --git a/src/main/java/com/r0r5chach/competitor/Rank.java b/src/main/java/com/r0r5chach/competitor/Rank.java index 86c83ad..ffc2be7 100644 --- a/src/main/java/com/r0r5chach/competitor/Rank.java +++ b/src/main/java/com/r0r5chach/competitor/Rank.java @@ -10,6 +10,8 @@ public enum Rank { /** * First Level */ + NONE, + BRONZE, /** * Second Level diff --git a/src/main/java/com/r0r5chach/competitor/r6/R6Attacker.java b/src/main/java/com/r0r5chach/competitor/r6/R6Attacker.java index 813d874..53b2a9c 100644 --- a/src/main/java/com/r0r5chach/competitor/r6/R6Attacker.java +++ b/src/main/java/com/r0r5chach/competitor/r6/R6Attacker.java @@ -3,6 +3,7 @@ package com.r0r5chach.competitor.r6; import java.util.Locale; public enum R6Attacker { + NONE, GRIM, SENS, OSA, diff --git a/src/main/java/com/r0r5chach/competitor/r6/R6Defender.java b/src/main/java/com/r0r5chach/competitor/r6/R6Defender.java index 749452d..a50f3f4 100644 --- a/src/main/java/com/r0r5chach/competitor/r6/R6Defender.java +++ b/src/main/java/com/r0r5chach/competitor/r6/R6Defender.java @@ -3,6 +3,7 @@ package com.r0r5chach.competitor.r6; import java.util.Locale; public enum R6Defender { + NONE, SOLIS, AZAMI, THORN, diff --git a/src/main/java/com/r0r5chach/competitor/valorant/ValorantAgent.java b/src/main/java/com/r0r5chach/competitor/valorant/ValorantAgent.java index 2dc3ab4..1bc3e3e 100644 --- a/src/main/java/com/r0r5chach/competitor/valorant/ValorantAgent.java +++ b/src/main/java/com/r0r5chach/competitor/valorant/ValorantAgent.java @@ -7,6 +7,7 @@ import java.util.Locale; * @author r0r5chach */ public enum ValorantAgent { + NONE, BRIMSTONE, VIPER, OMEN, diff --git a/src/main/java/com/r0r5chach/controllers/FiltersController.java b/src/main/java/com/r0r5chach/controllers/FiltersController.java index 3ec4b15..db5e603 100644 --- a/src/main/java/com/r0r5chach/controllers/FiltersController.java +++ b/src/main/java/com/r0r5chach/controllers/FiltersController.java @@ -1,14 +1,24 @@ package com.r0r5chach.controllers; +import java.net.URL; +import java.util.Arrays; +import java.util.ResourceBundle; + import com.r0r5chach.competitor.Rank; +import com.r0r5chach.competitor.r6.R6Attacker; +import com.r0r5chach.competitor.r6.R6Defender; import com.r0r5chach.competitor.valorant.ValorantAgent; +import javafx.collections.FXCollections; import javafx.fxml.FXML; +import javafx.fxml.Initializable; import javafx.scene.control.ChoiceBox; +import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import javafx.scene.control.ToggleGroup; +import javafx.scene.control.RadioButton; -public class FiltersController { +public class FiltersController implements Initializable { @FXML private TextField numberFilter; @@ -16,14 +26,74 @@ public class FiltersController { private TextField nameFilter; @FXML - ChoiceBox levelFilter; - - @FXML - private TextField scoreFilter; + private ChoiceBox levelFilter; @FXML private ToggleGroup typeFilter; @FXML - ChoiceBox agentFilter; + private ChoiceBox agentFilter; + + @FXML + private ChoiceBox attackerFilter; + + @FXML + private ChoiceBox defenderFilter; + + @FXML + private TextArea filterBox; + + private static String[] filters; + + @Override + public void initialize(URL url, ResourceBundle rb) { + attackerFilter.setItems(FXCollections.observableList(Arrays.asList(R6Attacker.values()))); + attackerFilter.setValue(R6Attacker.NONE); + defenderFilter.setItems(FXCollections.observableList(Arrays.asList(R6Defender.values()))); + defenderFilter.setValue(R6Defender.NONE); + agentFilter.setItems(FXCollections.observableList(Arrays.asList(ValorantAgent.values()))); + agentFilter.setValue(ValorantAgent.NONE); + levelFilter.setItems(FXCollections.observableList(Arrays.asList(Rank.values()))); + levelFilter.setValue(Rank.NONE); + } + + @FXML + private void setFilters() { + String[] output = new String[7]; + for(int i= 0;i < output.length;i++ ) { + String filter = null; + switch(i) { + case 0 -> filter = numberFilter.getText(); + case 1 -> filter = nameFilter.getText(); + case 2 -> filter = levelFilter.getSelectionModel().getSelectedItem().toString(); + case 3 -> filter = ((RadioButton)typeFilter.getSelectedToggle()).getText(); + case 4 -> filter = agentFilter.getSelectionModel().getSelectedItem().toString(); + case 5 -> filter = attackerFilter.getSelectionModel().getSelectedItem().toString(); + case 6 -> filter = defenderFilter.getSelectionModel().getSelectedItem().toString(); + default -> filter = ""; + } + + if (isNull(filter) || filter.equals("NONE")) { + output[i] = ""; + } + else { + output[i] = filter; + } + } + + filters = output; + } + + public static String[] getFilters() { + return filters; + } + + private boolean isNull(String string) { + if (string == null) { + return true; + } + else { + return false; + } + } } diff --git a/src/main/java/com/r0r5chach/controllers/ViewController.java b/src/main/java/com/r0r5chach/controllers/ViewController.java index be656ba..acdd237 100644 --- a/src/main/java/com/r0r5chach/controllers/ViewController.java +++ b/src/main/java/com/r0r5chach/controllers/ViewController.java @@ -4,7 +4,9 @@ import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.ResourceBundle; +import java.util.function.Predicate; +import static com.r0r5chach.controllers.FiltersController.getFilters; import com.r0r5chach.CompetitorRow; import com.r0r5chach.Manager; import com.r0r5chach.competitor.Competitor; @@ -15,11 +17,14 @@ import com.r0r5chach.competitor.valorant.ValorantPlayer; import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import javafx.collections.transformation.FilteredList; +import javafx.collections.transformation.SortedList; import javafx.fxml.FXML; import javafx.scene.Parent; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; +import javafx.scene.control.TextArea; import javafx.scene.control.cell.PropertyValueFactory; import javafx.stage.Popup; @@ -27,8 +32,6 @@ public class ViewController extends Controller { @FXML private TableView competitorTable; - @FXML Button filterButton; - private TableColumn playerNumCol; private TableColumn playerNameCol; private TableColumn playerLevelCol; @@ -38,23 +41,75 @@ public class ViewController extends Controller { private TableColumn favoriteAttackerCol; private TableColumn favoriteDefenderCol; - private Popup filters; + @FXML + private Button filterButton; + private Popup filterPopup; + private String[] filters; + + @FXML + private TextArea filterBox; @Override public void initialize(URL ul, ResourceBundle rb) { Platform.runLater(() -> { + filters = new String[]{"", "", "", "", "", "", ""}; + filterPopup = new Popup(); + filter(); loadCompetitors(); loadView(); }); } - public void generateTable() { + private void generateTable() { initColumns(); setColumnCellValues(); addColumns(); } - public ObservableList loadTable(ArrayList list) { + private Predicate filter() { + Predicate test = competitor -> { + boolean flag = true; + + if (!Integer.toString(competitor.getPlayerNumber()).toLowerCase().contains(filters[0].toLowerCase())) { + flag = false; + } + + if (!competitor.getPlayerName().toLowerCase().contains(filters[1].toLowerCase())) { + flag = false; + } + + if (!competitor.getPlayerLevel().toString().toLowerCase().contains(filters[2].toLowerCase())) { + flag = false; + } + + if (filters[3].equals("R6") && !competitor.getFavoriteAttacker().toString().toLowerCase().equals("N/A")) { + flag = false; + } + + if (filters[3].equals("Valorant") && !competitor.getFavoriteAgent().toString().toLowerCase().equals("N/A")) { + flag = false; + } + + if (!competitor.getFavoriteAgent().toString().toLowerCase().contains(filters[4])) { + flag = false; + } + + if (!competitor.getFavoriteAttacker().toString().toLowerCase().contains(filters[5])) { + flag = false; + } + + if (!competitor.getFavoriteDefender().toString().toLowerCase().contains(filters[6])) { + flag = false; + } + + + return flag; + + }; + return test; + } + + private ObservableList loadTable(ArrayList list) { ArrayList outputList = new ArrayList<>(); for(Competitor player: list) { if (player instanceof ValorantPlayer) { @@ -68,8 +123,17 @@ public class ViewController extends Controller { } private void loadView() { + ObservableList table = loadTable(competitors.getCompetitors()); generateTable(); - competitorTable.setItems(loadTable(competitors.getCompetitors())); + if (filterCheck()) { + FilteredList data = new FilteredList<>(table, filter()); + SortedList sortedData = new SortedList<>(data); + sortedData.comparatorProperty().bind(competitorTable.comparatorProperty()); + competitorTable.setItems(sortedData); + } + else { + competitorTable.setItems(table); + } } private void initColumns() { @@ -114,16 +178,26 @@ public class ViewController extends Controller { } private void filterDialog() throws IOException { - filters = new Popup(); + filterPopup = new Popup(); Parent root = Manager.loadFXML("pages/filters"); - filters.getContent().add(root); - filters.show(Manager.stage); + filterPopup.getContent().add(root); + filterPopup.show(Manager.stage); filterButton.setText("Save"); } private void saveFilters() { - filters.hide(); + filterPopup.hide(); filterButton.setText("Filters"); - //TODO: filter implementation + filters = getFilters(); + loadView(); + } + + private boolean filterCheck() { + for(String filter: filters) { + if (!filter.equals("")) { + return true; + } + } + return false; } } \ No newline at end of file diff --git a/src/main/resources/com/r0r5chach/pages/filters.fxml b/src/main/resources/com/r0r5chach/pages/filters.fxml index 2fe906b..84d9db1 100644 --- a/src/main/resources/com/r0r5chach/pages/filters.fxml +++ b/src/main/resources/com/r0r5chach/pages/filters.fxml @@ -3,6 +3,7 @@ + @@ -69,35 +70,41 @@ - + - + - - - - - + + + + + - + - + +