diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractHCSImageFileExtractor.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractHCSImageFileExtractor.java index e5f4dad6741b4282b585624934bda085d188571d..06328853bad0fbbdd2b026b1aa1c134630062bf0 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractHCSImageFileExtractor.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractHCSImageFileExtractor.java @@ -44,6 +44,7 @@ import ch.systemsx.cisd.common.utilities.PropertyUtils; import ch.systemsx.cisd.openbis.dss.etl.HCSImageFileExtractionResult.Channel; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ChannelDescription; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ColorComponent; /** diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSImageFileExtractor.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSImageFileExtractor.java index b21a5aa7689733bdf34bedb774ec3aa7b444c070..ce716bdc53b941172bcb5ca663365a79dd34448c 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSImageFileExtractor.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSImageFileExtractor.java @@ -27,6 +27,7 @@ import ch.systemsx.cisd.bds.hcs.Location; import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException; import ch.systemsx.cisd.openbis.dss.etl.HCSImageFileExtractionResult.Channel; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ChannelDescription; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ColorComponent; /** diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/PlateStorageProcessor.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/PlateStorageProcessor.java index 2e2a3a66c3c4f98463ec244c20c27b35e5404102..9c3a93a387b844b125b16406af5b448c106e3f79 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/PlateStorageProcessor.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/PlateStorageProcessor.java @@ -67,6 +67,7 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; import ch.systemsx.cisd.openbis.dss.generic.shared.utils.ImageUtil; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.dto.StorageFormat; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ChannelDescription; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants; import ch.systemsx.cisd.openbis.plugin.screening.shared.dto.PlateDimension; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.IImagingQueryDAO; diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dynamix/HCSImageFileExtractor.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dynamix/HCSImageFileExtractor.java index 44e38f70787dd2b4826ddf007edc3955d6d8663c..dc74be8fb950855020812978c4956f2c5501a5fe 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dynamix/HCSImageFileExtractor.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dynamix/HCSImageFileExtractor.java @@ -36,10 +36,10 @@ import ch.systemsx.cisd.bds.hcs.Location; import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; import ch.systemsx.cisd.openbis.dss.etl.AbstractHCSImageFileExtractor; import ch.systemsx.cisd.openbis.dss.etl.AcquiredPlateImage; -import ch.systemsx.cisd.openbis.dss.etl.ChannelDescription; import ch.systemsx.cisd.openbis.dss.etl.HCSImageFileExtractionResult.Channel; import ch.systemsx.cisd.openbis.dss.etl.dynamix.WellLocationMappingUtils.DynamixWellPosition; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ChannelDescription; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation; /** diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreening.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreening.java index aec92e1894a26fb5e70ff1187d4146938b89e87c..82dcb6955f897ed9d07449ce0351e9af09a28c62 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreening.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreening.java @@ -172,8 +172,8 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc implements PlateImageParameters params = imageAccessor.getImageParameters(); int tilesNumber = params.getTileColsNum() * params.getTileRowsNum(); BufferedImage image = ImageUtil.loadImage(imageFile.getInputStream()); - return new ImageDatasetMetadata(dataset, params.getChannelsCodes(), tilesNumber, image - .getWidth(), image.getHeight()); + return new ImageDatasetMetadata(dataset, params.getChannelsCodes(), params + .getChannelsLabels(), tilesNumber, image.getWidth(), image.getHeight()); } private static IContent getAnyImagePath(IHCSImageDatasetLoader imageAccessor, @@ -232,7 +232,7 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc implements List<String> labels = getLabels(builder); return new FeatureVectorDataset(dataset, codes, labels, featureVectors); } - + private List<String> normalize(List<String> names) { ArrayList<String> codes = new ArrayList<String>(names.size()); @@ -288,7 +288,7 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc implements } return labels; } - + private FeatureVectorWithDescription createFeatureVector(FeatureTableRow featureTableRow, final List<String> featureCodes) { diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageDatasetMetadata.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageDatasetMetadata.java index 38e1627fa8db0038b54115785f9259c47f1e9988..d74f46f1e0007fec7ba2bfdd2bf0dec2a3acc3d0 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageDatasetMetadata.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageDatasetMetadata.java @@ -18,17 +18,23 @@ public class ImageDatasetMetadata implements Serializable private final List<String> channelNames; + private final List<String> channelCodes; + + private final List<String> channelLabels; + private final int tilesNumber; private final int width; private final int height; - public ImageDatasetMetadata(IImageDatasetIdentifier dataset, List<String> channelNames, - int tilesNumber, int width, int height) + public ImageDatasetMetadata(IImageDatasetIdentifier dataset, List<String> channelCodes, + List<String> channelLabels, int tilesNumber, int width, int height) { this.imageDataset = dataset; - this.channelNames = channelNames; + this.channelNames = channelCodes; + this.channelCodes = channelCodes; + this.channelLabels = channelLabels; this.channelsNumber = channelNames.size(); this.tilesNumber = tilesNumber; this.width = width; @@ -50,13 +56,32 @@ public class ImageDatasetMetadata implements Serializable } /** - * codes of channels in which images have been acquired for the described dataset + * names of channels in which images have been acquired for the described dataset */ + @Deprecated public List<String> getChannelNames() { return channelNames; } + /** + * Returns channel codes. If channel codes are unspecified channel names are returned. This will + * be the case if a serialized instance of a previous of this class will be deserialized. + */ + public List<String> getChannelCodes() + { + return channelCodes == null ? channelNames : channelCodes; + } + + /** + * Returns channel labels. If channel labels are unspecified channel names are returned. This + * will be the case if a serialized instance of a previous of this class will be deserialized. + */ + public List<String> getChannelLabels() + { + return channelLabels == null ? channelNames : channelLabels; + } + /** * number of image tiles (aka fields) into which each well is splited */ @@ -80,7 +105,7 @@ public class ImageDatasetMetadata implements Serializable @Override public String toString() { - return "Dataset " + imageDataset + " has [" + channelNames + "] channels, " + tilesNumber - + " tiles. Images resolution: " + width + "x" + height; + return "Dataset " + imageDataset + " has [" + getChannelCodes() + "] channels, " + + tilesNumber + " tiles. Images resolution: " + width + "x" + height; } } \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ChannelDescription.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ChannelDescription.java similarity index 85% rename from screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ChannelDescription.java rename to screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ChannelDescription.java index 2596bee8eb14c2c063eedcb3e0341477d9ec6ea8..9775101ddaf3800b43370e2105aba3c9ce62f667 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ChannelDescription.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ChannelDescription.java @@ -14,12 +14,16 @@ * limitations under the License. */ -package ch.systemsx.cisd.openbis.dss.etl; +package ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto; + +import com.google.gwt.user.client.rpc.IsSerializable; /** + * Describes channel by code and label. + * * @author Izabela Adamczyk */ -public class ChannelDescription +public class ChannelDescription implements IsSerializable { private final String code; diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/PlateImageParameters.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/PlateImageParameters.java index feca4ddf712d82c7d043c99f271083456180b5c2..27ae3a545aff57ff282d21a54a835df68151880d 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/PlateImageParameters.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/PlateImageParameters.java @@ -40,6 +40,8 @@ public class PlateImageParameters implements IsSerializable private List<String> channelsCodes; + private List<String> channelsLabels; + // true if any well in the dataset has a time series (or depth stack) of images private boolean isMultidimensional; @@ -118,4 +120,14 @@ public class PlateImageParameters implements IsSerializable this.isMultidimensional = isMultidimensional; } + public void setChannelsLabels(List<String> channelsLabels) + { + this.channelsLabels = channelsLabels; + } + + public List<String> getChannelsLabels() + { + return channelsLabels; + } + } 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 0f56582e1a16cb13afd5b751159af5913cb102ac..babbe25198037ff5f91e24c3e1b1fbae7eebae44 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 @@ -17,7 +17,6 @@ package ch.systemsx.cisd.openbis.plugin.screening.shared.imaging; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import org.apache.commons.lang.StringEscapeUtils; @@ -26,6 +25,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateImagePara import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellImageChannelStack; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.IImagingQueryDAO; +import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ImgChannelDTO; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ImgChannelStackDTO; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ImgContainerDTO; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ImgDatasetDTO; @@ -47,7 +47,7 @@ public class HCSDatasetLoader implements IHCSDatasetLoader protected Integer channelCount; - protected List<String> channelCodes; + protected List<ImgChannelDTO> channels; public HCSDatasetLoader(IImagingQueryDAO query, String datasetPermId) { @@ -57,10 +57,9 @@ public class HCSDatasetLoader implements IHCSDatasetLoader { throw new IllegalStateException(String.format("Dataset '%s' not found", datasetPermId)); } - String[] codesAsArray = - query.getChannelCodesByDatasetIdOrExperimentId(getDataset().getId(), getContainer() + this.channels = + query.getChannelsByDatasetIdOrExperimentId(getDataset().getId(), getContainer() .getExperimentId()); - this.channelCodes = new ArrayList<String>(Arrays.asList(codesAsArray)); } /** has to be called at the end */ @@ -85,7 +84,7 @@ public class HCSDatasetLoader implements IHCSDatasetLoader public int getChannelCount() { - return channelCodes.size(); + return channels.size(); } public List<WellImageChannelStack> listImageChannelStacks(WellLocation wellLocation) @@ -122,12 +121,15 @@ public class HCSDatasetLoader implements IHCSDatasetLoader params.setTileRowsNum(getDataset().getFieldNumberOfRows()); params.setTileColsNum(getDataset().getFieldNumberOfColumns()); params.setIsMultidimensional(dataset.getIsMultidimensional()); - List<String> escapedChannelCodes = new ArrayList<String>(); - for (String name : channelCodes) + List<String> channelsCodes = new ArrayList<String>(); + List<String> channelsLabels = new ArrayList<String>(); + for (ImgChannelDTO channel : channels) { - escapedChannelCodes.add(StringEscapeUtils.escapeCsv(name)); + channelsCodes.add(StringEscapeUtils.escapeCsv(channel.getCode())); + channelsLabels.add(StringEscapeUtils.escapeCsv(channel.getLabel())); } - params.setChannelsCodes(escapedChannelCodes); + params.setChannelsCodes(channelsCodes); + params.setChannelsCodes(channelsLabels); return params; } } \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/IImagingQueryDAO.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/IImagingQueryDAO.java index be84f753092167daaea6bf574bfa94ceec833090..b58b63073029cd2f7e7a368c73fab17696ff5395 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/IImagingQueryDAO.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/IImagingQueryDAO.java @@ -108,8 +108,9 @@ public interface IImagingQueryDAO extends TransactionQuery @Select("select count(*) from CHANNELS where DS_ID = ?{1} or EXP_ID = ?{2}") public int countChannelByDatasetIdOrExperimentId(long datasetId, long experimentId); - @Select("select code from CHANNELS where DS_ID = ?{1} or EXP_ID = ?{2} order by CODE") - public String[] getChannelCodesByDatasetIdOrExperimentId(long datasetId, long experimentId); + @Select("select * from CHANNELS where DS_ID = ?{1} or EXP_ID = ?{2} order by CODE") + public List<ImgChannelDTO> getChannelsByDatasetIdOrExperimentId(long datasetId, + long experimentId); @Select(sql = "select id from CHANNELS where DS_ID = ?{1} or EXP_ID = ?{2} order by LABEL", fetchSize = FETCH_SIZE) public long[] getChannelIdsByDatasetIdOrExperimentId(long datasetId, long experimentId); diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/client/api/v1/ScreeningOpenbisServiceFacadeTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/client/api/v1/ScreeningOpenbisServiceFacadeTest.java index 542941acfc4d40ecab2d3da849a0b981ecd561a5..9132401f6fedde16021ac277052aad96072eda72 100644 --- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/client/api/v1/ScreeningOpenbisServiceFacadeTest.java +++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/client/api/v1/ScreeningOpenbisServiceFacadeTest.java @@ -205,9 +205,9 @@ public class ScreeningOpenbisServiceFacadeTest extends AssertJUnit final String geneCode = "MYGENE"; final MaterialIdentifier materialIdentifier = new MaterialIdentifier(MaterialTypeIdentifier.GENE, geneCode); - final PlateWellReferenceWithDatasets pwRef = new PlateWellReferenceWithDatasets(new Plate( - null, null, null, ExperimentIdentifier.createFromPermId(null)), - new WellPosition(1, 2)); + final PlateWellReferenceWithDatasets pwRef = + new PlateWellReferenceWithDatasets(new Plate(null, null, null, ExperimentIdentifier + .createFromPermId(null)), new WellPosition(1, 2)); context.checking(new Expectations() { { @@ -216,7 +216,8 @@ public class ScreeningOpenbisServiceFacadeTest extends AssertJUnit } }); - final List<PlateWellReferenceWithDatasets> ref = facade.listPlateWells(materialIdentifier, false); + final List<PlateWellReferenceWithDatasets> ref = + facade.listPlateWells(materialIdentifier, false); assertEquals(1, ref.size()); assertEquals(pwRef, ref.get(0)); @@ -265,10 +266,14 @@ public class ScreeningOpenbisServiceFacadeTest extends AssertJUnit @Test public void testListImageMetaData() { - List<String> channelNames = Arrays.asList("channel1"); - final ImageDatasetMetadata m1 = new ImageDatasetMetadata(i1id, channelNames, 1, 1, 1); - final ImageDatasetMetadata m2 = new ImageDatasetMetadata(i1id, channelNames, 1, 1, 1); - final ImageDatasetMetadata m3 = new ImageDatasetMetadata(i2id, channelNames, 1, 1, 1); + List<String> channelCodes = Arrays.asList("channel1"); + List<String> channelLabels = Arrays.asList("Channel 1"); + final ImageDatasetMetadata m1 = + new ImageDatasetMetadata(i1id, channelCodes, channelLabels, 1, 1, 1); + final ImageDatasetMetadata m2 = + new ImageDatasetMetadata(i1id, channelCodes, channelLabels, 1, 1, 1); + final ImageDatasetMetadata m3 = + new ImageDatasetMetadata(i2id, channelCodes, channelLabels, 1, 1, 1); context.checking(new Expectations() { { diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/ImagingQueryDAOTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/ImagingQueryDAOTest.java index e542bb1943db64c28bd6d8c91bc4dd7af35f478d..7ca89ea5696ee4afa1d278d1e34284f3ea5f50f4 100644 --- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/ImagingQueryDAOTest.java +++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/ImagingQueryDAOTest.java @@ -163,10 +163,12 @@ public class ImagingQueryDAOTest extends AbstractDBTest { // test countChannelByDatasetIdOrExperimentId assertEquals(2, dao.countChannelByDatasetIdOrExperimentId(datasetId, experimentId)); - String[] channelNames = - dao.getChannelCodesByDatasetIdOrExperimentId(datasetId, experimentId); - assertEquals("DSCHANNEL", channelNames[0]); - assertEquals("EXPCHANNEL", channelNames[1]); + List<ImgChannelDTO> channelDTOS = + dao.getChannelsByDatasetIdOrExperimentId(datasetId, experimentId); + assertEquals("DSCHANNEL", channelDTOS.get(0).getCode()); + assertEquals(CHANNEL_LABEL, channelDTOS.get(0).getLabel()); + assertEquals("EXPCHANNEL", channelDTOS.get(1).getCode()); + assertEquals(CHANNEL_LABEL, channelDTOS.get(1).getLabel()); // test getChannelIdsByDatasetIdOrExperimentId long[] channels = dao.getChannelIdsByDatasetIdOrExperimentId(datasetId, experimentId);