From 211defe0a80622983ec848ea47f8079ba211064e Mon Sep 17 00:00:00 2001 From: tpylak <tpylak> Date: Tue, 7 Jun 2011 15:35:23 +0000 Subject: [PATCH] LMS-2268 allow to specify project in 'all assays for a gene' view (only with the URL). Keep this setting when navigating between different views. SVN: 21624 --- .../application/ClientPluginFactory.java | 89 ++++---- .../application/ScreeningViewContext.java | 4 - .../ExperimentAnalysisSummaryGrid.java | 22 +- .../ExperimentAnalysisSummarySection.java | 2 +- .../ExperimentAnalysisSummaryViewer.java | 26 ++- .../ExperimentWellMaterialBrowserGrid.java | 15 +- .../detailviewers/ImagingMaterialViewer.java | 34 +++- .../MaterialDisambiguationGrid.java | 2 +- ...aterialFeaturesFromAllExperimentsGrid.java | 23 ++- ...erialFeaturesFromAllExperimentsViewer.java | 20 +- ...erialFeaturesFromAllExpermentsSection.java | 10 +- .../MaterialReplicaSummaryComponent.java | 80 +++++--- .../MaterialReplicaSummarySection.java | 19 +- .../MaterialReplicaSummaryViewer.java | 69 ++++--- .../detailviewers/WellContentDialog.java | 12 +- .../detailviewers/WellSearchGrid.java | 47 +++-- .../ExperimentAnalysisSummaryResolver.java | 7 +- .../ImagingMaterialLocatorResolver.java | 76 ++++--- ...ialFeaturesFromAllExperimentsResolver.java | 67 ------ .../MaterialReplicaSummaryResolver.java | 48 ----- .../locator/WellSearchLocatorResolver.java | 19 +- .../specific/ScreeningLinkExtractor.java | 192 +++++++----------- .../ExperimentIdentifierSearchCriteria.java | 46 ++++- .../screening/server/ScreeningServer.java | 32 ++- .../server/dataaccess/IScreeningQuery.java | 21 ++ .../server/logic/WellContentLoader.java | 44 ++-- .../WellSearchCriteriaPredicate.java | 66 ++++-- .../shared/basic/dto/WellSearchCriteria.java | 131 ++++++++++-- .../java/BiozentrumMatLabApiTest.java | 108 ++++++++-- .../utils/EntityTypeLabelUtilsTest.java | 8 +- .../server/dataaccess/ScreeningDAOTest.java | 19 +- 31 files changed, 794 insertions(+), 564 deletions(-) delete mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/MaterialFeaturesFromAllExperimentsResolver.java delete mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/MaterialReplicaSummaryResolver.java diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java index df48e2f1c88..6f86cdbfb82 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java @@ -48,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWit import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicProjectIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; @@ -65,9 +66,9 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.d import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.PlateSampleViewer; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.sample.LibrarySampleBatchRegistrationForm; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor; -import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ExperimentReference; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchByProjectCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.SingleExperimentSearchCriteria; /** @@ -185,11 +186,13 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree */ public static final void openImagingExperimentViewer( final IEntityInformationHolderWithPermId experiment, + boolean restrictGlobalScopeLinkToProject, final IViewContext<IScreeningClientServiceAsync> viewContext) { if (viewContext.getModel().isEmbeddedMode()) { - ExperimentAnalysisSummaryViewer.openTab(viewContext, new TechId(experiment)); + ExperimentAnalysisSummaryViewer.openTab(viewContext, new TechId(experiment), + restrictGlobalScopeLinkToProject); } else { new OpenEntityDetailsTabAction(experiment, viewContext).execute(); @@ -200,13 +203,15 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree * Creates a link to experiment detail viewer. In embedded mode the link will lead to the tab * which has only the content of the analysis summary panel. */ - public static String createImagingExperimentViewerLink(ExperimentReference experiment, + public static String createImagingExperimentViewerLink( + IEntityInformationHolderWithPermId experiment, + boolean restrictGlobalScopeLinkToProject, IViewContext<IScreeningClientServiceAsync> viewContext) { if (viewContext.getModel().isEmbeddedMode()) { - return ScreeningLinkExtractor.createExperimentAnalysisSummaryBrowserLink(experiment - .getPermId()); + return ScreeningLinkExtractor.createExperimentAnalysisSummaryBrowserLink( + experiment.getPermId(), restrictGlobalScopeLinkToProject); } else { return LinkExtractor.tryExtract(experiment); @@ -225,18 +230,26 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree final ExperimentSearchCriteria experimentCriteriaOrNull, final IViewContext<IScreeningClientServiceAsync> viewContext) { - String experimentPermId = tryGetExperimentPermId(experimentCriteriaOrNull); if (viewContext.getModel().isEmbeddedMode()) { MaterialIdentifier materialIdentifier = asMaterialIdentifier(material); - if (experimentPermId != null) + ExperimentSearchByProjectCriteria multipleExperimentsScope = + tryAsMultipleExperimentsCriteria(experimentCriteriaOrNull); + if (multipleExperimentsScope != null) { - MaterialReplicaSummaryViewer.openTab(viewContext, experimentPermId, - materialIdentifier); + MaterialFeaturesFromAllExperimentsViewer.openTab(viewContext, materialIdentifier, + multipleExperimentsScope); } else { - MaterialFeaturesFromAllExperimentsViewer.openTab(viewContext, materialIdentifier, - null); + assert experimentCriteriaOrNull != null; + SingleExperimentSearchCriteria experiment = + experimentCriteriaOrNull.tryGetExperiment(); + assert experiment != null; + + MaterialReplicaSummaryViewer.openTab(viewContext, experiment.getExperimentPermId(), + experimentCriteriaOrNull.getRestrictGlobalSearchLinkToProject(), + materialIdentifier); + } } else { @@ -244,35 +257,23 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree } } - /** - * Creates a link to material detail viewer. In embedded mode the link will lead to the tab - * which has only the replica summary panel (for a chosen experiment or for all of them, - * depending on the criteria). - */ - public static String createImagingMaterialViewerLink( - final IEntityInformationHolderWithPermId material, - final ExperimentSearchCriteria experimentCriteria, - IViewContext<IScreeningClientServiceAsync> viewContext) + private static ExperimentSearchByProjectCriteria tryAsMultipleExperimentsCriteria( + ExperimentSearchCriteria experimentCriteriaOrNull) { - if (viewContext.getModel().isEmbeddedMode()) + if (experimentCriteriaOrNull == null) { - SingleExperimentSearchCriteria experiment = experimentCriteria.tryGetExperiment(); - String materialCode = material.getCode(); - String materialTypeCode = material.getEntityType().getCode(); - if (experiment != null) - { - return ScreeningLinkExtractor.createMaterialReplicaSummaryLink( - experiment.getExperimentPermId(), materialCode, materialTypeCode); - } else - { - return ScreeningLinkExtractor.createMaterialFeaturesFromAllExperimentsLink( - materialCode, materialTypeCode); - } - } else + return ExperimentSearchByProjectCriteria.createAllExperimentsForAllProjects(); + } + if (experimentCriteriaOrNull.tryGetExperiment() != null) + { + return null; + } + BasicProjectIdentifier project = experimentCriteriaOrNull.tryGetProjectIdentifier(); + if (project != null) { - return ScreeningLinkExtractor - .tryCreateMaterialDetailsLink(material, experimentCriteria); + return ExperimentSearchByProjectCriteria.createAllExperimentsForProject(project); } + return ExperimentSearchByProjectCriteria.createAllExperimentsForAllProjects(); } private static void openImagingMaterialGenericViewer( @@ -286,22 +287,6 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree DispatcherHelper.dispatchNaviEvent(tab); } - private static String tryGetExperimentPermId(ExperimentSearchCriteria criteriaOrNull) - { - if (criteriaOrNull == null) - { - return null; - } - SingleExperimentSearchCriteria singleExperiment = criteriaOrNull.tryGetExperiment(); - if (singleExperiment != null) - { - return singleExperiment.getExperimentPermId(); - } else - { - return null; - } - } - private static MaterialIdentifier asMaterialIdentifier( IEntityInformationHolderWithPermId material) { diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningViewContext.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningViewContext.java index c6cdaaa0a9a..49d083e5d1b 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningViewContext.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningViewContext.java @@ -11,8 +11,6 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningCli import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.ExperimentAnalysisSummaryResolver; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.GlobalWellSearchLocatorResolver; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.ImagingMaterialLocatorResolver; -import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.MaterialFeaturesFromAllExperimentsResolver; -import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.MaterialReplicaSummaryResolver; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.PlateMetadataBrowserLocatorResolver; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.WellSearchLocatorResolver; @@ -52,8 +50,6 @@ public final class ScreeningViewContext extends handlerRegistry.registerHandler(new WellSearchLocatorResolver(this)); handlerRegistry.registerHandler(new GlobalWellSearchLocatorResolver(this)); handlerRegistry.registerHandler(new ExperimentAnalysisSummaryResolver(this)); - handlerRegistry.registerHandler(new MaterialReplicaSummaryResolver(this)); - handlerRegistry.registerHandler(new MaterialFeaturesFromAllExperimentsResolver(this)); } public static ScreeningDisplaySettingsManager getTechnologySpecificDisplaySettingsManager( diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummaryGrid.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummaryGrid.java index ba24315c542..dc24816f0f9 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummaryGrid.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummaryGrid.java @@ -54,20 +54,21 @@ public class ExperimentAnalysisSummaryGrid extends TypedTableGrid<MaterialFeatur private static final String PREFIX = GenericConstants.ID_PREFIX + "experiment-feature-vector-summary"; - public static final String BROWSER_ID = PREFIX + "_main"; - - public static final String GRID_ID = PREFIX + TypedTableGrid.GRID_POSTFIX; + private static final String BROWSER_ID = PREFIX + "_main"; private final IViewContext<IScreeningClientServiceAsync> screeningViewContext; private final IEntityInformationHolderWithIdentifier experiment; + private final boolean restrictGlobalScopeLinkToProject; + public static IDisposableComponent create( IViewContext<IScreeningClientServiceAsync> viewContext, - IEntityInformationHolderWithIdentifier experiment) + IEntityInformationHolderWithIdentifier experiment, + boolean restrictGlobalScopeLinkToProject) { - return new ExperimentAnalysisSummaryGrid(viewContext, experiment) - .asDisposableWithoutToolbar(); + return new ExperimentAnalysisSummaryGrid(viewContext, experiment, + restrictGlobalScopeLinkToProject).asDisposableWithoutToolbar(); } private ICellListenerAndLinkGenerator<MaterialFeatureVectorSummary> createMaterialReplicaSummaryLinkGenerator() @@ -87,7 +88,7 @@ public class ExperimentAnalysisSummaryGrid extends TypedTableGrid<MaterialFeatur ISerializableComparable comparableValue) { IEntityInformationHolder material = entity.getMaterial(); - return ScreeningLinkExtractor.tryCreateMaterialDetailsLink(material, + return ScreeningLinkExtractor.createMaterialDetailsLink(material, getExperimentAsSearchCriteria()); } }; @@ -101,16 +102,19 @@ public class ExperimentAnalysisSummaryGrid extends TypedTableGrid<MaterialFeatur private ExperimentSearchCriteria getExperimentAsSearchCriteria() { - return ExperimentSearchCriteria.createExperiment(experiment); + return ExperimentSearchCriteria.createExperiment(experiment, + restrictGlobalScopeLinkToProject); } ExperimentAnalysisSummaryGrid(IViewContext<IScreeningClientServiceAsync> viewContext, - final IEntityInformationHolderWithIdentifier experiment) + final IEntityInformationHolderWithIdentifier experiment, + boolean restrictGlobalScopeLinkToProject) { super(viewContext.getCommonViewContext(), BROWSER_ID, true, DisplayTypeIDGenerator.EXPERIMENT_FEATURE_VECTOR_SUMMARY_SECTION); this.screeningViewContext = viewContext; this.experiment = experiment; + this.restrictGlobalScopeLinkToProject = restrictGlobalScopeLinkToProject; ICellListenerAndLinkGenerator<MaterialFeatureVectorSummary> linkGenerator = createMaterialReplicaSummaryLinkGenerator(); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummarySection.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummarySection.java index 1a55399b350..0cee03edc13 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummarySection.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummarySection.java @@ -34,7 +34,7 @@ public class ExperimentAnalysisSummarySection extends DisposableTabContent @Override protected IDisposableComponent createDisposableContent() { - return ExperimentAnalysisSummaryGrid.create(screeningViewContext, experiment); + return ExperimentAnalysisSummaryGrid.create(screeningViewContext, experiment, false); } } \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummaryViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummaryViewer.java index 5cddaa40882..079d2cbe37d 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummaryViewer.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummaryViewer.java @@ -44,7 +44,7 @@ public class ExperimentAnalysisSummaryViewer public static void openTab( final IViewContext<IScreeningClientServiceAsync> screeningViewContext, - String experimentPermId) + String experimentPermId, final boolean restrictGlobalScopeLinkToProject) { screeningViewContext.getCommonService().getEntityInformationHolder(EntityKind.EXPERIMENT, experimentPermId, @@ -54,14 +54,15 @@ public class ExperimentAnalysisSummaryViewer protected void process(IEntityInformationHolderWithPermId experiment) { TechId experimentId = new TechId(experiment); - openTab(screeningViewContext, experimentId); + openTab(screeningViewContext, experimentId, + restrictGlobalScopeLinkToProject); } }); } public static void openTab( final IViewContext<IScreeningClientServiceAsync> screeningViewContext, - TechId experimentId) + TechId experimentId, final boolean restrictGlobalScopeLinkToProject) { screeningViewContext.getCommonService().getExperimentInfo(experimentId, new AbstractAsyncCallback<Experiment>(screeningViewContext) @@ -70,7 +71,8 @@ public class ExperimentAnalysisSummaryViewer protected void process(Experiment result) { AbstractTabItemFactory factory = - createTabFactory(screeningViewContext, result); + createTabFactory(screeningViewContext, result, + restrictGlobalScopeLinkToProject); DispatcherHelper.dispatchNaviEvent(factory); } }); @@ -78,7 +80,8 @@ public class ExperimentAnalysisSummaryViewer private static AbstractTabItemFactory createTabFactory( final IViewContext<IScreeningClientServiceAsync> viewContext, - final IEntityInformationHolderWithProperties experiment) + final IEntityInformationHolderWithProperties experiment, + final boolean restrictGlobalScopeLinkToProject) { return new AbstractTabItemFactory() { @@ -94,15 +97,16 @@ public class ExperimentAnalysisSummaryViewer @Override public ITabItem create() { - IDisposableComponent tabComponent = createViewer(viewContext, experiment); + IDisposableComponent tabComponent = + createViewer(viewContext, experiment, restrictGlobalScopeLinkToProject); return DefaultTabItem.create(getTabTitle(), tabComponent, viewContext); } @Override public String tryGetLink() { - return ScreeningLinkExtractor - .createExperimentAnalysisSummaryBrowserLink(experiment.getPermId()); + return ScreeningLinkExtractor.createExperimentAnalysisSummaryBrowserLink( + experiment.getPermId(), restrictGlobalScopeLinkToProject); } @Override @@ -122,11 +126,13 @@ public class ExperimentAnalysisSummaryViewer private static IDisposableComponent createViewer( IViewContext<IScreeningClientServiceAsync> viewContext, - IEntityInformationHolderWithProperties experiment) + IEntityInformationHolderWithProperties experiment, + boolean restrictGlobalScopeLinkToProject) { String headingText = "Assay " + experiment.getCode(); final IDisposableComponent gridComponent = - ExperimentAnalysisSummaryGrid.create(viewContext, experiment); + ExperimentAnalysisSummaryGrid.create(viewContext, experiment, + restrictGlobalScopeLinkToProject); return MaterialComponentUtils.createExperimentViewer(viewContext, experiment, headingText, gridComponent); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentWellMaterialBrowserGrid.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentWellMaterialBrowserGrid.java index 8c2308389bb..20dc5a0417c 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentWellMaterialBrowserGrid.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentWellMaterialBrowserGrid.java @@ -108,23 +108,26 @@ public class ExperimentWellMaterialBrowserGrid extends MaterialBrowserGrid { if (editMode == false) { - ExperimentSearchCriteria experimentCriteria = - ExperimentSearchCriteria.createExperiment(experiment); - ClientPluginFactory.openImagingMaterialViewer(material, experimentCriteria, - screeningViewContext); + ClientPluginFactory.openImagingMaterialViewer(material, + createExperimentSearchCriteria(), screeningViewContext); } else { super.showEntityViewer(material, editMode, active); } } + private ExperimentSearchCriteria createExperimentSearchCriteria() + { + return ExperimentSearchCriteria.createExperiment(experiment); + } + @Override protected BaseEntityModel<Material> createModel(GridRowModel<Material> entity) { BaseEntityModel<Material> basicModel = super.createModel(entity); basicModel.set(ModelDataPropertyNames.link(CommonMaterialColDefKind.CODE.id()), - ScreeningLinkExtractor.tryCreateMaterialDetailsLink(entity.getOriginalObject(), - experiment.getIdentifier())); + ScreeningLinkExtractor.createMaterialDetailsLink(entity.getOriginalObject(), + createExperimentSearchCriteria())); return basicModel; } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImagingMaterialViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImagingMaterialViewer.java index b22df360e54..5854c2f0432 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImagingMaterialViewer.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImagingMaterialViewer.java @@ -30,6 +30,7 @@ import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.Gen import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.material.GenericMaterialViewer; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchByProjectCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.SingleExperimentSearchCriteria; /** @@ -87,17 +88,46 @@ public class ImagingMaterialViewer extends GenericMaterialViewer String experimentPermId = tryGetExperimentPermId(); if (experimentPermId != null) { + boolean restrictGlobalScopeLinkToProject = + isRestrictGlobalScopeLinkToProject(experimentCriteriaOrNull); MaterialReplicaSummarySection replicaSummarySection = new MaterialReplicaSummarySection(screeningViewContext, material, - experimentPermId); + experimentPermId, restrictGlobalScopeLinkToProject); sections.add(replicaSummarySection); } + ExperimentSearchByProjectCriteria experimentCriteria = tryConvert(experimentCriteriaOrNull); MaterialFeaturesFromAllExpermentsSection featuresFromAllExperimentsSection = - new MaterialFeaturesFromAllExpermentsSection(screeningViewContext, material); + new MaterialFeaturesFromAllExpermentsSection(screeningViewContext, material, + experimentCriteria); sections.add(featuresFromAllExperimentsSection); return sections; } + private static boolean isRestrictGlobalScopeLinkToProject( + ExperimentSearchCriteria experimentCriteriaOrNull) + { + + if (experimentCriteriaOrNull == null) + { + return false; + } else + { + return experimentCriteriaOrNull.getRestrictGlobalSearchLinkToProject(); + } + } + + private static ExperimentSearchByProjectCriteria tryConvert( + ExperimentSearchCriteria experimentCriteriaOrNull) + { + if (experimentCriteriaOrNull == null) + { + return null; + } else + { + return experimentCriteriaOrNull.tryAsSearchByProjectCriteria(); + } + } + private String tryGetExperimentPermId() { if (experimentCriteriaOrNull != null) diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialDisambiguationGrid.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialDisambiguationGrid.java index 4ee85f27003..41cb88bc66d 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialDisambiguationGrid.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialDisambiguationGrid.java @@ -221,7 +221,7 @@ public class MaterialDisambiguationGrid extends TypedTableGrid<Material> { public String tryGetLink(Material material, ISerializableComparable value) { - return ScreeningLinkExtractor.tryCreateMaterialDetailsLink(material, + return ScreeningLinkExtractor.createMaterialDetailsLink(material, searchCriteria.getExperimentCriteria()); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsGrid.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsGrid.java index cc5198251ad..170c59d756e 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsGrid.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsGrid.java @@ -38,8 +38,8 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.D import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ExperimentReference; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialSimpleFeatureVectorSummary; -import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchByProjectCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchByProjectCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.grids.MaterialFeatureVectorsFromAllExperimentsGridColumnIDs; /** @@ -96,14 +96,16 @@ public class MaterialFeaturesFromAllExperimentsGrid extends boolean specialKeyPressed) { ClientPluginFactory.openImagingExperimentViewer(rowItem - .getObjectOrNull().getExperiment(), screeningViewContext); + .getObjectOrNull().getExperiment(), + getRestrictGlobalScopeLinkToProject(), screeningViewContext); } public String tryGetLink(MaterialSimpleFeatureVectorSummary entity, ISerializableComparable value) { return ClientPluginFactory.createImagingExperimentViewerLink( - entity.getExperiment(), screeningViewContext); + entity.getExperiment(), getRestrictGlobalScopeLinkToProject(), + screeningViewContext); } }); } @@ -126,24 +128,31 @@ public class MaterialFeaturesFromAllExperimentsGrid extends // in material detail view and the possibility of switching tabs is not // implemented there. MaterialReplicaSummaryViewer.openTab(screeningViewContext, - experimentPermId, new MaterialIdentifier(material)); + experimentPermId, getRestrictGlobalScopeLinkToProject(), + new MaterialIdentifier(material)); } public String tryGetLink(MaterialSimpleFeatureVectorSummary entity, ISerializableComparable value) { ExperimentSearchCriteria experiment = getExperimentCriteria(entity); - return ScreeningLinkExtractor.tryCreateMaterialDetailsLink(material, + return ScreeningLinkExtractor.createMaterialDetailsLink(material, experiment); } }); } - private static ExperimentSearchCriteria getExperimentCriteria( + private boolean getRestrictGlobalScopeLinkToProject() + { + return experimentSearchCriteria.tryGetProjectIdentifier() != null; + } + + private ExperimentSearchCriteria getExperimentCriteria( MaterialSimpleFeatureVectorSummary summary) { ExperimentReference experimentRef = summary.getExperiment(); - return ExperimentSearchCriteria.createExperiment(experimentRef); + return ExperimentSearchCriteria.createExperiment(experimentRef, + getRestrictGlobalScopeLinkToProject()); } @Override diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsViewer.java index a7c6ebc6be0..ff908a3f943 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsViewer.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsViewer.java @@ -24,7 +24,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework. import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem; import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicProjectIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; @@ -85,8 +84,7 @@ public class MaterialFeaturesFromAllExperimentsViewer @Override public String getId() { - return ScreeningModule.ID - + ScreeningLinkExtractor.MATERIAL_FEATURES_FROM_ALL_EXPERIMENTS_ACTION + return ScreeningModule.ID + "MATERIAL_FEATURES_FROM_ALL_EXPERIMENTS" + material.getPermId(); } @@ -102,20 +100,8 @@ public class MaterialFeaturesFromAllExperimentsViewer @Override public String tryGetLink() { - String materialCode = material.getCode(); - String materialTypeCode = material.getEntityType().getCode(); - String spaceCodeOrNull = null; - String projectCodeOrNull = null; - BasicProjectIdentifier projectIdentifier = - experimentCriteria.tryGetProjectIdentifier(); - if (projectIdentifier != null) - { - spaceCodeOrNull = projectIdentifier.getSpaceCode(); - projectCodeOrNull = projectIdentifier.getProjectCode(); - } - - return ScreeningLinkExtractor.createMaterialFeaturesFromAllExperimentsLink( - materialCode, materialTypeCode, spaceCodeOrNull, projectCodeOrNull); + return ScreeningLinkExtractor.createMaterialDetailsLink(material, + experimentCriteria.asExtendedCriteria()); } @Override diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExpermentsSection.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExpermentsSection.java index adc7441b7f1..f1af043ef38 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExpermentsSection.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExpermentsSection.java @@ -21,22 +21,26 @@ public class MaterialFeaturesFromAllExpermentsSection extends DisposableTabConte private final IEntityInformationHolderWithIdentifier material; + private final ExperimentSearchByProjectCriteria experimentCriteria; + public MaterialFeaturesFromAllExpermentsSection( IViewContext<IScreeningClientServiceAsync> screeningViewContext, - IEntityInformationHolderWithIdentifier material) + IEntityInformationHolderWithIdentifier material, + ExperimentSearchByProjectCriteria experimentCriteria) { super(screeningViewContext.getMessage(Dict.MATERIAL_FEATURES_FROM_ALL_EXPERIMENTS_SECTION), screeningViewContext, material); this.screeningViewContext = screeningViewContext; this.material = material; + this.experimentCriteria = experimentCriteria; setIds(DisplayTypeIDGenerator.MATERIAL_FEATURES_FROM_ALL_EXPERIMENTS_SECTION); } @Override protected IDisposableComponent createDisposableContent() { - return MaterialFeaturesFromAllExperimentsGrid.create(screeningViewContext, - material, ExperimentSearchByProjectCriteria.createAllExperimentsForAllProjects()); + return MaterialFeaturesFromAllExperimentsGrid.create(screeningViewContext, material, + experimentCriteria); } } \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java index 55c529d44c5..3472dcfb3a5 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java @@ -45,8 +45,11 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ID import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.NotScrollableContainer; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicProjectIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ClientPluginFactory; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningDisplayTypeIDGenerator; @@ -78,19 +81,26 @@ public class MaterialReplicaSummaryComponent private static final int ONE_IMAGE_SIZE_FACTOR_PX = 60; public static IDisposableComponent createViewer( - IViewContext<IScreeningClientServiceAsync> screeningViewContext, - IEntityInformationHolderWithPermId experiment, Material material) + IViewContext<IScreeningClientServiceAsync> screeningViewContext, Experiment experiment, + Material material, boolean restrictGlobalScopeLinkToProject) { - return new MaterialReplicaSummaryComponent(screeningViewContext).createViewer(experiment, - material); + return new MaterialReplicaSummaryComponent(screeningViewContext, + restrictGlobalScopeLinkToProject, experiment).createViewer(material); } private final IViewContext<IScreeningClientServiceAsync> screeningViewContext; + private final boolean restrictGlobalScopeLinkToProject; + + private final Experiment experiment; + private MaterialReplicaSummaryComponent( - IViewContext<IScreeningClientServiceAsync> screeningViewContext) + IViewContext<IScreeningClientServiceAsync> screeningViewContext, + boolean restrictGlobalScopeLinkToProject, Experiment experiment) { this.screeningViewContext = screeningViewContext; + this.restrictGlobalScopeLinkToProject = restrictGlobalScopeLinkToProject; + this.experiment = experiment; } private class ImagesFoundCallback extends AbstractAsyncCallback<List<WellReplicaImage>> @@ -299,14 +309,13 @@ public class MaterialReplicaSummaryComponent return widgetWithListener.asWidget(); } - private IDisposableComponent createViewer(IEntityInformationHolderWithPermId experiment, - Material material) + private IDisposableComponent createViewer(Material material) { final LayoutContainer panel = new LayoutContainer(); panel.setLayout(new RowLayout(Orientation.VERTICAL)); panel.setScrollMode(Scroll.AUTO); - Widget materialInfo = createMaterialInfo(screeningViewContext, experiment, material); + Widget materialInfo = createMaterialInfo(material); panel.add(materialInfo, new RowData(-1, -1, PropertiesUtil.createHeaderInfoMargin())); TechId materialTechId = new TechId(material); @@ -348,14 +357,12 @@ public class MaterialReplicaSummaryComponent }; } - private static Widget createMaterialInfo( - final IViewContext<IScreeningClientServiceAsync> viewContext, - final IEntityInformationHolderWithPermId experiment, final Material material) + private Widget createMaterialInfo(final Material material) { LayoutContainer panel = new LayoutContainer(); panel.setLayout(new RowLayout()); - Widget headerWidget = createHeaderWithLinks(viewContext, experiment, material); + Widget headerWidget = createHeaderWithLinks(material); panel.add(headerWidget, PropertiesUtil.createHeaderTitleLayoutData()); LayoutContainer materialPropertiesPanel = createMaterialPropertiesPanel(material); @@ -364,9 +371,7 @@ public class MaterialReplicaSummaryComponent return panel; } - private static Widget createHeaderWithLinks( - final IViewContext<IScreeningClientServiceAsync> viewContext, - final IEntityInformationHolderWithPermId experiment, final Material material) + private Widget createHeaderWithLinks(final Material material) { LayoutContainer headerPanel = new LayoutContainer(); headerPanel.setLayout(new TableLayout(2)); @@ -380,28 +385,24 @@ public class MaterialReplicaSummaryComponent // in non-embedded mode there is a separate tab in material detail view with all assays // information, so we do not display this link there - if (viewContext.getModel().isEmbeddedMode()) + if (screeningViewContext.getModel().isEmbeddedMode()) { - Widget materialInAllAssaysSummaryLink = - createMaterialInAllAssaysSummaryLink(viewContext, material); + Widget materialInAllAssaysSummaryLink = createMaterialInAllAssaysSummaryLink(material); rightLinksPanel.add(materialInAllAssaysSummaryLink, linkMargins); } - Widget assayAnalysisSummaryLink = - createAssayAnalysisSummaryLink(viewContext, experiment, material); + Widget assayAnalysisSummaryLink = createAssayAnalysisSummaryLink(material); rightLinksPanel.add(assayAnalysisSummaryLink, linkMargins); headerPanel.add(rightLinksPanel); return headerPanel; } - private static Widget createMaterialInAllAssaysSummaryLink( - final IViewContext<IScreeningClientServiceAsync> viewContext, final Material material) + private Widget createMaterialInAllAssaysSummaryLink(final Material material) { - // add link to feature vector summary for the experiment + final ExperimentSearchCriteria experimentCriteria = createAllAssaysExperimentCriteria(); String linkUrl = - ClientPluginFactory.createImagingMaterialViewerLink(material, - ExperimentSearchCriteria.createAllExperiments(), viewContext); + ScreeningLinkExtractor.createMaterialDetailsLink(material, experimentCriteria); String linkText = "Find " + MaterialComponentUtils.getMaterialFullName(material, false) + " in all assays"; @@ -409,13 +410,27 @@ public class MaterialReplicaSummaryComponent { public void onClick(ClickEvent event) { - ClientPluginFactory.openImagingMaterialViewer(material, - ExperimentSearchCriteria.createAllExperiments(), viewContext); + ClientPluginFactory.openImagingMaterialViewer(material, experimentCriteria, + screeningViewContext); } }, linkUrl); return linkWidget; } + private ExperimentSearchCriteria createAllAssaysExperimentCriteria() + { + if (restrictGlobalScopeLinkToProject) + { + Project project = experiment.getProject(); + BasicProjectIdentifier projectIdentifier = + new BasicProjectIdentifier(project.getSpace().getCode(), project.getCode()); + return ExperimentSearchCriteria.createAllExperimentsForProject(projectIdentifier); + } else + { + return ExperimentSearchCriteria.createAllExperiments(); + } + } + private static Html createHeaderTitle(final IEntityInformationHolderWithPermId experiment, final Material material) { @@ -424,20 +439,19 @@ public class MaterialReplicaSummaryComponent return PropertiesUtil.createHeaderTitle(headingText); } - private static Widget createAssayAnalysisSummaryLink( - final IViewContext<IScreeningClientServiceAsync> viewContext, - final IEntityInformationHolderWithPermId experiment, final Material material) + private Widget createAssayAnalysisSummaryLink(final Material material) { // add link to feature vector summary for the experiment String linkUrl = - ScreeningLinkExtractor.createExperimentAnalysisSummaryBrowserLink(experiment - .getPermId()); + ClientPluginFactory.createImagingExperimentViewerLink(experiment, + restrictGlobalScopeLinkToProject, screeningViewContext); String linkText = "Show assay " + experiment.getCode(); Widget linkWidget = LinkRenderer.getLinkWidget(linkText, new ClickHandler() { public void onClick(ClickEvent event) { - ClientPluginFactory.openImagingExperimentViewer(experiment, viewContext); + ClientPluginFactory.openImagingExperimentViewer(experiment, + restrictGlobalScopeLinkToProject, screeningViewContext); } }, linkUrl); return linkWidget; diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummarySection.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummarySection.java index 48b37409b9d..b96b8c2a36a 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummarySection.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummarySection.java @@ -4,8 +4,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.TabContent; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; -import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId; -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.Material; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.Dict; @@ -24,17 +23,20 @@ class MaterialReplicaSummarySection extends TabContent private final String experimentPermId; + private final boolean restrictGlobalScopeLinkToProject; + private IDisposableComponent viewer; public MaterialReplicaSummarySection( IViewContext<IScreeningClientServiceAsync> screeningViewContext, Material material, - String experimentPermId) + String experimentPermId, boolean restrictGlobalScopeLinkToProject) { super(screeningViewContext.getMessage(Dict.MATERIAL_REPLICA_SUMMARY_SECTION_TITLE, ""), screeningViewContext, material); this.screeningViewContext = screeningViewContext; this.material = material; this.experimentPermId = experimentPermId; + this.restrictGlobalScopeLinkToProject = restrictGlobalScopeLinkToProject; setHeaderVisible(false); setIds(DisplayTypeIDGenerator.REPLICA_SUMMARY_MATERIAL_SECTION); @@ -43,12 +45,11 @@ class MaterialReplicaSummarySection extends TabContent @Override protected void showContent() { - screeningViewContext.getCommonService().getEntityInformationHolder(EntityKind.EXPERIMENT, - experimentPermId, - new AbstractAsyncCallback<IEntityInformationHolderWithPermId>(screeningViewContext) + screeningViewContext.getCommonService().getExperimentInfoByPermId(experimentPermId, + new AbstractAsyncCallback<Experiment>(screeningViewContext) { @Override - protected void process(IEntityInformationHolderWithPermId experiment) + protected void process(Experiment experiment) { setHeading(screeningViewContext.getMessage( Dict.MATERIAL_REPLICA_SUMMARY_SECTION_TITLE, @@ -62,11 +63,11 @@ class MaterialReplicaSummarySection extends TabContent }); } - private void createAndShowViewer(IEntityInformationHolderWithPermId experiment) + private void createAndShowViewer(Experiment experiment) { this.viewer = MaterialReplicaSummaryComponent.createViewer(screeningViewContext, experiment, - material); + material, restrictGlobalScopeLinkToProject); add(viewer.getComponent()); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryViewer.java index 4eac08af93f..ac2f43a63f1 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryViewer.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryViewer.java @@ -26,13 +26,14 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpP import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId; 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.Material; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningModule; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.utils.MaterialComponentUtils; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; /** * Opens an independent tab with {@link MaterialReplicaSummaryComponent}. @@ -47,11 +48,12 @@ public class MaterialReplicaSummaryViewer * @param material should be enriched with properties */ public static void openTab(IViewContext<IScreeningClientServiceAsync> screeningViewContext, - String experimentPermId, Material material) + String experimentPermId, boolean restrictGlobalScopeLinkToProject, Material material) { MaterialReplicaSummaryViewer viewer = - new MaterialReplicaSummaryViewer(screeningViewContext); - AbstractAsyncCallback<IEntityInformationHolderWithPermId> experimentFoundCallback = + new MaterialReplicaSummaryViewer(screeningViewContext, + restrictGlobalScopeLinkToProject); + AbstractAsyncCallback<Experiment> experimentFoundCallback = viewer.createExperimentFoundCallback(material); viewer.fetchExperimentByPermId(experimentPermId, experimentFoundCallback); } @@ -60,38 +62,43 @@ public class MaterialReplicaSummaryViewer * Fetches material and experiment and opens a tab with {@link MaterialReplicaSummaryComponent}. */ public static void openTab(IViewContext<IScreeningClientServiceAsync> screeningViewContext, - String experimentPermId, MaterialIdentifier materialIdentifier) + String experimentPermId, boolean restrictGlobalScopeLinkToProject, + MaterialIdentifier materialIdentifier) { MaterialReplicaSummaryViewer viewer = - new MaterialReplicaSummaryViewer(screeningViewContext); - AbstractAsyncCallback<IEntityInformationHolderWithPermId> experimentFoundCallback = + new MaterialReplicaSummaryViewer(screeningViewContext, + restrictGlobalScopeLinkToProject); + AbstractAsyncCallback<Experiment> experimentFoundCallback = viewer.createExperimentFoundCallback(materialIdentifier); viewer.fetchExperimentByPermId(experimentPermId, experimentFoundCallback); } private final IViewContext<IScreeningClientServiceAsync> screeningViewContext; + private final boolean restrictGlobalScopeLinkToProject; + private MaterialReplicaSummaryViewer( - IViewContext<IScreeningClientServiceAsync> screeningViewContext) + IViewContext<IScreeningClientServiceAsync> screeningViewContext, + boolean restrictGlobalScopeLinkToProject) { this.screeningViewContext = screeningViewContext; + this.restrictGlobalScopeLinkToProject = restrictGlobalScopeLinkToProject; } private void fetchExperimentByPermId(String experimentPermId, - AbstractAsyncCallback<IEntityInformationHolderWithPermId> experimentFoundCallback) + AbstractAsyncCallback<Experiment> experimentFoundCallback) { - screeningViewContext.getCommonService().getEntityInformationHolder(EntityKind.EXPERIMENT, - experimentPermId, experimentFoundCallback); + screeningViewContext.getCommonService().getExperimentInfoByPermId(experimentPermId, + experimentFoundCallback); } // NOTE: material is already fetched - private AbstractAsyncCallback<IEntityInformationHolderWithPermId> createExperimentFoundCallback( - final Material material) + private AbstractAsyncCallback<Experiment> createExperimentFoundCallback(final Material material) { - return new AbstractAsyncCallback<IEntityInformationHolderWithPermId>(screeningViewContext) + return new AbstractAsyncCallback<Experiment>(screeningViewContext) { @Override - protected void process(IEntityInformationHolderWithPermId experiment) + protected void process(Experiment experiment) { openTab(experiment, material); } @@ -99,13 +106,13 @@ public class MaterialReplicaSummaryViewer } // NOTE: material has to be still fetched - private AbstractAsyncCallback<IEntityInformationHolderWithPermId> createExperimentFoundCallback( + private AbstractAsyncCallback<Experiment> createExperimentFoundCallback( final MaterialIdentifier materialIdentifier) { - return new AbstractAsyncCallback<IEntityInformationHolderWithPermId>(screeningViewContext) + return new AbstractAsyncCallback<Experiment>(screeningViewContext) { @Override - protected void process(IEntityInformationHolderWithPermId experiment) + protected void process(Experiment experiment) { viewContext.getCommonService().getMaterialInformationHolder(materialIdentifier, new MaterialFoundCallback(experiment)); @@ -116,9 +123,9 @@ public class MaterialReplicaSummaryViewer private class MaterialFoundCallback extends AbstractAsyncCallback<IEntityInformationHolderWithPermId> { - private final IEntityInformationHolderWithPermId experiment; + private final Experiment experiment; - MaterialFoundCallback(IEntityInformationHolderWithPermId experiment) + MaterialFoundCallback(Experiment experiment) { super(screeningViewContext); this.experiment = experiment; @@ -139,24 +146,22 @@ public class MaterialReplicaSummaryViewer } } - private void openTab(IEntityInformationHolderWithPermId experiment, Material material) + private void openTab(Experiment experiment, Material material) { AbstractTabItemFactory factory = createTabFactory(experiment, material); DispatcherHelper.dispatchNaviEvent(factory); } - private AbstractTabItemFactory createTabFactory( - final IEntityInformationHolderWithPermId experiment, final Material material) + private AbstractTabItemFactory createTabFactory(final Experiment experiment, + final Material material) { return new AbstractTabItemFactory() { - @Override public String getId() { - return ScreeningModule.ID - + ScreeningLinkExtractor.MATERIAL_REPLICA_SUMMARY_ACTION - + experiment.getCode() + material.getPermId(); + return ScreeningModule.ID + "MATERIAL_REPLICA_SUMMARY" + experiment.getPermId() + + "-" + material.getPermId(); } @Override @@ -164,15 +169,18 @@ public class MaterialReplicaSummaryViewer { IDisposableComponent tabComponent = MaterialReplicaSummaryComponent.createViewer(screeningViewContext, - experiment, material); + experiment, material, restrictGlobalScopeLinkToProject); return DefaultTabItem.create(getTabTitle(), tabComponent, screeningViewContext); } @Override public String tryGetLink() { - return ScreeningLinkExtractor.createMaterialReplicaSummaryLink(experiment - .getPermId(), material.getCode(), material.getEntityType().getCode()); + ExperimentSearchCriteria experimentCriteria = + ExperimentSearchCriteria.createExperiment(experiment, + restrictGlobalScopeLinkToProject); + return ScreeningLinkExtractor.createMaterialDetailsLink(material, + experimentCriteria); } @Override @@ -190,5 +198,4 @@ public class MaterialReplicaSummaryViewer }; } - } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java index f0ebd4f8193..9dbad35db48 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java @@ -425,18 +425,17 @@ public class WellContentDialog extends Dialog final IEntityInformationHolderWithPermId material) { final String href = - ScreeningLinkExtractor.tryCreateMaterialDetailsLink(material, - experimentCriteria.getExperimentIdentifier()); + ScreeningLinkExtractor.createMaterialDetailsLink(material, getExperimentCriteria()); final ClickHandler listener = new ClickHandler() { public void onClick(ClickEvent event) { WellContentDialog.this.hide(); ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ClientPluginFactory - .openImagingMaterialViewer(material, - ExperimentSearchCriteria.createExperiment(experimentCriteria), + .openImagingMaterialViewer(material, getExperimentCriteria(), viewContext); } + }; Anchor link = (Anchor) LinkRenderer.getLinkWidget(material.getCode(), listener, href); if (viewContext.isSimpleOrEmbeddedMode()) @@ -452,6 +451,11 @@ public class WellContentDialog extends Dialog return link; } + private ExperimentSearchCriteria getExperimentCriteria() + { + return ExperimentSearchCriteria.createExperiment(experimentCriteria, false); + } + private Widget createEntityLink(IEntityInformationHolderWithPermId entity) { final ClickHandler listener = new OpenEntityDetailsTabClickListener(entity, viewContext); 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 9aa497c7870..4f8179277ce 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 @@ -61,6 +61,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetCo import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier; 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.IEntityInformationHolderWithIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; @@ -79,7 +80,6 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.d import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetImagesReference; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetReference; -import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ExperimentReference; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetParameters; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellContent; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria; @@ -362,17 +362,26 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> private static String tryCreateMaterialDetailsLink(WellContent wellContent, Material material) { - String experimentIdentifier = wellContent.getExperiment().getIdentifier(); - return ScreeningLinkExtractor.tryCreateMaterialDetailsLink(material, experimentIdentifier); + return ScreeningLinkExtractor.createMaterialDetailsLink(material, + getExperimentCriteria(wellContent)); } - private void openImagingMaterialViewer(WellContent wellContent, Material material) + private static ExperimentSearchCriteria getExperimentCriteria(WellContent wellContent) { - ExperimentReference experiment = wellContent.getExperiment(); - ExperimentSearchCriteria experimentCriteria = - ExperimentSearchCriteria.createExperiment(experiment); + IEntityInformationHolderWithIdentifier experiment = wellContent.getExperiment(); + return getExperimentCriteria(experiment); + } - ClientPluginFactory.openImagingMaterialViewer(material, experimentCriteria, viewContext); + private static ExperimentSearchCriteria getExperimentCriteria( + IEntityInformationHolderWithIdentifier experiment) + { + return ExperimentSearchCriteria.createExperiment(experiment); + } + + private void openImagingMaterialViewer(WellContent wellContent, Material material) + { + ClientPluginFactory.openImagingMaterialViewer(material, getExperimentCriteria(wellContent), + viewContext); } private void linkExperiment() @@ -528,16 +537,17 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> ExperimentChooserFieldAdaptor experimentChooser = ExperimentChooserField.create("", true, null, viewContext.getCommonViewContext()); final ExperimentChooserField chooserField = experimentChooser.getChooserField(); - chooserField.addChosenEntityListener(new IChosenEntityListener<TableModelRowWithObject<Experiment>>() - { - public void entityChosen(TableModelRowWithObject<Experiment> row) - { - if (row != null) + chooserField + .addChosenEntityListener(new IChosenEntityListener<TableModelRowWithObject<Experiment>>() { - chooseSingleExperiment(chooserField, row.getObjectOrNull()); - } - } - }); + public void entityChosen(TableModelRowWithObject<Experiment> row) + { + if (row != null) + { + chooseSingleExperiment(chooserField, row.getObjectOrNull()); + } + } + }); chooserField.setEditable(false); if (experimentCriteriaOrNull != null && experimentCriteriaOrNull.tryGetExperiment() != null) @@ -567,7 +577,8 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> new SingleExperimentSearchCriteria(experiment.getId(), experiment.getPermId(), experiment.getIdentifier()); updateSingleExperimentChooser(chooserField, singleExperiment); - this.experimentCriteriaOrNull = ExperimentSearchCriteria.createExperiment(singleExperiment); + this.experimentCriteriaOrNull = + ExperimentSearchCriteria.createExperiment(singleExperiment); refresh(); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ExperimentAnalysisSummaryResolver.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ExperimentAnalysisSummaryResolver.java index ee700888df8..1755c635664 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ExperimentAnalysisSummaryResolver.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ExperimentAnalysisSummaryResolver.java @@ -29,8 +29,11 @@ public class ExperimentAnalysisSummaryResolver extends AbstractViewLocatorResolv getMandatoryParameter( locator, ScreeningLinkExtractor.EXPERIMENT_ANALYSIS_SUMMARY_EXPERIMENT_PERMID_PARAMETER_KEY); - - ExperimentAnalysisSummaryViewer.openTab(viewContext, experimentPermId); + boolean restrictGlobalScopeLinkToProject = + getOptionalBooleanParameter(locator, + ScreeningLinkExtractor.RESTRICT_GLOBAL_SEARCH_TO_PROJECT, false); + ExperimentAnalysisSummaryViewer.openTab(viewContext, experimentPermId, + restrictGlobalScopeLinkToProject); } } \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ImagingMaterialLocatorResolver.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ImagingMaterialLocatorResolver.java index 57c52812dbf..47852aec211 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ImagingMaterialLocatorResolver.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ImagingMaterialLocatorResolver.java @@ -1,7 +1,5 @@ package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator; -import java.util.Map; - import ch.systemsx.cisd.common.shared.basic.utils.StringUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; @@ -9,6 +7,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.Ma import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.ViewLocator; import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicProjectIdentifier; 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.MaterialIdentifier; @@ -41,33 +40,44 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver assert (EntityKind.MATERIAL.name().equals(locator.tryGetEntity())); ExperimentIdentifierSearchCriteria experimentCriteriaOrNull = - tryGetExperimentIdentifierSearchCriteria(locator.getParameters()); + tryGetExperimentIdentifierSearchCriteria(locator); openInitialMaterialViewer(extractMaterialIdentifier(locator), experimentCriteriaOrNull); } private static ExperimentIdentifierSearchCriteria tryGetExperimentIdentifierSearchCriteria( - Map<String, String> parameters) + ViewLocator locator) { + // one experiment String experimentIdentifierOrNull = - parameters - .get(ScreeningLinkExtractor.MATERIAL_DETAIL_EXPERIMENT_IDENT_PARAMETER_KEY); - if (experimentIdentifierOrNull == null) + getOptionalParameter(locator, + ScreeningLinkExtractor.MATERIAL_DETAIL_EXPERIMENT_IDENT_PARAMETER_KEY); + if (experimentIdentifierOrNull != null) { - String searchAllExp = - parameters - .get(ScreeningLinkExtractor.MATERIAL_DETAIL_SEARCH_ALL_EXPERIMENTS_PARAMETER_KEY); - if (StringUtils.isBlank(searchAllExp) == false - && searchAllExp.equalsIgnoreCase("false") == false) - { - return ExperimentIdentifierSearchCriteria.createSearchAll(); - } else - { - return null; - } - } else + boolean restrictGlobalSearchToProject = + getOptionalBooleanParameter(locator, + ScreeningLinkExtractor.RESTRICT_GLOBAL_SEARCH_TO_PROJECT, false); + return ExperimentIdentifierSearchCriteria.createExperimentScope( + experimentIdentifierOrNull, restrictGlobalSearchToProject); + } + // project + String space = getOptionalParameter(locator, ScreeningLinkExtractor.SPACE_CODE_KEY); + String project = getOptionalParameter(locator, ScreeningLinkExtractor.PROJECT_CODE_KEY); + if (StringUtils.isBlank(space) == false && StringUtils.isBlank(project) == false) { - return new ExperimentIdentifierSearchCriteria(experimentIdentifierOrNull); + return ExperimentIdentifierSearchCriteria + .createProjectScope(new BasicProjectIdentifier(space, project)); } + // all experiments + boolean searchAllExp = + getOptionalBooleanParameter( + locator, + ScreeningLinkExtractor.MATERIAL_DETAIL_SEARCH_ALL_EXPERIMENTS_PARAMETER_KEY, + false); + if (searchAllExp) + { + return ExperimentIdentifierSearchCriteria.createSearchAll(); + } + return null; } /** @@ -87,15 +97,15 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver { private final IViewContext<IScreeningClientServiceAsync> viewContext; - private final ExperimentIdentifierSearchCriteria experimentCriteriaOrNull; + private final ExperimentIdentifierSearchCriteria scopeOrNull; private OpenEntityDetailsTabCallback( final IViewContext<IScreeningClientServiceAsync> viewContext, - ExperimentIdentifierSearchCriteria experimentCriteriaOrNull) + ExperimentIdentifierSearchCriteria scopeOrNull) { super(viewContext); this.viewContext = viewContext; - this.experimentCriteriaOrNull = experimentCriteriaOrNull; + this.scopeOrNull = scopeOrNull; } // @@ -108,19 +118,25 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver @Override protected final void process(final IEntityInformationHolderWithPermId material) { - if (experimentCriteriaOrNull == null) + if (scopeOrNull == null) { openImagingMaterialViewer(material, null); } else { - if (experimentCriteriaOrNull.searchAllExperiments()) + String experimentIdentifier = scopeOrNull.tryGetExperimentIdentifier(); + BasicProjectIdentifier project = scopeOrNull.tryGetProject(); + if (experimentIdentifier != null) + { + fetchExperimentAndShowLocations(material, experimentIdentifier); + } else if (project != null) { openImagingMaterialViewer(material, - ExperimentSearchCriteria.createAllExperiments()); + ExperimentSearchCriteria + .createAllExperimentsForProject(project)); } else { - fetchExperimentAndShowLocations(material, - experimentCriteriaOrNull.tryGetExperimentIdentifier()); + openImagingMaterialViewer(material, + ExperimentSearchCriteria.createAllExperiments()); } } } @@ -135,7 +151,9 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver protected void process(Experiment experiment) { ExperimentSearchCriteria experimentCriteria = - ExperimentSearchCriteria.createExperiment(experiment); + ExperimentSearchCriteria.createExperiment( + experiment, + scopeOrNull.getRestrictGlobalSearchLinkToProject()); openImagingMaterialViewer(material, experimentCriteria); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/MaterialFeaturesFromAllExperimentsResolver.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/MaterialFeaturesFromAllExperimentsResolver.java deleted file mode 100644 index 1f8d457fb30..00000000000 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/MaterialFeaturesFromAllExperimentsResolver.java +++ /dev/null @@ -1,67 +0,0 @@ -package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator; - -import static ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor.MATERIAL_CODE_KEY; -import static ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor.MATERIAL_TYPE_CODE_KEY; -import static ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor.PROJECT_CODE_KEY; -import static ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor.SPACE_CODE_KEY; - -import ch.systemsx.cisd.common.shared.basic.utils.StringUtils; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.AbstractViewLocatorResolver; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.ViewLocator; -import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicProjectIdentifier; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; -import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; -import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.MaterialFeaturesFromAllExperimentsViewer; -import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor; -import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchByProjectCriteria; - -/** - * Locator resolver for material summary from all experiments. - * - * @author Kaloyan Enimanev - */ -public class MaterialFeaturesFromAllExperimentsResolver extends AbstractViewLocatorResolver -{ - private final IViewContext<IScreeningClientServiceAsync> viewContext; - - public MaterialFeaturesFromAllExperimentsResolver( - IViewContext<IScreeningClientServiceAsync> viewContext) - { - super(ScreeningLinkExtractor.MATERIAL_FEATURES_FROM_ALL_EXPERIMENTS_ACTION); - this.viewContext = viewContext; - } - - public void resolve(final ViewLocator locator) throws UserFailureException - { - String materialCode = getMandatoryParameter(locator, MATERIAL_CODE_KEY); - - String materialTypeCode = getMandatoryParameter(locator, MATERIAL_TYPE_CODE_KEY); - - MaterialIdentifier materialIdentifier = - new MaterialIdentifier(materialCode, materialTypeCode); - - String projectCodeOrNull = getOptionalParameter(locator, PROJECT_CODE_KEY); - String spaceCodeOrNull = getOptionalParameter(locator, SPACE_CODE_KEY); - - - ExperimentSearchByProjectCriteria experimentCriteria = null; - if (StringUtils.isBlank(projectCodeOrNull) || StringUtils.isBlank(spaceCodeOrNull)) - { - experimentCriteria = - ExperimentSearchByProjectCriteria.createAllExperimentsForAllProjects(); - } else - { - BasicProjectIdentifier projectIdentifier = - new BasicProjectIdentifier(spaceCodeOrNull, projectCodeOrNull); - experimentCriteria = - ExperimentSearchByProjectCriteria - .createAllExperimentsForProject(projectIdentifier); - } - - MaterialFeaturesFromAllExperimentsViewer.openTab(viewContext, materialIdentifier, - experimentCriteria); - - } -} \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/MaterialReplicaSummaryResolver.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/MaterialReplicaSummaryResolver.java deleted file mode 100644 index 686a9e59190..00000000000 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/MaterialReplicaSummaryResolver.java +++ /dev/null @@ -1,48 +0,0 @@ -package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator; - -import static ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor.MATERIAL_REPLICA_SUMMARY_EXPERIMENT_PERM_ID_KEY; -import static ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor.MATERIAL_CODE_KEY; -import static ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor.MATERIAL_TYPE_CODE_KEY; - -import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.AbstractViewLocatorResolver; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.ViewLocator; -import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; -import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; -import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.MaterialReplicaSummaryViewer; -import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor; - -/** - * Locator resolver for material replica summary view. - * - * @author Kaloyan Enimanev - */ -public class MaterialReplicaSummaryResolver extends AbstractViewLocatorResolver -{ - private final IViewContext<IScreeningClientServiceAsync> viewContext; - - public MaterialReplicaSummaryResolver(IViewContext<IScreeningClientServiceAsync> viewContext) - { - super(ScreeningLinkExtractor.MATERIAL_REPLICA_SUMMARY_ACTION); - this.viewContext = viewContext; - } - - public void resolve(final ViewLocator locator) throws UserFailureException - { - String experimentPermId = - getMandatoryParameter(locator, MATERIAL_REPLICA_SUMMARY_EXPERIMENT_PERM_ID_KEY); - - String materialCode = - getMandatoryParameter(locator, MATERIAL_CODE_KEY); - - String materialTypeCode = - getMandatoryParameter(locator, MATERIAL_TYPE_CODE_KEY); - - MaterialIdentifier materialIdentifier = - new MaterialIdentifier(materialCode, materialTypeCode); - - MaterialReplicaSummaryViewer.openTab(viewContext, experimentPermId, materialIdentifier); - - } -} \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/WellSearchLocatorResolver.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/WellSearchLocatorResolver.java index e106ce6684b..3a4a7226536 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/WellSearchLocatorResolver.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/WellSearchLocatorResolver.java @@ -6,6 +6,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.Ab import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.ViewLocator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.URLListEncoder; import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicProjectIdentifier; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.WellSearchGrid; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor; @@ -34,6 +35,9 @@ public class WellSearchLocatorResolver extends AbstractViewLocatorResolver String experimentPermId = getOptionalParameter(locator, ScreeningLinkExtractor.WELL_SEARCH_EXPERIMENT_PERM_ID_PARAMETER_KEY); + String projectCode = getOptionalParameter(locator, ScreeningLinkExtractor.PROJECT_CODE_KEY); + String spaceCode = getOptionalParameter(locator, ScreeningLinkExtractor.SPACE_CODE_KEY); + String materialCodesOrProperties = getMandatoryParameter(locator, ScreeningLinkExtractor.WELL_SEARCH_MATERIAL_ITEMS_PARAMETER_KEY); @@ -56,8 +60,19 @@ public class WellSearchLocatorResolver extends AbstractViewLocatorResolver MaterialSearchCriteria.create(materialCodesCriteria); if (StringUtils.isBlank(experimentPermId)) { - WellSearchGrid.openTab(viewContext, ExperimentSearchCriteria.createAllExperiments(), - materialSearchCriteria, showCombinedResults); + ExperimentSearchCriteria criteria; + if (StringUtils.isBlank(projectCode) || StringUtils.isBlank(spaceCode)) + { + criteria = ExperimentSearchCriteria.createAllExperiments(); + } else + { + criteria = + ExperimentSearchCriteria + .createAllExperimentsForProject(new BasicProjectIdentifier( + spaceCode, projectCode)); + } + WellSearchGrid.openTab(viewContext, criteria, materialSearchCriteria, + showCombinedResults); } else { WellSearchGrid.openTab(viewContext, experimentPermId, materialSearchCriteria, diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ui/columns/specific/ScreeningLinkExtractor.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ui/columns/specific/ScreeningLinkExtractor.java index c82d6ac543a..c859c699825 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ui/columns/specific/ScreeningLinkExtractor.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ui/columns/specific/ScreeningLinkExtractor.java @@ -16,7 +16,6 @@ package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific; -import ch.systemsx.cisd.common.shared.basic.utils.StringUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.LinkExtractor; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.URLListEncoder; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils; @@ -24,6 +23,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.PermlinkUtilities; import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicProjectIdentifier; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.dto.ExperimentIdentifierSearchCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; @@ -52,7 +52,7 @@ public class ScreeningLinkExtractor extends LinkExtractor public final static String WELL_SEARCH_ACTION = "WELL_SEARCH"; - /** If not given then all experiments are searched. */ + /** If not given then all experiments or experiments in the specified project are searched. */ public final static String WELL_SEARCH_EXPERIMENT_PERM_ID_PARAMETER_KEY = "experimentPermId"; public final static String WELL_SEARCH_IS_EXACT_PARAMETER_KEY = "isExactSearch"; @@ -72,21 +72,19 @@ public class ScreeningLinkExtractor extends LinkExtractor public final static String EXPERIMENT_ANALYSIS_SUMMARY_EXPERIMENT_PERMID_PARAMETER_KEY = "experimentPermId"; - public final static String MATERIAL_REPLICA_SUMMARY_ACTION = "MATERIAL_REPLICA_SUMMARY"; - public final static String MATERIAL_REPLICA_SUMMARY_EXPERIMENT_PERM_ID_KEY = "experimentPermId"; public final static String MATERIAL_CODE_KEY = "materialCode"; public final static String MATERIAL_TYPE_CODE_KEY = "materialTypeCode"; - public final static String MATERIAL_FEATURES_FROM_ALL_EXPERIMENTS_ACTION = - "MATERIAL_FEATURES_FROM_ALL_EXPERIMENTS"; - public final static String PROJECT_CODE_KEY = "projectCode"; public final static String SPACE_CODE_KEY = "spaceCode"; + // false by default + public static final String RESTRICT_GLOBAL_SEARCH_TO_PROJECT = "restrictGlobalSearchToProject"; + public static final String createPlateMetadataBrowserLink(String platePermId) { URLMethodWithParameters url = new URLMethodWithParameters(""); @@ -95,46 +93,17 @@ public class ScreeningLinkExtractor extends LinkExtractor return tryPrint(url); } - public static final String createExperimentAnalysisSummaryBrowserLink(String experimentPermId) + public static final String createExperimentAnalysisSummaryBrowserLink(String experimentPermId, + boolean restrictGlobalScopeLinkToProject) { URLMethodWithParameters url = new URLMethodWithParameters(""); url.addParameter(BasicConstant.LOCATOR_ACTION_PARAMETER, EXPERIMENT_ANALYSIS_SUMMARY_ACTION); url.addParameter(EXPERIMENT_ANALYSIS_SUMMARY_EXPERIMENT_PERMID_PARAMETER_KEY, experimentPermId); - return tryPrint(url); - } - - public static final String createMaterialReplicaSummaryLink(String experimentPermId, - String materialCode, String materialTypeCode) - { - URLMethodWithParameters url = new URLMethodWithParameters(""); - url.addParameter(BasicConstant.LOCATOR_ACTION_PARAMETER, MATERIAL_REPLICA_SUMMARY_ACTION); - url.addParameter(MATERIAL_REPLICA_SUMMARY_EXPERIMENT_PERM_ID_KEY, experimentPermId); - url.addParameter(MATERIAL_CODE_KEY, materialCode); - url.addParameter(MATERIAL_TYPE_CODE_KEY, materialTypeCode); - return tryPrint(url); - } - - public static final String createMaterialFeaturesFromAllExperimentsLink(String materialCode, - String materialTypeCode) - { - return createMaterialFeaturesFromAllExperimentsLink(materialCode, materialTypeCode, null, - null); - } - - public static final String createMaterialFeaturesFromAllExperimentsLink(String materialCode, - String materialTypeCode, String spaceCodeOrNull, String projectCodeOrNull) - { - URLMethodWithParameters url = new URLMethodWithParameters(""); - url.addParameter(BasicConstant.LOCATOR_ACTION_PARAMETER, - MATERIAL_FEATURES_FROM_ALL_EXPERIMENTS_ACTION); - url.addParameter(MATERIAL_CODE_KEY, materialCode); - url.addParameter(MATERIAL_TYPE_CODE_KEY, materialTypeCode); - if (false == StringUtils.isBlank(spaceCodeOrNull) - && false == StringUtils.isBlank(projectCodeOrNull)) + if (restrictGlobalScopeLinkToProject) { - url.addParameter(SPACE_CODE_KEY, spaceCodeOrNull); - url.addParameter(PROJECT_CODE_KEY, projectCodeOrNull); + url.addParameterWithoutEncoding(RESTRICT_GLOBAL_SEARCH_TO_PROJECT, + restrictGlobalScopeLinkToProject); } return tryPrint(url); } @@ -154,71 +123,22 @@ public class ScreeningLinkExtractor extends LinkExtractor materialCodesOrProperties, showCombinedResults); } - public static String createWellsSearchLink(ExperimentSearchCriteria experimentSearchCriteria, + public static String createWellsSearchLink(ExperimentSearchCriteria experimentCriteria, MaterialSearchCodesCriteria materialCodesCriteria, Boolean showCombinedResults) - { - ExperimentPermIdSearchCriteria experimentCriteria = - convertToPermIdExperimentCriteria(experimentSearchCriteria); - return createWellsSearchLink(experimentCriteria, materialCodesCriteria, showCombinedResults); - } - - private static class ExperimentPermIdSearchCriteria - { - public static ExperimentPermIdSearchCriteria createSearchAll() - { - return new ExperimentPermIdSearchCriteria(null); - } - - // if null, all experiments are taken into account - private final String experimentPermIdOrNull; - - public ExperimentPermIdSearchCriteria(String experimentPermIdOrNull) - { - this.experimentPermIdOrNull = experimentPermIdOrNull; - } - - public String tryGetExperimentPermId() - { - return experimentPermIdOrNull; - } - } - - private static ExperimentPermIdSearchCriteria convertToPermIdExperimentCriteria( - ExperimentSearchCriteria experimentSearchCriteria) - { - SingleExperimentSearchCriteria expOrNull = experimentSearchCriteria.tryGetExperiment(); - if (expOrNull == null) - { - return ExperimentPermIdSearchCriteria.createSearchAll(); - } else - { - return new ExperimentPermIdSearchCriteria(expOrNull.getExperimentPermId()); - } - } - - private static ExperimentIdentifierSearchCriteria convertToIdentifierExperimentCriteria( - ExperimentSearchCriteria experimentSearchCriteria) - { - SingleExperimentSearchCriteria experiment = experimentSearchCriteria.tryGetExperiment(); - if (experiment != null) - { - return new ExperimentIdentifierSearchCriteria(experiment.getExperimentIdentifier()); - } else - { - return ExperimentIdentifierSearchCriteria.createSearchAll(); - } - } - - public static String createWellsSearchLink( - final ExperimentPermIdSearchCriteria experimentCriteria, - final MaterialSearchCodesCriteria materialCodesCriteria, boolean showCombinedResults) { URLMethodWithParameters url = new URLMethodWithParameters(""); url.addParameter(BasicConstant.LOCATOR_ACTION_PARAMETER, WELL_SEARCH_ACTION); - if (false == StringUtils.isBlank(experimentCriteria.tryGetExperimentPermId())) + SingleExperimentSearchCriteria experiment = experimentCriteria.tryGetExperiment(); + BasicProjectIdentifier project = experimentCriteria.tryGetProjectIdentifier(); + if (experiment != null) { url.addParameter(WELL_SEARCH_EXPERIMENT_PERM_ID_PARAMETER_KEY, - experimentCriteria.tryGetExperimentPermId()); + experiment.getExperimentPermId()); + } + if (project != null) + { + url.addParameterWithoutEncoding(SPACE_CODE_KEY, project.getSpaceCode()); + url.addParameterWithoutEncoding(PROJECT_CODE_KEY, project.getProjectCode()); } url.addParameter(WELL_SEARCH_IS_EXACT_PARAMETER_KEY, materialCodesCriteria.isExactMatchOnly()); @@ -232,38 +152,49 @@ public class ScreeningLinkExtractor extends LinkExtractor return tryPrint(url); } - /** Creates a link for material detail view where a single experiment is chosen */ - public static final String tryCreateMaterialDetailsLink(IEntityInformationHolder material, - String experimentIdentifier) + private static ExperimentIdentifierSearchCriteria convertToIdentifierExperimentCriteria( + ExperimentSearchCriteria experimentSearchCriteria) { - assert experimentIdentifier != null : "experimentIdentifier is null"; - return tryCreateMaterialDetailsLink(material, new ExperimentIdentifierSearchCriteria( - experimentIdentifier)); + SingleExperimentSearchCriteria experiment = experimentSearchCriteria.tryGetExperiment(); + BasicProjectIdentifier project = experimentSearchCriteria.tryGetProjectIdentifier(); + if (experiment != null) + { + return ExperimentIdentifierSearchCriteria.createExperimentScope( + experiment.getExperimentIdentifier(), + experimentSearchCriteria.getRestrictGlobalSearchLinkToProject()); + } else if (project != null) + { + return ExperimentIdentifierSearchCriteria.createProjectScope(project); + } else + { + return ExperimentIdentifierSearchCriteria.createSearchAll(); + } } /** - * Creates a link for material detail. + * Creates a link for material detail view. * * @param experimentCriteriaOrNull if null, no search for data about locations of the material * takes place. Otherwise the search is performed in all or a single experiment. */ - public static final String tryCreateMaterialDetailsLink(IEntityInformationHolder material, + public static final String createMaterialDetailsLink(IEntityInformationHolder material, ExperimentIdentifierSearchCriteria experimentCriteriaOrNull) { URLMethodWithParameters url = - tryCreateMaterialDetailsLink(material.getCode(), - material.getEntityType().getCode(), experimentCriteriaOrNull); + createMaterialDetailsLink(material.getCode(), material.getEntityType().getCode(), + experimentCriteriaOrNull); return tryPrint(url); } - private static final URLMethodWithParameters tryCreateMaterialDetailsLink(String materialCode, + private static final URLMethodWithParameters createMaterialDetailsLink(String materialCode, String materialTypeCode, ExperimentIdentifierSearchCriteria experimentCriteriaOrNull) { - if (materialCode == null || materialTypeCode == null) - { - return null; - } + assert materialCode != null; + assert materialTypeCode != null; + URLMethodWithParameters url = tryCreateMaterialLink(materialCode, materialTypeCode); + assert url != null : "url is null"; + if (experimentCriteriaOrNull != null) { if (experimentCriteriaOrNull.searchAllExperiments()) @@ -272,24 +203,37 @@ public class ScreeningLinkExtractor extends LinkExtractor MATERIAL_DETAIL_SEARCH_ALL_EXPERIMENTS_PARAMETER_VALUE); } else { - // We know that experiment identifier cannot contain characters that should be - // encoded - // apart from '/'. Encoding '/' makes the URL less readable and on the other hand - // leaving it as it is doesn't cause us any problems. - url.addParameterWithoutEncoding(MATERIAL_DETAIL_EXPERIMENT_IDENT_PARAMETER_KEY, - StringEscapeUtils.unescapeHtml(experimentCriteriaOrNull - .tryGetExperimentIdentifier())); + BasicProjectIdentifier project = experimentCriteriaOrNull.tryGetProject(); + if (project != null) + { + url.addParameterWithoutEncoding(SPACE_CODE_KEY, project.getSpaceCode()); + url.addParameterWithoutEncoding(PROJECT_CODE_KEY, project.getProjectCode()); + } else + { + // We know that experiment identifier cannot contain characters that should be + // encoded + // apart from '/'. Encoding '/' makes the URL less readable and on the other + // hand + // leaving it as it is doesn't cause us any problems. + url.addParameterWithoutEncoding(MATERIAL_DETAIL_EXPERIMENT_IDENT_PARAMETER_KEY, + StringEscapeUtils.unescapeHtml(experimentCriteriaOrNull + .tryGetExperimentIdentifier())); + if (experimentCriteriaOrNull.getRestrictGlobalSearchLinkToProject()) + { + url.addParameterWithoutEncoding(RESTRICT_GLOBAL_SEARCH_TO_PROJECT, "true"); + } + } } } return url; } - public static String tryCreateMaterialDetailsLink(IEntityInformationHolder material, + public static String createMaterialDetailsLink(IEntityInformationHolder material, ExperimentSearchCriteria experimentSearchCriteria) { ExperimentIdentifierSearchCriteria experimentCriteria = convertToIdentifierExperimentCriteria(experimentSearchCriteria); - return tryCreateMaterialDetailsLink(material, experimentCriteria); + return createMaterialDetailsLink(material, experimentCriteria); } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/dto/ExperimentIdentifierSearchCriteria.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/dto/ExperimentIdentifierSearchCriteria.java index 58de6a1ea07..187b65ce721 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/dto/ExperimentIdentifierSearchCriteria.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/dto/ExperimentIdentifierSearchCriteria.java @@ -17,25 +17,47 @@ package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.dto; import ch.systemsx.cisd.common.shared.basic.utils.StringUtils; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicProjectIdentifier; /** * Allows to search in one experiment (given by identifier) or in all of them. * * @author Tomasz Pylak */ +// TODO 2011-06-07, Tomasz Pylak: rename to MaterialDetailViewScope public class ExperimentIdentifierSearchCriteria { public static ExperimentIdentifierSearchCriteria createSearchAll() { - return new ExperimentIdentifierSearchCriteria(null); + return new ExperimentIdentifierSearchCriteria(null, null, false); + } + + public static ExperimentIdentifierSearchCriteria createProjectScope( + BasicProjectIdentifier project) + { + return new ExperimentIdentifierSearchCriteria(null, project, false); + } + + public static ExperimentIdentifierSearchCriteria createExperimentScope( + String experimentIdentifier, boolean restrictGlobalScopeLinkToProject) + { + return new ExperimentIdentifierSearchCriteria(experimentIdentifier, null, + restrictGlobalScopeLinkToProject); } // if null, all experiments are taken into account private final String experimentIdentifierOrNull; - public ExperimentIdentifierSearchCriteria(String experimentIdentifierOrNull) + private final BasicProjectIdentifier projectOrNull; + + private final boolean restrictGlobalScopeLinkToProject; + + private ExperimentIdentifierSearchCriteria(String experimentIdentifierOrNull, + BasicProjectIdentifier projectOrNull, boolean restrictGlobalScopeLinkToProject) { this.experimentIdentifierOrNull = experimentIdentifierOrNull; + this.projectOrNull = projectOrNull; + this.restrictGlobalScopeLinkToProject = restrictGlobalScopeLinkToProject; } public String tryGetExperimentIdentifier() @@ -43,9 +65,27 @@ public class ExperimentIdentifierSearchCriteria return experimentIdentifierOrNull; } + /** + * Valid only if experiment identifier is present ({@link #tryGetExperimentIdentifier} is not + * null).<br> + * It determines the behavior of the link from material detail view in a single experiment + * context to the material detail view in 'global' context. If this parameter is true, the + * context will be the project to which the current experiment belongs, otherwise the context + * will be switched to all experiments. + */ + public boolean getRestrictGlobalSearchLinkToProject() + { + return restrictGlobalScopeLinkToProject; + } + + public BasicProjectIdentifier tryGetProject() + { + return projectOrNull; + } + public boolean searchAllExperiments() { - return StringUtils.isBlank(experimentIdentifierOrNull); + return StringUtils.isBlank(experimentIdentifierOrNull) && projectOrNull == null; } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServer.java index 7941bbd2ec5..cb7254342b1 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServer.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServer.java @@ -49,6 +49,7 @@ import ch.systemsx.cisd.openbis.generic.server.plugin.ISampleTypeSlaveServerPlug import ch.systemsx.cisd.openbis.generic.shared.ICommonServer; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicProjectIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CodeAndLabel; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListMaterialCriteria; @@ -317,21 +318,32 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl Session session = getSession(sessionToken); // NOTE: we want the settings to be passed form the client in future MaterialSummarySettings settings = createDefaultSettings(); - - TechId projectTechIdOrNull; - if (experimentCriteria.isAllExperiments()) { - projectTechIdOrNull = null; - } else { - ProjectIdentifier projectIdentifier = - new ProjectIdentifier(experimentCriteria.tryGetProjectIdentifier()); - Project project = commonServer.getProjectInfo(sessionToken, projectIdentifier); - projectTechIdOrNull = new TechId(project); - } + + TechId projectTechIdOrNull = tryFetchProjectId(sessionToken, experimentCriteria); return MaterialAllAssaysFeatureVectorSummaryLoader.loadMaterialFeatureVectorsFromAllAssays( session, businessObjectFactory, getDAOFactory(), materialId, projectTechIdOrNull, settings); } + private TechId tryFetchProjectId(String sessionToken, + WellSearchCriteria.ExperimentSearchByProjectCriteria experimentCriteria) + { + if (experimentCriteria == null || experimentCriteria.isAllExperiments()) + { + return null; + } else + { + return fetchProjectId(sessionToken, experimentCriteria.tryGetProjectIdentifier()); + } + } + + private TechId fetchProjectId(String sessionToken, BasicProjectIdentifier basicProjectIdentifier) + { + ProjectIdentifier projectIdentifier = new ProjectIdentifier(basicProjectIdentifier); + Project project = commonServer.getProjectInfo(sessionToken, projectIdentifier); + return new TechId(project); + } + public static MaterialSummarySettings createDefaultSettings() { MaterialSummarySettings settings = new MaterialSummarySettings(); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningQuery.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningQuery.java index 20b378faf39..fc63e1dd5ee 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningQuery.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningQuery.java @@ -74,6 +74,15 @@ public interface IScreeningQuery extends BaseQuery public DataIterator<WellContentQueryResult> getPlateLocationsForMaterialId(long materialId, long experimentId); + /** + * @return well locations which are connected to a given material (e.g. gene) and belong to the + * experiments within a given project. + */ + @Select(sql = WELLS_FOR_MATERIAL_ID_SELECT + + " where well_material.id = ?{1} and spaces.code = ?{2} and projects.code = ?{3}") + public DataIterator<WellContentQueryResult> getPlateLocationsForMaterialId(long materialId, + String spaceCode, String projectCode); + /** * @return well locations which are connected to a given material (e.g. gene) with the specified * id. @@ -90,6 +99,18 @@ public interface IScreeningQuery extends BaseQuery public DataIterator<WellContentQueryResult> getPlateLocationsForMaterialAndProjectIds( long materialId, long projectId); + /** + * @return well locations which belong to a parent plate connected to any experiment in the + * specified project. Each well will have a material property (e.g. gene) with one of + * the specified codes. The connected material will have one of the specified types. + */ + @Select(sql = WELLS_FOR_MATERIAL_ID_SELECT + " where well_material.id = any(?{1}) and " + + "well_material_type.code = any(?{2}) and spaces.code = ?{3} and projects.code = ?{4}", parameterBindings = + { LongArrayMapper.class, StringArrayMapper.class, TypeMapper.class /* default mapper */, + TypeMapper.class }) + public DataIterator<WellContentQueryResult> getPlateLocationsForMaterialCodesInProject( + long[] materialIds, String[] materialTypeCodes, String spaceCode, String projectCode); + /** * @return well locations which belong to a parent plate connected to a specified experiment. * Each well will have a material property (e.g. gene) with one of the specified codes. 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 1337d3c2f4e..2fd5caa4e82 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 @@ -40,6 +40,7 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.materiallister.IMater import ch.systemsx.cisd.openbis.generic.server.business.bo.samplelister.ISampleLister; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicProjectIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchAssociationCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriterion; @@ -736,14 +737,18 @@ public class WellContentLoader extends AbstractContentLoader Iterable<WellContentQueryResult> locations; MaterialSearchCriteria materialSearchCriteria = materialCriteria.getMaterialSearchCriteria(); - ExperimentSearchCriteria experiment = materialCriteria.getExperimentCriteria(); + + ExperimentSearchCriteria experimentCriteria = + materialCriteria.getExperimentCriteria(); + SingleExperimentSearchCriteria experimentOrNull = experimentCriteria.tryGetExperiment(); + BasicProjectIdentifier projectOrNull = experimentCriteria.tryGetProjectIdentifier(); + IScreeningQuery dao = createDAO(daoFactory); if (materialSearchCriteria.tryGetMaterialCodesOrProperties() != null) { MaterialSearchCodesCriteria codesCriteria = materialSearchCriteria.tryGetMaterialCodesOrProperties(); - Long expId = tryGetExperimentId(experiment); long start = System.currentTimeMillis(); long[] materialIds = findMaterialIds(codesCriteria); @@ -753,28 +758,39 @@ public class WellContentLoader extends AbstractContentLoader abbreviate(materialIds, 100))); start = System.currentTimeMillis(); - if (expId == null) + if (experimentOrNull != null) { locations = - dao.getPlateLocationsForMaterialCodes(materialIds, - codesCriteria.getMaterialTypeCodes()); + dao.getPlateLocationsForMaterialCodes(materialIds, codesCriteria + .getMaterialTypeCodes(), experimentOrNull.getExperimentId().getId()); + } else if (projectOrNull != null) + { + locations = + dao.getPlateLocationsForMaterialCodesInProject(materialIds, + codesCriteria.getMaterialTypeCodes(), projectOrNull.getSpaceCode(), + projectOrNull.getProjectCode()); } else { locations = dao.getPlateLocationsForMaterialCodes(materialIds, - codesCriteria.getMaterialTypeCodes(), expId); + codesCriteria.getMaterialTypeCodes()); } - } else if (materialSearchCriteria.tryGetMaterialId() != null) { long materialId = materialSearchCriteria.tryGetMaterialId().getId(); - Long expId = tryGetExperimentId(experiment); - if (expId == null) + if (experimentOrNull != null) { - locations = dao.getPlateLocationsForMaterialId(materialId); + locations = + dao.getPlateLocationsForMaterialId(materialId, experimentOrNull + .getExperimentId().getId()); + } else if (projectOrNull != null) + { + locations = + dao.getPlateLocationsForMaterialId(materialId, + projectOrNull.getSpaceCode(), projectOrNull.getProjectCode()); } else { - locations = dao.getPlateLocationsForMaterialId(materialId, expId); + locations = dao.getPlateLocationsForMaterialId(materialId); } } else { @@ -863,12 +879,6 @@ public class WellContentLoader extends AbstractContentLoader return criterion; } - private Long tryGetExperimentId(ExperimentSearchCriteria experiment) - { - SingleExperimentSearchCriteria exp = experiment.tryGetExperiment(); - return exp == null ? null : exp.getExperimentId().getId(); - } - private List<WellContent> loadLocations(TechId geneMaterialId, TechId experimentId) { DataIterator<WellContentQueryResult> locations = diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/authorization/WellSearchCriteriaPredicate.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/authorization/WellSearchCriteriaPredicate.java index 722f39481c8..3d9a6d6d498 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/authorization/WellSearchCriteriaPredicate.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/authorization/WellSearchCriteriaPredicate.java @@ -16,40 +16,76 @@ package ch.systemsx.cisd.openbis.plugin.screening.shared.authorization; -import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.DelegatedPredicate; +import java.util.List; + +import org.springframework.dao.DataAccessException; + +import ch.systemsx.cisd.common.exceptions.Status; +import ch.systemsx.cisd.common.exceptions.UserFailureException; +import ch.systemsx.cisd.openbis.generic.shared.authorization.IAuthorizationDataProvider; +import ch.systemsx.cisd.openbis.generic.shared.authorization.RoleWithIdentifier; import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.AbstractTechIdPredicate.ExperimentTechIdPredicate; +import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.IPredicate; +import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.SpaceIdentifierPredicate; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicProjectIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.SingleExperimentSearchCriteria; /** * @author Tomasz Pylak */ -public final class WellSearchCriteriaPredicate extends - DelegatedPredicate<TechId, WellSearchCriteria> +public final class WellSearchCriteriaPredicate implements IPredicate<WellSearchCriteria> { + private final IPredicate<TechId> experimentPredicate; + + private final SpaceIdentifierPredicate spacePredicate; + public WellSearchCriteriaPredicate() { - super(new ExperimentTechIdPredicate()); + this.experimentPredicate = new ExperimentTechIdPredicate(); + this.spacePredicate = new SpaceIdentifierPredicate(); } - @Override - public final String getCandidateDescription() + public final void init(IAuthorizationDataProvider provider) { - return "plate materials search criteria"; + experimentPredicate.init(provider); + spacePredicate.init(provider); } - @Override - public TechId tryConvert(WellSearchCriteria value) + public final Status evaluate(final PersonPE person, + final List<RoleWithIdentifier> allowedRoles, final WellSearchCriteria value) { - SingleExperimentSearchCriteria exp = value.getExperimentCriteria().tryGetExperiment(); - if (exp != null) + assert person != null : "Unspecified person"; + assert allowedRoles != null : "Unspecified allowed roles"; + if (value == null) { - return exp.getExperimentId(); - } else + throw UserFailureException.fromTemplate("No well search criteria specified."); + } + try + { + ExperimentSearchCriteria experimentCriteria = value.getExperimentCriteria(); + SingleExperimentSearchCriteria experiment = experimentCriteria.tryGetExperiment(); + BasicProjectIdentifier project = experimentCriteria.tryGetProjectIdentifier(); + if (experiment != null) + { + return experimentPredicate.evaluate(person, allowedRoles, + experiment.getExperimentId()); + } else if (project != null) + { + SpaceIdentifier space = + new SpaceIdentifier(project.getInstanceCode(), project.getSpaceCode()); + return spacePredicate.evaluate(person, allowedRoles, space); + } else + { + return Status.OK; + } + } catch (DataAccessException ex) { - return null; + throw new UserFailureException(ex.getMessage(), ex); } } - } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/WellSearchCriteria.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/WellSearchCriteria.java index 3b7aee83ab6..2bcd06311fb 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/WellSearchCriteria.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/WellSearchCriteria.java @@ -55,6 +55,11 @@ public class WellSearchCriteria implements ISerializable { } + public SingleExperimentSearchCriteria(IEntityInformationHolderWithIdentifier experiment) + { + this(experiment.getId(), experiment.getPermId(), experiment.getIdentifier()); + } + public SingleExperimentSearchCriteria(long experimentId, String experimentPermId, String experimentIdentifier) { @@ -85,54 +90,117 @@ public class WellSearchCriteria implements ISerializable } } - /** points to one experiment or all of them */ - public static class ExperimentSearchCriteria implements IsSerializable, Serializable + /** Points to one experiment, all experiments of a project or all accessible experiments. */ + public static final class ExperimentSearchCriteria implements IsSerializable, Serializable { private static final long serialVersionUID = ServiceVersionHolder.VERSION; - // if null, all experiments are taken into account + // if null, all experiments are taken into account (from one or all projects) private SingleExperimentSearchCriteria experimentOrNull; - public static final ExperimentSearchCriteria createAllExperiments() + private BasicProjectIdentifier projectIdOrNull; + + /** + * Valid only if single experiment is used as a criteria. + */ + // TODO 2011-06-07, Tomasz Pylak: Determines UI behaviour, should be refactored out from + // this server side DTO. + private boolean restrictGlobalScopeLinkToProject = false; + + // GWT only + private ExperimentSearchCriteria() + { + } + + public SingleExperimentSearchCriteria tryGetExperiment() + { + return experimentOrNull; + } + + private ExperimentSearchCriteria(SingleExperimentSearchCriteria experimentOrNull, + boolean restrictGlobalScopeLinkToProject) { - return new ExperimentSearchCriteria(null); + this.experimentOrNull = experimentOrNull; + this.projectIdOrNull = null; + this.restrictGlobalScopeLinkToProject = restrictGlobalScopeLinkToProject; + } + private ExperimentSearchCriteria(BasicProjectIdentifier projectIdOrNull) + { + this.projectIdOrNull = projectIdOrNull; } public static ExperimentSearchCriteria createExperiment( SingleExperimentSearchCriteria experiment) { - assert experiment != null : "experiment not specified"; - return new ExperimentSearchCriteria(experiment); + return createExperiment(experiment); + } + + public static ExperimentSearchCriteria createExperiment( + SingleExperimentSearchCriteria experiment, boolean restrictGlobalScopeLinkToProject) + { + return new ExperimentSearchCriteria(experiment, restrictGlobalScopeLinkToProject); } - public static final ExperimentSearchCriteria createExperiment( + public static ExperimentSearchCriteria createExperiment( IEntityInformationHolderWithIdentifier experiment) { - return createExperiment(experiment.getId(), experiment.getPermId(), - experiment.getIdentifier()); + return createExperiment(experiment, false); } - private static final ExperimentSearchCriteria createExperiment(long experimentId, - String experimentPermId, String experimentIdentifier) + public static ExperimentSearchCriteria createExperiment( + IEntityInformationHolderWithIdentifier experiment, + boolean restrictGlobalScopeLinkToProject) { - return new ExperimentSearchCriteria(new SingleExperimentSearchCriteria(experimentId, - experimentPermId, experimentIdentifier)); + return createExperiment(new SingleExperimentSearchCriteria(experiment), + restrictGlobalScopeLinkToProject); } - // GWT only - private ExperimentSearchCriteria() + public static ExperimentSearchCriteria createAllExperiments() { + return new ExperimentSearchCriteria(null, false); } - private ExperimentSearchCriteria(SingleExperimentSearchCriteria experimentOrNull) + public static final ExperimentSearchCriteria createAllExperimentsForProject( + BasicProjectIdentifier projectIdentifier) { - this.experimentOrNull = experimentOrNull; + if (projectIdentifier == null) + { + throw new IllegalArgumentException("Project identifier cannot be null"); + } + return new ExperimentSearchCriteria(projectIdentifier); } - public SingleExperimentSearchCriteria tryGetExperiment() + public BasicProjectIdentifier tryGetProjectIdentifier() { - return experimentOrNull; + return projectIdOrNull; + } + + /** + * Valid only if single experiment is used as a criteria.<br> + * It determines the behavior of the link from material detail view in a single experiment + * context to the material detail view in 'global' context. If this parameter is true, the + * context will be the project to which the current experiment belongs, otherwise the + * context will be switched to all experiments. + */ + public boolean getRestrictGlobalSearchLinkToProject() + { + return restrictGlobalScopeLinkToProject; + } + + public ExperimentSearchByProjectCriteria tryAsSearchByProjectCriteria() + { + if (tryGetExperiment() != null) + { + return null; + } else if (projectIdOrNull != null) + { + return ExperimentSearchByProjectCriteria + .createAllExperimentsForProject(projectIdOrNull); + } else + { + return ExperimentSearchByProjectCriteria.createAllExperimentsForAllProjects(); + } } @Override @@ -140,12 +208,19 @@ public class WellSearchCriteria implements ISerializable { if (experimentOrNull == null) { - return "all experiments"; + if (projectIdOrNull == null) + { + return "all experiments"; + } else + { + return "all experiments from project " + projectIdOrNull; + } } else { return experimentOrNull.toString(); } } + } public static final class ExperimentSearchByProjectCriteria implements IsSerializable, @@ -171,10 +246,11 @@ public class WellSearchCriteria implements ISerializable return new ExperimentSearchByProjectCriteria(null); } + // GWT only private ExperimentSearchByProjectCriteria() { } - + private ExperimentSearchByProjectCriteria(BasicProjectIdentifier projectIdOrNull) { this.projectIdOrNull = projectIdOrNull; @@ -190,6 +266,17 @@ public class WellSearchCriteria implements ISerializable return projectIdOrNull == null; } + public ExperimentSearchCriteria asExtendedCriteria() + { + if (projectIdOrNull != null) + { + return ExperimentSearchCriteria.createAllExperimentsForProject(projectIdOrNull); + } else + { + return ExperimentSearchCriteria.createAllExperiments(); + } + } + @Override public String toString() { diff --git a/screening/sourceTest/java/BiozentrumMatLabApiTest.java b/screening/sourceTest/java/BiozentrumMatLabApiTest.java index 14e109d8d25..73d5620e5ab 100644 --- a/screening/sourceTest/java/BiozentrumMatLabApiTest.java +++ b/screening/sourceTest/java/BiozentrumMatLabApiTest.java @@ -41,19 +41,109 @@ public class BiozentrumMatLabApiTest mountPoint = args[2]; } - OpenBISScreeningML.login("admin", passwd, "http://bc2-openbis01.bc2.unibas.ch:8443"); + OpenBISScreeningML.login("cisd", passwd, "http://bc2-openbis01.bc2.unibas.ch:8443"); + String experiment = "/TEST/TEST-USER/MY-ASSAY"; + Object[][] channels = OpenBISScreeningML.listChannels(experiment); + print2DArray(channels); + + testLoadFeatures(chosenPlate, experiment); + + testImagesMetadata(chosenPlate); + testLoadImage(chosenPlate); + testWellProperties(chosenPlate); + testLoadDataset(chosenPlate, mountPoint, datasetTypePattern); + + OpenBISScreeningML.logout(); + } + + private static void testLoadFeatures(String chosenPlate, String experiment) + { + Object[][] features = OpenBISScreeningML.listFeatures(experiment); + print2DArray(features); + + Object[][][] featureMatrix = OpenBISScreeningML.getFeatureMatrixForPlate(chosenPlate); + System.out.println("per plate features -------------------------------"); + print3DArray(featureMatrix); + + String[] featureNames = new String[] + { "OOF" }; + featureMatrix = OpenBISScreeningML.getFeatureMatrixForPlate(chosenPlate, featureNames); + System.out.println("one per plate feature -------------------------------"); + print3DArray(featureMatrix); + + featureMatrix = OpenBISScreeningML.getFeatureMatrix(experiment, "149420", featureNames); + System.out.println("one per gene feature -------------------------------"); + print3DArray(featureMatrix); + } + + private static void print3DArray(Object[][][] array) + { + System.out.println("{"); + for (int i = 0; i < array.length; i++) + { + print2DArray(array[i]); + } + System.out.println("}"); + } + + private static void print2DArray(Object[][] array) + { + System.out.println("["); + for (int i = 0; i < array.length; i++) + { + printAsRow(array[i]); + } + System.out.println("]"); + } + + private static void printAsRow(Object[] objects) + { + StringBuffer sb = new StringBuffer(); + sb.append("["); + for (int i = 0; i < objects.length; i++) + { + sb.append(objects[i]); + sb.append(","); + } + sb.append("]"); + System.out.println(sb.toString()); + } + + private static void testImagesMetadata(String chosenPlate) + { Object[][] meta = OpenBISScreeningML.getImagesMetadata(chosenPlate); - System.out.println(String.format("Number of tiles: %s. Plate geometry %sx%s", meta[1][3], - meta[1][6], meta[1][7])); + System.out.println(String.format("Number of tiles: %s. Plate geometry %sx%s", meta[0][2], + meta[0][5], meta[0][6])); + } + + private static void testLoadDataset(String chosenPlate, String mountPoint, + String datasetTypePattern) + { + // Loads dataset with classification results. + // OpenBIS store diretcory is mounted locally in "/mount/openbis/store", so no data are + // copied and just a path to the appropriate location + // is returned. + Object[][] datasets = + OpenBISScreeningML.loadDataSets(chosenPlate, datasetTypePattern, mountPoint); + System.out.println("Path to the first downloaded dataset: " + datasets[0][1]); + } + private static void testLoadImage(String chosenPlate) + { // fetch 3ed tile of well (1,1). The second call to fetch this image will return it from the // local cache. // The last optional parameter can specify a list of channels to load (otherwise all // channels are loaded). - Object[][][] images = OpenBISScreeningML.loadImages(chosenPlate, 1, 1, 3); - System.out.println("Image path: " + images[1][1]); + long start = System.currentTimeMillis(); + Object[][][] images = OpenBISScreeningML.loadImages(chosenPlate, 1, 1, 3, new String[] + { "CY3" }); + System.out.println("Image path: " + images[0][0][0]); + System.out.println("Took: " + (System.currentTimeMillis() - start)); + } + private static void testWellProperties(String chosenPlate) + { // properties of well (2,4) Object[][] props = OpenBISScreeningML.getWellProperties(chosenPlate, 2, 4); for (int i = 0; i < props.length; i++) @@ -66,13 +156,5 @@ public class BiozentrumMatLabApiTest { { "DESCRIPTION", "hello example" } }; OpenBISScreeningML.updateWellProperties(chosenPlate, 2, 4, props); - - // Loads dataset with classification results. - // OpenBIS store diretcory is mounted locally in "/mount/openbis/store", so no data are - // copied and just a path to the appropriate location - // is returned. - Object[][] datasets = - OpenBISScreeningML.loadDataSets(chosenPlate, datasetTypePattern, mountPoint); - System.out.println("Path to the first downloaded dataset: " + datasets[0][1]); } } diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtilsTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtilsTest.java index e8b91ae00bc..271c6da2bf0 100644 --- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtilsTest.java +++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtilsTest.java @@ -33,9 +33,9 @@ public class EntityTypeLabelUtilsTest extends AssertJUnit @Test public void test() { - assertEquals("2011-05-30, Raw (DAT)", createLabel("HCS_IMAGE_RAW", true)); - assertEquals("2011-05-30, Features", createLabel("HCS_ANALYSIS_WELL_FEATURES", false)); - assertEquals("2011-05-30, Analysis cell classifications (DAT)", + assertEquals("Raw (DAT), 2011-05-30 12:34", createLabel("HCS_IMAGE_RAW", true)); + assertEquals("Features, 2011-05-30 12:34", createLabel("HCS_ANALYSIS_WELL_FEATURES", false)); + assertEquals("Analysis cell classifications (DAT), 2011-05-30 12:34", createLabel("HCS_ANALYSIS_CELL_CLASSIFICATIONS", true)); } @@ -44,7 +44,7 @@ public class EntityTypeLabelUtilsTest extends AssertJUnit { DatasetReference ref = new DatasetReference(0, "code", typeCode, null, "DAT", null, null, null, null); - return EntityTypeLabelUtils.createDatasetLabel(ref, withFileType, "2011-05-30"); + return EntityTypeLabelUtils.createDatasetLabel(ref, withFileType, "2011-05-30 12:34"); } } \ No newline at end of file diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/ScreeningDAOTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/ScreeningDAOTest.java index b03d89a8166..f589680be44 100644 --- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/ScreeningDAOTest.java +++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/ScreeningDAOTest.java @@ -79,11 +79,22 @@ public class ScreeningDAOTest extends AbstractScreeningDAOTest AssertJUnit.assertEquals(0, locations.size()); } + @Test + public void testGetPlateLocationsForOneMaterialAllExperimentsFromProject() + { + // it just tests if the sql runs + List<WellContentQueryResult> locations = + EntityListingTestUtils.asList(query.getPlateLocationsForMaterialId(1, "space", + "project")); + AssertJUnit.assertEquals(0, locations.size()); + } + @Test public void testGetPlateMappingAllTypes() { // it just tests if the sql runs - List<WellContentQueryResult> locations = EntityListingTestUtils.asList(query.getPlateMapping("xxx")); + List<WellContentQueryResult> locations = + EntityListingTestUtils.asList(query.getPlateMapping("xxx")); AssertJUnit.assertEquals(0, locations.size()); } @@ -148,6 +159,12 @@ public class ScreeningDAOTest extends AbstractScreeningDAOTest materialTypeCodes, 1)); AssertJUnit.assertEquals(0, locations.size()); + // one project + locations = + EntityListingTestUtils.asList(query.getPlateLocationsForMaterialCodesInProject(ids, + materialTypeCodes, "space", "project")); + AssertJUnit.assertEquals(0, locations.size()); + // all experiments locations = EntityListingTestUtils.asList(query.getPlateLocationsForMaterialCodes(ids, -- GitLab