From 5dcb12292119ae21ffb98e10f9eee7aa20cf2bf7 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Wed, 2 Sep 2009 08:05:37 +0000
Subject: [PATCH] [LMS-1121] sample search - added related data sets button;
 refactorings: extracted common code

SVN: 12358
---
 .../application/MatchingEntitiesPanel.java    | 20 +----------
 .../ui/grid/AbstractBrowserGrid.java          | 36 ++++++++++++++++++-
 .../ui/sample/SampleBrowserGrid.java          |  7 ++--
 .../ui/sample/SampleSearchHitGrid.java        | 26 ++++++++++++++
 4 files changed, 67 insertions(+), 22 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MatchingEntitiesPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MatchingEntitiesPanel.java
index b66e07b1caf..39244e3f9cc 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MatchingEntitiesPanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MatchingEntitiesPanel.java
@@ -44,7 +44,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IC
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.IDataRefreshCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
-import ch.systemsx.cisd.openbis.generic.client.web.client.dto.RelatedDataSetCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SearchableEntity;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
@@ -106,30 +105,13 @@ final class MatchingEntitiesPanel extends AbstractBrowserGrid<MatchingEntity, Ma
         addEntityOperationsLabel();
 
         String showRelatedDatasetsTitle = viewContext.getMessage(Dict.BUTTON_SHOW_RELATED_DATASETS);
-
         Button showRelatedDatasetsButton =
                 new Button(showRelatedDatasetsTitle, new SelectionListener<ButtonEvent>()
                     {
                         @Override
                         public void componentSelected(ButtonEvent ce)
                         {
-                            final List<MatchingEntity> selectedEntities = getSelectedBaseObjects();
-                            final TableExportCriteria<MatchingEntity> displayedEntities =
-                                    createTableExportCriteria();
-                            if (selectedEntities.isEmpty())
-                            {
-                                // no entity selected - show datasets related to all displayed
-                                RelatedDataSetCriteria criteria =
-                                        RelatedDataSetCriteria
-                                                .createDisplayedEntities(displayedEntities);
-                                ShowRelatedDatasetsDialog.showRelatedDatasetsTab(viewContext,
-                                        criteria);
-                            } else
-                            {
-                                // > 0 entity selected - show dialog with all/selected radio
-                                new ShowRelatedDatasetsDialog(viewContext, selectedEntities,
-                                        displayedEntities).show();
-                            }
+                            showRelatedDataSets(viewContext, MatchingEntitiesPanel.this);
                         }
                     });
         showRelatedDatasetsButton.setId(SHOW_RELATED_DATASETS_BUTTON_ID);
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 9367d0f1075..d225eb13c73 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
@@ -69,6 +69,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ShowRelatedDatasetsDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.VoidAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDisplaySettingsGetter;
@@ -84,10 +85,12 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMess
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IResultUpdater;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WindowUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.RelatedDataSetCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GridFilterInfo;
@@ -257,7 +260,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
         }
 
     }
-    
+
     /**
      * Registers the specified listener for clicks on links in the specified column.
      * 
@@ -1404,4 +1407,35 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
         protected abstract Dialog createDialog(List<T> data, IBrowserGridActionInvoker invoker);
     }
 
+    /**
+     * If user selected some entities in given browser first a dialog is shown where he can select
+     * between showing data sets related to selected/displayed entities. Then a tab is displayed
+     * where these related data sets are listed.<br>
+     * <br>
+     * If no entities were selected in given browser the tab is displayed where data sets related to
+     * all entities displayed in the grid are listed.
+     */
+    // NOTE: This method cannot be externalized from AbstractBrowserGrid because it uses some
+    // AbstractBrowserGrid's protected methods
+    protected static final <E extends IEntityInformationHolder> void showRelatedDataSets(
+            final IViewContext<ICommonClientServiceAsync> viewContext,
+            final AbstractBrowserGrid<E, ? extends BaseEntityModel<E>> browser)
+    {
+        final List<? extends IEntityInformationHolder> selectedEntities =
+                browser.getSelectedBaseObjects();
+        final TableExportCriteria<? extends IEntityInformationHolder> displayedEntities =
+                browser.createTableExportCriteria();
+        if (selectedEntities.isEmpty())
+        {
+            // no entity selected - show datasets related to all displayed
+            RelatedDataSetCriteria relatedCriteria =
+                    RelatedDataSetCriteria.createDisplayedEntities(displayedEntities);
+            ShowRelatedDatasetsDialog.showRelatedDatasetsTab(viewContext, relatedCriteria);
+        } else
+        {
+            // > 0 entity selected - show dialog with all/selected radio
+            new ShowRelatedDatasetsDialog(viewContext, selectedEntities, displayedEntities).show();
+        }
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
index 850302f0cde..b5d41af57a0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
@@ -315,7 +315,12 @@ public class SampleBrowserGrid extends
     protected void extendBottomToolbar()
     {
         addEntityOperationsLabel();
+        addEntityOperationButtons();
+        addEntityOperationsSeparator();
+    }
 
+    protected void addEntityOperationButtons()
+    {
         final Button addButton =
                 new Button(viewContext.getMessage(Dict.BUTTON_ADD, "Sample"),
                         new SelectionListener<ComponentEvent>()
@@ -352,8 +357,6 @@ public class SampleBrowserGrid extends
                         }
                     }));
         allowMultipleSelection(); // we allow deletion of multiple samples
-
-        addEntityOperationsSeparator();
     }
 
     private void addGridRefreshListener(SampleBrowserToolbar topToolbar)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleSearchHitGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleSearchHitGrid.java
index 01b68a365a8..c87363ff18a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleSearchHitGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleSearchHitGrid.java
@@ -19,6 +19,10 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample
 
 import java.util.List;
 
+import com.extjs.gxt.ui.client.event.ButtonEvent;
+import com.extjs.gxt.ui.client.event.SelectionListener;
+import com.extjs.gxt.ui.client.widget.button.Button;
+
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
@@ -46,6 +50,9 @@ public class SampleSearchHitGrid extends SampleBrowserGrid implements IDetailedS
 
     public static final String SEARCH_GRID_ID = SEARCH_BROWSER_ID + "-grid";
 
+    public static final String SHOW_RELATED_DATASETS_BUTTON_ID =
+            SEARCH_GRID_ID + "_show-related-datasets-button";
+
     public static IDisposableComponent create(
             final IViewContext<ICommonClientServiceAsync> viewContext)
     {
@@ -70,6 +77,25 @@ public class SampleSearchHitGrid extends SampleBrowserGrid implements IDetailedS
         extendBottomToolbar();
     }
 
+    @Override
+    protected void addEntityOperationButtons()
+    {
+        String showRelatedDatasetsTitle = viewContext.getMessage(Dict.BUTTON_SHOW_RELATED_DATASETS);
+        Button showRelatedDatasetsButton =
+                new Button(showRelatedDatasetsTitle, new SelectionListener<ButtonEvent>()
+                    {
+                        @Override
+                        public void componentSelected(ButtonEvent ce)
+                        {
+                            showRelatedDataSets(viewContext, SampleSearchHitGrid.this);
+                        }
+                    });
+        showRelatedDatasetsButton.setId(SHOW_RELATED_DATASETS_BUTTON_ID);
+        addButton(showRelatedDatasetsButton);
+
+        super.addEntityOperationButtons();
+    }
+
     public void refresh(DetailedSearchCriteria newCriteria, List<PropertyType> propertyTypes)
     {
         ListSampleDisplayCriteria criteriaOrNull = tryGetDisplayCriteria();
-- 
GitLab