diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooserPanel.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooserPanel.java index 7d3549af2853623f13e33837733ad8dc79f5e8e4..c8b6fe9972475b04a73cfc98b703772256658a7f 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooserPanel.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooserPanel.java @@ -366,7 +366,7 @@ public class ChannelChooserPanel extends LayoutContainer return channels; } - private void addChannelsForParameters(ImageDatasetParameters imageParameters) + public void addChannelsForParameters(ImageDatasetParameters imageParameters) { addChannelToComboBox(new LabeledItem<String>(MERGED_CHANNELS, MERGED_CHANNELS)); @@ -439,7 +439,7 @@ public class ChannelChooserPanel extends LayoutContainer return false; } - private void updateChannelSelection(List<String> selectedChannels) + public void updateChannelSelection(List<String> selectedChannels) { List<String> channels = selectedChannels; if (channels == null || channels.size() == 0) 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 961bd58e11dfce6099cc4219b5a03018d40ffa35..53b58c9f9fa9a94f5ce1946a27991448cd8c300b 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 @@ -31,6 +31,7 @@ import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer; import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; +import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Widget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; @@ -50,8 +51,10 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ID import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabAction; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridRowModels; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet; +import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; @@ -653,9 +656,7 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements channelChooser.tryGetSelectedTransformationCode(false), channelChooser.tryGetSelectedIntensityRanges()); - ImageDatasetParameters imageParameters = images.getImageParameters(); channelChooser.addSelectionChangedListener(widgetWithListener); - channelChooser.addChannels(imageParameters); return widgetWithListener.asWidget(); } @@ -681,7 +682,40 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements WellSearchCriteria searchCriteria = new WellSearchCriteria(experimentCriteriaOrNull, materialCriteria, analysisProcedureCriteria); - getViewContext().getService().listPlateWells(resultSetConfig, searchCriteria, callback); + getViewContext().getService().listPlateWells(resultSetConfig, searchCriteria, + new AsyncCallback<TypedTableResultSet<WellContent>>() + { + @Override + public void onFailure(Throwable caught) + { + callback.onFailure(caught); + } + + @Override + public void onSuccess(TypedTableResultSet<WellContent> result) + { + GridRowModels<TableModelRowWithObject<WellContent>> rows = + result.getResultSet().getList(); + for (GridRowModel<TableModelRowWithObject<WellContent>> row : rows) + { + WellContent wellContent = row.getOriginalObject().getObjectOrNull(); + if (wellContent != null) + { + + DatasetImagesReference dataSet = + wellContent.tryGetImageDataset(); + if (dataSet != null) + { + ImageDatasetParameters imageParameters = + dataSet.getImageParameters(); + channelChooser.addChannelsForParameters(imageParameters); + } + } + } + channelChooser.updateChannelSelection(null); + callback.onSuccess(result); + } + }); } @Override diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java index 5e02233207afbcf7eafb2a2a722833e62f363d4a..7ab010e27041bf58091712d4079ff2481269c615 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java @@ -114,6 +114,7 @@ public final class ScreeningBusinessObjectFactory extends AbstractPluginBusiness { return new IMetadataProvider() { + private IDatasetLister lister; @Override public SampleIdentifier tryGetSampleIdentifier(String samplePermId) @@ -125,9 +126,18 @@ public final class ScreeningBusinessObjectFactory extends AbstractPluginBusiness public List<String> tryGetContainedDatasets(String datasetCode) { List<String> result = - createDatasetLister(session).listContainedCodes(datasetCode); + getLister().listContainedCodes(datasetCode); return result; } + + private IDatasetLister getLister() + { + if (lister == null) + { + lister = createDatasetLister(session); + } + return lister; + } }; } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/WellContentLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/WellContentLoader.java index 527a80ee5507bbf7aad3e4fab8ddebe7e8835f8f..201b18ee4fc449aef2b9bd13f26a9bfa51b31697 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/WellContentLoader.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/WellContentLoader.java @@ -35,6 +35,7 @@ import ch.rinn.restrictions.Friend; import ch.systemsx.cisd.common.collection.IKeyExtractor; import ch.systemsx.cisd.common.collection.TableMap; import ch.systemsx.cisd.common.collection.TableMap.UniqueKeyViolationStrategy; +import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.server.business.bo.materiallister.IMaterialLister; import ch.systemsx.cisd.openbis.generic.server.business.bo.samplelister.ISampleLister; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; @@ -90,6 +91,8 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.IHCSFeatureVecto @Friend(toClasses = IScreeningQuery.class) public class WellContentLoader extends AbstractContentLoader { + private static final int MAX_NUMBERS_OF_MATERIALS = 1000; + /** * Finds wells containing the specified material and belonging to the specified experiment. * Loads wells metadata, but no information about connected datasets. @@ -809,6 +812,12 @@ public class WellContentLoader extends AbstractContentLoader "[%d msec] Finding %d materials for criteria '%s'. Result: %s", (System.currentTimeMillis() - start), materialIds.length, codesCriteria, abbreviate(materialIds, 100))); + if (materialIds.length > MAX_NUMBERS_OF_MATERIALS) + { + throw new UserFailureException("More than " + MAX_NUMBERS_OF_MATERIALS + + " materials for criteria '" + codesCriteria + "' are found. " + + "Please restrict your search criteria."); + } start = System.currentTimeMillis(); if (experimentOrNull != null)