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 b66e07b1cafb8df4e6da7995393954744dfbe447..39244e3f9cc4da39cbcac93626fae1e63c18086e 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 9367d0f1075375524d32c6d3fb0eeae7bcb4dee6..d225eb13c7313b4ba229876a68f106563260c8a1 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 850302f0cdec94bd9854c00b91384512e987b484..b5d41af57a00997a32130acc7ab66b485aece72c 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 01b68a365a895d2c76ee9015e14fef031cdc38b9..c87363ff18a2e4a84aef4b87551a81e2cf25a1d9 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();