From 2248742c126547e5bfb29604eccb8ab1df1770c4 Mon Sep 17 00:00:00 2001
From: tpylak <tpylak>
Date: Fri, 28 Oct 2011 11:26:15 +0000
Subject: [PATCH] LMS-2608 add sql queries to ask about wells with images

SVN: 23452
---
 .../dataaccess/IImagingReadonlyQueryDAO.java  | 21 +++++++++++++++++
 .../shared/imaging/dataaccess/ImgSpotDTO.java |  3 +--
 .../etl/dataaccess/ImagingQueryDAOTest.java   | 23 +++++++++++++++++++
 3 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/IImagingReadonlyQueryDAO.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/IImagingReadonlyQueryDAO.java
index 20d96ba1ddf..437e496887a 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/IImagingReadonlyQueryDAO.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/IImagingReadonlyQueryDAO.java
@@ -87,6 +87,12 @@ public interface IImagingReadonlyQueryDAO extends BaseQuery
     // " and CHANNEL_STACKS.T_in_SEC IS NULL                        "
     // + " and CHANNEL_STACKS.Z_in_M IS NULL                ";
 
+    public static final String SQL_HCS_WELLS_WITH_IMAGES =
+            "select distinct s.*                              "
+                    + "from CHANNEL_STACKS ch, SPOTS s, ACQUIRED_IMAGES ai "
+                    + "where ch.is_representative = 'T' and ch.DS_ID = ?{1} and "
+                    + "      ai.CHANNEL_STACK_ID = ch.ID and ch.SPOT_ID = s.ID";
+
     // ---------------- HCS ---------------------------------
 
     /**
@@ -138,6 +144,21 @@ public interface IImagingReadonlyQueryDAO extends BaseQuery
             + " where d.perm_id = ?{1} and ch.code = upper(?{2}) and s.id is NOT NULL")
     public List<ImgImageEnrichedDTO> listHCSImages(String datasetPermId, String channelCode);
 
+    /**
+     * @return list of wells for which there are any thumbnail or original images (any tile, any
+     *         channel).
+     */
+    @Select(SQL_HCS_WELLS_WITH_IMAGES)
+    public List<ImgSpotDTO> listWellsWithAnyImages(long datasetId);
+
+    /** @return list of wells for which there are any thumbnail images (any tile, any channel). */
+    @Select(SQL_HCS_WELLS_WITH_IMAGES + " and ai.thumbnail_id is not null")
+    public List<ImgSpotDTO> listWellsWithAnyThumbnails(long datasetId);
+
+    /** @return list of wells for which there are any original images (any tile, any channel). */
+    @Select(SQL_HCS_WELLS_WITH_IMAGES + " and ai.img_id is not null")
+    public List<ImgSpotDTO> listWellsWithAnyOriginalImages(long datasetId);
+
     // ---------------- Microscopy ---------------------------------
 
     /**
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/ImgSpotDTO.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/ImgSpotDTO.java
index 689d17b6857..0bf32b80421 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/ImgSpotDTO.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/ImgSpotDTO.java
@@ -40,9 +40,8 @@ public class ImgSpotDTO extends AbstractImgIdentifiable
         // All Data-Object classes must have a default constructor.
     }
 
-    public ImgSpotDTO(/* String permId, */Integer row, Integer column, long containerId)
+    public ImgSpotDTO(Integer row, Integer column, long containerId)
     {
-        /* this.permId = permId; */
         this.column = column;
         this.row = row;
         this.containerId = containerId;
diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImagingQueryDAOTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImagingQueryDAOTest.java
index cc200d14aee..6ed8e649a48 100644
--- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImagingQueryDAOTest.java
+++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImagingQueryDAOTest.java
@@ -247,9 +247,32 @@ public class ImagingQueryDAOTest extends AbstractDBTest
         addAcquiredImage(imageId2, channelStackId, experimentChannelId2);
 
         testGetHCSImage(datasetId, channelStackId, datasetChannelId1, experimentChannelId2, spotId);
+        testGetAnyHCSImage(datasetId);
         testListChannelStacksAndSpots(datasetId, channelStackId, spotId);
     }
 
+    private void testGetAnyHCSImage(long datasetId)
+    {
+        List<ImgSpotDTO> anyImgSpots = dao.listWellsWithAnyImages(datasetId);
+        assertEquals(1, anyImgSpots.size());
+        ImgSpotDTO spot = anyImgSpots.get(0);
+        assertDefaultSpot(spot);
+
+        List<ImgSpotDTO> thumbnailImgSpots = dao.listWellsWithAnyThumbnails(datasetId);
+        assertEquals(1, thumbnailImgSpots.size());
+        assertEquals(spot, thumbnailImgSpots.get(0));
+
+        List<ImgSpotDTO> originalImgSpots = dao.listWellsWithAnyOriginalImages(datasetId);
+        assertEquals(1, originalImgSpots.size());
+        assertEquals(spot, originalImgSpots.get(0));
+    }
+
+    private void assertDefaultSpot(ImgSpotDTO spot)
+    {
+        assertEquals(X_WELL_COLUMN, 0L + spot.getColumn());
+        assertEquals(Y_WELL_ROW, 0L + spot.getRow());
+    }
+
     private void testListChannelStacksAndSpots(long datasetId, long channelStackId, long spotId)
     {
         ImgChannelStackDTO stackDTO = testListChannelStacks(datasetId, channelStackId);
-- 
GitLab