diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/LinkExtractor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/LinkExtractor.java index d2760842ca83207e92c88e3f6cebfaed826d836d..ad5623a28480178dfe0253c157214b0ad0abad45 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/LinkExtractor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/LinkExtractor.java @@ -119,7 +119,7 @@ public class LinkExtractor assert entityKind != EntityKind.MATERIAL; URLMethodWithParameters url = new URLMethodWithParameters(""); url.addParameter(PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY, entityKind.name()); - url.addParameter(PermlinkUtilities.PERM_ID_PARAMETER_KEY, permId); + url.addParameterWithoutEncoding(PermlinkUtilities.PERM_ID_PARAMETER_KEY, permId); return tryPrint(url); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java index 115e0b1898966d4da1155d4a517e2b813509c2eb..6901d2b02215f3518cf700b558c9625d09e071b5 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java @@ -55,6 +55,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset.GenericDataSetViewer; +import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample.GenericSampleViewer; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.ExperimentAnalysisSummaryViewer; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.ImageDataSetViewer; @@ -517,7 +518,15 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree String sampleTypeCode = entity.getEntityType().getCode(); if (sampleTypeCode.matches(ScreeningConstants.HCS_PLATE_SAMPLE_TYPE_PATTERN)) { - return createPlateViewer(entity); + if (entity.getPermId().contains(":")) + { + String permId = entity.getPermId(); + return createImageSampleViewer(entity, WellLocation.parseLocationStr(permId + .substring(permId.indexOf(':') + 1)), false); + } else + { + return createPlateViewer(entity); + } } else if (sampleTypeCode.equals(ScreeningConstants.LIBRARY_PLUGIN_TYPE_CODE)) { throw new UserFailureException("Cannot browse objects of the " @@ -525,16 +534,17 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree } else if (sampleTypeCode .matches(ScreeningConstants.MICROSCOPY_IMAGE_SAMPLE_TYPE_PATTERN)) { - return createImageSampleViewer(entity, false); + return createImageSampleViewer(entity, null, false); } else // well sample { - return createImageSampleViewer(entity, true); + return createImageSampleViewer(entity, null, true); } } private AbstractTabItemFactory createImageSampleViewer( - final IEntityInformationHolderWithPermId entity, final boolean isWellSample) + final IEntityInformationHolderWithPermId entity, + final WellLocation wellLocationOrNull, final boolean isWellSample) { return new AbstractTabItemFactory() { @@ -542,8 +552,8 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree public ITabItem create() { final DatabaseModificationAwareComponent viewer = - ImageSampleViewer - .create(screeningViewContext, entity, isWellSample); + ImageSampleViewer.create(screeningViewContext, entity, + wellLocationOrNull, isWellSample); return createViewerTab(viewer, getTabTitle(), screeningViewContext); } @@ -551,7 +561,9 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree public String getId() { final TechId sampleId = TechId.create(entity); - return GenericDataSetViewer.createId(sampleId); + return GenericSampleViewer.createId(sampleId) + + (wellLocationOrNull == null ? "" : ":" + + wellLocationOrNull.toWellIdString()); } @Override @@ -563,9 +575,24 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree @Override public String getTabTitle() { - if (isWellSample) + if (isWellSample || wellLocationOrNull != null) { - return getViewerTitle(Dict.WELL, entity, screeningViewContext); + ICodeHolder codeHolder = new ICodeHolder() + { + public String getCode() + { + if (wellLocationOrNull != null) + { + return entity.getCode() + ":" + + wellLocationOrNull.toWellIdString(); + } else + { + return entity.getCode(); + } + } + }; + + return getViewerTitle(Dict.WELL, codeHolder, screeningViewContext); } else { return getViewerTitle(Dict.SAMPLE, entity, screeningViewContext); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImageSampleSection.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImageSampleSection.java index 3d79891c6a4656c99d1bd755c727fa8a498002f1..21bb32219b2074d04bb83c6343403f9d0b17ba92 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImageSampleSection.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImageSampleSection.java @@ -58,12 +58,15 @@ public class ImageSampleSection extends TabContent private final WellLocation wellLocationOrNull; + private final boolean isWell; + public ImageSampleSection(final ScreeningViewContext viewContext, final TechId sampleId, - WellLocation wellLocationOrNull) + WellLocation wellLocationOrNull, boolean isWell) { super(WELL_IMAGE_SECTION_TITLE, viewContext, sampleId); this.sampleId = sampleId; this.wellLocationOrNull = wellLocationOrNull; + this.isWell = isWell; setIds(DisplayTypeIDGenerator.LOGICAL_IMAGE_WELL_SECTION); } @@ -77,8 +80,8 @@ public class ImageSampleSection extends TabContent { final ScreeningViewContext context = getViewContext(); add(new Text(context.getMessage(Dict.LOAD_IN_PROGRESS))); - context.getService().getImageDatasetInfosForSample(sampleId, wellLocationOrNull, - createDisplayImagesCallback(context)); + context.getService().getImageDatasetInfosForSample(sampleId, + isWell ? wellLocationOrNull : null, createDisplayImagesCallback(context)); } private AsyncCallback<ImageSampleContent> createDisplayImagesCallback( diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImageSampleViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImageSampleViewer.java index 4df212c5383dee75b0c86c98b07427e21df274ec..82286486237fe228d44c2dc4405929c6caaeee1d 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImageSampleViewer.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImageSampleViewer.java @@ -39,9 +39,11 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation; public final class ImageSampleViewer extends GenericSampleViewer { public static DatabaseModificationAwareComponent create(final ScreeningViewContext viewContext, - final IIdAndCodeHolder identifiable, boolean isWellSample) + final IIdAndCodeHolder identifiable, WellLocation wellLocationOrNull, + boolean isWellSample) { - ImageSampleViewer viewer = new ImageSampleViewer(viewContext, identifiable, isWellSample); + ImageSampleViewer viewer = + new ImageSampleViewer(viewContext, identifiable, wellLocationOrNull, isWellSample); viewer.reloadAllData(); return new DatabaseModificationAwareComponent(viewer, viewer); } @@ -50,13 +52,25 @@ public final class ImageSampleViewer extends GenericSampleViewer private final WellLocation wellLocationOrNull; + private final boolean isWell; + private ImageSampleViewer(final ScreeningViewContext viewContext, - final IIdAndCodeHolder identifiable, boolean isWellSample) + final IIdAndCodeHolder identifiable, WellLocation wellLocationOrNull, + boolean isWellSample) { super(viewContext, identifiable); this.screeningViewContext = viewContext; - this.wellLocationOrNull = - isWellSample ? WellLocation.tryParseLocationStr(getWellCode(identifiable)) : null; + this.isWell = isWellSample; + + if (isWellSample) + { + this.wellLocationOrNull = + isWellSample ? WellLocation.tryParseLocationStr(getWellCode(identifiable)) + : null; + } else + { + this.wellLocationOrNull = wellLocationOrNull; + } } private static String getWellCode(final IIdAndCodeHolder identifiable) @@ -84,7 +98,8 @@ public final class ImageSampleViewer extends GenericSampleViewer { List<TabContent> sections = new ArrayList<TabContent>(); - sections.add(new ImageSampleSection(screeningViewContext, sampleId, wellLocationOrNull)); + sections.add(new ImageSampleSection(screeningViewContext, sampleId, wellLocationOrNull, + isWell)); return sections; } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java index ffe99487cebb94eb6f90a3cd97bdde5c8cbcc88d..41c91b32d3a92d8ffc7505bd629e04a7a5b633ee 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java @@ -59,7 +59,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.utils.PropertiesUtil; 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.ImageDatasetParameters; -import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellImage; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellContent; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellReplicaImage; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; @@ -233,7 +233,7 @@ public class MaterialReplicaSummaryComponent { if (i < sortedTechnicalReplicates.size()) { - WellImage wellImage = sortedTechnicalReplicates.get(i).getWellImage(); + WellContent wellImage = sortedTechnicalReplicates.get(i).getWellImage(); Widget imageViewer = createImageViewer(wellImage, channelChooser, getOneImageSizeFactorPx(maxReplicaNumber)); @@ -337,7 +337,7 @@ public class MaterialReplicaSummaryComponent } } - private Widget createImageViewer(final WellImage image, ChannelChooserPanel channelChooser, + private Widget createImageViewer(final WellContent image, ChannelChooserPanel channelChooser, final int oneImageSizeFactorPx) { assert image.tryGetImageDataset() != null; diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java index cffa9878d0c48f6a3896b8870a22bf242d59a6d4..619b4401da23208a92a42eca5aecebd762b387be 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java @@ -53,6 +53,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; 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.basic.dto.Material; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.Dict; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.dto.LogicalImageChannelsReference; @@ -65,6 +66,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ExperimentRefe import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetEnrichedReference; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetParameters; 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.WellImage; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellMetadata; @@ -92,12 +94,12 @@ public class WellContentDialog extends Dialog /** * A dialog which shows the content of the well (static or a timepoints movie). */ - public static void showContentDialog(final WellData wellData, + public static void showContentDialog(final WellData wellData, final Sample plateSample, ImageDatasetEnrichedReference imageDatasetOrNull, final IViewContext<IScreeningClientServiceAsync> viewContext) { final WellContentDialog contentDialog = - createContentDialog(wellData, imageDatasetOrNull, viewContext); + createContentDialog(wellData, plateSample, imageDatasetOrNull, viewContext); showContentDialog(contentDialog, viewContext); } @@ -114,7 +116,7 @@ public class WellContentDialog extends Dialog } private static WellContentDialog createContentDialog(final WellData wellData, - ImageDatasetEnrichedReference imageDatasetOrNull, + Sample plateSample, ImageDatasetEnrichedReference imageDatasetOrNull, final IViewContext<IScreeningClientServiceAsync> viewContext) { WellLocation wellLocation = wellData.getWellLocation(); @@ -127,7 +129,7 @@ public class WellContentDialog extends Dialog wellPropertiesOrNull = wellMetadata.getWellSample().getProperties(); } return new WellContentDialog(wellOrNull, wellPropertiesOrNull, wellLocation, - getExperiment(wellData), imageDatasetOrNull, viewContext); + getExperiment(wellData), plateSample, imageDatasetOrNull, viewContext); } /** @@ -138,7 +140,7 @@ public class WellContentDialog extends Dialog */ public static Widget createImageViewerForChannel( final IViewContext<IScreeningClientServiceAsync> viewContext, - final WellImage wellImage, int imageSizePx, List<String> channels, + final WellContent wellImage, int imageSizePx, List<String> channels, String imageTransformationCodeOrNull) { final ImageDatasetEnrichedReference imageDataset = tryGetImageDataset(wellImage); @@ -177,7 +179,8 @@ public class WellContentDialog extends Dialog { public void handleEvent(BaseEvent be) { - showContentDialog(viewContext, wellImage, imageDataset); + showContentDialog(viewContext, wellImage, wellImage.getPlate(), + imageDataset); } }); } @@ -197,11 +200,13 @@ public class WellContentDialog extends Dialog } private static void showContentDialog(IViewContext<IScreeningClientServiceAsync> viewContext, - WellImage wellImage, ImageDatasetEnrichedReference imageDatasetOrNull) + WellImage wellImage, IEntityInformationHolderWithPermId plate, + ImageDatasetEnrichedReference imageDatasetOrNull) { WellContentDialog contentDialog = new WellContentDialog(wellImage.getWell(), null, wellImage.tryGetLocation(), - getExperiment(wellImage.getExperiment()), imageDatasetOrNull, viewContext); + getExperiment(wellImage.getExperiment()), plate, imageDatasetOrNull, + viewContext); showContentDialog(contentDialog, viewContext); } @@ -244,6 +249,8 @@ public class WellContentDialog extends Dialog private final SingleExperimentSearchCriteria experimentCriteria; + private final IEntityInformationHolderWithPermId plate; + private final IViewContext<IScreeningClientServiceAsync> viewContext; private ImageDatasetEnrichedReference imageDatasetOrNull; @@ -251,10 +258,12 @@ public class WellContentDialog extends Dialog private WellContentDialog(IEntityInformationHolderWithPermId wellOrNull, List<IEntityProperty> wellPropertiesOrNull, final WellLocation wellLocationOrNull, final SingleExperimentSearchCriteria experimentCriteria, + IEntityInformationHolderWithPermId plate, ImageDatasetEnrichedReference imageDatasetOrNull, final IViewContext<IScreeningClientServiceAsync> viewContext) { this.wellOrNull = wellOrNull; + this.plate = plate; this.wellLocationOrNull = wellLocationOrNull; this.wellPropertiesOrNull = wellPropertiesOrNull; if (wellPropertiesOrNull != null) @@ -349,27 +358,27 @@ public class WellContentDialog extends Dialog public String getPermId() { - return imageDatasetOrNull.getPermId() + suffix; + return plate.getPermId() + suffix; } public String getCode() { - return imageDatasetOrNull.getCode(); + return plate.getCode(); } public Long getId() { - return imageDatasetOrNull.getId(); + return plate.getId(); } public BasicEntityType getEntityType() { - return imageDatasetOrNull.getEntityType(); + return plate.getEntityType(); } public EntityKind getEntityKind() { - return imageDatasetOrNull.getEntityKind(); + return plate.getEntityKind(); } }, getWellDescription())); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/heatmaps/PlateLayouter.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/heatmaps/PlateLayouter.java index 2263bbf80327f3693c20de6f1046de0e544ad421..e23f7d1e82e15eebc476ff241001f9b21fe618f7 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/heatmaps/PlateLayouter.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/heatmaps/PlateLayouter.java @@ -408,7 +408,8 @@ public class PlateLayouter ImageDatasetEnrichedReference dataset = model.tryGetImageDataset(); if (dataset == null) { - WellContentDialog.showContentDialog(wellData, null, screeningViewContext); + WellContentDialog.showContentDialog(wellData, model.getPlateSample(), null, + screeningViewContext); } else { // Reload meta data because they might be out dated especially when @@ -427,6 +428,7 @@ public class PlateLayouter { model.setImageDataset(refreshedDataset); WellContentDialog.showContentDialog(wellData, + layouter.model.getPlateSample(), refreshedDataset, screeningViewContext); } }); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/heatmaps/PlateLayouterModel.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/heatmaps/PlateLayouterModel.java index 1ff96f3421d1f953aab987333f5a5a90d5f75e0b..ac05c3c4f466bc31d294a62ba2156160d42177ea 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/heatmaps/PlateLayouterModel.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/heatmaps/PlateLayouterModel.java @@ -26,6 +26,7 @@ import java.util.Set; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CodeAndLabel; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.dto.WellData; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetReference; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.FeatureValue; @@ -49,6 +50,8 @@ class PlateLayouterModel private final List<WellData> wellList; // the same wells as in the matrix + private final Sample plateSample; + // --- internal dynamix state private ImageDatasetEnrichedReference imageDatasetOrNull; @@ -66,6 +69,7 @@ class PlateLayouterModel public PlateLayouterModel(PlateMetadata plateMetadata) { + this.plateSample = plateMetadata.getPlate(); this.wellMatrix = createWellMatrix(plateMetadata); this.wellList = asList(wellMatrix); } @@ -280,4 +284,9 @@ class PlateLayouterModel return result; } + public Sample getPlateSample() + { + return plateSample; + } + } \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ImagingDataSetLocatorResolver.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ImagingDataSetLocatorResolver.java index cfe928b6510c3f01e7c09d27b9102ec7bec3c9f5..3c35380ac82485648f09bc84b1d409a20c0a863f 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ImagingDataSetLocatorResolver.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ImagingDataSetLocatorResolver.java @@ -49,8 +49,9 @@ public class ImagingDataSetLocatorResolver extends PermlinkLocatorResolver locator.getParameters().get(PermlinkUtilities.PERM_ID_PARAMETER_KEY); return super.canHandleLocator(locator) - && EntityKind.DATA_SET.name().equals(entityKindValueOrNull) - && permIdValueOrNull != null && permIdValueOrNull.contains(":"); + && (EntityKind.DATA_SET.name().equals(entityKindValueOrNull) || EntityKind.SAMPLE + .name().equals(entityKindValueOrNull)) && permIdValueOrNull != null + && permIdValueOrNull.contains(":"); } /**