From 37db04d0f3c9982779dc7143c2100e7d019c8e8e Mon Sep 17 00:00:00 2001 From: kaloyane <kaloyane> Date: Mon, 18 Jul 2011 15:38:29 +0000 Subject: [PATCH] [LMS-2138] use AnalysisProcedureCriteria consistently across filtering methods SVN: 22180 --- .../web/client/IScreeningClientService.java | 4 +- .../client/IScreeningClientServiceAsync.java | 5 +- .../AnalysisProcedureChooser.java | 9 +++- .../ExperimentAnalysisSummaryGrid.java | 11 ++-- .../detailviewers/WellSearchGrid.java | 5 +- .../locator/WellSearchLocatorResolver.java | 3 +- .../web/server/ScreeningClientService.java | 5 +- .../FeatureVectorSummaryProvider.java | 9 ++-- .../screening/server/ScreeningServer.java | 7 +-- .../server/ScreeningServerLogger.java | 7 +-- .../server/logic/AbstractContentLoader.java | 5 +- .../ExperimentFeatureVectorSummaryLoader.java | 19 ++++--- .../logic/FeatureVectorDatasetLoader.java | 25 ++++++--- .../logic/WellFeatureCollectionLoader.java | 6 ++- .../screening/shared/IScreeningServer.java | 3 +- .../shared/basic/dto/WellSearchCriteria.java | 51 ++++++++++++++++--- 16 files changed, 121 insertions(+), 53 deletions(-) diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/IScreeningClientService.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/IScreeningClientService.java index 65825c2954c..b6e20c98237 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/IScreeningClientService.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/IScreeningClientService.java @@ -51,6 +51,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellMetadata; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellReplicaImage; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchByProjectCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; @@ -198,7 +199,8 @@ public interface IScreeningClientService extends IClientService */ public TypedTableResultSet<MaterialFeatureVectorSummary> listExperimentFeatureVectorSummary( IResultSetConfig<String, TableModelRowWithObject<MaterialFeatureVectorSummary>> resultSetConfig, - TechId experimentId, String analysisProcedureOrNull) throws UserFailureException; + TechId experimentId, AnalysisProcedureCriteria analysisProcedureCriteria) + throws UserFailureException; public String prepareExportFeatureVectorSummary( TableExportCriteria<TableModelRowWithObject<MaterialFeatureVectorSummary>> criteria) diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/IScreeningClientServiceAsync.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/IScreeningClientServiceAsync.java index 28814382111..c49465c4161 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/IScreeningClientServiceAsync.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/IScreeningClientServiceAsync.java @@ -52,6 +52,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellMetadata; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellReplicaImage; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchByProjectCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; @@ -176,11 +177,11 @@ public interface IScreeningClientServiceAsync extends IClientServiceAsync /** * @see IScreeningClientService#listExperimentFeatureVectorSummary(IResultSetConfig, TechId, - * String) + * AnalysisProcedureCriteria) */ public void listExperimentFeatureVectorSummary( IResultSetConfig<String, TableModelRowWithObject<MaterialFeatureVectorSummary>> resultSetConfig, - TechId experimentId, String analysisProcedureOrNull, + TechId experimentId, AnalysisProcedureCriteria analysisProcedureCriteria, AsyncCallback<TypedTableResultSet<MaterialFeatureVectorSummary>> callback); /** diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/AnalysisProcedureChooser.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/AnalysisProcedureChooser.java index 44ca3b404d6..f5d5fe36733 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/AnalysisProcedureChooser.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/AnalysisProcedureChooser.java @@ -39,6 +39,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningCli import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.Dict; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningDisplaySettingsManager; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.AnalysisProcedures; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteriaHolder; /** @@ -55,7 +56,7 @@ class AnalysisProcedureChooser extends LayoutContainer */ public static interface IAnalysisProcedureSelectionListener { - void analysisProcedureSelected(String analysisProcedureOrNull); + void analysisProcedureSelected(AnalysisProcedureCriteria criteria); } public static final AnalysisProcedureChooser createHorizontal( @@ -235,7 +236,11 @@ class AnalysisProcedureChooser extends LayoutContainer private void notifySelectionListener(String analysisProcedureOrNull) { - selectionListener.analysisProcedureSelected(analysisProcedureOrNull); + AnalysisProcedureCriteria criteria = StringUtils.isBlank(analysisProcedureOrNull) ? + AnalysisProcedureCriteria.createAllProcedures() : + AnalysisProcedureCriteria.createFromCode(analysisProcedureOrNull); + + selectionListener.analysisProcedureSelected(criteria); } private String getDefaultAnalysisProcedure() 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 012dcf70619..6857fcc1b43 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 @@ -44,6 +44,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.D import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.AnalysisProcedureChooser.IAnalysisProcedureSelectionListener; 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.MaterialFeatureVectorSummary; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.grids.FeatureVectorSummaryGridColumnIDs; @@ -66,7 +67,7 @@ public class ExperimentAnalysisSummaryGrid extends TypedTableGrid<MaterialFeatur private final boolean restrictGlobalScopeLinkToProject; - private String analysisProcedureOrNull = null; + private AnalysisProcedureCriteria analysisProcedureCriteria; public static IDisposableComponent create( IViewContext<IScreeningClientServiceAsync> viewContext, @@ -141,15 +142,13 @@ public class ExperimentAnalysisSummaryGrid extends TypedTableGrid<MaterialFeatur setBorders(true); } - @Override protected void listTableRows( DefaultResultSetConfig<String, TableModelRowWithObject<MaterialFeatureVectorSummary>> resultSetConfig, AsyncCallback<TypedTableResultSet<MaterialFeatureVectorSummary>> callback) { screeningViewContext.getService().listExperimentFeatureVectorSummary(resultSetConfig, - new TechId(experiment), analysisProcedureOrNull, callback); - + new TechId(experiment), analysisProcedureCriteria, callback); } @Override @@ -181,9 +180,9 @@ public class ExperimentAnalysisSummaryGrid extends TypedTableGrid<MaterialFeatur // // IAnalysisProcedureSelectionListener // - public void analysisProcedureSelected(String analysisProcedure) + public void analysisProcedureSelected(AnalysisProcedureCriteria selectedProcedureCriteria) { - this.analysisProcedureOrNull = analysisProcedure; + this.analysisProcedureCriteria = selectedProcedureCriteria; refresh(true); } } 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 f0b23d0b594..e02158bd89e 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 @@ -665,12 +665,11 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements return Arrays.asList(WellSearchGridColumnIds.PLATE, WellSearchGridColumnIds.WELL); } - public void analysisProcedureSelected(String analysisProcedureOrNull) + public void analysisProcedureSelected(AnalysisProcedureCriteria selectedProcedureCriteria) { if (experimentCriteriaHolder.tryGetCriteria() != null) { - this.analysisProcedureCriteria = - AnalysisProcedureCriteria.createFromCode(analysisProcedureOrNull); + this.analysisProcedureCriteria = selectedProcedureCriteria; refresh(true); } } 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 0b61aa277e8..8b9a5273cfa 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 @@ -65,7 +65,8 @@ public class WellSearchLocatorResolver extends AbstractViewLocatorResolver MaterialSearchCriteria.create(materialCodesCriteria); AnalysisProcedureCriteria analysisProcedureCriteria = - (analysisProcedureOrNull == null) ? AnalysisProcedureCriteria.createAllProcedures() + StringUtils.isBlank(analysisProcedureOrNull) ? AnalysisProcedureCriteria + .createAllProcedures() : AnalysisProcedureCriteria.createFromCode(analysisProcedureOrNull); if (StringUtils.isBlank(experimentPermId)) diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ScreeningClientService.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ScreeningClientService.java index 4ca6c89d465..5aea6145f48 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ScreeningClientService.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ScreeningClientService.java @@ -75,6 +75,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellMetadata; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellReplicaImage; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchByProjectCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; @@ -296,11 +297,11 @@ public final class ScreeningClientService extends AbstractClientService implemen public TypedTableResultSet<MaterialFeatureVectorSummary> listExperimentFeatureVectorSummary( IResultSetConfig<String, TableModelRowWithObject<MaterialFeatureVectorSummary>> criteria, - TechId experimentId, String analysisProcedureOrNull) + TechId experimentId, AnalysisProcedureCriteria analysisProcedureCriteria) { FeatureVectorSummaryProvider provider = new FeatureVectorSummaryProvider(server, getSessionToken(), experimentId, - analysisProcedureOrNull); + analysisProcedureCriteria); return listEntities(provider, criteria); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/resultset/FeatureVectorSummaryProvider.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/resultset/FeatureVectorSummaryProvider.java index 492be321346..b22e2c13deb 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/resultset/FeatureVectorSummaryProvider.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/resultset/FeatureVectorSummaryProvider.java @@ -32,6 +32,7 @@ import ch.systemsx.cisd.openbis.generic.shared.util.TypedTableModelBuilder; import ch.systemsx.cisd.openbis.plugin.screening.shared.IScreeningServer; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ExperimentFeatureVectorSummary; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialFeatureVectorSummary; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.grids.FeatureVectorSummaryGridColumnIDs; /** @@ -49,15 +50,15 @@ public class FeatureVectorSummaryProvider extends AbstractTableModelProvider<Mat private final TechId experimentId; - private final String analysisProcedureOrNull; + private final AnalysisProcedureCriteria analysisProcedureCriteria; public FeatureVectorSummaryProvider(IScreeningServer server, String sessionToken, - TechId experimentId, String analysisProcedureOrNull) + TechId experimentId, AnalysisProcedureCriteria analysisProcedureCriteria) { this.server = server; this.sessionToken = sessionToken; this.experimentId = experimentId; - this.analysisProcedureOrNull = analysisProcedureOrNull; + this.analysisProcedureCriteria = analysisProcedureCriteria; } @Override @@ -67,7 +68,7 @@ public class FeatureVectorSummaryProvider extends AbstractTableModelProvider<Mat new TypedTableModelBuilder<MaterialFeatureVectorSummary>(); ExperimentFeatureVectorSummary fvSummary = server.getExperimentFeatureVectorSummary(sessionToken, experimentId, - analysisProcedureOrNull); + analysisProcedureCriteria); builder.addColumn(MATERIAL_ID); builder.columnGroup(MATERIAL_PROPS_GROUP); 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 d178fee26ff..c567d0eaf39 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 @@ -111,6 +111,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellContent; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellReplicaImage; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.SingleExperimentSearchCriteria; @@ -306,13 +307,13 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl } public ExperimentFeatureVectorSummary getExperimentFeatureVectorSummary(String sessionToken, - TechId experimentId, String analysisProcedureOrNull) + TechId experimentId, AnalysisProcedureCriteria analysisProcedureCriteria) { Session session = getSession(sessionToken); // NOTE: we want the settings to be passed form the client in future MaterialSummarySettings settings = createDefaultSettings(); return ExperimentFeatureVectorSummaryLoader.loadExperimentFeatureVectors(session, - businessObjectFactory, getDAOFactory(), experimentId, analysisProcedureOrNull, + businessObjectFactory, getDAOFactory(), experimentId, analysisProcedureCriteria, settings); } @@ -472,7 +473,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl } else { procedureCodes = - dao.listAnalysisProcedures(singleExpCriteria.getExperimentId().getId()); + dao.listAnalysisProceduresForExperiment(singleExpCriteria.getExperimentId().getId()); } return new AnalysisProcedures(procedureCodes); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServerLogger.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServerLogger.java index 525786d4d85..1296f0bee1f 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServerLogger.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServerLogger.java @@ -66,6 +66,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellContent; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellReplicaImage; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchByProjectCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; @@ -350,11 +351,11 @@ final class ScreeningServerLogger extends AbstractServerLogger implements IScree } public ExperimentFeatureVectorSummary getExperimentFeatureVectorSummary(String sessionToken, - TechId experimentId, String analysisProcedureOrNull) + TechId experimentId, AnalysisProcedureCriteria analysisProcedureCriteria) { logAccess(sessionToken, "getExperimentFeatureVectorSummary", - "sessionToken(%s), experimentId(%s), analysisProcedure(%s)", sessionToken, - experimentId, analysisProcedureOrNull); + "sessionToken(%s), experimentId(%s), analysisProcedureCriteria(%s)", sessionToken, + experimentId, analysisProcedureCriteria); return null; } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/AbstractContentLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/AbstractContentLoader.java index 4badb30efd7..2e4debdcaa4 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/AbstractContentLoader.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/AbstractContentLoader.java @@ -36,6 +36,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.server.IScreeningBusinessObject import ch.systemsx.cisd.openbis.plugin.screening.server.dataaccess.IScreeningQuery; import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.PlateIdentifier; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ExperimentReference; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; /** * Abstract superclass for screening loaders. @@ -100,9 +101,9 @@ abstract class AbstractContentLoader } protected final FeatureVectorDatasetLoader createFeatureVectorDatasetsRetriever( - Set<PlateIdentifier> plates, String analysisProcedureOrNull) + Set<PlateIdentifier> plates, AnalysisProcedureCriteria analysisProcedureCriteria) { return new FeatureVectorDatasetLoader(session, businessObjectFactory, null, plates, - analysisProcedureOrNull); + analysisProcedureCriteria); } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ExperimentFeatureVectorSummaryLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ExperimentFeatureVectorSummaryLoader.java index 9e5951d90e9..121438dbc59 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ExperimentFeatureVectorSummaryLoader.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ExperimentFeatureVectorSummaryLoader.java @@ -54,6 +54,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialFeatur import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialSummarySettings; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellReference; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.FeatureVectorLoader.WellFeatureCollection; /** @@ -68,12 +69,12 @@ public class ExperimentFeatureVectorSummaryLoader extends AbstractContentLoader { TechId experimentId; - String analysisProcedureOrNull; + AnalysisProcedureCriteria analysisProcedureCriteria; - LoaderParameters(TechId experimentId, String analysisProcedureOrNull) + LoaderParameters(TechId experimentId, AnalysisProcedureCriteria analysisProcedureCriteria) { this.experimentId = experimentId; - this.analysisProcedureOrNull = analysisProcedureOrNull; + this.analysisProcedureCriteria = analysisProcedureCriteria; } } @@ -82,9 +83,10 @@ public class ExperimentFeatureVectorSummaryLoader extends AbstractContentLoader */ public static ExperimentFeatureVectorSummary loadExperimentFeatureVectors(Session session, IScreeningBusinessObjectFactory businessObjectFactory, IDAOFactory daoFactory, - TechId experimentId, String analysisProcedureOrNull, MaterialSummarySettings settings) + TechId experimentId, AnalysisProcedureCriteria analysisProcedureCriteria, + MaterialSummarySettings settings) { - LoaderParameters params = new LoaderParameters(experimentId, analysisProcedureOrNull); + LoaderParameters params = new LoaderParameters(experimentId, analysisProcedureCriteria); return new ExperimentFeatureVectorSummaryLoader(session, businessObjectFactory, daoFactory, settings).loadExperimentFeatureVectors(params); } @@ -189,7 +191,7 @@ public class ExperimentFeatureVectorSummaryLoader extends AbstractContentLoader Set<PlateIdentifier> plateIdentifiers = extractIdentifiers(plates); WellFeatureCollection<FeatureVectorValues> featureVectorsCollection = - tryLoadWellSingleFeatureVectors(plateIdentifiers, params.analysisProcedureOrNull); + tryLoadWellSingleFeatureVectors(plateIdentifiers, params.analysisProcedureCriteria); if (featureVectorsCollection == null) { return null; // no feature vector datasets connected to plates in this experiment @@ -201,11 +203,12 @@ public class ExperimentFeatureVectorSummaryLoader extends AbstractContentLoader } private WellFeatureCollection<FeatureVectorValues> tryLoadWellSingleFeatureVectors( - Set<PlateIdentifier> plateIdentifiers, String analysisProcedureOrNull) + Set<PlateIdentifier> plateIdentifiers, + AnalysisProcedureCriteria analysisProcedureCriteria) { return new WellFeatureCollectionLoader(session, businessObjectFactory, daoFactory) .tryLoadWellSingleFeatureVectors(plateIdentifiers, settings.getFeatureCodes(), - analysisProcedureOrNull); + analysisProcedureCriteria); } private static ExperimentFeatureVectorSummary createEmptySummary(ExperimentReference experiment) diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/FeatureVectorDatasetLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/FeatureVectorDatasetLoader.java index 40544e10eae..b9dd88bb4a3 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/FeatureVectorDatasetLoader.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/FeatureVectorDatasetLoader.java @@ -27,6 +27,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.commons.lang.StringUtils; + import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStore; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; @@ -36,6 +38,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.server.IScreeningBusinessObject import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.FeatureVectorDatasetReference; import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.PlateIdentifier; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; /** * @author Chandrasekhar Ramakrishnan @@ -47,7 +50,7 @@ class FeatureVectorDatasetLoader extends HCSImageDatasetLoader // Parameter state private final String featureVectorDatasetTypeCode; - private final String analysisProcedureOrNull; + private final AnalysisProcedureCriteria analysisProcedureCriteria; // Running state private Collection<ExternalData> featureVectorDatasets; @@ -56,18 +59,20 @@ class FeatureVectorDatasetLoader extends HCSImageDatasetLoader IScreeningBusinessObjectFactory businessObjectFactory, String homeSpaceOrNull, Set<? extends PlateIdentifier> plates) { - this(session, businessObjectFactory, homeSpaceOrNull, plates, null); + this(session, businessObjectFactory, homeSpaceOrNull, plates, AnalysisProcedureCriteria + .createAllProcedures()); } FeatureVectorDatasetLoader(Session session, IScreeningBusinessObjectFactory businessObjectFactory, String homeSpaceOrNull, - Set<? extends PlateIdentifier> plates, String analysisProcedureOrNull) + Set<? extends PlateIdentifier> plates, + AnalysisProcedureCriteria analysisProcedureCriteria) { super(session, businessObjectFactory, homeSpaceOrNull, plates, ScreeningConstants.ANY_HCS_IMAGE_DATASET_TYPE_PATTERN, ScreeningConstants.HCS_IMAGE_ANALYSIS_DATASET_TYPE_PATTERN); featureVectorDatasetTypeCode = ScreeningConstants.HCS_IMAGE_ANALYSIS_DATASET_TYPE_PATTERN; - this.analysisProcedureOrNull = analysisProcedureOrNull; + this.analysisProcedureCriteria = analysisProcedureCriteria; } public static class FeatureVectorExternalData @@ -141,14 +146,20 @@ class FeatureVectorDatasetLoader extends HCSImageDatasetLoader private boolean isMatchingAnalysisProcedure(ExternalData dataset) { + if (analysisProcedureCriteria.isAllProcedures()) + { + return true; + } + String dataSetAnalysisProcedure = EntityHelper.tryFindPropertyValue(dataset, ScreeningConstants.ANALYSIS_PROCEDURE); - if (analysisProcedureOrNull == null) + if (analysisProcedureCriteria.isNoProcedures()) { - return dataSetAnalysisProcedure == null; + return StringUtils.isBlank(dataSetAnalysisProcedure); } else { - return analysisProcedureOrNull.equals(dataSetAnalysisProcedure); + String analysisProcedureCode = analysisProcedureCriteria.tryGetAnalysisProcedureCode(); + return analysisProcedureCode.equals(dataSetAnalysisProcedure); } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/WellFeatureCollectionLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/WellFeatureCollectionLoader.java index 66a8e59df6f..84ae45f9c16 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/WellFeatureCollectionLoader.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/WellFeatureCollectionLoader.java @@ -38,6 +38,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.PlateIdentifi import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetReference; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.FeatureValue; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.FeatureVectorValues; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.FeatureVectorLoader.WellFeatureCollection; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.IHCSFeatureVectorLoader; @@ -56,12 +57,13 @@ public class WellFeatureCollectionLoader extends AbstractContentLoader /** Loads feature vectors for chosen plates and set of features */ public WellFeatureCollection<FeatureVectorValues> tryLoadWellSingleFeatureVectors( - Set<PlateIdentifier> plates, List<String> featureCodes, String analysisProcedureOrNull) + Set<PlateIdentifier> plates, List<String> featureCodes, + AnalysisProcedureCriteria analysisProcedureCriteria) { StopWatch watch = new StopWatch(); watch.start(); FeatureVectorDatasetLoader datasetsRetriever = - createFeatureVectorDatasetsRetriever(plates, analysisProcedureOrNull); + createFeatureVectorDatasetsRetriever(plates, analysisProcedureCriteria); Collection<ExternalData> featureVectorDatasets = datasetsRetriever.getFeatureVectorDatasets(); if (featureVectorDatasets.isEmpty()) diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/IScreeningServer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/IScreeningServer.java index 0795eb6b57b..21059c87462 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/IScreeningServer.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/IScreeningServer.java @@ -61,6 +61,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellContent; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellReplicaImage; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchByProjectCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; @@ -223,7 +224,7 @@ public interface IScreeningServer extends IServer @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public ExperimentFeatureVectorSummary getExperimentFeatureVectorSummary(String sessionToken, @AuthorizationGuard(guardClass = ExperimentTechIdPredicate.class) TechId experimentId, - String analysisProcedureOrNull); + AnalysisProcedureCriteria analysisProcedureCriteria); /** * Returns a feature vector summary (with details for each replica) for the given experiment and 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 3ff4eef19a9..21fda21124a 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 @@ -436,30 +436,69 @@ public class WellSearchCriteria implements ISerializable { private static final long serialVersionUID = ServiceVersionHolder.VERSION; - private String analysisProcedureCodeOrNull; + public static enum MatchType implements ISerializable + { + /** match data sets for explicitly specified analysis procedure code. */ + BY_CODE, + /** match any data set */ + ANY, + /** match data sets having no analysis procedure property */ + NONE + } + + public static AnalysisProcedureCriteria createFromCode(String code) + { + if (StringUtils.isBlank(code)) + { + throw new IllegalArgumentException("Cannot construct analysis procedure search " + + "criteria of this type without a specified code."); + } + return new AnalysisProcedureCriteria(MatchType.BY_CODE, code); + } public static AnalysisProcedureCriteria createAllProcedures() { - // TODO KE: could we improve this ? - return new AnalysisProcedureCriteria(); + return new AnalysisProcedureCriteria(MatchType.ANY, null); } - public static AnalysisProcedureCriteria createFromCode(String codeOrNull) + public static AnalysisProcedureCriteria createNoProcedures() { - return new AnalysisProcedureCriteria(codeOrNull); + return new AnalysisProcedureCriteria(MatchType.NONE, null); } + + private MatchType matchType; + + private String analysisProcedureCodeOrNull; + // GWT only @SuppressWarnings("unused") private AnalysisProcedureCriteria() { } - private AnalysisProcedureCriteria(String analysisProcedureCodeOrNull) + private AnalysisProcedureCriteria(MatchType matchType, String analysisProcedureCodeOrNull) { + this.matchType = matchType; this.analysisProcedureCodeOrNull = analysisProcedureCodeOrNull; } + /** + * Return true if this criteria selects all data sets regardless of their property values. + */ + public boolean isAllProcedures() + { + return matchType == MatchType.ANY; + } + + /** + * Return true if this criteria selects only data sets without APs, false otherwise. + */ + public boolean isNoProcedures() + { + return matchType == MatchType.NONE; + } + public String tryGetAnalysisProcedureCode() { return analysisProcedureCodeOrNull; -- GitLab