From 76acc90c1b4f82d8aa300205a6c5b0c7ea861a29 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Tue, 29 Mar 2011 09:23:43 +0000
Subject: [PATCH] [LMS-2061] automatically limit number of columns

SVN: 20528
---
 .../client/web/client/application/Dict.java   |  8 +-
 .../client/application/ui/TypedTableGrid.java |  8 --
 .../ui/grid/AbstractBrowserGrid.java          | 81 ++++++++-----------
 .../cisd/openbis/public/common-dictionary.js  |  9 +--
 4 files changed, 43 insertions(+), 63 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
index a53549e31c7..440127ca756 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
@@ -826,6 +826,10 @@ public abstract class Dict
 
     public static final String GRID_COLUMN_HAS_FILTER_HEADER = "GRID_COLUMN_HAS_FILTER_HEADER";
 
+    public static final String VISIBLE_COLUMNS_LIMITED_TITLE = "VISIBLE_COLUMNS_LIMITED_TITLE";
+
+    public static final String VISIBLE_COLUMNS_LIMITED_MSG = "VISIBLE_COLUMNS_LIMITED_MSG";
+
     public static final String TOO_MANY_VISIBLE_COLUMNS_TITLE = "TOO_MANY_VISIBLE_COLUMNS_TITLE";
 
     public static final String TOO_MANY_VISIBLE_COLUMNS_MSG = "TOO_MANY_VISIBLE_COLUMNS_MSG";
@@ -870,9 +874,9 @@ public abstract class Dict
     public static final String REOPEN_LAST_TAB_ON_LOGIN_INFO = "reopen_last_tab_on_login_info";
 
     public static final String SHOW_LAST_VISITS_LABEL = "show_last_visits_label";
-    
+
     public static final String SHOW_LAST_VISITS_INFO = "show_last_visits_info";
