diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java index 3427cc79dff0df3fe19b36035e802dd0460bf8db..6b28f525742708658799c0b2263ff930dd04c9bd 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java @@ -258,7 +258,7 @@ public interface ICommonClientService extends IClientService /** * Returns a list of experiments. */ - public ResultSet<Experiment> listExperiments(final ListExperimentsCriteria criteria) + public TypedTableResultSet<Experiment> listExperiments(final ListExperimentsCriteria criteria) throws UserFailureException; /** @@ -271,7 +271,8 @@ public interface ICommonClientService extends IClientService * Like {@link #prepareExportSamples(TableExportCriteria)}, but for experiments. */ - public String prepareExportExperiments(final TableExportCriteria<Experiment> criteria) + public String prepareExportExperiments( + final TableExportCriteria<TableModelRowWithObject<Experiment>> criteria) throws UserFailureException; /** @@ -654,7 +655,8 @@ public interface ICommonClientService extends IClientService public void deleteSample(TechId sampleId, String reason) throws UserFailureException; /** Deletes the specified experiments. */ - public void deleteExperiments(DisplayedOrSelectedIdHolderCriteria<Experiment> criteria, + public void deleteExperiments( + DisplayedOrSelectedIdHolderCriteria<TableModelRowWithObject<Experiment>> criteria, String reason) throws UserFailureException; /** Deletes the specified experiment. */ @@ -856,14 +858,14 @@ public interface ICommonClientService extends IClientService * Schedules archiving of the datasets connected to the specified experiments. */ public ArchivingResult archiveDatasets( - DisplayedCriteriaOrSelectedEntityHolder<Experiment> criteria) + DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> criteria) throws UserFailureException; /** * Schedules unarchiving of the datasets connected to the specified experiments. */ public ArchivingResult unarchiveDatasets( - DisplayedCriteriaOrSelectedEntityHolder<Experiment> criteria) + DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> criteria) throws UserFailureException; /** @@ -1010,14 +1012,15 @@ public interface ICommonClientService extends IClientService /** * Locks the datasets connected to the specified experiments. */ - public ArchivingResult lockDatasets(DisplayedCriteriaOrSelectedEntityHolder<Experiment> criteria) + public ArchivingResult lockDatasets( + DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> criteria) throws UserFailureException; /** * Unlocks the datasets connected to the specified experiments. */ public ArchivingResult unlockDatasets( - DisplayedCriteriaOrSelectedEntityHolder<Experiment> criteria) + DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> criteria) throws UserFailureException; /** diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java index 8a8356bc19d0b496f8b6b43e4ecaa42ce26aeaf4..7aa55da6f2584a87e642e47904da36a62031a7ff 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java @@ -234,12 +234,13 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync */ public void listExperiments( final ListExperimentsCriteria criteria, - AsyncCallback<ResultSet<ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment>> asyncCallback); + AsyncCallback<TypedTableResultSet<ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment>> asyncCallback); /** * @see ICommonClientService#prepareExportExperiments(TableExportCriteria) */ - public void prepareExportExperiments(TableExportCriteria<Experiment> exportCriteria, + public void prepareExportExperiments( + TableExportCriteria<TableModelRowWithObject<Experiment>> exportCriteria, AsyncCallback<String> callback); /** @@ -557,7 +558,8 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync public void deleteSample(TechId sampleIs, String value, AsyncCallback<Void> asyncCallback); /** @see ICommonClientService#deleteExperiments(DisplayedOrSelectedIdHolderCriteria, String) */ - public void deleteExperiments(DisplayedOrSelectedIdHolderCriteria<Experiment> criteria, + public void deleteExperiments( + DisplayedOrSelectedIdHolderCriteria<TableModelRowWithObject<Experiment>> criteria, String value, AsyncCallback<Void> asyncCallback); /** @see ICommonClientService#deleteExperiment(TechId, String) */ @@ -751,13 +753,13 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync /** * @see ICommonClientService#archiveDatasets(DisplayedCriteriaOrSelectedEntityHolder) */ - public void archiveDatasets(DisplayedCriteriaOrSelectedEntityHolder<Experiment> criteria, + public void archiveDatasets(DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> criteria, AsyncCallback<ArchivingResult> callback); /** * @see ICommonClientService#unarchiveDatasets(DisplayedCriteriaOrSelectedEntityHolder) */ - public void unarchiveDatasets(DisplayedCriteriaOrSelectedEntityHolder<Experiment> criteria, + public void unarchiveDatasets(DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> criteria, AsyncCallback<ArchivingResult> callback); /** @@ -897,13 +899,15 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync /** * @see ICommonClientService#lockDatasets(DisplayedCriteriaOrSelectedEntityHolder) */ - public void lockDatasets(DisplayedCriteriaOrSelectedEntityHolder<Experiment> criteria, + public void lockDatasets( + DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> criteria, AsyncCallback<ArchivingResult> callback); /** * @see ICommonClientService#unlockDatasets(DisplayedCriteriaOrSelectedEntityHolder) */ - public void unlockDatasets(DisplayedCriteriaOrSelectedEntityHolder<Experiment> criteria, + public void unlockDatasets( + DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> criteria, AsyncCallback<ArchivingResult> callback); /** diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java index e526cc577eb9497218ecda9542d49c2e08473bed..86c780572103ec6f23fe206108bfe396e803e440 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java @@ -16,8 +16,9 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; -import java.util.Set; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.SelectionListener; @@ -25,6 +26,7 @@ import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer; +import com.google.gwt.user.client.rpc.AsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; @@ -36,49 +38,50 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework. import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.EntityGridModelFactory; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.PersonRenderer; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.DisplayedAndSelectedEntities; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionKind; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.LinkExtractor; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.experiment.CommonExperimentColDefKind; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentDataSetArchivingMenu.SelectedAndDisplayedItems; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractEntityBrowserGrid; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractEntityBrowserGrid.ICriteriaProvider; 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.GridUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IBrowserGridActionInvoker; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICellListener; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICellListenerAndLinkGenerator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabHelper; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedActionWithResult; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.TextToolItem; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListExperimentsCriteria; -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.shared.basic.GridRowModel; -import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; /** * A {@link LayoutContainer} which contains the grid where the experiments are displayed. * * @author Tomasz Pylak */ -public class ExperimentBrowserGrid extends - AbstractEntityBrowserGrid<Experiment, BaseEntityModel<Experiment>, ListExperimentsCriteria> +public class ExperimentBrowserGrid extends TypedTableGrid<Experiment> { private static final String PREFIX = "experiment-browser"; public static final String BROWSER_ID = GenericConstants.ID_PREFIX + PREFIX; - public static final String GRID_ID = BROWSER_ID + "_grid"; + public static final String GRID_ID = BROWSER_ID + TypedTableGrid.GRID_POSTFIX; public static final String EDIT_BUTTON_ID = BROWSER_ID + "_edit-button"; @@ -87,7 +90,7 @@ public class ExperimentBrowserGrid extends /** * Creates a grid without additional toolbar buttons. It can serve as a entity chooser. */ - public static DisposableEntityChooser<Experiment> createChooser( + public static DisposableEntityChooser<TableModelRowWithObject<Experiment>> createChooser( final IViewContext<ICommonClientServiceAsync> viewContext) { final ProjectSelectionTreeGridContainer tree = @@ -96,8 +99,8 @@ public class ExperimentBrowserGrid extends final ExperimentBrowserGrid browserGrid = new ExperimentBrowserGrid(viewContext, toolbar) { @Override - protected void showEntityViewer(Experiment experiment, boolean editMode, - boolean active) + protected void showEntityViewer(TableModelRowWithObject<Experiment> experiment, + boolean editMode, boolean active) { // do nothing - avoid showing the details after double click } @@ -106,7 +109,7 @@ public class ExperimentBrowserGrid extends return createExperimentBrowser(tree, toolbar, browserGrid, viewContext); } - private static DisposableEntityChooser<Experiment> createExperimentBrowser( + private static DisposableEntityChooser<TableModelRowWithObject<Experiment>> createExperimentBrowser( final ProjectSelectionTreeGridContainer tree, final ExperimentBrowserToolbar toolbar, final ExperimentBrowserGrid browserGrid, IMessageProvider messageProvider) { @@ -118,7 +121,7 @@ public class ExperimentBrowserGrid extends * Create a grid with the toolbar and a tree and optional initial selection of experiment type * and project. */ - public static DisposableEntityChooser<Experiment> create( + public static DisposableEntityChooser<TableModelRowWithObject<Experiment>> create( final IViewContext<ICommonClientServiceAsync> viewContext, String initialProjectOrNull, String initialExperimentTypeOrNull) { @@ -133,7 +136,7 @@ public class ExperimentBrowserGrid extends } /** Create a grid with the toolbar and a tree with no initial selection. */ - public static DisposableEntityChooser<Experiment> create( + public static DisposableEntityChooser<TableModelRowWithObject<Experiment>> create( final IViewContext<ICommonClientServiceAsync> viewContext) { return create(viewContext, null, null); @@ -148,25 +151,57 @@ public class ExperimentBrowserGrid extends this.criteriaProvider = criteriaProvider; registerLinkClickListenerFor(CommonExperimentColDefKind.EXPERIMENT_IDENTIFIER.id(), showEntityViewerLinkClickListener); - registerLinkClickListenerFor(CommonExperimentColDefKind.PROJECT.id(), - new ICellListener<Experiment>() + linkExperiment(); + linkProject(); + setId(BROWSER_ID); + } + + private void linkExperiment() + { + ICellListenerAndLinkGenerator<Experiment> listenerLinkGenerator = + new ICellListenerAndLinkGenerator<Experiment>() { - public void handle(Experiment rowItem, boolean keyPressed) + public void handle(TableModelRowWithObject<Experiment> rowItem, + boolean specialKeyPressed) { - final Project project = rowItem.getProject(); - final String href = LinkExtractor.tryExtract(project); - OpenEntityDetailsTabHelper.open(viewContext, project, keyPressed, href); + showEntityInformationHolderViewer(rowItem.getObjectOrNull(), false, + specialKeyPressed); } - }); - setId(BROWSER_ID); + + public String tryGetLink(Experiment entity, + ISerializableComparable comparableValue) + { + return LinkExtractor.tryExtract(entity); + } + }; + registerListenerAndLinkGenerator(ExperimentBrowserGridColumnIDs.CODE, listenerLinkGenerator); + registerListenerAndLinkGenerator(ExperimentBrowserGridColumnIDs.EXPERIMENT_IDENTIFIER, + listenerLinkGenerator); } - @Override - protected ICriteriaProvider<ListExperimentsCriteria> getCriteriaProvider() + private void linkProject() { - return criteriaProvider; - } + registerListenerAndLinkGenerator(ExperimentBrowserGridColumnIDs.PROJECT, + new ICellListenerAndLinkGenerator<Experiment>() + { + public void handle(TableModelRowWithObject<Experiment> rowItem, + boolean specialKeyPressed) + { + final Project project = + rowItem.getObjectOrNull().getProject(); + final String href = LinkExtractor.tryExtract(project); + OpenEntityDetailsTabHelper.open(viewContext, project, + specialKeyPressed, href); + } + public String tryGetLink(Experiment entity, + ISerializableComparable comparableValue) + { + return LinkExtractor.tryExtract(entity.getProject()); + } + }); + } + private void extendBottomToolbar() { if (viewContext.isSimpleOrEmbeddedMode()) @@ -205,7 +240,7 @@ public class ExperimentBrowserGrid extends final Button deleteButton = new Button(deleteAllTitle, new AbstractCreateDialogListener() { @Override - protected Dialog createDialog(List<Experiment> experiments, + protected Dialog createDialog(List<TableModelRowWithObject<Experiment>> experiments, IBrowserGridActionInvoker invoker) { return new ExperimentListDeletionConfirmationDialog(viewContext, @@ -248,7 +283,7 @@ public class ExperimentBrowserGrid extends private void openExperimentRegistrationTab() { final ActionContext context = new ActionContext(); - ListExperimentsCriteria criteriaOrNull = getCriteriaProvider().tryGetCriteria(); + ListExperimentsCriteria criteriaOrNull = criteriaProvider.tryGetCriteria(); if (criteriaOrNull != null) { final ExperimentType experimentType = criteriaOrNull.getExperimentType(); @@ -265,103 +300,99 @@ public class ExperimentBrowserGrid extends topToolbar.setCriteriaChangedListeners(createGridRefreshDelegatedAction()); } + private final IDelegatedAction createGridRefreshDelegatedAction() + { + return new IDelegatedAction() + { + public void execute() + { + if (criteriaProvider.tryGetCriteria() != null) + { + refreshGridWithFilters(); + } + } + }; + } + @Override - protected void listEntities(DefaultResultSetConfig<String, Experiment> resultSetConfig, - AbstractAsyncCallback<ResultSet<Experiment>> callback) + protected String translateColumnIdToDictionaryKey(String columnID) { - criteria.copyPagingConfig(resultSetConfig); - viewContext.getService().listExperiments(criteria, callback); + return columnID.toLowerCase(); } @Override - protected void showEntityViewer(Experiment experiment, boolean editMode, boolean inBackground) + protected void listTableRows( + DefaultResultSetConfig<String, TableModelRowWithObject<Experiment>> resultSetConfig, + AsyncCallback<TypedTableResultSet<Experiment>> callback) { - showEntityInformationHolderViewer(experiment, editMode, inBackground); + ListExperimentsCriteria criteria = criteriaProvider.tryGetCriteria(); + criteria.copyPagingConfig(resultSetConfig); + viewContext.getService().listExperiments(criteria, callback); } @Override - protected BaseEntityModel<Experiment> createModel(GridRowModel<Experiment> entity) + protected void showEntityViewer(TableModelRowWithObject<Experiment> experiment, boolean editMode, boolean inBackground) { - return getColumnsFactory().createModel(entity, - viewContext.getDisplaySettingsManager().getRealNumberFormatingParameters()); + showEntityInformationHolderViewer(experiment.getObjectOrNull(), editMode, inBackground); } @Override - protected ColumnDefsAndConfigs<Experiment> createColumnsDefinition() + protected ColumnDefsAndConfigs<TableModelRowWithObject<Experiment>> createColumnsDefinition() { - ColumnDefsAndConfigs<Experiment> schema = - getColumnsFactory().createColumnsSchema(viewContext, criteria.getExperimentType(), - viewContext.getDisplaySettingsManager().getRealNumberFormatingParameters()); - schema.setGridCellRendererFor(CommonExperimentColDefKind.SHOW_DETAILS_LINK.id(), - createShowDetailsLinkCellRenderer()); + ColumnDefsAndConfigs<TableModelRowWithObject<Experiment>> schema = super.createColumnsDefinition(); GridCellRenderer<BaseEntityModel<?>> linkCellRenderer = createInternalLinkCellRenderer(); - schema.setGridCellRendererFor(CommonExperimentColDefKind.EXPERIMENT_IDENTIFIER.id(), + schema.setGridCellRendererFor(ExperimentBrowserGridColumnIDs.EXPERIMENT_IDENTIFIER, linkCellRenderer); - schema.setGridCellRendererFor(CommonExperimentColDefKind.PROJECT.id(), linkCellRenderer); + schema.setGridCellRendererFor(ExperimentBrowserGridColumnIDs.REGISTRATOR, + PersonRenderer.REGISTRATOR_RENDERER); + schema.setGridCellRendererFor(ExperimentBrowserGridColumnIDs.SHOW_DETAILS_LINK, + LinkRenderer.createExternalLinkRenderer(viewContext + .getMessage(Dict.SHOW_DETAILS_LINK_TEXT_VALUE))); return schema; } - private EntityGridModelFactory<Experiment> getColumnsFactory() - { - return new EntityGridModelFactory<Experiment>(viewContext, getStaticColumnsDefinition()); - } - @Override - protected IColumnDefinitionKind<Experiment>[] getStaticColumnsDefinition() - { - return CommonExperimentColDefKind.values(); - } - - @Override - protected void prepareExportEntities(TableExportCriteria<Experiment> exportCriteria, + protected void prepareExportEntities( + TableExportCriteria<TableModelRowWithObject<Experiment>> exportCriteria, AbstractAsyncCallback<String> callback) { viewContext.getService().prepareExportExperiments(exportCriteria, callback); } @Override - protected EntityType tryToGetEntityType() + protected List<String> getColumnIdsOfFilters() { - return criteria == null ? null : criteria.getExperimentType(); + return Arrays.asList(ExperimentBrowserGridColumnIDs.CODE); } @Override - protected boolean hasColumnsDefinitionChanged(ListExperimentsCriteria newCriteria) + public DatabaseModificationKind[] getRelevantModifications() { - EntityType newEntityType = newCriteria.getExperimentType(); - EntityType prevEntityType = (criteria == null ? null : criteria.getExperimentType()); - return hasColumnsDefinitionChanged(newEntityType, prevEntityType); - } - - @Override - protected List<IColumnDefinition<Experiment>> getInitialFilters() - { - return asColumnFilters(new CommonExperimentColDefKind[] - { CommonExperimentColDefKind.CODE }); - } - - @Override - protected Set<DatabaseModificationKind> getGridRelevantModifications() - { - return getGridRelevantModifications(ObjectKind.EXPERIMENT); - } - - @Override - protected EntityKind getEntityKind() - { - return EntityKind.EXPERIMENT; + return GridUtils.getRelevantModifications(ObjectKind.EXPERIMENT, criteriaProvider); } public final class DisplayedAndSelectedExperiments extends - DisplayedAndSelectedEntities<Experiment> + DisplayedAndSelectedEntities<TableModelRowWithObject<Experiment>> { - public DisplayedAndSelectedExperiments(List<Experiment> selectedItems, - TableExportCriteria<Experiment> displayedItemsConfig, int displayedItemsCount) + public DisplayedAndSelectedExperiments( + List<TableModelRowWithObject<Experiment>> selectedItems, + TableExportCriteria<TableModelRowWithObject<Experiment>> displayedItemsConfig, + int displayedItemsCount) { super(selectedItems, displayedItemsConfig, displayedItemsCount); } - + + public List<Experiment> getExperiments() + { + ArrayList<Experiment> experiments = new ArrayList<Experiment>(); + List<TableModelRowWithObject<Experiment>> rows = getSelectedItems(); + for (TableModelRowWithObject<Experiment> row : rows) + { + experiments.add(row.getObjectOrNull()); + } + return experiments; + } } protected final IDelegatedActionWithResult<DisplayedAndSelectedExperiments> getDisplayedAndSelectedItemsAction() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentDataSetArchivingMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentDataSetArchivingMenu.java index c851a81967693c67978e2ee6539b2be63c52e71f..ff76840f861c2a355592de7c611bc5f80551e67f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentDataSetArchivingMenu.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentDataSetArchivingMenu.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment; +import java.util.ArrayList; import java.util.List; import com.extjs.gxt.ui.client.widget.Dialog; @@ -49,6 +50,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ArchivingServiceKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; /** * 'Archiving' menu for data sets connected to experiments. Here, experiments are the central @@ -174,7 +176,13 @@ public class ExperimentDataSetArchivingMenu extends TextToolItem public List<Experiment> getSelectedExperiments() { - return selectedAndDisplayedItems.getSelectedItems(); + List<TableModelRowWithObject<Experiment>> items = selectedAndDisplayedItems.getSelectedItems(); + List<Experiment> experiments = new ArrayList<Experiment>(); + for (TableModelRowWithObject<Experiment> row : items) + { + experiments.add(row.getObjectOrNull()); + } + return experiments; } } @@ -186,7 +194,7 @@ public class ExperimentDataSetArchivingMenu extends TextToolItem { public void execute(DatastoreServiceDescription service, boolean computeOnSelected) { - DisplayedCriteriaOrSelectedEntityHolder<Experiment> criteria = + DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> criteria = selectedAndDisplayedItems.createCriteria(computeOnSelected); switch (taskKind) { @@ -356,22 +364,27 @@ public class ExperimentDataSetArchivingMenu extends TextToolItem public final static class SelectedAndDisplayedItems { // describes all items which are displayed in the grid (including all grid pages) - private final TableExportCriteria<Experiment> displayedItemsConfig; + private final TableExportCriteria<TableModelRowWithObject<Experiment>> displayedItemsConfig; // currently selected items - private final List<Experiment> selectedItems; + private final List<TableModelRowWithObject<Experiment>> selectedItems; private final int displayedItemsCount; - public SelectedAndDisplayedItems(List<Experiment> selectedItems, - TableExportCriteria<Experiment> displayedItemsConfig, int displayedItemsCount) + public SelectedAndDisplayedItems(List<TableModelRowWithObject<Experiment>> selectedItems, + TableExportCriteria<TableModelRowWithObject<Experiment>> displayedItemsConfig, int displayedItemsCount) { this.displayedItemsConfig = displayedItemsConfig; this.selectedItems = selectedItems; +// this.selectedItems = new ArrayList<Experiment>(); +// for (TableModelRowWithObject<Experiment> row : selectedItems) +// { +// this.selectedItems.add(row.getObjectOrNull()); +// } this.displayedItemsCount = displayedItemsCount; } - public TableExportCriteria<Experiment> getDisplayedItemsConfig() + public TableExportCriteria<TableModelRowWithObject<Experiment>> getDisplayedItemsConfig() { return displayedItemsConfig; } @@ -381,17 +394,16 @@ public class ExperimentDataSetArchivingMenu extends TextToolItem return displayedItemsCount; } - public List<Experiment> getSelectedItems() + public List<TableModelRowWithObject<Experiment>> getSelectedItems() { return selectedItems; } - public DisplayedCriteriaOrSelectedEntityHolder<Experiment> createCriteria(boolean selected) + public DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> createCriteria(boolean selected) { if (selected) { - List<Experiment> items = getSelectedItems(); - return DisplayedCriteriaOrSelectedEntityHolder.createSelectedItems(items); + return DisplayedCriteriaOrSelectedEntityHolder.createSelectedItems(getSelectedItems()); } else { return DisplayedCriteriaOrSelectedEntityHolder diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java index d415e7e26d3182f6e5043c7d3bc73f3c2a291e56..79eea1e8958a0219deaca1f54d4af31817a5ca5b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java @@ -32,6 +32,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelecte import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; public final class ExperimentListDeletionConfirmationDialog extends AbstractDataListDeletionConfirmationDialog<Experiment> @@ -48,7 +49,7 @@ public final class ExperimentListDeletionConfirmationDialog extends AbstractAsyncCallback<Void> callback, DisplayedAndSelectedExperiments selectedAndDisplayedItems) { - super(viewContext, selectedAndDisplayedItems.getSelectedItems(), callback, true); + super(viewContext, selectedAndDisplayedItems.getExperiments(), callback, true); this.viewContext = viewContext; this.singleDataOrNull = null; this.selectedAndDisplayedItemsOrNull = selectedAndDisplayedItems; @@ -69,7 +70,7 @@ public final class ExperimentListDeletionConfirmationDialog extends { if (selectedAndDisplayedItemsOrNull != null) { - final DisplayedOrSelectedIdHolderCriteria<Experiment> uploadCriteria = + final DisplayedOrSelectedIdHolderCriteria<TableModelRowWithObject<Experiment>> uploadCriteria = selectedAndDisplayedItemsOrNull.createCriteria(isOnlySelected()); viewContext.getCommonService().deleteExperiments(uploadCriteria, reason.getValue(), deletionCallback); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ExperimentChooserField.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ExperimentChooserField.java index 86308d8a6c23191cc809e602e8950c300e2721c8..9b41feac29de1b97237886a3ad1dc9ed9ddbcf3f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ExperimentChooserField.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ExperimentChooserField.java @@ -28,6 +28,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.Di import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; /** * A field for selecting an experiment in a fixed group from a list or by specifying code and @@ -35,7 +36,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; * * @author Tomasz Pylak */ -public class ExperimentChooserField extends ChosenEntitySetter<Experiment> +public class ExperimentChooserField extends ChosenEntitySetter<TableModelRowWithObject<Experiment>> { public interface ExperimentChooserFieldAdaptor @@ -104,12 +105,13 @@ public class ExperimentChooserField extends ChosenEntitySetter<Experiment> } private static void browse(final IViewContext<ICommonClientServiceAsync> viewContext, - final ChosenEntitySetter<Experiment> chosenEntityField) + final ChosenEntitySetter<TableModelRowWithObject<Experiment>> chosenEntityField) { - DisposableEntityChooser<Experiment> browser = + DisposableEntityChooser<TableModelRowWithObject<Experiment>> browser = ExperimentBrowserGrid.createChooser(viewContext); String title = viewContext.getMessage(Dict.TITLE_CHOOSE_EXPERIMENT); - new EntityChooserDialog<Experiment>(browser, chosenEntityField, title, viewContext).show(); + new EntityChooserDialog<TableModelRowWithObject<Experiment>>(browser, chosenEntityField, + title, viewContext).show(); } // ------------------ @@ -127,9 +129,9 @@ public class ExperimentChooserField extends ChosenEntitySetter<Experiment> + EXPERIMENT_IDENTIFIER_WITHOUT_GROUP_PATTERN + ")"; @Override - public String renderEntity(Experiment entity) + public String renderEntity(TableModelRowWithObject<Experiment> entity) { - return print(ExperimentIdentifier.createIdentifier(entity)); + return print(ExperimentIdentifier.createIdentifier(entity.getObjectOrNull())); } private ExperimentIdentifier tryGetIdentifier() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/GridUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/GridUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..fb4945ae713a55e05d07dca4c2b8ad1f33f8fd9a --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/GridUtils.java @@ -0,0 +1,65 @@ +/* + * 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.generic.client.web.client.application.ui.grid; + +import static ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.createOrDelete; +import static ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.edit; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractEntityBrowserGrid.ICriteriaProvider; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.SetUtils; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind; + +/** + * + * + * @author Franz-Josef Elmer + */ +public class GridUtils +{ + public static DatabaseModificationKind[] getRelevantModifications(ObjectKind entityKind, + ICriteriaProvider<?> criteriaProvider) + { + List<DatabaseModificationKind> relevantModifications = + new ArrayList<DatabaseModificationKind>(); + SetUtils.addAll(relevantModifications, criteriaProvider.getRelevantModifications()); + relevantModifications.addAll(GridUtils.getGridRelevantModifications(entityKind, true)); + return relevantModifications.toArray(DatabaseModificationKind.EMPTY_ARRAY); + } + + public final static Set<DatabaseModificationKind> getGridRelevantModifications( + ObjectKind entity, boolean withProject) + { + Set<DatabaseModificationKind> result = new HashSet<DatabaseModificationKind>(); + result.add(createOrDelete(entity)); + result.add(edit(entity)); + result.add(createOrDelete(ObjectKind.PROPERTY_TYPE_ASSIGNMENT)); + result.add(edit(ObjectKind.PROPERTY_TYPE_ASSIGNMENT)); + result.add(edit(ObjectKind.VOCABULARY_TERM)); + if (withProject) + { + result.add(edit((ObjectKind.PROJECT))); + } + return result; + } + +} 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 f3a137fb173bd6eaa57e3271e7fbc974683703e8..3fd72ea98becacb3fd7b676fb38caa722d7cc77a 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 @@ -16,10 +16,6 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample; -import static ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.createOrDelete; -import static ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.edit; - -import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -52,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractEntityBrowserGrid.ICriteriaProvider; 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.GridUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IBrowserGridActionInvoker; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICellListenerAndLinkGenerator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; @@ -63,7 +60,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listene import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.IDataRefreshCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedActionWithResult; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.SetUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListEntityDisplayCriteriaKind; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListSampleDisplayCriteria; @@ -597,30 +593,8 @@ public class SampleBrowserGrid extends TypedTableGrid<Sample> @Override public DatabaseModificationKind[] getRelevantModifications() { - List<DatabaseModificationKind> relevantModifications = - new ArrayList<DatabaseModificationKind>(); - SetUtils.addAll(relevantModifications, getCriteriaProvider().getRelevantModifications()); - relevantModifications.addAll(getGridRelevantModifications()); - return relevantModifications.toArray(DatabaseModificationKind.EMPTY_ARRAY); - } - - protected Set<DatabaseModificationKind> getGridRelevantModifications() - { - Set<DatabaseModificationKind> result = getGridRelevantModifications(ObjectKind.SAMPLE); - result.add(edit(ObjectKind.PROJECT)); - return result; - } - - protected final static Set<DatabaseModificationKind> getGridRelevantModifications( - ObjectKind entity) - { - Set<DatabaseModificationKind> result = new HashSet<DatabaseModificationKind>(); - result.add(createOrDelete(entity)); - result.add(edit(entity)); - result.add(createOrDelete(ObjectKind.PROPERTY_TYPE_ASSIGNMENT)); - result.add(edit(ObjectKind.PROPERTY_TYPE_ASSIGNMENT)); - result.add(edit(ObjectKind.VOCABULARY_TERM)); - return result; + ICriteriaProvider<?> criteriaProvider = getCriteriaProvider(); + return GridUtils.getRelevantModifications(ObjectKind.SAMPLE, criteriaProvider); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExperimentBrowserGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExperimentBrowserGridColumnIDs.java new file mode 100644 index 0000000000000000000000000000000000000000..17b3c05db54020b855841e8d0e7e7fbd94379151 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExperimentBrowserGridColumnIDs.java @@ -0,0 +1,39 @@ +/* + * 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.generic.client.web.client.dto; + +/** + * Column IDs for experiment browser grid. + * + * @author Franz-Josef Elmer + */ +public class ExperimentBrowserGridColumnIDs +{ + public static final String CODE = "CODE"; + public static final String EXPERIMENT_TYPE = "EXPERIMENT_TYPE"; + public static final String EXPERIMENT_IDENTIFIER = "EXPERIMENT_IDENTIFIER"; + public static final String DATABASE_INSTANCE = "DATABASE_INSTANCE"; + public static final String GROUP = "GROUP"; + public static final String PROJECT = "PROJECT"; + public static final String REGISTRATOR = "REGISTRATOR"; + public static final String REGISTRATION_DATE = "REGISTRATION_DATE"; + public static final String IS_INVALID = "IS_INVALID"; + public static final String PERM_ID = "PERM_ID"; + public static final String SHOW_DETAILS_LINK = "SHOW_DETAILS_LINK"; + + public static final String PROPERTIES_PREFIX = "property-"; +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ListExperimentsCriteria.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ListExperimentsCriteria.java index 2eaac57e533738852bcb7f3bbc32e2186f55a944..eb11e8340878c63a1569e06ce50cefc58023de78 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ListExperimentsCriteria.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ListExperimentsCriteria.java @@ -21,13 +21,14 @@ import com.google.gwt.user.client.rpc.IsSerializable; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; /** * Criteria for listing <i>experiments</i>. * * @author Izabela Adamczyk */ -public final class ListExperimentsCriteria extends DefaultResultSetConfig<String, Experiment> +public final class ListExperimentsCriteria extends DefaultResultSetConfig<String, TableModelRowWithObject<Experiment>> implements IsSerializable { private ExperimentType experimentType; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java index b7f992069b06e422c26d38cd64f0721489263136..8e983523ba957ec335f4b128a8881b3e1a9b8060 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java @@ -70,6 +70,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.Authorizatio import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.CacheManager; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.DataSetTypeProvider; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.EntityTypeProvider; +import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.ExperimentProvider; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.FileFormatTypesProvider; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IOriginalDataProvider; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IResultSet; @@ -432,7 +433,8 @@ public final class CommonClientService extends AbstractClientService implements return prepareExportEntities(criteria); } - public final String prepareExportExperiments(final TableExportCriteria<Experiment> criteria) + public final String prepareExportExperiments( + final TableExportCriteria<TableModelRowWithObject<Experiment>> criteria) { return prepareExportEntities(criteria); } @@ -582,11 +584,12 @@ public final class CommonClientService extends AbstractClientService implements return new DataSetRelatedEntities(entities); } - public final ResultSet<Experiment> listExperiments(final ListExperimentsCriteria listCriteria) + public final TypedTableResultSet<Experiment> listExperiments( + final ListExperimentsCriteria listCriteria) { final String sessionToken = getSessionToken(); - return listEntities(listCriteria, new ListExperimentsOriginalDataProvider(commonServer, - listCriteria, sessionToken)); + return listEntities(new ExperimentProvider(commonServer, sessionToken, listCriteria), + listCriteria); } public ResultSet<PropertyType> listPropertyTypes( @@ -1626,7 +1629,8 @@ public final class CommonClientService extends AbstractClientService implements } } - public void deleteExperiments(DisplayedOrSelectedIdHolderCriteria<Experiment> criteria, + public void deleteExperiments( + DisplayedOrSelectedIdHolderCriteria<TableModelRowWithObject<Experiment>> criteria, String reason) throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException { @@ -2150,7 +2154,7 @@ public final class CommonClientService extends AbstractClientService implements } private List<String> extractDatasetCodes( - DisplayedCriteriaOrSelectedEntityHolder<Experiment> experimentCriteria) + DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> experimentCriteria) { // Get the referenced experiments List<Experiment> experiments = getReferencedExperiments(experimentCriteria); @@ -2167,20 +2171,26 @@ public final class CommonClientService extends AbstractClientService implements } private List<Experiment> getReferencedExperiments( - DisplayedCriteriaOrSelectedEntityHolder<Experiment> experimentCriteria) + DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> experimentCriteria) { + List<TableModelRowWithObject<Experiment>> rows; if (experimentCriteria.hasSelectedItems()) { - return experimentCriteria.tryGetSelectedItems(); + rows = experimentCriteria.tryGetSelectedItems(); } else { - TableExportCriteria<Experiment> displayedItemsCriteria = + TableExportCriteria<TableModelRowWithObject<Experiment>> displayedItemsCriteria = experimentCriteria.tryGetDisplayedItems(); assert displayedItemsCriteria != null : "displayedItemsCriteria is null"; - List<Experiment> experiments = + rows = fetchCachedEntities(displayedItemsCriteria).extractOriginalObjects(); - return experiments; } + List<Experiment> experiments = new ArrayList<Experiment>(); + for (TableModelRowWithObject<Experiment> row : rows) + { + experiments.add(row.getObjectOrNull()); + } + return experiments; } private List<String> extractDatasetCodes( @@ -2708,7 +2718,7 @@ public final class CommonClientService extends AbstractClientService implements } public ArchivingResult archiveDatasets( - DisplayedCriteriaOrSelectedEntityHolder<Experiment> criteria) + DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> criteria) { try { @@ -2723,7 +2733,7 @@ public final class CommonClientService extends AbstractClientService implements } public ArchivingResult unarchiveDatasets( - DisplayedCriteriaOrSelectedEntityHolder<Experiment> criteria) + DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> criteria) { try { @@ -2737,7 +2747,7 @@ public final class CommonClientService extends AbstractClientService implements } } - public ArchivingResult lockDatasets(DisplayedCriteriaOrSelectedEntityHolder<Experiment> criteria) + public ArchivingResult lockDatasets(DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> criteria) throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException { try @@ -2753,7 +2763,7 @@ public final class CommonClientService extends AbstractClientService implements } public ArchivingResult unlockDatasets( - DisplayedCriteriaOrSelectedEntityHolder<Experiment> criteria) + DisplayedCriteriaOrSelectedEntityHolder<TableModelRowWithObject<Experiment>> criteria) throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException { try diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/ExperimentProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/ExperimentProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..a23806e1cb3a628dc6c86e7bba25cbbf4e2ab3b4 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/ExperimentProvider.java @@ -0,0 +1,123 @@ +/* + * 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.generic.client.web.server.resultset; + +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.CODE; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.DATABASE_INSTANCE; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.EXPERIMENT_IDENTIFIER; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.EXPERIMENT_TYPE; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.GROUP; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.IS_INVALID; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.PERM_ID; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.PROJECT; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.REGISTRATION_DATE; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.REGISTRATOR; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.SHOW_DETAILS_LINK; + +import java.util.List; + +import ch.systemsx.cisd.common.collections.IKeyExtractor; +import ch.systemsx.cisd.common.collections.TableMap; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListExperimentsCriteria; +import ch.systemsx.cisd.openbis.generic.shared.ICommonServer; +import ch.systemsx.cisd.openbis.generic.shared.basic.SimpleYesNoRenderer; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableModel; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.util.IColumnGroup; +import ch.systemsx.cisd.openbis.generic.shared.util.TypedTableModelBuilder; + +/** + * + * + * @author Franz-Josef Elmer + */ +public class ExperimentProvider extends AbstractCommonTableModelProvider<Experiment> +{ + + private final ListExperimentsCriteria criteria; + + public ExperimentProvider(ICommonServer commonServer, String sessionToken, + ListExperimentsCriteria criteria) + { + super(commonServer, sessionToken); + this.criteria = criteria; + } + + @Override + protected TypedTableModel<Experiment> createTableModel() + { + List<Experiment> experiments = + commonServer.listExperiments(sessionToken, criteria.getExperimentType(), + new ProjectIdentifier(criteria.getGroupCode(), criteria + .getProjectCode())); + TypedTableModelBuilder<Experiment> builder = new TypedTableModelBuilder<Experiment>(); + builder.addColumn(CODE); + builder.addColumn(EXPERIMENT_TYPE).hideByDefault(); + builder.addColumn(EXPERIMENT_IDENTIFIER).hideByDefault().withDefaultWidth(150); + builder.addColumn(DATABASE_INSTANCE).hideByDefault(); + builder.addColumn(GROUP).hideByDefault(); + builder.addColumn(PROJECT).hideByDefault(); + builder.addColumn(REGISTRATOR); + builder.addColumn(REGISTRATION_DATE).withDefaultWidth(200); + builder.addColumn(IS_INVALID).hideByDefault(); + builder.addColumn(PERM_ID).hideByDefault(); + builder.addColumn(SHOW_DETAILS_LINK).hideByDefault(); + TableMap<String, ExperimentType> experimentTypes = getExperimentTypes(); + for (Experiment experiment : experiments) + { + builder.addRow(experiment); + builder.column(CODE).addString(experiment.getCode()); + builder.column(EXPERIMENT_TYPE).addString(experiment.getExperimentType().getCode()); + builder.column(EXPERIMENT_IDENTIFIER).addString(experiment.getIdentifier()); + builder.column(DATABASE_INSTANCE).addString(experiment.getProject().getSpace().getInstance().getCode()); + builder.column(GROUP).addString(experiment.getProject().getSpace().getCode()); + builder.column(PROJECT).addString(experiment.getProject().getCode()); + builder.column(REGISTRATOR).addPerson(experiment.getRegistrator()); + builder.column(REGISTRATION_DATE).addDate(experiment.getRegistrationDate()); + builder.column(IS_INVALID).addString(SimpleYesNoRenderer.render(experiment.getInvalidation() != null)); + builder.column(PERM_ID).addString(experiment.getPermId()); + builder.column(SHOW_DETAILS_LINK).addString(experiment.getPermlink()); + ExperimentType experimentType = experimentTypes.tryGet(experiment.getExperimentType().getCode()); + IColumnGroup columnGroup = builder.columnGroup(ExperimentBrowserGridColumnIDs.PROPERTIES_PREFIX); + if (experimentType != null) + { + columnGroup.addColumnsForAssignedProperties(experimentType); + } + columnGroup.addProperties(experiment.getProperties()); + } + return builder.getModel(); + } + + protected TableMap<String, ExperimentType> getExperimentTypes() + { + List<ExperimentType> experimentTypes = commonServer.listExperimentTypes(sessionToken); + TableMap<String, ExperimentType> experimentTypMap = + new TableMap<String, ExperimentType>(experimentTypes, + new IKeyExtractor<String, ExperimentType>() + { + public String getKey(ExperimentType e) + { + return e.getCode(); + } + }); + return experimentTypMap; + } + +} diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/ExperimentBrowsingTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/ExperimentBrowsingTest.java index 71aa2e0a208c673642ae671aaf0d8acf9f312f72..0cd2d124b43b02cac92be1164dd1ff212fead910 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/ExperimentBrowsingTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/ExperimentBrowsingTest.java @@ -24,6 +24,7 @@ import org.testng.annotations.Test; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListExperimentsCriteria; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSetFetchConfig; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; @@ -52,14 +53,14 @@ public class ExperimentBrowsingTest extends SystemTestCase project.setSpace(space); project.setCode("NEMO"); criteria.setProject(project); - ResultSet<Experiment> resultSet = commonClientService.listExperiments(criteria); + TypedTableResultSet<Experiment> resultSet = commonClientService.listExperiments(criteria); Experiment e1 = getOriginalObjectByCode(resultSet, "EXP-TEST-1"); assertProperty(e1, "COMMENT", "cmnt"); Experiment e2 = getOriginalObjectByCode(resultSet, "EXP-TEST-2"); assertProperty(e2, "GENDER", "FEMALE"); - assertEquals(false, resultSet.isPartial()); - assertEquals(5, resultSet.getTotalLength()); - assertEquals(5, resultSet.getList().size()); + assertEquals(false, resultSet.getResultSet().isPartial()); + assertEquals(5, resultSet.getResultSet().getTotalLength()); + assertEquals(5, resultSet.getResultSet().getList().size()); } @Test @@ -76,14 +77,14 @@ public class ExperimentBrowsingTest extends SystemTestCase project.setSpace(space); project.setCode("DEFAULT"); criteria.setProject(project); - ResultSet<Experiment> resultSet = commonClientService.listExperiments(criteria); + TypedTableResultSet<Experiment> resultSet = commonClientService.listExperiments(criteria); Experiment e1 = getOriginalObjectByCode(resultSet, "EXP-REUSE"); assertEquals(null, e1.getInvalidation()); Experiment e2 = getOriginalObjectByCode(resultSet, "EXP-X"); assertEquals(null, e2.getInvalidation().getReason()); - assertEquals(false, resultSet.isPartial()); - assertEquals(3, resultSet.getTotalLength()); - assertEquals(3, resultSet.getList().size()); + assertEquals(false, resultSet.getResultSet().isPartial()); + assertEquals(3, resultSet.getResultSet().getTotalLength()); + assertEquals(3, resultSet.getResultSet().getList().size()); } @Test @@ -102,17 +103,17 @@ public class ExperimentBrowsingTest extends SystemTestCase criteria.setProject(project); criteria.setLimit(2); criteria.setCacheConfig(ResultSetFetchConfig.<String>createComputeAndCache()); - ResultSet<Experiment> resultSet = commonClientService.listExperiments(criteria); - String key = resultSet.getResultSetKey(); - assertEquals(true, resultSet.isPartial()); - assertEquals(2, resultSet.getTotalLength()); - assertEquals(2, resultSet.getList().size()); + TypedTableResultSet<Experiment> resultSet = commonClientService.listExperiments(criteria); + String key = resultSet.getResultSet().getResultSetKey(); + assertEquals(true, resultSet.getResultSet().isPartial()); + assertEquals(2, resultSet.getResultSet().getTotalLength()); + assertEquals(2, resultSet.getResultSet().getList().size()); criteria.setCacheConfig(ResultSetFetchConfig.createFetchFromCacheAndRecompute(key)); resultSet = commonClientService.listExperiments(criteria); - assertEquals(key, resultSet.getResultSetKey()); - assertEquals(false, resultSet.isPartial()); - assertEquals(5, resultSet.getTotalLength()); - assertEquals(2, resultSet.getList().size()); + assertEquals(key, resultSet.getResultSet().getResultSetKey()); + assertEquals(false, resultSet.getResultSet().isPartial()); + assertEquals(5, resultSet.getResultSet().getTotalLength()); + assertEquals(2, resultSet.getResultSet().getList().size()); } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java index 423dda0aebd144e64229f096e7c88e04276839b5..463253b0e692c5b01839627ec20a7193208864b1 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java @@ -37,16 +37,17 @@ import org.testng.annotations.BeforeSuite; import ch.systemsx.cisd.common.servlet.SpringRequestContextProvider; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientService; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridRowModels; -import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SessionContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet; import ch.systemsx.cisd.openbis.generic.client.web.server.UploadedFilesBean; import ch.systemsx.cisd.openbis.generic.server.ICommonServerForInternalUse; import ch.systemsx.cisd.openbis.generic.server.util.TestInitializer; import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel; -import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CodeWithRegistration; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityPropertiesHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientService; import ch.systemsx.cisd.openbis.plugin.generic.shared.IGenericServer; @@ -168,13 +169,13 @@ public abstract class SystemTestCase extends AbstractTransactionalTestNGSpringCo session.setAttribute(SESSION_KEY, bean); } - protected <T extends ICodeHolder> T getOriginalObjectByCode(ResultSet<T> resultSet, String code) + protected <T extends CodeWithRegistration<?>> T getOriginalObjectByCode(TypedTableResultSet<T> resultSet, String code) { - GridRowModels<T> list = resultSet.getList(); + GridRowModels<TableModelRowWithObject<T>> list = resultSet.getResultSet().getList(); List<String> codes = new ArrayList<String>(); - for (GridRowModel<T> gridRowModel : list) + for (GridRowModel<TableModelRowWithObject<T>> gridRowModel : list) { - T originalObject = gridRowModel.getOriginalObject(); + T originalObject = gridRowModel.getOriginalObject().getObjectOrNull(); String objectCode = originalObject.getCode(); if (objectCode.equals(code)) { diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java index 17d6625cea89c8eadd78870f02559d824b847a7d..9aa497c7870039753897aedda23cb12cedb07723 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java @@ -528,13 +528,13 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> ExperimentChooserFieldAdaptor experimentChooser = ExperimentChooserField.create("", true, null, viewContext.getCommonViewContext()); final ExperimentChooserField chooserField = experimentChooser.getChooserField(); - chooserField.addChosenEntityListener(new IChosenEntityListener<Experiment>() + chooserField.addChosenEntityListener(new IChosenEntityListener<TableModelRowWithObject<Experiment>>() { - public void entityChosen(Experiment experiment) + public void entityChosen(TableModelRowWithObject<Experiment> row) { - if (experiment != null) + if (row != null) { - chooseSingleExperiment(chooserField, experiment); + chooseSingleExperiment(chooserField, row.getObjectOrNull()); } } });