From b66cf1503b64585fe51a6248993238cd20be2602 Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Mon, 15 Mar 2010 14:37:13 +0000 Subject: [PATCH] [LMS-1446] added specific link to gene material detail view SVN: 15153 --- .../locator/MaterialLocatorResolver.java | 20 ++-- .../application/ClientPluginFactory.java | 37 +++---- .../application/ScreeningViewContext.java | 13 ++- .../locator/GeneMaterialLocatorResolver.java | 96 +++++++++++++++++++ 4 files changed, 133 insertions(+), 33 deletions(-) create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/GeneMaterialLocatorResolver.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/MaterialLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/MaterialLocatorResolver.java index 49cfe5414b0..8121d1e89bd 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/MaterialLocatorResolver.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/MaterialLocatorResolver.java @@ -19,9 +19,9 @@ public class MaterialLocatorResolver extends AbstractViewLocatorResolver { private final IViewContext<ICommonClientServiceAsync> viewContext; - public final static String CODE_PARAMETER_KEY = "code"; + private final static String CODE_PARAMETER_KEY = "code"; - public final static String TYPE_PARAMETER_KEY = "type"; + protected final static String TYPE_PARAMETER_KEY = "type"; public MaterialLocatorResolver(IViewContext<ICommonClientServiceAsync> viewContext) { @@ -43,22 +43,26 @@ public class MaterialLocatorResolver extends AbstractViewLocatorResolver // otherwise show an error message. assert (EntityKind.MATERIAL.name().equals(locator.tryGetEntity())); + openInitialMaterialViewer(extractMaterialIdentifier(locator)); + } + + protected MaterialIdentifier extractMaterialIdentifier(ViewLocator locator) + { String codeValueOrNull = locator.getParameters().get(CODE_PARAMETER_KEY); String materialTypeValueOrNull = locator.getParameters().get(TYPE_PARAMETER_KEY); checkRequiredParameter(codeValueOrNull, codeValueOrNull); checkRequiredParameter(materialTypeValueOrNull, TYPE_PARAMETER_KEY); - - openInitialMaterialViewer(codeValueOrNull, materialTypeValueOrNull); + + return new MaterialIdentifier(codeValueOrNull, materialTypeValueOrNull); } /** - * Open the material details tab for the specified code and material type. + * Open the material details tab for the specified identifier. */ - private void openInitialMaterialViewer(String code, String materialType) + protected void openInitialMaterialViewer(MaterialIdentifier identifier) throws UserFailureException { - viewContext.getService().getMaterialInformationHolder( - new MaterialIdentifier(code, materialType), + viewContext.getService().getMaterialInformationHolder(identifier, new OpenEntityDetailsTabCallback(viewContext)); } 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 b58a62a0b94..a5dce6b4ad4 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 @@ -133,26 +133,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree @Override public final ITabItemFactory createEntityViewer(final IIdentifiable materialId) { - return new ITabItemFactory() - { - public ITabItem create() - { - IViewContext<IScreeningClientServiceAsync> viewContext = getViewContext(); - final DatabaseModificationAwareComponent viewer = - GeneMaterialViewer.create(viewContext, materialId, null); - return createMaterialViewerTab(materialId, viewer, viewContext); - } - - public String getId() - { - return GeneMaterialViewer.createId(materialId); - } - - public HelpPageIdentifier getHelpPageIdentifier() - { - return GeneMaterialViewer.getHelpPageIdentifier(); - } - }; + return createGeneMaterialViewerTabFactory(materialId, null, getViewContext()); } } @@ -161,13 +142,22 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree final ExperimentIdentifier experimentIdentifier, final IViewContext<IScreeningClientServiceAsync> viewContext) { - ITabItemFactory tab = new ITabItemFactory() + ITabItemFactory tab = + createGeneMaterialViewerTabFactory(materialId, experimentIdentifier, viewContext); + DispatcherHelper.dispatchNaviEvent(tab); + } + + private static final ITabItemFactory createGeneMaterialViewerTabFactory( + final IIdentifiable materialId, final ExperimentIdentifier experimentIdentifierOrNull, + final IViewContext<IScreeningClientServiceAsync> viewContext) + { + return new ITabItemFactory() { public ITabItem create() { final DatabaseModificationAwareComponent viewer = - GeneMaterialViewer - .create(viewContext, materialId, experimentIdentifier); + GeneMaterialViewer.create(viewContext, materialId, + experimentIdentifierOrNull); return createMaterialViewerTab(materialId, viewer, viewContext); } @@ -181,7 +171,6 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree return GeneMaterialViewer.getHelpPageIdentifier(); } }; - DispatcherHelper.dispatchNaviEvent(tab); } private static ITabItem createMaterialViewerTab(final IIdentifiable materialId, diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningViewContext.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningViewContext.java index 67c4929605d..41ace8f147c 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningViewContext.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningViewContext.java @@ -5,15 +5,18 @@ import com.google.gwt.core.client.GWT; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractPluginViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.ViewLocatorResolverRegistry; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientService; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; +import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.GeneMaterialLocatorResolver; /** * The <i>screening</i> plugin specific {@link IViewContext} implementation. * * @author Tomasz Pylak */ -public final class ScreeningViewContext extends AbstractPluginViewContext<IScreeningClientServiceAsync> +public final class ScreeningViewContext extends + AbstractPluginViewContext<IScreeningClientServiceAsync> { private static final String TECHNOLOGY_NAME = "screening"; @@ -33,4 +36,12 @@ public final class ScreeningViewContext extends AbstractPluginViewContext<IScree { return GWT.create(IScreeningClientService.class); } + + @Override + protected void initializeLocatorHandlerRegistry(ViewLocatorResolverRegistry handlerRegistry) + { + super.initializeLocatorHandlerRegistry(handlerRegistry); + + handlerRegistry.registerHandler(new GeneMaterialLocatorResolver(this)); + } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/GeneMaterialLocatorResolver.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/GeneMaterialLocatorResolver.java new file mode 100644 index 00000000000..672b51ebf75 --- /dev/null +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/GeneMaterialLocatorResolver.java @@ -0,0 +1,96 @@ +package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.MaterialLocatorResolver; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.ViewLocator; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier; +import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; +import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; +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.ClientPluginFactory; + +/** + * {@link MaterialLocatorResolver} for genes. + * + * @author Piotr Buczek + */ +public class GeneMaterialLocatorResolver extends MaterialLocatorResolver +{ + private final IViewContext<IScreeningClientServiceAsync> viewContext; + + private final static String EXPERIMENT_PARAMETER_KEY = "experiment"; + + public GeneMaterialLocatorResolver(IViewContext<IScreeningClientServiceAsync> viewContext) + { + super(viewContext.getCommonViewContext()); + this.viewContext = viewContext; + } + + @Override + public boolean canHandleLocator(ViewLocator locator) + { + String materialTypeOrNull = locator.getParameters().get(TYPE_PARAMETER_KEY); + return super.canHandleLocator(locator) + && ScreeningConstants.GENE_PLUGIN_TYPE_CODE.equals(materialTypeOrNull); + } + + @Override + public void resolve(ViewLocator locator) throws UserFailureException + { + // If there is exactly one material matching given parameters open its detail view, + // otherwise show an error message. + assert (EntityKind.MATERIAL.name().equals(locator.tryGetEntity())); + + String experimentIdentifierOrNull = locator.getParameters().get(EXPERIMENT_PARAMETER_KEY); + openInitialMaterialViewer(extractMaterialIdentifier(locator), experimentIdentifierOrNull); + } + + /** + * Open the gene material details tab for the specified identifier. Optionally select experiment + * in the viewer. + */ + protected void openInitialMaterialViewer(MaterialIdentifier identifier, + String experimentIdentifierOrNull) throws UserFailureException + { + viewContext.getCommonService().getMaterialInformationHolder(identifier, + new OpenEntityDetailsTabCallback(viewContext, experimentIdentifierOrNull)); + } + + private static class OpenEntityDetailsTabCallback extends + AbstractAsyncCallback<IEntityInformationHolder> + { + private final IViewContext<IScreeningClientServiceAsync> viewContext; + + private final ExperimentIdentifier experimentIdentifierOrNull; + + private OpenEntityDetailsTabCallback( + final IViewContext<IScreeningClientServiceAsync> viewContext, + String experimentIdentifierOrNull) + { + super(viewContext); + this.viewContext = viewContext; + this.experimentIdentifierOrNull = + experimentIdentifierOrNull != null ? new ExperimentIdentifier( + experimentIdentifierOrNull) : null; + } + + // + // AbstractAsyncCallback + // + + /** + * Opens the tab with <var>result</var> entity details. + */ + @Override + protected final void process(final IEntityInformationHolder result) + { + ClientPluginFactory.openGeneMaterialViewer(result, experimentIdentifierOrNull, + viewContext); + } + } + +} \ No newline at end of file -- GitLab