From 23b8fec372b5f1ae3084f2df4f71eabf3ddbaece Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20Hrdli=C4=8Dka?= <xhrdlic3@fi.muni.cz>
Date: Wed, 26 Jan 2022 12:51:24 +0100
Subject: [PATCH] Activated the Filter Task ComboBox toolbar item

---
 .../fi/pv168/project/model/db/DbConnectedModel.java | 11 +++++++++++
 .../pv168/project/ui/main/toolbar/TasksToolBar.java |  4 ++++
 .../fi/pv168/project/ui/main/view/TaskView.java     | 13 +++++++++++++
 3 files changed, 28 insertions(+)

diff --git a/src/main/java/cz/muni/fi/pv168/project/model/db/DbConnectedModel.java b/src/main/java/cz/muni/fi/pv168/project/model/db/DbConnectedModel.java
index 8616f280..0c9a0d17 100644
--- a/src/main/java/cz/muni/fi/pv168/project/model/db/DbConnectedModel.java
+++ b/src/main/java/cz/muni/fi/pv168/project/model/db/DbConnectedModel.java
@@ -6,6 +6,7 @@ import cz.muni.fi.pv168.project.model.EditableModel;
 import cz.muni.fi.pv168.project.ui.dialog.error.ErrorDialog;
 
 import javax.swing.DefaultListModel;
+import java.util.function.Predicate;
 
 public class DbConnectedModel<T extends Identifiable> extends DefaultListModel<T> implements EditableModel<T> {
 
@@ -75,6 +76,16 @@ public class DbConnectedModel<T extends Identifiable> extends DefaultListModel<T
         }
     }
 
+    public void updateFiltered(Predicate<T> predicate) {
+        clear();
+
+        for (T element : dataAccessObject.getAll()) {
+            if (predicate.test(element)) {
+                super.addElement(element);
+            }
+        }
+    }
+
     @Override
     public void delete(T entity) {
         dataAccessObject.delete(entity);
diff --git a/src/main/java/cz/muni/fi/pv168/project/ui/main/toolbar/TasksToolBar.java b/src/main/java/cz/muni/fi/pv168/project/ui/main/toolbar/TasksToolBar.java
index 7e5fc167..4eeb341b 100644
--- a/src/main/java/cz/muni/fi/pv168/project/ui/main/toolbar/TasksToolBar.java
+++ b/src/main/java/cz/muni/fi/pv168/project/ui/main/toolbar/TasksToolBar.java
@@ -44,6 +44,10 @@ public class TasksToolBar {
         taskTypes.addActionListener(l);
     }
 
+    public TaskStatus getSelectedStatus() {
+        return (TaskStatus) taskTypes.getSelectedItem();
+    }
+
     public JToolBar getToolBar() {
         return toolBar;
     }
diff --git a/src/main/java/cz/muni/fi/pv168/project/ui/main/view/TaskView.java b/src/main/java/cz/muni/fi/pv168/project/ui/main/view/TaskView.java
index af622073..49736f36 100644
--- a/src/main/java/cz/muni/fi/pv168/project/ui/main/view/TaskView.java
+++ b/src/main/java/cz/muni/fi/pv168/project/ui/main/view/TaskView.java
@@ -80,12 +80,25 @@ public class TaskView implements Tab<Task> {
             }
         });
 
+        handleToolBar();
+
         splitPane.setLeftComponent(new JScrollPane(headerList));
         splitPane.setRightComponent(taskPanel);
         splitPane.setDividerLocation(0.33);
         splitPane.setBorder(new EtchedBorder());
     }
 
+    private void handleToolBar() {
+        toolBar.addStatusActionListener(actionEvent -> {
+            var selectedStatus = toolBar.getSelectedStatus();
+            if (selectedStatus.equals(TaskStatus.ALL)) {
+                taskModel.updateAll();
+            } else {
+                taskModel.updateFiltered(task -> task.getTaskStatus().equals(selectedStatus));
+            }
+        });
+    }
+
     private void update() {
         var task = headerList.getSelectedValue();
 
-- 
GitLab