From 42b552710593be7c9b18c08e379dd84af04cc619 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Fri, 5 Mar 2010 08:31:08 +0000
Subject: [PATCH] [LMS-1403] fixed bug with unnecessary reload of section data;
 minor refactorings and improvements

SVN: 15052
---
 .../application/ServerRequestQueue.java       |  1 +
 .../application/SingleSectionPanel.java       | 24 ++++-----
 .../application/ui/widget/SectionsPanel.java  | 52 +++++--------------
 3 files changed, 25 insertions(+), 52 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ServerRequestQueue.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ServerRequestQueue.java
index 8e7da07565a..69cec81866f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ServerRequestQueue.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ServerRequestQueue.java
@@ -118,6 +118,7 @@ public class ServerRequestQueue
                 request.onInvoke();
             }
         }
+        requests.clear();
     }
 
     // Internal API
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SingleSectionPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SingleSectionPanel.java
index b02e90547de..5b782f492f3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SingleSectionPanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SingleSectionPanel.java
@@ -22,7 +22,7 @@ import com.extjs.gxt.ui.client.widget.layout.FitLayout;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDisplayTypeIDGenerator;
 
 /**
- * {@link ContentPanel} configured for Experiment Viewer.
+ * {@link ContentPanel} for sections with deferred request handling.
  * 
  * @author Izabela Adamczyk
  */
@@ -30,7 +30,7 @@ public class SingleSectionPanel extends ContentPanel
 {
     private String displayId;
 
-    private boolean isContentVisible;
+    private boolean isContentVisible = false;
 
     /**
      * A queue used to store requests for data when the selection panel is hidden to avoid
@@ -47,7 +47,6 @@ public class SingleSectionPanel extends ContentPanel
         setAnimCollapse(false);
         setBodyBorder(true);
         setLayout(new FitLayout());
-        isContentVisible = false;
         serverRequestQueue = new ServerRequestQueue();
     }
 
@@ -73,23 +72,22 @@ public class SingleSectionPanel extends ContentPanel
         }
     }
 
-    public boolean isContentVisible()
+    public void setContentVisible(boolean visible)
     {
-        return isContentVisible;
-    }
-
-    public void setContentVisible(boolean isContentVisible)
-    {
-        this.isContentVisible = isContentVisible;
-        if (this.isContentVisible)
+        if (this.isContentVisible != visible)
         {
-            serverRequestQueue.processUniqueRequests();
+            this.isContentVisible = visible;
+            if (visible)
+            {
+                serverRequestQueue.processUniqueRequests();
+            }
+            serverRequestQueue.setProcessImmediately(visible);
         }
-        serverRequestQueue.setProcessImmediately(this.isContentVisible);
     }
 
     protected ServerRequestQueue getServerRequestQueue()
     {
         return serverRequestQueue;
     }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/SectionsPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/SectionsPanel.java
index a4bf1d299be..7f8986393e1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/SectionsPanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/SectionsPanel.java
@@ -147,66 +147,40 @@ public class SectionsPanel extends ContentPanel
             });
         elements.add(element);
         addToToolbar(element.getButton());
-        if (element.getButton().isPressed())
-        {
-            element.getPanel().setContentVisible(true);
-            internalAdd(element);
-        } else
-        {
-            element.getPanel().setContentVisible(false);
-        }
+        updateElementVisibility(element);
     }
 
     /** removes all sections and adds them once again with with refreshed state */
     private void refreshLayout()
     {
+        // NOTE: changing visibility of only those sections that changed state doesn't improve
+        // performance but makes code more complex
         removeAll();
         for (SectionElement el : elements)
         {
-            boolean isVisible = el.getButton().isPressed();
-            el.getPanel().setContentVisible(isVisible);
-            if (isVisible)
-            {
-                internalAdd(el);
-            }
+            updateElementVisibility(el);
         }
         layout();
     }
 
-    private void addToToolbar(ToggleButton bb)
-    {
-        toolbar.add(bb);
-    }
-
-    public void removePanel(final SingleSectionPanel panel)
+    private void updateElementVisibility(SectionElement element)
     {
-        int index = elements.indexOf(panel);
-        if (index > -1)
+        boolean visible = element.getButton().isPressed();
+        element.getPanel().setContentVisible(visible);
+        if (visible)
         {
-            internalRemove(panel);
-            elements.remove(index);
-            toolbar.remove(toolbar.getItem(index));
+            internalAdd(element);
         }
     }
 
-    private void internalAdd(final SectionElement element)
-    {
-        super.add(element.getPanel());
-    }
-
-    private void internalRemove(final ContentPanel panel)
+    private void addToToolbar(ToggleButton bb)
     {
-        super.remove(panel);
+        toolbar.add(bb);
     }
 
-    /**
-     * Use {@link #removePanel(SingleSectionPanel)}
-     */
-    @Deprecated
-    @Override
-    protected boolean remove(Component item)
+    private void internalAdd(final SectionElement element)
     {
-        return super.remove(item);
+        super.add(element.getPanel());
     }
 
     /**
-- 
GitLab