From fd2b69b3c623df1e6f471daa1d093424b9930fda Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Fri, 25 Jun 2010 07:30:04 +0000
Subject: [PATCH] [LMS-1588] stop using reporting plugin in openBIS to fetch
 image dataset metadata (ScreeningPlateImageParamsReportingPlugin)

SVN: 16733
---
 .../dss/etl/HCSImageDatasetLoaderFactory.java | 77 -------------------
 ...eeningPlateImageParamsReportingPlugin.java |  1 +
 .../dataaccess/db/ScreeningDAOFactory.java    |  4 +-
 .../server/logic/DatasetReportsLoader.java    | 62 ++++++---------
 .../logic/GenePlateLocationsLoader.java       | 15 ++--
 .../server/logic/PlateContentLoader.java      | 14 +---
 .../shared/basic/dto/ScreeningConstants.java  |  3 -
 .../shared/imaging/HCSDatasetLoader.java      |  5 ++
 .../shared/imaging/IHCSDatasetLoader.java     |  2 +
 9 files changed, 45 insertions(+), 138 deletions(-)

diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSImageDatasetLoaderFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSImageDatasetLoaderFactory.java
index ac0b35df322..82f7855d77b 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSImageDatasetLoaderFactory.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSImageDatasetLoaderFactory.java
@@ -17,20 +17,14 @@
 package ch.systemsx.cisd.openbis.dss.etl;
 
 import java.io.File;
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import javax.sql.DataSource;
 
 import net.lemnik.eodsql.QueryTool;
 
-import ch.systemsx.cisd.bds.hcs.Geometry;
-import ch.systemsx.cisd.bds.hcs.Location;
-import ch.systemsx.cisd.common.io.FileBasedContent;
 import ch.systemsx.cisd.openbis.dss.etl.dataaccess.HCSImageDatasetLoader;
-import ch.systemsx.cisd.openbis.dss.generic.server.AbstractDatasetDownloadServlet.Size;
 import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.IImagingQueryDAO;
@@ -64,7 +58,6 @@ public class HCSImageDatasetLoaderFactory
     public static final IHCSImageDatasetLoader create(File datasetRootDir, String datasetCode)
     {
         return createImageDBLoader(datasetRootDir, datasetCode);
-        // return createBDSLoader(datasetRootDir);
     }
 
     private static HCSImageDatasetLoader createImageDBLoader(File datasetRootDir, String datasetCode)
@@ -73,74 +66,4 @@ public class HCSImageDatasetLoaderFactory
         return new HCSImageDatasetLoader(query, datasetCode, repository);
     }
 
-    // remove when not needed
-    @SuppressWarnings("unused")
-    private static IHCSImageDatasetLoader createBDSLoader(File datasetRootDir)
-    {
-        final ch.systemsx.cisd.bds.hcs.HCSDatasetLoader loader =
-                new ch.systemsx.cisd.bds.hcs.HCSDatasetLoader(datasetRootDir);
-        return adapt(loader);
-    }
-
-    private static IHCSImageDatasetLoader adapt(final ch.systemsx.cisd.bds.hcs.HCSDatasetLoader loader)
-    {
-        return new IHCSImageDatasetLoader()
-            {
-
-                public void close()
-                {
-                    loader.close();
-                }
-
-                public int getChannelCount()
-                {
-                    return loader.getChannelCount();
-                }
-
-                public Geometry getPlateGeometry()
-                {
-                    return loader.getPlateGeometry();
-                }
-
-                public Geometry getWellGeometry()
-                {
-                    return loader.getWellGeometry();
-                }
-
-                public AbsoluteImageReference tryGetImage(String chosenChannel,
-                        Location wellLocation, Location tileLocation, Size thumbnailSizeOrNull)
-                {
-                    if (thumbnailSizeOrNull != null)
-                    {
-                        return null;
-                    }
-                    String absPath =
-                            loader.tryGetStandardNodeAt(convertToNumber(chosenChannel),
-                                    wellLocation, tileLocation);
-                    return new AbsoluteImageReference(new FileBasedContent(new File(absPath)),
-                            null, null);
-                }
-
-                private int convertToNumber(String chosenChannel)
-                {
-                    return Integer.parseInt(chosenChannel) - 1;
-                }
-
-                public List<String> getChannelsNames()
-                {
-                    List<String> names = new ArrayList<String>();
-                    for (int i = 0; i < getChannelCount(); i++)
-                    {
-                        names.add(convertToName(i));
-                    }
-                    return names;
-                }
-
-                private String convertToName(int i)
-                {
-                    return (i + 1) + "";
-                }
-
-            };
-    }
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ScreeningPlateImageParamsReportingPlugin.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ScreeningPlateImageParamsReportingPlugin.java
index e7273040dae..99108406ddb 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ScreeningPlateImageParamsReportingPlugin.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/ScreeningPlateImageParamsReportingPlugin.java
@@ -41,6 +41,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
  * 
  * @author Tomasz Pylak
  */
