diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java index 5003ca757203b8f7a61f3ea5eb0e2587b0e35448..2ca8733a07dcd9bdc24de2aa7ab67edf4cab5a74 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java @@ -37,6 +37,27 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings; */ public final class CommonViewContext implements IViewContext<ICommonClientServiceAsync> { + + /** + * Holds static state of client that should be accessible from everywhere on the client. + * + * @author Piotr Buczek + */ + public final static class ClientStaticState + { + private static boolean simpleMode; + + public static void init(final boolean isSimpleMode) + { + simpleMode = isSimpleMode; + } + + public static boolean isSimpleMode() + { + return simpleMode; + } + } + private static final String TECHNOLOGY_NAME = "common"; private final ICommonClientServiceAsync service; @@ -57,8 +78,6 @@ public final class CommonViewContext implements IViewContext<ICommonClientServic private final IProfilingTable profilingTable; - private final boolean simpleMode; - CommonViewContext(final ICommonClientServiceAsync service, final IGenericImageBundle imageBundle, final IPageController pageController, boolean isLoggingEnabled, boolean isSimpleMode) @@ -66,12 +85,12 @@ public final class CommonViewContext implements IViewContext<ICommonClientServic this.service = service; this.imageBundle = imageBundle; this.pageController = pageController; - this.simpleMode = isSimpleMode; this.profilingTable = ProfilingTable.create(isLoggingEnabled); messageProvider = new CompositeMessageProvider(); messageProvider.add(new DictonaryBasedMessageProvider(TECHNOLOGY_NAME)); viewModel = new GenericViewModel(); locatorHandlerRegistry = new ViewLocatorResolverRegistry(); + ClientStaticState.init(isSimpleMode); } final void setClientPluginFactoryProvider( @@ -215,7 +234,7 @@ public final class CommonViewContext implements IViewContext<ICommonClientServic public boolean isSimpleMode() { - return simpleMode; + return ClientStaticState.isSimpleMode(); } } 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 69ade201f8be36455fe0a294c9f8a1cc0428a52d..abaa31bbbfa9f80ad0575beb9128b0b0d5d2e432 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 @@ -1,11 +1,9 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.locator; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; -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.ui.listener.OpenEntityDetailsTabAction; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabHelper; 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; @@ -19,9 +17,9 @@ public class MaterialLocatorResolver extends AbstractViewLocatorResolver { private final IViewContext<ICommonClientServiceAsync> viewContext; - private final static String CODE_PARAMETER_KEY = "code"; + public final static String CODE_PARAMETER_KEY = "code"; - protected final static String TYPE_PARAMETER_KEY = "type"; + public final static String TYPE_PARAMETER_KEY = "type"; public MaterialLocatorResolver(IViewContext<ICommonClientServiceAsync> viewContext) { @@ -62,31 +60,7 @@ public class MaterialLocatorResolver extends AbstractViewLocatorResolver protected void openInitialMaterialViewer(MaterialIdentifier identifier) throws UserFailureException { - viewContext.getService().getMaterialInformationHolder(identifier, - new OpenEntityDetailsTabCallback(viewContext)); - } - - private static class OpenEntityDetailsTabCallback extends - AbstractAsyncCallback<IEntityInformationHolder> - { - - private OpenEntityDetailsTabCallback(final IViewContext<?> viewContext) - { - super(viewContext); - } - - // - // AbstractAsyncCallback - // - - /** - * Opens the tab with <var>result</var> entity details. - */ - @Override - protected final void process(final IEntityInformationHolder result) - { - new OpenEntityDetailsTabAction(result, viewContext).execute(); - } + OpenEntityDetailsTabHelper.open(viewContext, identifier); } } \ No newline at end of file diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/AbstractPropertyColRenderer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/AbstractPropertyColRenderer.java index 7147548925d6b15ca73a04cee274d22515233004..19aba91fc27075233f92324f39f69fd245260436 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/AbstractPropertyColRenderer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/AbstractPropertyColRenderer.java @@ -55,6 +55,8 @@ public abstract class AbstractPropertyColRenderer<T extends IEntityPropertiesHol return new VocabularyPropertyColRenderer<S>(colDef); case TIMESTAMP: return new TimestampPropertyColRenderer<S>(colDef); + case MATERIAL: + return new MaterialPropertyColRenderer<S>(colDef); default: return new DefaultPropertyColRenderer<S>(colDef); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/MaterialPropertyColRenderer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/MaterialPropertyColRenderer.java new file mode 100644 index 0000000000000000000000000000000000000000..1179bd1d1f8507a8649f49208e74ecd819f79c9b --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/MaterialPropertyColRenderer.java @@ -0,0 +1,75 @@ +/* + * Copyright 2009 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.client.web.client.application.model.renderer; + +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.InlineHTML; +import com.google.gwt.user.client.ui.Widget; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.CommonViewContext.ClientStaticState; +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.EntityPropertyColDef; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.LinkExtractor; +import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityPropertiesHolder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; + +/** + * An {@link AbstractPropertyColRenderer} which renders value preserving newlines. + * + * @author Piotr Buczek + */ +class MaterialPropertyColRenderer<T extends IEntityPropertiesHolder> extends + AbstractPropertyColRenderer<T> +{ + + public MaterialPropertyColRenderer(EntityPropertyColDef<T> colDef) + { + super(colDef); + } + + @Override + protected String renderValue(GridRowModel<T> entity) + { + String value = colDef.getValue(entity); + final MaterialIdentifier identifier = MaterialIdentifier.tryParseIdentifier(value); + // FIXME Can't create ClickHandler because we don't have access to viewContext here. + // Material will be rendered as link only in simple mode + if (identifier != null && ClientStaticState.isSimpleMode()) + { + // final ClickHandler listener = new ClickHandler() { + // + // public void onClick(ClickEvent event) + // { + // OpenEntityDetailsTabHelper.open(viewContext, identifier); + // } + // } + String href = LinkExtractor.tryExtract(identifier); + final Widget link = + LinkRenderer.getLinkWidget(identifier.getCode(), null, false, + href != null ? ("#" + href) : null); + + FlowPanel panel = new FlowPanel(); + panel.add(link); + panel.add(new InlineHTML(" [" + identifier.getTypeCode() + "]")); + return panel.toString(); + } else + { + return value; + } + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/LinkRenderer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/LinkRenderer.java index 6c5a82d0722308f6cb3961cca0ef9826213a4592..d9b3009b04797826a1d151a6ac9a6ccb859c1600 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/LinkRenderer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/LinkRenderer.java @@ -27,6 +27,7 @@ import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Hyperlink; import com.google.gwt.user.client.ui.Widget; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.CommonViewContext.ClientStaticState; import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel; /** @@ -132,8 +133,9 @@ public class LinkRenderer /** * @return {@link Hyperlink} GWT widget that is displayed as a link with given <var>text</var> - * and a <var>listener</var> registered on the click event. The link display style is - * based on <var>invalidate</var> (default style is for false). + * and if simple mode is not active a <var>listener</var> registered on the click event. + * The link display style is based on <var>invalidate</var> (default style is for + * false). */ public static Widget getLinkWidget(final String text, final ClickHandler listener, boolean invalidate, String href) @@ -141,7 +143,7 @@ public class LinkRenderer Anchor link = new Anchor(); link.setText(text); link.setStyleName(LINK_STYLE); - if (listener != null) + if (listener != null && ClientStaticState.isSimpleMode() == false) { link.addClickHandler(listener); } @@ -155,5 +157,4 @@ public class LinkRenderer } return link; } - } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PropertyValueRenderers.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PropertyValueRenderers.java index 257cf69f6d622f5662a8e7ff14fd38cac44c1e0f..40c01c7b3e28cd107b97c126c097a956685f96b3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PropertyValueRenderers.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PropertyValueRenderers.java @@ -423,8 +423,7 @@ public final class PropertyValueRenderers final String displayText = getDisplayText(entity); final boolean invalidate = getInvalidate(entity); final ClickHandler listener = - viewContext.isSimpleMode() ? null : new OpenEntityDetailsTabClickListener( - entity, viewContext); + new OpenEntityDetailsTabClickListener(entity, viewContext); String href = LinkExtractor.tryExtract(entity); final Widget link = LinkRenderer.getLinkWidget(displayText, listener, invalidate, 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 883fce71c5116c540d589ed0c5102c7d0aa104fc..a035901670d6d150597ceaff6f707e14517365c7 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 @@ -16,11 +16,14 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.MaterialLocatorResolver; import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.ProjectLocatorResolver; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.PermlinkUtilities; import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; /** @@ -31,6 +34,18 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; public class LinkExtractor { + public static String tryExtract(IEntityInformationHolderWithIdentifier e) + { + if (e == null) + { + return null; + } + URLMethodWithParameters url = new URLMethodWithParameters(""); + url.addParameter(PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY, e.getEntityKind().name()); + url.addParameter(PermlinkUtilities.PERM_ID_PARAMETER_KEY, e.getPermId()); + return print(url); + } + public static final String tryExtract(Project p) { if (p == null) @@ -45,28 +60,34 @@ public class LinkExtractor return print(url); } - public static final String tryExtract(Material m) + public static final String tryExtract(Material material) { - if (m == null) + if (material == null) { return null; } - URLMethodWithParameters url = new URLMethodWithParameters(""); - url.addParameter(PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY, m.getEntityKind().name()); - url.addParameter("code", m.getCode()); - url.addParameter("type", m.getMaterialType().getCode()); - return print(url); + return tryCreateMaterialLink(material.getCode(), material.getMaterialType().getCode()); } - public static String tryExtract(IEntityInformationHolderWithIdentifier e) + public static final String tryExtract(MaterialIdentifier identifier) { - if (e == null) + if (identifier == null) + { + return null; + } + return tryCreateMaterialLink(identifier.getCode(), identifier.getTypeCode()); + } + + private static final String tryCreateMaterialLink(String materialCode, String materialTypeCode) + { + if (materialCode == null || materialTypeCode == null) { return null; } URLMethodWithParameters url = new URLMethodWithParameters(""); - url.addParameter(PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY, e.getEntityKind().name()); - url.addParameter(PermlinkUtilities.PERM_ID_PARAMETER_KEY, e.getPermId()); + url.addParameter(PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY, EntityKind.MATERIAL.name()); + url.addParameter(MaterialLocatorResolver.CODE_PARAMETER_KEY, materialCode); + url.addParameter(MaterialLocatorResolver.TYPE_PARAMETER_KEY, materialTypeCode); return print(url); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabHelper.java index dc644bc606284e7bba600b64687897369b133b36..cf56e07a468bb53c796c6ae7eed3a05ebd4d37e8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabHelper.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabHelper.java @@ -29,9 +29,11 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpP import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction; import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer; +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.TechId; 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.generic.shared.basic.dto.Project; /** @@ -48,6 +50,13 @@ public class OpenEntityDetailsTabHelper } + public static void open(IViewContext<?> viewContext, MaterialIdentifier identifier) + throws UserFailureException + { + viewContext.getCommonService().getMaterialInformationHolder(identifier, + new OpenEntityDetailsTabCallback(viewContext)); + } + private static class OpenEntityDetailsTabCallback extends AbstractAsyncCallback<IEntityInformationHolder> {