diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AbstractClientPluginFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AbstractClientPluginFactory.java index a2ae67dc87bb3d906aa4c249cb2fcf0da59c30b9..32d2eba41cffa159925a0c100b8b08f33ac0e0cc 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AbstractClientPluginFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AbstractClientPluginFactory.java @@ -26,10 +26,10 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IMo * * @author Christian Ribeaud */ -public abstract class AbstractClientPluginFactory<S extends IClientServiceAsync> implements - IClientPluginFactory +public abstract class AbstractClientPluginFactory<V extends IViewContext<? extends IClientServiceAsync>> + implements IClientPluginFactory { - private final IViewContext<S> viewContext; + private final V viewContext; protected AbstractClientPluginFactory( final IViewContext<ICommonClientServiceAsync> originalViewContext) @@ -37,10 +37,10 @@ public abstract class AbstractClientPluginFactory<S extends IClientServiceAsync> this.viewContext = createViewContext(originalViewContext); } - protected abstract IViewContext<S> createViewContext( + protected abstract V createViewContext( IViewContext<ICommonClientServiceAsync> originalViewContext); - public final IViewContext<S> getViewContext() + public final V getViewContext() { return viewContext; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java index 63c4e2f035e26cc48461c72d84fd4f7a530c4ded..22d61062b84e4a2ee28e1af0ee2ff1b630e63b85 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java @@ -42,6 +42,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.ICl import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider; +import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType; @@ -171,10 +172,10 @@ public abstract class AbstractViewer<D extends IEntityInformationHolder> extends } public static String getTitle(final IMessageProvider messageProvider, - final String entityKindDictKey, final IIdentifiable identifiable) + final String entityKindDictKey, final ICodeProvider codeProvider) { return messageProvider.getMessage(Dict.DETAILS_TITLE, messageProvider - .getMessage(entityKindDictKey), identifiable.getCode()); + .getMessage(entityKindDictKey), codeProvider.getCode()); } /** Updates data displayed in the browser (needed to open editor view). */ diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/ClientPluginFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/ClientPluginFactory.java index 560d6832f5b3407a23a6d6a089bc5203fe9eeac7..0126cfc31e4411bddc994778781073a5aa29d594 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/ClientPluginFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/ClientPluginFactory.java @@ -42,7 +42,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; -import ch.systemsx.cisd.openbis.plugin.demo.client.web.client.IDemoClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.GenericViewContext; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample.GenericSampleRegistrationForm; @@ -54,7 +53,7 @@ import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sam * * @author Christian Ribeaud */ -public final class ClientPluginFactory extends AbstractClientPluginFactory<IDemoClientServiceAsync> +public final class ClientPluginFactory extends AbstractClientPluginFactory<DemoViewContext> { public ClientPluginFactory(final IViewContext<ICommonClientServiceAsync> originalViewContext) @@ -67,7 +66,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<IDemo // @Override - protected final IViewContext<IDemoClientServiceAsync> createViewContext( + protected final DemoViewContext createViewContext( final IViewContext<ICommonClientServiceAsync> originalViewContext) { return new DemoViewContext(originalViewContext); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java index 21e58bf5158cbfd7972ab1f5471ef4aeed0c0a42..f0b3da90482c0ce79c7db48c66ded28722c7132b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java @@ -45,7 +45,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; 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.IGenericClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset.GenericDataSetEditForm; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset.GenericDataSetViewer; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment.GenericExperimentEditForm; @@ -65,8 +64,7 @@ import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sam * * @author Christian Ribeaud */ -public final class ClientPluginFactory extends - AbstractClientPluginFactory<IGenericClientServiceAsync> +public final class ClientPluginFactory extends AbstractClientPluginFactory<GenericViewContext> { public ClientPluginFactory(final IViewContext<ICommonClientServiceAsync> originalViewContext) { @@ -78,7 +76,7 @@ public final class ClientPluginFactory extends // @Override - protected final IViewContext<IGenericClientServiceAsync> createViewContext( + protected final GenericViewContext createViewContext( final IViewContext<ICommonClientServiceAsync> originalViewContext) { return new GenericViewContext(originalViewContext); diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ClientPluginFactory.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ClientPluginFactory.java index 665ec4a7ea8d77cce1aedc7b1057fbcbe1c8b90d..7b0daa45a54174b43743350a2c0a84f28515fc12 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ClientPluginFactory.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ClientPluginFactory.java @@ -45,13 +45,11 @@ import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.Gen import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment.GenericExperimentEditForm; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment.GenericExperimentRegistrationForm; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment.GenericExperimentViewer; -import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.IPhosphoNetXClientServiceAsync; /** * @author Franz-Josef Elmer */ -public class ClientPluginFactory extends - AbstractClientPluginFactory<IPhosphoNetXClientServiceAsync> +public class ClientPluginFactory extends AbstractClientPluginFactory<ViewContext> { public ClientPluginFactory(IViewContext<ICommonClientServiceAsync> originalViewContext) @@ -60,7 +58,7 @@ public class ClientPluginFactory extends } @Override - protected IViewContext<IPhosphoNetXClientServiceAsync> createViewContext( + protected ViewContext createViewContext( IViewContext<ICommonClientServiceAsync> originalViewContext) { return new ViewContext(originalViewContext); @@ -103,7 +101,7 @@ public class ClientPluginFactory extends // // IViewClientPlugin // - + @Override public final ITabItemFactory createEntityViewer(final IIdentifiable identifiable) { @@ -147,7 +145,8 @@ public class ClientPluginFactory extends public ITabItem create() { DatabaseModificationAwareComponent component = - GenericExperimentEditForm.create(getGenericViewContext(), identifiable); + GenericExperimentEditForm.create(getGenericViewContext(), + identifiable); String title = getEditorTitle(Dict.EXPERIMENT, identifiable); return DefaultTabItem.create(title, component, getViewContext(), true); } @@ -165,18 +164,20 @@ public class ClientPluginFactory extends } }; } - - private String getViewerTitle(final String entityKindDictKey, final IIdentifiable identifiable) + + private String getViewerTitle(final String entityKindDictKey, + final IIdentifiable identifiable) { return AbstractViewer.getTitle(getViewContext(), entityKindDictKey, identifiable); } - private String getEditorTitle(final String entityKindDictKey, final IIdentifiable identifiable) + private String getEditorTitle(final String entityKindDictKey, + final IIdentifiable identifiable) { return AbstractRegistrationForm.getEditTitle(getViewContext(), entityKindDictKey, identifiable); } - + private IViewContext<IGenericClientServiceAsync> getGenericViewContext() { return new GenericViewContext(getViewContext().getCommonViewContext()); @@ -184,4 +185,3 @@ public class ClientPluginFactory extends } } - 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 d9794f6a26d3b59646ddab63d872acbb6a11e153..e319877f3b1964a4916c1491e11c007862c8fcb9 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 @@ -27,16 +27,21 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewConte import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory; import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier; import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPlugin; import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPluginFactory; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider; import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; +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.screening.client.web.client.IScreeningClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.ScreeningConstants; @@ -51,8 +56,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.d * * @author Tomasz Pylak */ -public final class ClientPluginFactory extends - AbstractClientPluginFactory<IScreeningClientServiceAsync> +public final class ClientPluginFactory extends AbstractClientPluginFactory<ScreeningViewContext> { public ClientPluginFactory(final IViewContext<ICommonClientServiceAsync> originalViewContext) @@ -65,7 +69,7 @@ public final class ClientPluginFactory extends // @Override - protected final IViewContext<IScreeningClientServiceAsync> createViewContext( + protected final ScreeningViewContext createViewContext( final IViewContext<ICommonClientServiceAsync> originalViewContext) { return new ScreeningViewContext(originalViewContext); @@ -93,7 +97,7 @@ public final class ClientPluginFactory extends public <T extends EntityType, I extends IIdentifiable> IClientPlugin<T, I> createClientPlugin( final EntityKind entityKind) { - IViewContext<IScreeningClientServiceAsync> viewContext = getViewContext(); + ScreeningViewContext viewContext = getViewContext(); if (EntityKind.MATERIAL.equals(entityKind)) { return (IClientPlugin<T, I>) new MaterialClientPlugin(viewContext); @@ -110,7 +114,7 @@ public final class ClientPluginFactory extends // Helper classes // - private final class MaterialClientPlugin extends DelegatedClientPlugin<SampleType> + private final class MaterialClientPlugin extends DelegatedClientPlugin<MaterialType> { private MaterialClientPlugin(IViewContext<IScreeningClientServiceAsync> viewContext) { @@ -118,16 +122,16 @@ public final class ClientPluginFactory extends } @Override - public final ITabItemFactory createEntityViewer(final IIdentifiable identifiable) + public final ITabItemFactory createEntityViewer(final IIdentifiable materialId) { - final TechId materialId = TechId.create(identifiable); return new ITabItemFactory() { public ITabItem create() { + IViewContext<IScreeningClientServiceAsync> viewContext = getViewContext(); final DatabaseModificationAwareComponent viewer = - GeneMaterialViewer.create(getViewContext(), materialId); - return createViewerTab(viewer, identifiable, Dict.MATERIAL); + GeneMaterialViewer.create(viewContext, materialId, null); + return createMaterialViewerTab(materialId, viewer, viewContext); } public String getId() @@ -137,17 +141,54 @@ public final class ClientPluginFactory extends public HelpPageIdentifier getHelpPageIdentifier() { - return HelpPageIdentifier.createSpecific("Gene Material Viewer"); + return GeneMaterialViewer.getHelpPageIdentifier(); } }; } } + /** opens gene viewer with a selected experiment */ + public static final void openGeneMaterialViewer(final IIdentifiable materialId, + final ExperimentIdentifier experimentIdentifier, + final IViewContext<IScreeningClientServiceAsync> viewContext) + { + ITabItemFactory tab = new ITabItemFactory() + { + public ITabItem create() + { + final DatabaseModificationAwareComponent viewer = + GeneMaterialViewer + .create(viewContext, materialId, experimentIdentifier); + return createMaterialViewerTab(materialId, viewer, viewContext); + } + + public String getId() + { + return GeneMaterialViewer.createId(materialId); + } + + public HelpPageIdentifier getHelpPageIdentifier() + { + return GeneMaterialViewer.getHelpPageIdentifier(); + } + }; + DispatcherHelper.dispatchNaviEvent(tab); + } + + private static ITabItem createMaterialViewerTab(final IIdentifiable materialId, + final DatabaseModificationAwareComponent viewer, IViewContext<?> viewContext) + { + return createViewerTab(viewer, materialId, Dict.MATERIAL, viewContext); + } + private final class SampleClientPlugin extends DelegatedClientPlugin<SampleType> { - private SampleClientPlugin(IViewContext<IScreeningClientServiceAsync> viewContext) + private ScreeningViewContext screeningViewContext; + + private SampleClientPlugin(ScreeningViewContext viewContext) { super(viewContext, EntityKind.SAMPLE); + this.screeningViewContext = viewContext; } @Override @@ -158,8 +199,9 @@ public final class ClientPluginFactory extends public ITabItem create() { final DatabaseModificationAwareComponent viewer = - PlateSampleViewer.create(getViewContext(), identifiable); - return createViewerTab(viewer, identifiable, Dict.SAMPLE); + PlateSampleViewer.create(screeningViewContext, identifiable); + return createViewerTab(viewer, identifiable, Dict.SAMPLE, + screeningViewContext); } public String getId() @@ -176,16 +218,17 @@ public final class ClientPluginFactory extends } } - private ITabItem createViewerTab(DatabaseModificationAwareComponent viewer, - IIdentifiable identifiable, String dictTitleKey) + private static ITabItem createViewerTab(DatabaseModificationAwareComponent viewer, + ICodeProvider codeProvider, String dictTitleKey, IViewContext<?> viewContext) { - String title = getViewerTitle(dictTitleKey, identifiable); - return DefaultTabItem.create(title, viewer, getViewContext(), false); + String title = getViewerTitle(dictTitleKey, codeProvider, viewContext); + return DefaultTabItem.create(title, viewer, viewContext, false); } - private String getViewerTitle(String dictTitleKey, IIdentifiable identifiable) + private static String getViewerTitle(String dictTitleKey, ICodeProvider codeProvider, + IMessageProvider messageProvider) { - return AbstractViewer.getTitle(getViewContext(), dictTitleKey, identifiable); + return AbstractViewer.getTitle(messageProvider, dictTitleKey, codeProvider); } /** diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/GeneMaterialViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/GeneMaterialViewer.java index 8766ec9ec7fb216071a50601963b8923355512c5..55bfda87e2c3a9fd3d6fc86a673ce482e52cf0a3 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/GeneMaterialViewer.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/GeneMaterialViewer.java @@ -36,6 +36,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier; import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ExperimentChooserField; @@ -44,6 +45,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.E import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabClickListener; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder; +import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material; @@ -67,10 +69,16 @@ public class GeneMaterialViewer extends AbstractViewer<Material> private static final String PREFIX = GenericConstants.ID_PREFIX + "ScreeningGeneViewer_"; + /** + * @param experimentIdentifierOrNull if the experiment is specified, it will be chosen + * automatically when the window opens. + */ public static DatabaseModificationAwareComponent create( - final IViewContext<IScreeningClientServiceAsync> viewContext, final TechId materialId) + IViewContext<IScreeningClientServiceAsync> viewContext, IIdentifiable materialId, + ExperimentIdentifier experimentIdentifierOrNull) { - GeneMaterialViewer viewer = new GeneMaterialViewer(viewContext, materialId); + GeneMaterialViewer viewer = + new GeneMaterialViewer(viewContext, materialId, experimentIdentifierOrNull); return new DatabaseModificationAwareComponent(viewer, viewer.propertiesSection); } @@ -81,26 +89,37 @@ public class GeneMaterialViewer extends AbstractViewer<Material> private final DefaultChannelState channelState; - protected GeneMaterialViewer(final IViewContext<IScreeningClientServiceAsync> viewContext, - final TechId materialId) + private GeneMaterialViewer(final IViewContext<IScreeningClientServiceAsync> viewContext, + final IIdentifiable materialId, ExperimentIdentifier experimentIdentifierOrNull) { super(viewContext, createId(materialId)); - this.propertiesSection = new MaterialPropertiesComponent(viewContext, materialId, -1, 1) - { - @Override - protected void getMaterialInfo(AsyncCallback<Material> materialInfoCallback) - { - viewContext.getService().getMaterialInfo(materialId, materialInfoCallback); - } - }; + TechId materialTechId = TechId.create(materialId); + this.propertiesSection = + new MaterialPropertiesComponent(viewContext, materialTechId, -1, 1) + { + @Override + protected void getMaterialInfo(AsyncCallback<Material> materialInfoCallback) + { + viewContext.getService().getMaterialInfo(materialId, + materialInfoCallback); + } + }; this.viewContext = viewContext; this.channelState = new DefaultChannelState(); setLayout(new BorderLayout()); add(propertiesSection, createLeftBorderLayoutData()); - add(createLocationsPanel(materialId), createRightBorderLayoutData()); + LayoutContainer locationsPanel = + createLocationsPanel(materialTechId, experimentIdentifierOrNull); + add(locationsPanel, createRightBorderLayoutData()); + + if (experimentIdentifierOrNull != null) + { + loadGeneLocationsPanel(materialTechId, experimentIdentifierOrNull, locationsPanel); + } } - private Widget createLocationsPanel(final TechId materialId) + private LayoutContainer createLocationsPanel(final TechId materialId, + ExperimentIdentifier experimentIdentifierOrNull) { final LayoutContainer container = new LayoutContainer(); @@ -113,11 +132,18 @@ public class GeneMaterialViewer extends AbstractViewer<Material> { if (entity != null) { - loadGeneLocationsPanel(materialId, entity, container); + ExperimentIdentifier experimentIdentifier = + new ExperimentIdentifier(entity.getIdentifier()); + loadGeneLocationsPanel(materialId, experimentIdentifier, container); } } }); chooserField.setEditable(false); + if (experimentIdentifierOrNull != null) + { + chooserField.updateValue(experimentIdentifierOrNull); + } + container.add(GuiUtils.withLabel(experimentChooser.getField(), "Experiment:", 10)); container.add(new Text( "Choose an experiment to find wells where this gene has been suppressed.")); @@ -125,13 +151,12 @@ public class GeneMaterialViewer extends AbstractViewer<Material> return container; } - private void loadGeneLocationsPanel(TechId materialId, Experiment entity, - final LayoutContainer container) + private void loadGeneLocationsPanel(TechId materialId, + ExperimentIdentifier experimentIdentifier, final LayoutContainer container) { GuiUtils .replaceLastItem(container, new Text(viewContext.getMessage(Dict.LOAD_IN_PROGRESS))); - viewContext.getService().getPlateLocations(materialId, - new ExperimentIdentifier(entity.getIdentifier()), + viewContext.getService().getPlateLocations(materialId, experimentIdentifier, new AbstractAsyncCallback<List<WellContent>>(viewContext) { @Override @@ -240,8 +265,13 @@ public class GeneMaterialViewer extends AbstractViewer<Material> return LinkRenderer.getLinkWidget(label, listener); } - public static final String createId(final TechId materialId) + public static final String createId(final IIdentifiable materialId) + { + return PREFIX + materialId.getId(); + } + + public static HelpPageIdentifier getHelpPageIdentifier() { - return PREFIX + materialId; + return HelpPageIdentifier.createSpecific("Gene Material Viewer"); } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayoutSection.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayoutSection.java index 7d902fc1fccb43be77554a6479d4e8358cc009db..776f634fead01f5d0eab3854b7dfe6f515904e63 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayoutSection.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayoutSection.java @@ -58,6 +58,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.ScreeningConstants; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.Dict; +import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningViewContext; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.ChannelChooser.DefaultChannelState; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetReference; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateContent; @@ -78,8 +79,7 @@ public class PlateLayoutSection extends SingleSectionPanel private final TechId sampleId; - public PlateLayoutSection(IViewContext<IScreeningClientServiceAsync> viewContext, - TechId sampleId) + public PlateLayoutSection(ScreeningViewContext viewContext, TechId sampleId) { super("Plate Layout"); this.sampleId = sampleId; @@ -89,7 +89,7 @@ public class PlateLayoutSection extends SingleSectionPanel } private AsyncCallback<PlateContent> createDisplayPlateCallback( - final IViewContext<IScreeningClientServiceAsync> context) + final ScreeningViewContext context) { return new AbstractAsyncCallback<PlateContent>(context) { @@ -100,7 +100,7 @@ public class PlateLayoutSection extends SingleSectionPanel setLayout(new RowLayout()); setScrollMode(Scroll.AUTO); - renderPlate(plateContent, viewContext); + renderPlate(plateContent, context); addImageAnalysisButton(plateContent, viewContext); addMetadataTable(plateContent, context); @@ -164,7 +164,7 @@ public class PlateLayoutSection extends SingleSectionPanel reportLabel, new String[] {}, dataset.getDatastoreCode()); } - private void renderPlate(PlateContent plateContent, IViewContext<?> viewContext) + private void renderPlate(PlateContent plateContent, ScreeningViewContext viewContext) { LayoutContainer container = new LayoutContainer(); Widget datasetNumberLegend = tryRenderImageDatasetsNumberLegend(plateContent, viewContext); @@ -231,7 +231,8 @@ public class PlateLayoutSection extends SingleSectionPanel return legend; } - private LayoutContainer renderWellsMatrix(PlateContent plateContent, IViewContext<?> viewContext) + private LayoutContainer renderWellsMatrix(PlateContent plateContent, + ScreeningViewContext viewContext) { WellData[][] wellMatrix = createMatrix(plateContent); List<Widget> wellWidgets = createWellWidgets(wellMatrix, plateContent, viewContext); @@ -248,7 +249,7 @@ public class PlateLayoutSection extends SingleSectionPanel } private static List<Widget> createWellWidgets(WellData[][] wellMatrix, - PlateContent plateContent, IViewContext<?> viewContext) + PlateContent plateContent, ScreeningViewContext viewContext) { List<Widget> wellWidgets = new ArrayList<Widget>(); int rowsNum = wellMatrix.length; @@ -333,7 +334,7 @@ public class PlateLayoutSection extends SingleSectionPanel private static Component createWellWidget(final WellData wellData, final PlateContent plateContent, final DefaultChannelState channelState, - final IViewContext<?> viewContext) + final ScreeningViewContext viewContext) { Component widget = createContentWell(wellData); widget.addListener(Events.OnMouseDown, new Listener<BaseEvent>() diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateSampleViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateSampleViewer.java index 4cac5337ed741e951bcdb6f95c15e145168c5632..6dbd98312f6febb0d4716f9a7a606ea82c892e02 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateSampleViewer.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateSampleViewer.java @@ -21,14 +21,13 @@ import java.util.List; import com.google.gwt.user.client.rpc.AsyncCallback; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.SingleSectionPanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent; import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleParentWithDerived; 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.ScreeningViewContext; /** * The <i>screening</i> plate sample viewer. @@ -37,8 +36,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningCli */ public final class PlateSampleViewer extends GenericSampleViewer { - public static DatabaseModificationAwareComponent create( - final IViewContext<IScreeningClientServiceAsync> viewContext, + public static DatabaseModificationAwareComponent create(final ScreeningViewContext viewContext, final IIdentifiable identifiable) { PlateSampleViewer viewer = new PlateSampleViewer(viewContext, identifiable); @@ -46,9 +44,9 @@ public final class PlateSampleViewer extends GenericSampleViewer return new DatabaseModificationAwareComponent(viewer, viewer); } - private final IViewContext<IScreeningClientServiceAsync> screeningViewContext; + private final ScreeningViewContext screeningViewContext; - public PlateSampleViewer(final IViewContext<IScreeningClientServiceAsync> viewContext, + public PlateSampleViewer(final ScreeningViewContext viewContext, final IIdentifiable identifiable) { super(viewContext, identifiable); 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 8d95e499eaca131bd5505f9ed2224a6d2033ee4b..e24e156d77935b5775562b5e33997d3a634a7ddd 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 @@ -26,6 +26,7 @@ import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.extjs.gxt.ui.client.widget.layout.RowLayout; import com.extjs.gxt.ui.client.widget.layout.TableData; import com.extjs.gxt.ui.client.widget.layout.TableLayout; +import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Widget; @@ -33,11 +34,13 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewConte import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.renderers.SimpleImageHtmlRenderer; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabClickListener; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.ScreeningConstants; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.Dict; +import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningViewContext; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.ChannelChooser.DefaultChannelState; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.ChannelChooser.IChanneledViewerFactory; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellMetadata; @@ -47,20 +50,17 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellMetadata; * * @author Tomasz Pylak */ -public class WellContentDialog +public class WellContentDialog extends Dialog { - private final WellMetadata metadataOrNull; - - private final IViewContext<?> viewContext; - public static void showContentDialog(final WellData wellData, DefaultChannelState channelState, - final IViewContext<?> viewContext) + final ScreeningViewContext viewContext) { final LayoutContainer container = new LayoutContainer(); container.setLayout(new RowLayout()); final WellContentDialog contentDialog = - new WellContentDialog(wellData.tryGetMetadata(), viewContext); + new WellContentDialog(wellData.tryGetMetadata(), wellData.getExperiment(), + viewContext); LayoutContainer descriptionContainer = contentDialog.createContentDescription(); container.add(descriptionContainer); @@ -84,22 +84,35 @@ public class WellContentDialog dialogHeight = 160; } String title = "Well Content: " + wellData.getWellContentDescription(); - showWellContentDialog(container, dialogWidth, dialogHeight, title); + contentDialog.setupContentAndShow(container, dialogWidth, dialogHeight, title); } - private static LayoutContainer createImageViewer(final WellImages images, - DefaultChannelState channelState, final IViewContext<?> viewContext, - final int imageWidth, final int imageHeight) + // ---------------- + + private final WellMetadata metadataOrNull; + + private final ExperimentIdentifier experimentIdentifier; + + private final ScreeningViewContext viewContext; + + private WellContentDialog(WellMetadata metadataOrNull, + ExperimentIdentifier experimentIdentifier, ScreeningViewContext viewContext) { - final IChanneledViewerFactory viewerFactory = new IChanneledViewerFactory() - { - public LayoutContainer create(int channel) - { - return createTilesGrid(images, channel, viewContext, imageWidth, imageHeight); - } - }; - return ChannelChooser.createViewerWithChannelChooser(viewerFactory, channelState, images - .getChannelsNum()); + this.metadataOrNull = metadataOrNull; + this.experimentIdentifier = experimentIdentifier; + this.viewContext = viewContext; + } + + private void setupContentAndShow(LayoutContainer container, int width, int height, String title) + { + setHeading(title); + setLayout(new FitLayout()); + setScrollMode(Scroll.AUTO); + setHideOnButtonClick(true); + add(container); + setWidth(width); + setHeight(height); + show(); } private LayoutContainer createContentDescription() @@ -122,7 +135,7 @@ public class WellContentDialog if (gene != null) { container.add(new Text("Inhibited gene: "), cellLayout); - container.add(createEntityLink(gene)); + container.add(createGeneViewerLink(gene)); container.add(new Text("Gene details: "), cellLayout); container.add(createEntityExternalLink(gene)); @@ -144,16 +157,40 @@ public class WellContentDialog return new Html(LinkRenderer.renderAsLinkWithAnchor("gene database", url, true)); } + private Widget createGeneViewerLink(final IEntityInformationHolder gene) + { + return LinkRenderer.getLinkWidget(gene.getCode(), new ClickHandler() + { + public void onClick(ClickEvent event) + { + WellContentDialog.this.hide(); + ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ClientPluginFactory + .openGeneMaterialViewer(gene, experimentIdentifier, viewContext); + } + }); + } + private Widget createEntityLink(IEntityInformationHolder entity) { final ClickHandler listener = new OpenEntityDetailsTabClickListener(entity, viewContext); return LinkRenderer.getLinkWidget(entity.getCode(), listener); } - private WellContentDialog(WellMetadata metadataOrNull, IViewContext<?> viewContext) + // ------------- + + private static LayoutContainer createImageViewer(final WellImages images, + DefaultChannelState channelState, final IViewContext<?> viewContext, + final int imageWidth, final int imageHeight) { - this.metadataOrNull = metadataOrNull; - this.viewContext = viewContext; + final IChanneledViewerFactory viewerFactory = new IChanneledViewerFactory() + { + public LayoutContainer create(int channel) + { + return createTilesGrid(images, channel, viewContext, imageWidth, imageHeight); + } + }; + return ChannelChooser.createViewerWithChannelChooser(viewerFactory, channelState, images + .getChannelsNum()); } /** @param channel Channel numbers start with 1. Channel 0 consists of all other channels merged. */ @@ -180,7 +217,7 @@ public class WellContentDialog } /** generates URL of an image on Data Store server */ - public static String createDatastoreImageUrl(WellImages images, int channel, int tileRow, + private static String createDatastoreImageUrl(WellImages images, int channel, int tileRow, int tileCol, int width, int height, String sessionID) { URLMethodWithParameters methodWithParameters = @@ -211,18 +248,4 @@ public class WellContentDialog { return viewContext.getModel().getSessionContext().getSessionID(); } - - private static void showWellContentDialog(LayoutContainer container, int width, int height, - String title) - { - Dialog dialog = new Dialog(); - dialog.setHeading(title); - dialog.setLayout(new FitLayout()); - dialog.setScrollMode(Scroll.AUTO); - dialog.setHideOnButtonClick(true); - dialog.add(container); - dialog.setWidth(width); - dialog.setHeight(height); - dialog.show(); - } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellData.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellData.java index f6c09a2571b7bf2cb3a0df8d8e8c55295dad6ea8..dae9ad6173281ddae8e12a5420d413166fe8fd72 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellData.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellData.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateContent; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.TileImages; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation; @@ -32,10 +33,18 @@ class WellData private WellImages imagesOrNull; + private ExperimentIdentifier experimentIdentifier; + public static WellData create(PlateContent plateContent, WellLocation location) { + ExperimentIdentifier experimentIdentifier = getExperimentIdentifier(plateContent); WellImages wellImages = tryCreateWellImages(plateContent, location); - return new WellData(wellImages); + return new WellData(wellImages, experimentIdentifier); + } + + private static ExperimentIdentifier getExperimentIdentifier(PlateContent plateContent) + { + return ExperimentIdentifier.createIdentifier(plateContent.getPlate().getExperiment()); } private static WellImages tryCreateWellImages(PlateContent plateContent, WellLocation location) @@ -50,9 +59,10 @@ class WellData } } - private WellData(WellImages imagesOrNull) + private WellData(WellImages imagesOrNull, ExperimentIdentifier experimentIdentifier) { this.imagesOrNull = imagesOrNull; + this.experimentIdentifier = experimentIdentifier; } public void setMetadata(WellMetadata well) @@ -70,6 +80,11 @@ class WellData return imagesOrNull; } + public ExperimentIdentifier getExperiment() + { + return experimentIdentifier; + } + public String getWellContentDescription() { if (metadataOrNull != null)