+// TODO 2010-06-25, Piotr Buczek: remove
 public class ScreeningPlateImageParamsReportingPlugin extends AbstractDatastorePlugin implements
         IReportingPluginTask
 {
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java
index 9a8095fdcf5..5a7c72404d6 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java
@@ -58,8 +58,8 @@ public class ScreeningDAOFactory implements IScreeningDAOFactory
         {
             throw CheckedExceptionTunnel.wrapIfNecessary(ex);
         }
-        // TODO this is the same solution as in PhosphoNetX - is it ok to use connection here?
-        // shouldn't it be a data source passed here in constructor?
+        // TODO 2010-06-25, Piotr Buczek: this is the same solution as in PhosphoNetX - is it ok to
+        // use connection here? shouldn't it be a data source passed here in constructor?
         imagingQueryDAO = QueryTool.getQuery(connection, IImagingQueryDAO.class);
         if (operationLog.isInfoEnabled())
         {
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/DatasetReportsLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/DatasetReportsLoader.java
index f9c1c782696..4123343ed38 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/DatasetReportsLoader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/DatasetReportsLoader.java
@@ -21,13 +21,13 @@ import java.util.List;
 
 import org.apache.commons.lang.StringEscapeUtils;
 
+import ch.systemsx.cisd.bds.hcs.Geometry;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IExternalDataTable;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IntegerTableCell;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRow;
+import ch.systemsx.cisd.openbis.plugin.screening.server.IScreeningBusinessObjectFactory;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateImageParameters;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.IHCSDatasetLoader;
 
 /**
  * Loads content of datasets by contacting DSS.
@@ -43,52 +43,40 @@ public class DatasetReportsLoader
                 ScreeningConstants.PLATE_IMAGE_ANALYSIS_REPORT_KEY, datastoreCode, datasets);
     }
 
-    public static List<PlateImageParameters> loadPlateImageParameters(List<String> datasets,
-            String datastoreCode, IExternalDataTable externalDataTable)
-    {
-        TableModel imageParamsReport =
-                externalDataTable.createReportFromDatasets(
-                        ScreeningConstants.PLATE_IMAGE_PARAMS_REPORT_KEY, datastoreCode, datasets);
-        return asImageParams(imageParamsReport);
-    }
-
-    private static List<PlateImageParameters> asImageParams(TableModel imageParamsReport)
+    public static List<PlateImageParameters> loadPlateImageParameters(List<String> datasetCodes,
+            IScreeningBusinessObjectFactory boFactory)
     {
         List<PlateImageParameters> paramsList = new ArrayList<PlateImageParameters>();
-        for (TableModelRow tableModelRow : imageParamsReport.getRows())
+
+        for (String datasetCode : datasetCodes)
         {
-            paramsList.add(asImageParams(tableModelRow));
+            final IHCSDatasetLoader loader = boFactory.createHCSDatasetLoader(datasetCode);
+            paramsList.add(createImageParameters(loader));
         }
         return paramsList;
     }
 
-    private static PlateImageParameters asImageParams(TableModelRow tableModelRow)
+    // TODO 2010-06-25, Piotr Buczek: move
+    public static PlateImageParameters createImageParameters(IHCSDatasetLoader loader)
     {
+        final String datasetCode = loader.getDatasetPermId();
+        final Geometry plateGeometry = loader.getPlateGeometry();
+        final Geometry wellGeometry = loader.getWellGeometry();
+        final List<String> channelsNames = loader.getChannelsNames();
+
         PlateImageParameters params = new PlateImageParameters();
-        List<ISerializableComparable> values = tableModelRow.getValues();
-        params.setDatasetCode(asText(values.get(0)));
-        params.setRowsNum(asNum(values.get(1)));
-        params.setColsNum(asNum(values.get(2)));
-        params.setTileRowsNum(asNum(values.get(3)));
-        params.setTileColsNum(asNum(values.get(4)));
-        String channelsNamesCsv = asText(values.get(5));
-        String[] splittedChannelsNames = channelsNamesCsv.split(",");
-        List<String> channelNames = new ArrayList<String>();
-        for (String val : splittedChannelsNames)
+        params.setDatasetCode(datasetCode);
+        params.setRowsNum(plateGeometry.getRows());
+        params.setColsNum(plateGeometry.getColumns());
+        params.setTileRowsNum(wellGeometry.getRows());
+        params.setTileColsNum(wellGeometry.getColumns());
+        List<String> escapedChannelNames = new ArrayList<String>();
+        for (String name : channelsNames)
         {
-            channelNames.add(StringEscapeUtils.escapeCsv(val));
+            escapedChannelNames.add(StringEscapeUtils.escapeCsv(name));
         }
-        params.setChannelsNames(channelNames);
+        params.setChannelsNames(escapedChannelNames);
         return params;
     }
 
-    private static String asText(ISerializableComparable serializableComparable)
-    {
-        return serializableComparable.toString();
-    }
-
-    private static int asNum(ISerializableComparable serializableComparable)
-    {
-        return (int) ((IntegerTableCell) serializableComparable).getNumber();
-    }
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/GenePlateLocationsLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/GenePlateLocationsLoader.java
index 4b329d1e26f..9dc330f9c6d 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/GenePlateLocationsLoader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/GenePlateLocationsLoader.java
@@ -52,6 +52,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateMaterials
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants;
 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.imaging.IHCSDatasetLoader;
 
 /**
  * @author Tomasz Pylak
@@ -90,7 +91,6 @@ public class GenePlateLocationsLoader
         this.businessObjectFactory = businessObjectFactory;
         this.daoFactory = daoFactory;
         this.externalDataTable = businessObjectFactory.createExternalDataTable(session);
-
     }
 
     private List<WellContent> getPlateLocations(PlateMaterialsSearchCriteria materialCriteria)
@@ -200,16 +200,13 @@ public class GenePlateLocationsLoader
             List<ExternalDataPE> usedDatasets)
     {
         List<String> datasetCodes = extractDatasetCodes(usedDatasets);
-        if (datasetCodes.size() == 0)
+        List<PlateImageParameters> imageParameters = new ArrayList<PlateImageParameters>();
+        for (String datasetCode : datasetCodes)
         {
-            return new HashMap<String, PlateImageParameters>();
+            final IHCSDatasetLoader loader =
+                    businessObjectFactory.createHCSDatasetLoader(datasetCode);
+            imageParameters.add(DatasetReportsLoader.createImageParameters(loader));
         }
-
-        // NOTE: assumes that all datasets are from the same datastore
-        String datastoreCode = usedDatasets.get(0).getDataStore().getCode();
-        List<PlateImageParameters> imageParameters =
-                DatasetReportsLoader.loadPlateImageParameters(datasetCodes, datastoreCode,
-                        externalDataTable);
         return asDatasetToParamsMap(imageParameters);
     }
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java
index b94e4c7bcb3..e223a890322 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java
@@ -17,7 +17,6 @@
 package ch.systemsx.cisd.openbis.plugin.screening.server.logic;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
@@ -33,7 +32,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListOrSearchSampleCrite
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
-import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
@@ -48,6 +46,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateImages;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants;
 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.imaging.IHCSDatasetLoader;
 
 /**
  * Loads content of the plate.
@@ -273,14 +272,9 @@ public class PlateContentLoader
     private PlateImageParameters loadImageParams(ExternalDataPE dataset,
             IExternalDataTable externalDataTable)
     {
-        DataStorePE dataStore = dataset.getDataStore();
-        String datasetCode = dataset.getCode();
-        List<String> datasets = Arrays.asList(datasetCode);
-        List<PlateImageParameters> imageParamsReports =
-                DatasetReportsLoader.loadPlateImageParameters(datasets, dataStore.getCode(),
-                        externalDataTable);
-        assert imageParamsReports.size() == 1;
-        return imageParamsReports.get(0);
+        final IHCSDatasetLoader loader =
+                businessObjectFactory.createHCSDatasetLoader(dataset.getCode());
+        return DatasetReportsLoader.createImageParameters(loader);
     }
 
     private static List<WellMetadata> createWells(List<Sample> wellSamples)
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ScreeningConstants.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ScreeningConstants.java
index a54cb3e547a..f28f5180052 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ScreeningConstants.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ScreeningConstants.java
@@ -35,9 +35,6 @@ public class ScreeningConstants
 
     // ---- required DSS plugins
 
-    // id of the DSS screening reporting plugin to get the images parameters
-    public static final String PLATE_IMAGE_PARAMS_REPORT_KEY = "plate-image-params-reporter";
-
     // id of the DSS screening reporting plugin to get the images of the plate
     public static final String PLATE_IMAGE_ANALYSIS_REPORT_KEY =
             "default-plate-image-analysis-merger";
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/HCSDatasetLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/HCSDatasetLoader.java
index 11b03d9d39b..5b27abff787 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/HCSDatasetLoader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/HCSDatasetLoader.java
@@ -79,6 +79,11 @@ public class HCSDatasetLoader implements IHCSDatasetLoader
         return dataset;
     }
 
+    public String getDatasetPermId()
+    {
+        return dataset.getPermId();
+    }
+
     public Geometry getWellGeometry()
     {
         return new Geometry(getDataset().getFieldNumberOfRows(), getDataset()
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/IHCSDatasetLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/IHCSDatasetLoader.java
index 80756fb4bde..16fa7369b7d 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/IHCSDatasetLoader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/IHCSDatasetLoader.java
@@ -29,6 +29,8 @@ public interface IHCSDatasetLoader
     /** has to be called at the end */
     void close();
 
+    String getDatasetPermId();
+
     Geometry getPlateGeometry();
 
     Geometry getWellGeometry();
-- 
GitLab