From 379b5c34fcfefd7c832554af602c66e60cb1df02 Mon Sep 17 00:00:00 2001
From: Tom Zhao <tom.zhao@dsv.su.se>
Date: Wed, 18 Dec 2024 15:15:22 +0100
Subject: [PATCH] 3470: Use Wicket behavior (less intrusive) to modify
 AbstractReadStatePanel

---
 .../forum/panels/AbstractReadStatePanel.java  | 16 ------
 .../AbstractReadStatePanel.utf8.properties    |  1 -
 .../panels/SupervisorMyProjectsPanel.html     |  5 +-
 .../panels/SupervisorMyProjectsPanel.java     | 49 +++++++------------
 .../SupervisorMyProjectsPanel.utf8.properties |  2 +
 5 files changed, 21 insertions(+), 52 deletions(-)
 delete mode 100644 view/src/main/java/se/su/dsv/scipro/forum/panels/AbstractReadStatePanel.utf8.properties

diff --git a/view/src/main/java/se/su/dsv/scipro/forum/panels/AbstractReadStatePanel.java b/view/src/main/java/se/su/dsv/scipro/forum/panels/AbstractReadStatePanel.java
index 13df58ff05..223dc04531 100644
--- a/view/src/main/java/se/su/dsv/scipro/forum/panels/AbstractReadStatePanel.java
+++ b/view/src/main/java/se/su/dsv/scipro/forum/panels/AbstractReadStatePanel.java
@@ -14,20 +14,8 @@ public abstract class AbstractReadStatePanel extends Panel {
     public static final String TOGGLE = "toggle";
     static final String ICON = "icon";
 
-    public enum ShowReadStateTooltip {
-        ENABLED,
-        DISABLED
-    }
-
-    private final ShowReadStateTooltip showReadStateTooltip;
-
     public AbstractReadStatePanel(final String id) {
-        this(id, ShowReadStateTooltip.DISABLED);
-    }
-
-    public AbstractReadStatePanel(final String id, final ShowReadStateTooltip showReadStateTooltip) {
         super(id);
-        this.showReadStateTooltip = showReadStateTooltip;
 
         Component icon = new UpdatingImage(ICON);
         icon.setOutputMarkupId(true);
@@ -59,10 +47,6 @@ public abstract class AbstractReadStatePanel extends Panel {
             super.onComponentTag(tag);
             String state = isRead() ? "read" : "unread";
             tag.append("class", state, " ");
-
-            if (showReadStateTooltip == ShowReadStateTooltip.ENABLED && !isRead()) {
-                tag.put("title", getString("unread.msg"));
-            }
         }
     }
 }
diff --git a/view/src/main/java/se/su/dsv/scipro/forum/panels/AbstractReadStatePanel.utf8.properties b/view/src/main/java/se/su/dsv/scipro/forum/panels/AbstractReadStatePanel.utf8.properties
deleted file mode 100644
index e86f4d6e50..0000000000
--- a/view/src/main/java/se/su/dsv/scipro/forum/panels/AbstractReadStatePanel.utf8.properties
+++ /dev/null
@@ -1 +0,0 @@
-unread.msg=There are unread messages.
\ No newline at end of file
diff --git a/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.html b/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.html
index b50ec6da63..da97aaf553 100755
--- a/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.html
+++ b/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.html
@@ -42,9 +42,8 @@
 
     <table class="table table-striped table-hover" wicket:id="dp"></table>
 
-    <!-- todo: reconsider name of this id, parentMarkupId, needs improvement. -->
-    <wicket:fragment wicket:id="parentMarkupId">
-        <wicket:container wicket:id="flag"></wicket:container>
+    <wicket:fragment wicket:id="readStateColumnMarkupId">
+        <span wicket:id="flag"></span>
         <wicket:container wicket:id="counter"></wicket:container>
     </wicket:fragment>
 </wicket:panel>
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 3ac0eb01e8..5d9cf5ca90 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
@@ -4,6 +4,7 @@ import jakarta.inject.Inject;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
 import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
+import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
@@ -200,12 +201,19 @@ public class SupervisorMyProjectsPanel extends Panel {
 
         @Override
         public void populateItem(Item<ICellPopulator<Project>> item, String id, IModel<Project> projectModel) {
-            /*
-            item.add(new AbstractReadStatePanel(id, AbstractReadStatePanel.ShowReadStateTooltip.ENABLED) {
+            // Since table cell only can contain one item, we use Wicket Fragment here. It will contains two components,
+            // one for flag, one for unread messages counter.
+
+            Fragment fragment = new Fragment(id, "readStateColumnMarkupId", SupervisorMyProjectsPanel.this);
+
+            long msgCount = projectForumService.getUnreadThreadsCount(projectModel.getObject(),
+                    SciProSession.get().getUser());
+            boolean isRead = msgCount == 0;
+
+            AbstractReadStatePanel readStatePanel = new AbstractReadStatePanel("flag") {
                 @Override
                 protected boolean isRead() {
-                    return !projectForumService.hasUnreadThreads(projectModel.getObject(),
-                            SciProSession.get().getUser());
+                    return isRead;
                 }
 
                 @Override
@@ -213,36 +221,13 @@ public class SupervisorMyProjectsPanel extends Panel {
                     setResponsePage(SupervisorThreadedForumPage.class,
                             SupervisorThreadedForumPage.getPageParameters(projectModel.getObject()));
                 }
-            });
-             */
+            };
 
-            // WebMarkupContainer container = new WebMarkupContainer(id);
-            // container.setOutputMarkupId(true);
-/*
-            container
- */
-            //container.add(new NumberOfMessagesPanel("counter"));
+            if (!isRead) {
+                readStatePanel.add(new AttributeModifier("title", getString("unread.msg")));
+            }
 
-            //item.add(container);
-
-            //boolean hasUnreadThreads = projectForumService.hasUnreadThreads(projectModel.getObject(), SciProSession.get().getUser());
-            long 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 msgCount == 0;
-                }
-
-                @Override
-                protected void onFlagClick(AjaxRequestTarget target) {
-                    setResponsePage(SupervisorThreadedForumPage.class,
-                            SupervisorThreadedForumPage.getPageParameters(projectModel.getObject()));
-                }
-            });
+            fragment.add(readStatePanel);
 
             fragment.add(new NumberOfMessagesPanel("counter") {
                 @Override
diff --git a/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.utf8.properties b/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.utf8.properties
index 17f454ad8c..e279982933 100644
--- a/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.utf8.properties
+++ b/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.utf8.properties
@@ -12,3 +12,5 @@ ProjectStatus.COMPLETED= Completed
 
 SupervisorProjectNoteDisplay.COMPACT=Compact
 SupervisorProjectNoteDisplay.FULL=Full
+
+unread.msg=There are unread messages.
\ No newline at end of file