From 0525f8956023099cade6a5fd30921b76bc160fed Mon Sep 17 00:00:00 2001
From: Tom Zhao <tom.zhao@dsv.su.se>
Date: Tue, 17 Dec 2024 09:45:14 +0100
Subject: [PATCH] 3470: Add logic to retrieve actual message counts

---
 .../dsv/scipro/forum/ProjectForumService.java |  2 ++
 .../scipro/forum/ProjectForumServiceImpl.java |  1 +
 .../forum/panels/NumberOfMessagesPanel.java   | 22 +++++++++++++++++--
 .../panels/SupervisorMyProjectsPanel.java     | 22 ++++++++++++-------
 4 files changed, 37 insertions(+), 10 deletions(-)

diff --git a/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumService.java b/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumService.java
index d3b1c35773..018e4736fa 100644
--- a/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumService.java
+++ b/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumService.java
@@ -26,4 +26,6 @@ public interface ProjectForumService {
     List<Pair<ProjectThread, ForumPost>> latestPost(Project a, int amount);
 
     boolean hasUnreadThreads(Project project, User user);
+
+    int getUnreadThreadsCount(Project project, User user);
 }
diff --git a/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumServiceImpl.java
index 878d2c2050..2743d0cc3d 100644
--- a/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumServiceImpl.java
@@ -106,6 +106,7 @@ public class ProjectForumServiceImpl implements ProjectForumService {
         return false;
     }
 
+    @Override
     public int getUnreadThreadsCount(Project project, User user) {
         List<ProjectThread> threads = getThreads(project);
         int count = 0;
diff --git a/view/src/main/java/se/su/dsv/scipro/forum/panels/NumberOfMessagesPanel.java b/view/src/main/java/se/su/dsv/scipro/forum/panels/NumberOfMessagesPanel.java
index b7a5900689..932b62f302 100644
--- a/view/src/main/java/se/su/dsv/scipro/forum/panels/NumberOfMessagesPanel.java
+++ b/view/src/main/java/se/su/dsv/scipro/forum/panels/NumberOfMessagesPanel.java
@@ -1,13 +1,31 @@
 package se.su.dsv.scipro.forum.panels;
 
+import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
 
-public class NumberOfMessagesPanel extends Panel {
+public abstract class NumberOfMessagesPanel extends Panel {
+
+    private Model<String> model = Model.of("");
 
     public NumberOfMessagesPanel(final String id) {
         super(id);
 
-        add(new Label("msgCount", " (0)"));
+        add(new Label("msgCount", model));
+
     }
+
+    @Override
+    protected void onComponentTag(ComponentTag tag) {
+        super.onComponentTag(tag);
+
+        int count = getMessageCount();
+
+        if (count > 0) {
+            model.setObject("(" + count + ")");
+        }
+    }
+
+    public abstract int getMessageCount();
 }
diff --git a/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.java b/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.java
index 9e1860c856..53ff74a577 100755
--- a/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.java
+++ b/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.java
@@ -214,27 +214,27 @@ public class SupervisorMyProjectsPanel extends Panel {
                             SupervisorThreadedForumPage.getPageParameters(projectModel.getObject()));
                 }
             });
-
              */
 
-
-            //WebMarkupContainer container = new WebMarkupContainer(id);
-            //container.setOutputMarkupId(true);
+            // WebMarkupContainer container = new WebMarkupContainer(id);
+            // container.setOutputMarkupId(true);
 /*
             container
  */
             //container.add(new NumberOfMessagesPanel("counter"));
 
             //item.add(container);
-            // todo: reconsider name of this id, needs to be improved.
 
+            //boolean hasUnreadThreads = projectForumService.hasUnreadThreads(projectModel.getObject(), SciProSession.get().getUser());
+            int msgCount = projectForumService.getUnreadThreadsCount(projectModel.getObject(), SciProSession.get().getUser());
+
+            // todo: reconsider name of this id, needs to be improved.
             Fragment fragment = new Fragment(id, "parentMarkupId", SupervisorMyProjectsPanel.this);
 
             fragment.add(new AbstractReadStatePanel("flag", AbstractReadStatePanel.ShowReadStateTooltip.ENABLED) {
                 @Override
                 protected boolean isRead() {
-                    return !projectForumService.hasUnreadThreads(projectModel.getObject(),
-                            SciProSession.get().getUser());
+                    return msgCount == 0;
                 }
 
                 @Override
@@ -243,7 +243,13 @@ public class SupervisorMyProjectsPanel extends Panel {
                             SupervisorThreadedForumPage.getPageParameters(projectModel.getObject()));
                 }
             });
-            fragment.add(new NumberOfMessagesPanel("counter"));
+
+            fragment.add(new NumberOfMessagesPanel("counter") {
+                @Override
+                public int getMessageCount() {
+                    return msgCount;
+                }
+            });
 
             item.add(fragment);
         }