diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitGrid.java index c3358afbfab964d57b3a964fc4d49ad3c85b5cc4..330b771616105e7a0339813c605a37377c3a0c49 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitGrid.java @@ -19,6 +19,12 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data; import java.util.List; +import com.extjs.gxt.ui.client.event.SelectionChangedListener; +import com.extjs.gxt.ui.client.widget.LayoutContainer; +import com.extjs.gxt.ui.client.widget.layout.RowData; +import com.extjs.gxt.ui.client.widget.layout.RowLayout; +import com.google.gwt.user.client.ui.Widget; + import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; @@ -29,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework. import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.DisposableEntityChooser; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.report.ReportGeneratedCallback.IOnReportComponentGeneratedAction; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.search.DetailedDataSetSearchToolbar; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.search.DetailedSearchToolbar; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.search.DetailedSearchWindow; @@ -39,6 +46,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; +import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset.DataSetGridUtils; /** * Grid with detailed data set search results. @@ -55,39 +63,91 @@ public class DataSetSearchHitGrid extends AbstractExternalDataGrid implements public static final String GRID_ID = BROWSER_ID + "-grid"; + private static IDisposableComponent disposableComponentOrNull = null; + public static IDisposableComponent create( final IViewContext<ICommonClientServiceAsync> viewContext) { - DataSetSearchHitGrid grid = new DataSetSearchHitGrid(viewContext); - final DetailedSearchWindow searchWindow = - new DetailedSearchWindow(viewContext, EntityKind.DATA_SET); - final DetailedSearchToolbar toolbar = - new DetailedDataSetSearchToolbar(viewContext, grid, - viewContext.getMessage(Dict.BUTTON_CHANGE_QUERY), searchWindow); - searchWindow.setUpdateListener(toolbar); - return grid.asDisposableWithToolbar(toolbar); + return create(viewContext, null); } public static DisposableEntityChooser<ExternalData> createWithInitialSearchCriteria( final IViewContext<ICommonClientServiceAsync> viewContext, DetailedSearchCriteria searchCriteria) { - DataSetSearchHitGrid grid = new DataSetSearchHitGrid(viewContext); - - grid.chosenSearchCriteria = searchCriteria; + return create(viewContext, searchCriteria); + } + private static DisposableEntityChooser<ExternalData> create( + final IViewContext<ICommonClientServiceAsync> viewContext, + DetailedSearchCriteria searchCriteriaOrNull) + { + DataSetSearchHitGrid grid = new DataSetSearchHitGrid(viewContext); final DetailedSearchWindow searchWindow = new DetailedSearchWindow(viewContext, EntityKind.DATA_SET); - // Set the initial search string before creating the toolbar because the toolbar will use - // the initial search string in its own initialization. - searchWindow.setInitialSearchCriteria(searchCriteria); + if (searchCriteriaOrNull != null) + { + grid.chosenSearchCriteria = searchCriteriaOrNull; + // Set the initial search string before creating the toolbar + // because the toolbar will use the initial search string in its own initialization. + searchWindow.setInitialSearchCriteria(searchCriteriaOrNull); + } + + final LayoutContainer container = createContainer(); + final IOnReportComponentGeneratedAction reportGeneratedAction = + createReportGeneratedAction(container, grid); + final ReportingPluginSelectionWidget reportSelectionWidget = + new ReportingPluginSelectionWidget(viewContext, null); + + SelectionChangedListener<DatastoreServiceDescriptionModel> reportChangedListener = + DataSetGridUtils.createReportSelectionChangedListener(viewContext, + grid.asDisposableWithoutToolbar(), reportGeneratedAction); + reportSelectionWidget.addSelectionChangedListener(reportChangedListener); final DetailedSearchToolbar toolbar = new DetailedDataSetSearchToolbar(viewContext, grid, - viewContext.getMessage(Dict.BUTTON_CHANGE_QUERY), searchWindow, true); + viewContext.getMessage(Dict.BUTTON_CHANGE_QUERY), searchWindow, + reportSelectionWidget, searchCriteriaOrNull != null); searchWindow.setUpdateListener(toolbar); - return grid.asDisposableWithToolbar(toolbar); + + return grid.asDisposableWithToolbar(container, toolbar); + } + + private static LayoutContainer createContainer() + { + final LayoutContainer container = new LayoutContainer(); + container.setLayout(new RowLayout()); + return container; + } + + private static IOnReportComponentGeneratedAction createReportGeneratedAction( + final LayoutContainer container, final DataSetSearchHitGrid grid) + { + return new IOnReportComponentGeneratedAction() + { + public void execute(IDisposableComponent gridComponent) + { + if (gridComponent != null) + { + // remove second widget (first is the toolbar) + Widget widget = container.getWidget(1); + container.remove(widget); + + // dispose if it wasn't the main grid component + if (disposableComponentOrNull != null + && disposableComponentOrNull.getComponent().equals(grid) == false) + { + disposableComponentOrNull.dispose(); + } + + // update new component + disposableComponentOrNull = gridComponent; + container.add(gridComponent.getComponent(), new RowData(1, 1)); + container.layout(); + } + } + }; } private DetailedSearchCriteria chosenSearchCriteria; @@ -95,6 +155,7 @@ public class DataSetSearchHitGrid extends AbstractExternalDataGrid implements private DataSetSearchHitGrid(final IViewContext<ICommonClientServiceAsync> viewContext) { super(viewContext, BROWSER_ID, GRID_ID, DisplayTypeIDGenerator.DATA_SET_SEARCH_RESULT_GRID); + } @Override @@ -133,4 +194,15 @@ public class DataSetSearchHitGrid extends AbstractExternalDataGrid implements return DataSetSearchHitModel.createColumnsSchema(viewContext, propertyTypes); } + /** @return this grid as a disposable component with a specified toolbar at the top. */ + private DisposableEntityChooser<ExternalData> asDisposableWithToolbar( + final LayoutContainer container, final IDisposableComponent toolbar) + { + container.add(toolbar.getComponent()); + container.add(this, new RowData(1, 1)); + + // TODO 2011-03-10, Piotr Buczek: dispose report + return asDisposableEntityChooser(container, toolbar); + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ReportingPluginSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ReportingPluginSelectionWidget.java index dd67e9592d036750aab2c29c898825fdfd51abcb..6813671c7b3c7d6c71de930f586f5d05261650ca 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ReportingPluginSelectionWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ReportingPluginSelectionWidget.java @@ -43,6 +43,9 @@ public class ReportingPluginSelectionWidget extends public static final String METADATA = "Overview"; + private static final DatastoreServiceDescriptionModel METADATA_MODEL = + DatastoreServiceDescriptionModel.createFakeReportingServiceModel(METADATA); + private final IViewContext<?> viewContext; public ReportingPluginSelectionWidget(final IViewContext<?> viewContext, @@ -76,6 +79,11 @@ public class ReportingPluginSelectionWidget extends }; } + public void selectMetadataPlugin() + { + setValue(METADATA_MODEL); + } + @Override protected List<DatastoreServiceDescriptionModel> convertItems( List<DatastoreServiceDescription> result) @@ -83,7 +91,7 @@ public class ReportingPluginSelectionWidget extends List<DatastoreServiceDescriptionModel> models = DatastoreServiceDescriptionModel.convert(result, null); - models.add(0, DatastoreServiceDescriptionModel.createFakeReportingServiceModel(METADATA)); + models.add(0, METADATA_MODEL); return models; } 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 0f908e52c43d2aa4c0fbe8cb891b52ea81114e61..a7393b4f2dda91883b2e92498e91b164b139aa70 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 @@ -462,8 +462,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod } /** @return this grid as a disposable component with a specified toolbar at the top. */ - protected final DisposableEntityChooser<T> asDisposableWithToolbar( - final IDisposableComponent toolbar) + protected DisposableEntityChooser<T> asDisposableWithToolbar(final IDisposableComponent toolbar) { final LayoutContainer container = new LayoutContainer(); container.setLayout(new RowLayout()); @@ -514,7 +513,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod } } - private DisposableEntityChooser<T> asDisposableEntityChooser(final Component mainComponent, + protected DisposableEntityChooser<T> asDisposableEntityChooser(final Component mainComponent, final IDisposableComponent disposableComponentOrNull) { final AbstractBrowserGrid<T, M> self = this; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedDataSetSearchToolbar.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedDataSetSearchToolbar.java index 7e718a50698d2c60293f616f3f5167144e5cffd9..e380dbd23588199afc32ed61d345f7af9631fb36 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedDataSetSearchToolbar.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedDataSetSearchToolbar.java @@ -4,16 +4,15 @@ import java.util.List; import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.AbstractExternalDataGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetProcessingMenu; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetSearchHitGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.ReportingPluginSelectionWidget; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.report.ReportGeneratedCallback.IOnReportComponentGeneratedAction; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; +import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset.DataSetGridUtils; +import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset.DataSetGridUtils.IAddProcessingPluginsMenuAction; /** * Extension of {@link DetailedSearchWindow} adding widgets for reporting and processing plugins. @@ -24,63 +23,48 @@ public class DetailedDataSetSearchToolbar extends DetailedSearchToolbar { private final ReportingPluginSelectionWidget reportSelectionWidget; - private final IOnReportComponentGeneratedAction reportGeneratedAction; - public DetailedDataSetSearchToolbar(final IViewContext<?> viewContext, final DataSetSearchHitGrid grid, String buttonName, - final DetailedSearchWindow searchWindow) + final DetailedSearchWindow searchWindow, + final ReportingPluginSelectionWidget reportSelectionWidget) { - this(viewContext, grid, buttonName, searchWindow, false); + this(viewContext, grid, buttonName, searchWindow, reportSelectionWidget, false); } public DetailedDataSetSearchToolbar(final IViewContext<?> viewContext, final DataSetSearchHitGrid grid, String buttonName, - final DetailedSearchWindow searchWindow, boolean initializeDescriptionFromSearchWindow) + final DetailedSearchWindow searchWindow, + final ReportingPluginSelectionWidget reportSelectionWidget, + boolean initializeDescriptionFromSearchWindow) { super(grid, buttonName, searchWindow, initializeDescriptionFromSearchWindow); - this.reportSelectionWidget = new ReportingPluginSelectionWidget(viewContext, null); - this.reportGeneratedAction = new IOnReportComponentGeneratedAction() - { - public void execute(IDisposableComponent gridComponent) - { - // TODO - // replaceContent(gridComponent); - } - }; + this.reportSelectionWidget = reportSelectionWidget; add(reportSelectionWidget); if (viewContext.isSimpleOrEmbeddedMode() == false) { // processing plugins should be hidden in simple view mode - viewContext.getCommonService().listDataStoreServices(DataStoreServiceKind.PROCESSING, - new LoadProcessingPluginsCallback(viewContext, grid)); + IAddProcessingPluginsMenuAction addPluginsAction = + new IAddProcessingPluginsMenuAction() + { + public void addProcessingPlugins(DataSetProcessingMenu menu) + { + add(new SeparatorToolItem()); + add(menu); + } + }; + viewContext.getCommonService().listDataStoreServices( + DataStoreServiceKind.PROCESSING, + new DataSetGridUtils.LoadProcessingPluginsCallback(viewContext, grid, + addPluginsAction)); } } - public final class LoadProcessingPluginsCallback extends - AbstractAsyncCallback<List<DatastoreServiceDescription>> + @Override + public void updateSearchResults(DetailedSearchCriteria searchCriteria, + String searchDescription, List<PropertyType> availablePropertyTypes) { - private final AbstractExternalDataGrid browser; - - public LoadProcessingPluginsCallback(final IViewContext<?> viewContext, - AbstractExternalDataGrid browser) - { - super(viewContext); - this.browser = browser; - } - - @Override - protected void process(List<DatastoreServiceDescription> result) - { - if (result.isEmpty() == false) - { - - DataSetProcessingMenu menu = - new DataSetProcessingMenu(viewContext.getCommonViewContext(), - browser.getSelectedAndDisplayedItemsAction(), result); - add(new SeparatorToolItem()); - add(menu); - } - } + reportSelectionWidget.selectMetadataPlugin(); + super.updateSearchResults(searchCriteria, searchDescription, availablePropertyTypes); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java index 47f5f94a8308b5c6f64b7b6e1d7140def562aa9e..1aa2fda60665589d48070d7e41496cc073ce67aa 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java @@ -196,7 +196,7 @@ abstract public class DropDownList<M extends ModelData, E> extends ComboBox<M> i { return this; } - + public void dispose() { if (resultSetKey != null && viewContextOrNull != null) @@ -205,7 +205,7 @@ abstract public class DropDownList<M extends ModelData, E> extends ComboBox<M> i new VoidAsyncCallback<Void>(viewContextOrNull)); } } - + public void update(Set<DatabaseModificationKind> observedModifications) { refreshStore(); @@ -326,7 +326,7 @@ abstract public class DropDownList<M extends ModelData, E> extends ComboBox<M> i applyEmptyText(); } - private void selectFirstModel(final List<M> models) + protected void selectFirstModel(final List<M> models) { setSelection(models); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/AbstractDataSetsSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/AbstractDataSetsSection.java index b5414c8dabe1a9cfc6a6f77ef62ac9da911819ea..703771f4afaa5e267d077dad4600aa69110d5a4a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/AbstractDataSetsSection.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/AbstractDataSetsSection.java @@ -16,30 +16,21 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset; -import java.util.List; - -import com.extjs.gxt.ui.client.event.SelectionChangedEvent; import com.extjs.gxt.ui.client.event.SelectionChangedListener; import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableTabContent; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.AbstractExternalDataGrid; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.AbstractExternalDataGrid.SelectedAndDisplayedItems; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetComputeUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetProcessingMenu; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetReportGenerator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DatastoreServiceDescriptionModel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.ReportingPluginSelectionWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.report.ReportGeneratedCallback.IOnReportComponentGeneratedAction; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedActionWithResult; -import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedDatasetCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription; +import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset.DataSetGridUtils.IAddProcessingPluginsMenuAction; /** * @author Piotr Buczek @@ -75,8 +66,20 @@ public abstract class AbstractDataSetsSection extends DisposableTabContent if (viewContext.isSimpleOrEmbeddedMode() == false) { // processing plugins should be hidden in simple view mode - viewContext.getCommonService().listDataStoreServices(DataStoreServiceKind.PROCESSING, - new LoadProcessingPluginsCallback(viewContext, browser)); + IAddProcessingPluginsMenuAction addPluginsAction = + new IAddProcessingPluginsMenuAction() + { + + public void addProcessingPlugins(DataSetProcessingMenu menu) + { + getHeader().addTool(new SeparatorToolItem()); + getHeader().addTool(menu); + } + }; + viewContext.getCommonService().listDataStoreServices( + DataStoreServiceKind.PROCESSING, + new DataSetGridUtils.LoadProcessingPluginsCallback(viewContext, browser, + addPluginsAction)); } } @@ -84,11 +87,11 @@ public abstract class AbstractDataSetsSection extends DisposableTabContent protected final IDisposableComponent createDisposableContent() { metadataComponent = createDatasetBrowserComponent(); - initWidgets(extractBrowser(metadataComponent)); + initWidgets(DataSetGridUtils.extractBrowser(metadataComponent)); SelectionChangedListener<DatastoreServiceDescriptionModel> reportChangedListener = - createReportSelectionChangedListener(viewContext, metadataComponent, - reportGeneratedAction); + DataSetGridUtils.createReportSelectionChangedListener(viewContext, + metadataComponent, reportGeneratedAction); reportSelectionWidget.addSelectionChangedListener(reportChangedListener); return metadataComponent; } @@ -120,96 +123,4 @@ public abstract class AbstractDataSetsSection extends DisposableTabContent } } - private static AbstractExternalDataGrid extractBrowser(IDisposableComponent metadataComponent) - { - return (AbstractExternalDataGrid) metadataComponent.getComponent(); - } - - private static SelectionChangedListener<DatastoreServiceDescriptionModel> createReportSelectionChangedListener( - final IViewContext<?> viewContext, final IDisposableComponent metadataComponent, - final IOnReportComponentGeneratedAction reportGeneratedAction) - { - final AbstractExternalDataGrid browser = extractBrowser(metadataComponent); - return new SelectionChangedListener<DatastoreServiceDescriptionModel>() - { - - @Override - public void selectionChanged( - SelectionChangedEvent<DatastoreServiceDescriptionModel> se) - { - final DatastoreServiceDescriptionModel selectedItem = se.getSelectedItem(); - if (selectedItem != null) - { - DatastoreServiceDescription service = selectedItem.getBaseObject(); - - if (service.getLabel().equals(ReportingPluginSelectionWidget.METADATA)) - { - showMetadataView(); - } else - { - showGeneratedReport(service); - } - } - - } - - private void showMetadataView() - { - reportGeneratedAction.execute(metadataComponent); - } - - private void showGeneratedReport(DatastoreServiceDescription service) - { - assert service.getServiceKind() == DataStoreServiceKind.QUERIES; - - IDelegatedActionWithResult<SelectedAndDisplayedItems> selectedAndDisplayedItemsAction = - browser.getSelectedAndDisplayedItemsAction(); - - if (browser.getSelectedItems().isEmpty()) - { - // when no data sets were selected perform query on all without asking - DisplayedOrSelectedDatasetCriteria criteria = - selectedAndDisplayedItemsAction.execute().createCriteria(false); - DataSetReportGenerator.generateAndInvoke( - viewContext.getCommonViewContext(), service, criteria, - reportGeneratedAction); - } else - { - DataSetComputeUtils.createComputeAction(viewContext.getCommonViewContext(), - selectedAndDisplayedItemsAction, service, reportGeneratedAction) - .execute(); - } - } - - }; - - } - - public final class LoadProcessingPluginsCallback extends - AbstractAsyncCallback<List<DatastoreServiceDescription>> - { - private final AbstractExternalDataGrid browser; - - public LoadProcessingPluginsCallback(final IViewContext<?> viewContext, - AbstractExternalDataGrid browser) - { - super(viewContext); - this.browser = browser; - } - - @Override - protected void process(List<DatastoreServiceDescription> result) - { - if (result.isEmpty() == false) - { - - DataSetProcessingMenu menu = - new DataSetProcessingMenu(viewContext.getCommonViewContext(), - browser.getSelectedAndDisplayedItemsAction(), result); - getHeader().addTool(new SeparatorToolItem()); - getHeader().addTool(menu); - } - } - } - } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetGridUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetGridUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..087fdf838cd21e002705074bc9ba8016ee4a4a56 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetGridUtils.java @@ -0,0 +1,144 @@ +/* + * Copyright 2011 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset; + +import java.util.List; + +import com.extjs.gxt.ui.client.event.SelectionChangedEvent; +import com.extjs.gxt.ui.client.event.SelectionChangedListener; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.AbstractExternalDataGrid; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.AbstractExternalDataGrid.SelectedAndDisplayedItems; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetComputeUtils; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetProcessingMenu; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetReportGenerator; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DatastoreServiceDescriptionModel; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.ReportingPluginSelectionWidget; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.report.ReportGeneratedCallback.IOnReportComponentGeneratedAction; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedActionWithResult; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedDatasetCriteria; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription; + +/** + * @author Piotr Buczek + */ +public class DataSetGridUtils +{ + + public static AbstractExternalDataGrid extractBrowser(IDisposableComponent metadataComponent) + { + return (AbstractExternalDataGrid) metadataComponent.getComponent(); + } + + public static SelectionChangedListener<DatastoreServiceDescriptionModel> createReportSelectionChangedListener( + final IViewContext<?> viewContext, final IDisposableComponent metadataComponent, + final IOnReportComponentGeneratedAction reportGeneratedAction) + { + final AbstractExternalDataGrid browser = extractBrowser(metadataComponent); + return new SelectionChangedListener<DatastoreServiceDescriptionModel>() + { + + @Override + public void selectionChanged( + SelectionChangedEvent<DatastoreServiceDescriptionModel> se) + { + final DatastoreServiceDescriptionModel selectedItem = se.getSelectedItem(); + if (selectedItem != null) + { + DatastoreServiceDescription service = selectedItem.getBaseObject(); + + if (service.getLabel().equals(ReportingPluginSelectionWidget.METADATA)) + { + showMetadataView(); + } else + { + showGeneratedReport(service); + } + } + + } + + private void showMetadataView() + { + reportGeneratedAction.execute(metadataComponent); + } + + private void showGeneratedReport(DatastoreServiceDescription service) + { + assert service.getServiceKind() == DataStoreServiceKind.QUERIES; + + IDelegatedActionWithResult<SelectedAndDisplayedItems> selectedAndDisplayedItemsAction = + browser.getSelectedAndDisplayedItemsAction(); + + if (browser.getSelectedItems().isEmpty()) + { + // when no data sets were selected perform query on all without asking + DisplayedOrSelectedDatasetCriteria criteria = + selectedAndDisplayedItemsAction.execute().createCriteria(false); + DataSetReportGenerator.generateAndInvoke( + viewContext.getCommonViewContext(), service, criteria, + reportGeneratedAction); + } else + { + DataSetComputeUtils.createComputeAction(viewContext.getCommonViewContext(), + selectedAndDisplayedItemsAction, service, reportGeneratedAction) + .execute(); + } + } + + }; + + } + + public interface IAddProcessingPluginsMenuAction + { + void addProcessingPlugins(DataSetProcessingMenu menu); + } + + public static final class LoadProcessingPluginsCallback extends + AbstractAsyncCallback<List<DatastoreServiceDescription>> + { + private final AbstractExternalDataGrid browser; + + private final IAddProcessingPluginsMenuAction action; + + public LoadProcessingPluginsCallback(final IViewContext<?> viewContext, + AbstractExternalDataGrid browser, final IAddProcessingPluginsMenuAction action) + { + super(viewContext); + this.browser = browser; + this.action = action; + } + + @Override + protected void process(List<DatastoreServiceDescription> result) + { + if (result.isEmpty() == false) + { + DataSetProcessingMenu menu = + new DataSetProcessingMenu(viewContext.getCommonViewContext(), + browser.getSelectedAndDisplayedItemsAction(), result); + action.addProcessingPlugins(menu); + } + } + } + +}