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 e97c29ad8d6c704567d47a25d6c8e19d927a5d3f..dabeb5ad7a955faaf1b76fd766a2834f15ed65bb 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 @@ -57,7 +57,6 @@ import ch.systemsx.cisd.etlserver.AbstractStorageProcessor; import ch.systemsx.cisd.etlserver.IHCSImageFileAccepter; import ch.systemsx.cisd.etlserver.ITypeExtractor; import ch.systemsx.cisd.etlserver.PlateDimension; -import ch.systemsx.cisd.etlserver.PlateDimensionParser; import ch.systemsx.cisd.hdf5.HDF5FactoryProvider; import ch.systemsx.cisd.hdf5.IHDF5Writer; import ch.systemsx.cisd.openbis.dss.Constants; @@ -67,7 +66,6 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider; 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.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.dto.StorageFormat; /** @@ -78,7 +76,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.StorageFormat; public final class PlateStorageProcessor extends AbstractStorageProcessor { - /** The directory where <i>original</i> data could be found. */ private static final String DIR_ORIGINAL = "original"; @@ -90,13 +87,15 @@ public final class PlateStorageProcessor extends AbstractStorageProcessor // tiles geometry, e.g. 3x4 if the well is divided into 12 tiles (3 rows, 4 columns) private static final String SPOT_GEOMETRY_PROPERTY = "well_geometry"; - + private static final String THUMBNAIL_MAX_WIDTH_PROPERTY = "thumbnail-max-width"; + private static final int DEFAULT_THUMBNAIL_MAX_WIDTH = 200; private static final String THUMBNAIL_MAX_HEIGHT_PROPERTY = "thumbnail-max-height"; + private static final int DEFAULT_THUMBNAIL_MAX_HEIGHT = 160; - + private static final String FILE_EXTRACTOR_PROPERTY = "file-extractor"; // a class of the old-style image extractor @@ -114,9 +113,9 @@ public final class PlateStorageProcessor extends AbstractStorageProcessor private final List<String> channelNames; private final int thumbnailMaxWidth; - + private final int thumbnailMaxHeight; - + // one of the extractors is always null and one not null private final IHCSImageFileExtractor imageFileExtractor; @@ -185,19 +184,8 @@ public final class PlateStorageProcessor extends AbstractStorageProcessor private ScreeningContainerDatasetInfo createScreeningDatasetInfo(Experiment experiment, DataSetInformation dataSetInformation) { - ScreeningContainerDatasetInfo info = new ScreeningContainerDatasetInfo(); - info.setExperimentPermId(experiment.getPermId()); - ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample sample = - dataSetInformation.tryToGetSample(); - assert sample != null : "no sample connected to a dataset"; - info.setContainerPermId(sample.getPermId()); - info.setDatasetPermId(dataSetInformation.getDataSetCode()); - - PlateDimension plateGeometry = getPlateGeometry(dataSetInformation); - int plateRows = plateGeometry.getRowsNum(); - int plateCols = plateGeometry.getColsNum(); - info.setContainerRows(plateRows); - info.setContainerColumns(plateCols); + ScreeningContainerDatasetInfo info = + ScreeningContainerDatasetInfo.createScreeningDatasetInfo(dataSetInformation); info.setTileRows(spotGeometry.getRows()); info.setTileColumns(spotGeometry.getColumns()); @@ -207,16 +195,7 @@ public final class PlateStorageProcessor extends AbstractStorageProcessor private PlateDimension getPlateGeometry(final DataSetInformation dataSetInformation) { - final IEntityProperty[] sampleProperties = dataSetInformation.getProperties(); - final PlateDimension plateDimension = - PlateDimensionParser.tryToGetPlateDimension(sampleProperties); - if (plateDimension == null) - { - throw new EnvironmentFailureException( - "Missing plate geometry for the plate registered for sample identifier '" - + dataSetInformation.getSampleIdentifier() + "'."); - } - return plateDimension; + return ScreeningContainerDatasetInfo.getPlateGeometry(dataSetInformation); } // --------------------------------- @@ -291,9 +270,8 @@ public final class PlateStorageProcessor extends AbstractStorageProcessor List<AcquiredPlateImage> plateImages = extractionResult.getImages(); File imagesInStoreFolder = moveFileToDirectory(incomingDataSetDirectory, originalFolder); - + createThumbnails(rootDirectory, imagesInStoreFolder, plateImages); - storeInDatabase(experiment, dataSetInformation, extractionResult); return rootDirectory; @@ -305,9 +283,10 @@ public final class PlateStorageProcessor extends AbstractStorageProcessor File thumbnailsFile = new File(rootDirectory, Constants.HDF5_CONTAINER_FILE_NAME); IHDF5Writer writer = HDF5FactoryProvider.get().open(thumbnailsFile); String relativeImagesDirectory = - getRelativeImagesDirectory(rootDirectory, imagesInStoreFolder); - String relativeThumbnailFilePath = getRelativeImagesDirectory(rootDirectory, thumbnailsFile); - + getRelativeImagesDirectory(rootDirectory, imagesInStoreFolder); + String relativeThumbnailFilePath = + getRelativeImagesDirectory(rootDirectory, thumbnailsFile); + for (AcquiredPlateImage plateImage : plateImages) { RelativeImageReference imageReference = plateImage.getImageReference(); @@ -315,7 +294,8 @@ public final class PlateStorageProcessor extends AbstractStorageProcessor imageReference.setRelativeImageFolder(relativeImagesDirectory); File img = new File(imagesInStoreFolder, imagePath); BufferedImage image = ImageUtil.loadImage(img); - BufferedImage thumbnail = ImageUtil.createThumbnail(image, thumbnailMaxWidth, thumbnailMaxHeight); + BufferedImage thumbnail = + ImageUtil.createThumbnail(image, thumbnailMaxWidth, thumbnailMaxHeight); ByteArrayOutputStream output = new ByteArrayOutputStream(); try { @@ -337,7 +317,7 @@ public final class PlateStorageProcessor extends AbstractStorageProcessor } writer.close(); } - + private String getRelativeImagesDirectory(File rootDirectory, File imagesInStoreFolder) { String root = rootDirectory.getAbsolutePath(); @@ -399,7 +379,7 @@ public final class PlateStorageProcessor extends AbstractStorageProcessor } final HCSImageFileExtractionResult result = extractor.extract(incomingDataSetDirectory, dataSetInformation); - + if (operationLog.isInfoEnabled()) { long duration = System.currentTimeMillis() - extractionStart; diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ScreeningContainerDatasetInfo.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ScreeningContainerDatasetInfo.java index 5c160ddc3a3668dccf8928f5c2ef5b55d925e0f2..5ce42fcdf786b6ce8bfe8849b22711be6ddd81cf 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ScreeningContainerDatasetInfo.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ScreeningContainerDatasetInfo.java @@ -16,6 +16,13 @@ package ch.systemsx.cisd.openbis.dss.etl; +import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; +import ch.systemsx.cisd.etlserver.PlateDimension; +import ch.systemsx.cisd.etlserver.PlateDimensionParser; +import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; + /** * Describes one dataset container (e.g. plate) with images. * @@ -103,4 +110,39 @@ public class ScreeningContainerDatasetInfo this.tileColumns = tileColumns; } + public static ScreeningContainerDatasetInfo createScreeningDatasetInfo( + DataSetInformation dataSetInformation) + { + Experiment experiment = dataSetInformation.tryToGetExperiment(); + ScreeningContainerDatasetInfo info = new ScreeningContainerDatasetInfo(); + info.setExperimentPermId(experiment.getPermId()); + ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample sample = + dataSetInformation.tryToGetSample(); + assert sample != null : "no sample connected to a dataset"; + info.setContainerPermId(sample.getPermId()); + info.setDatasetPermId(dataSetInformation.getDataSetCode()); + + PlateDimension plateGeometry = getPlateGeometry(dataSetInformation); + int plateRows = plateGeometry.getRowsNum(); + int plateCols = plateGeometry.getColsNum(); + info.setContainerRows(plateRows); + info.setContainerColumns(plateCols); + + return info; + } + + static PlateDimension getPlateGeometry(final DataSetInformation dataSetInformation) + { + final IEntityProperty[] sampleProperties = dataSetInformation.getProperties(); + final PlateDimension plateDimension = + PlateDimensionParser.tryToGetPlateDimension(sampleProperties); + if (plateDimension == null) + { + throw new EnvironmentFailureException( + "Missing plate geometry for the plate registered for sample identifier '" + + dataSetInformation.getSampleIdentifier() + "'."); + } + return plateDimension; + } + } \ No newline at end of file