-    
+
     //
     // Help Info
     //
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
index fcb4c744595..b502a7fc8b1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
@@ -411,16 +411,8 @@ public abstract class TypedTableGrid<T extends ISerializable>
     @Override
     protected void refresh()
     {
-        ignoreVisibleColumnsLimit = true; // WORKAROUND don't check limit of visible columns twice
         String gridDisplayTypeID = getGridDisplayTypeID();
         refresh(gridDisplayTypeID.equals(currentGridDisplayTypeID) == false);
-        ignoreVisibleColumnsLimit = false;
-    }
-
-    @Override
-    protected boolean isLimitVisibleColumnsEnabled()
-    {
-        return ignoreVisibleColumnsLimit == false;
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
index a4707b493f7..a97ef58c1a1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
@@ -40,7 +40,6 @@ import com.extjs.gxt.ui.client.event.ButtonEvent;
 import com.extjs.gxt.ui.client.event.Events;
 import com.extjs.gxt.ui.client.event.GridEvent;
 import com.extjs.gxt.ui.client.event.Listener;
-import com.extjs.gxt.ui.client.event.MessageBoxEvent;
 import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
 import com.extjs.gxt.ui.client.event.SelectionListener;
 import com.extjs.gxt.ui.client.store.ListStore;
@@ -48,6 +47,8 @@ import com.extjs.gxt.ui.client.widget.Component;
 import com.extjs.gxt.ui.client.widget.Container;
 import com.extjs.gxt.ui.client.widget.ContentPanel;
 import com.extjs.gxt.ui.client.widget.Dialog;
+import com.extjs.gxt.ui.client.widget.Info;
+import com.extjs.gxt.ui.client.widget.InfoConfig;
 import com.extjs.gxt.ui.client.widget.LayoutContainer;
 import com.extjs.gxt.ui.client.widget.MessageBox;
 import com.extjs.gxt.ui.client.widget.button.Button;
@@ -223,8 +224,6 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
 
     private ColumnModel fullColumnModel;
 
-    private boolean settingsDialogAlreadyOpen;
-
     protected AbstractBrowserGrid(final IViewContext<ICommonClientServiceAsync> viewContext,
             String gridId, IDisplayTypeIDGenerator displayTypeIDGenerator)
     {
@@ -1294,65 +1293,52 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
     {
         fullColumnModel = columnModel;
 
-        int maxVisibleColumns = getWebClientConfiguration().getMaxVisibleColumns();
-        int visibleColumnsCount = fullColumnModel.getColumnCount(true);
-        if (isLimitVisibleColumnsEnabled() && visibleColumnsCount > maxVisibleColumns)
-        {
-            limitVisibleColumns(maxVisibleColumns, visibleColumnsCount);
-        } else
-        {
-            int logId = log("grid reconfigure");
-            ColumnModel columnModelOfVisible = trimToVisibleColumns(columnModel);
-
-            grid.reconfigure(grid.getStore(), columnModelOfVisible);
-            viewContext.logStop(logId);
-            registerGridSettingsChangesListener();
-            // add listeners of full column model to trimmed model
-            List<Listener<? extends BaseEvent>> listeners =
-                    fullColumnModel.getListeners(Events.WidthChange);
-            for (Listener<? extends BaseEvent> listener : listeners)
-            {
-                columnModelOfVisible.addListener(Events.WidthChange, listener);
-            }
-        }
-    }
-
-    protected boolean isLimitVisibleColumnsEnabled()
-    {
-        return true;
-    }
+        int logId = log("grid reconfigure");
+        ColumnModel columnModelOfVisible = trimToVisibleColumns(columnModel);
 
-    private void limitVisibleColumns(int maxVisibleColumns, int visibleColumnsCount)
-    {
-        String title = viewContext.getMessage(Dict.TOO_MANY_VISIBLE_COLUMNS_TITLE);
-        String msg =
-                viewContext.getMessage(Dict.TOO_MANY_VISIBLE_COLUMNS_MSG, maxVisibleColumns,
-                        visibleColumnsCount);
-        if (settingsDialogAlreadyOpen)
+        grid.reconfigure(grid.getStore(), columnModelOfVisible);
+        viewContext.logStop(logId);
+        registerGridSettingsChangesListener();
+        // add listeners of full column model to trimmed model
+        List<Listener<? extends BaseEvent>> listeners =
+                fullColumnModel.getListeners(Events.WidthChange);
+        for (Listener<? extends BaseEvent> listener : listeners)
         {
-            return;
+            columnModelOfVisible.addListener(Events.WidthChange, listener);
         }
-        settingsDialogAlreadyOpen = true;
-        MessageBox.alert(title, msg, new Listener<MessageBoxEvent>()
-            {
-                public void handleEvent(MessageBoxEvent be)
-                {
-                    configureColumnSettings();
-                }
-            });
     }
 
     private ColumnModel trimToVisibleColumns(ColumnModel columnModel)
     {
+        int maxVisibleColumns = getWebClientConfiguration().getMaxVisibleColumns();
+        int counter = 0;
         List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
         for (int i = 0, n = columnModel.getColumnCount(); i < n; i++)
         {
             ColumnConfig column = columnModel.getColumn(i);
             if (column.isHidden() == false)
             {
-                columns.add(column);
+                counter++;
+                if (counter <= maxVisibleColumns)
+                {
+                    columns.add(column);
+                } else
+                {
+                    column.setHidden(true);
+                }
             }
         }
+        if (counter > maxVisibleColumns)
+        {
+            saveColumnDisplaySettings(); // save changes made to full model
+            InfoConfig infoConfig =
+                    new InfoConfig(viewContext.getMessage(Dict.VISIBLE_COLUMNS_LIMITED_TITLE),
+                            viewContext.getMessage(Dict.VISIBLE_COLUMNS_LIMITED_MSG,
+                                    maxVisibleColumns, counter));
+            infoConfig.height = 100; // a bit higher
+            infoConfig.display = 5000; // 5s
+            Info.display(infoConfig);
+        }
         ColumnModel trimmedModel = createColumnModel(columns);
         return trimmedModel;
     }
@@ -1533,7 +1519,6 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
                         customColumnsMetadataProvider, resultSetKeyOrNull,
                         pendingFetchManager.tryTopPendingFetchConfig());
         columnSettingsConfigurer.showDialog();
-        settingsDialogAlreadyOpen = false;
     }
 
     // Default visibility so that friend classes can use -- should otherwise be considered private
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
index f92207acf02..e67ba45b1a9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
@@ -114,8 +114,8 @@ var common = {
   
   export_all_columns: "All Columns",
   export_visible_columns: "Visible Columns",
-	tooltip_export_all_columns: "Export the table with all (visible and hidden) columns to an Excel file",
-	tooltip_export_visible_columns: "Export the table with visible columns to an Excel file",  
+  tooltip_export_all_columns: "Export the table with all (visible and hidden) columns to an Excel file",
+	tooltip_export_visible_columns: "Export the table with visible columns to an Excel file",
   
   //
   // LoginWidget
@@ -126,7 +126,6 @@ var common = {
   login_passwordLabel: "Password",
   login_buttonLabel: "Login",
   login_failed: "Sorry, you entered an invalid username or password. Please try again.",
-  anonymous_login_failed: "Anonymous login is not possible.",
   
   //
   // AbstractAsyncCallback
@@ -680,8 +679,8 @@ incorrect_experiment_syntax: "Incorrect experiment specification. Please provide
   GRID_COLUMN_NAME_HEADER: "Column",
   GRID_IS_COLUMN_VISIBLE_HEADER: "Visible?",
   GRID_COLUMN_HAS_FILTER_HEADER: "Has Filter?",
-  TOO_MANY_VISIBLE_COLUMNS_TITLE: "Too many columns visible",
-  TOO_MANY_VISIBLE_COLUMNS_MSG: "Limit the number of visible columns to {0} (from {1}).",
+  VISIBLE_COLUMNS_LIMITED_TITLE: "Number of visible columns was limited",
+  VISIBLE_COLUMNS_LIMITED_MSG: "Only {0} out of {1} requested columns are displayed. You might want to change table settings.",
   VISIBLE_COLUMNS_LIMIT_REACHED_MSG: "Limit of {0} visible columns has been reached.",
   VISIBLE_COLUMNS_LIMIT_EXCEEDED_MSG: "Limit of {0} visible columns can't be exceeded.",
   
-- 
GitLab