diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkLocatorResolver.java index 190ddfbcf08902a4cfe6236eaa6afc4b3c38f415..336d10e504f66d41a96b4f8678edf2b7d947c969 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkLocatorResolver.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkLocatorResolver.java @@ -1,5 +1,8 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.locator; +import java.util.HashMap; +import java.util.Map; + import com.google.gwt.user.client.rpc.AsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; @@ -62,10 +65,26 @@ public class PermlinkLocatorResolver extends AbstractViewLocatorResolver checkRequiredParameter(entityKindValueOrNull, PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY); checkRequiredParameter(permIdValueOrNull, PermlinkUtilities.PERM_ID_PARAMETER_KEY); - openInitialEntityViewer(entityKindValueOrNull, permIdValueOrNull); + + String subtab = parseHistoryToken(locator.getHistoryToken()).get(PermlinkUtilities.SUBTAB_PARAMETER_KEY); + + openInitialEntityViewer(entityKindValueOrNull, permIdValueOrNull, subtab); } } + + private Map<String, String> parseHistoryToken(String token) { + Map<String, String> map = new HashMap<String,String>(); + for (String parameter : token.split("&")) { + String[] keyval = parameter.split("=", 2); + if (keyval.length == 2) { + map.put(keyval[0], keyval[1]); + } + } + + return map; + } + protected String tryGetEntityKind(ViewLocator locator) { return locator.tryGetEntity(); @@ -93,8 +112,14 @@ public class PermlinkLocatorResolver extends AbstractViewLocatorResolver protected void openInitialEntityViewer(String entityKindValue, String permIdValue) throws UserFailureException { - EntityKind entityKind = getEntityKind(entityKindValue); - OpenEntityDetailsTabHelper.open(viewContext, entityKind, permIdValue, false); + openInitialEntityViewer(entityKindValue, permIdValue, ""); } + + protected void openInitialEntityViewer(String entityKindValue, String permIdValue, String subtab) + throws UserFailureException + { + EntityKind entityKind = getEntityKind(entityKindValue); + OpenEntityDetailsTabHelper.open(viewContext, entityKind, permIdValue, false, subtab); + } } \ No newline at end of file diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SearchLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SearchLocatorResolver.java index f295d4ea1ced56b04c0f3acb1a9405020e006092..ebf124a93ba3a20d10b7e485c6b2652209c15382 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SearchLocatorResolver.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SearchLocatorResolver.java @@ -112,9 +112,11 @@ public class SearchLocatorResolver extends AbstractViewLocatorResolver } } else { - DetailedSearchCriterion searchCriterion = - getSearchCriterionForKeyValueAndEntityKind(key, value); - criterionList.add(searchCriterion); + if (key.startsWith("ui-") == false) { + DetailedSearchCriterion searchCriterion = + getSearchCriterionForKeyValueAndEntityKind(key, value); + criterionList.add(searchCriterion); + } } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabAction.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabAction.java index 01fcdbfb4ad5ea8cebbb868527f3779c2547e9e6..a375d8124ec67a8235fc761e6718b01343cd555b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabAction.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabAction.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listen import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; 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.util.IDelegatedAction; @@ -38,6 +39,8 @@ public final class OpenEntityDetailsTabAction implements IDelegatedAction private final IViewContext<?> viewContext; private final boolean keyPressed; + + private final String subtab; public OpenEntityDetailsTabAction(IEntityInformationHolderWithPermId entity, final IViewContext<?> viewContext) @@ -47,12 +50,20 @@ public final class OpenEntityDetailsTabAction implements IDelegatedAction public OpenEntityDetailsTabAction(IEntityInformationHolderWithPermId entity, final IViewContext<?> viewContext, boolean keyPressed) + { + this(entity, viewContext, keyPressed, ""); + } + + public OpenEntityDetailsTabAction(IEntityInformationHolderWithPermId entity, + final IViewContext<?> viewContext, boolean keyPressed, String subtab) { this.entity = entity; this.viewContext = viewContext; this.keyPressed = keyPressed; + this.subtab = subtab; } - + + @Override public void execute() { @@ -64,6 +75,33 @@ public final class OpenEntityDetailsTabAction implements IDelegatedAction final IClientPlugin<BasicEntityType, IEntityInformationHolderWithPermId> createClientPlugin = clientPluginFactory.createClientPlugin(entityKind); final AbstractTabItemFactory tabView = createClientPlugin.createEntityViewer(entity); + + String tabGroupDisplayId = null; + + switch (entityKind) { + case DATA_SET: + tabGroupDisplayId = DisplayTypeIDGenerator.GENERIC_DATASET_VIEWER.createID(entityType.getCode()); + break; + case EXPERIMENT: + tabGroupDisplayId = DisplayTypeIDGenerator.GENERIC_EXPERIMENT_VIEWER.createID(entityType.getCode()); + break; + case MATERIAL: + tabGroupDisplayId = DisplayTypeIDGenerator.GENERIC_MATERIAL_VIEWER.createID(entityType.getCode()); + break; + case SAMPLE: + tabGroupDisplayId = DisplayTypeIDGenerator.GENERIC_SAMPLE_VIEWER.createID(entityType.getCode()); + break; + default: + break; + } + + if (subtab != null && subtab.length() > 0 && tabGroupDisplayId != null) { + viewContext.getDisplaySettingsManager().storeActiveTabSettings( + tabGroupDisplayId, + subtab, null); + tabView.setForceReopen(true); + } + tabView.setInBackground(keyPressed); DispatcherHelper.dispatchNaviEvent(tabView); 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 03e52c6172f823f6217b18d83590aab38d668339..8b6802e30736b10c44a877c2ad64eb5e67b4c989 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 @@ -50,9 +50,15 @@ public class OpenEntityDetailsTabHelper public static void open(IViewContext<?> viewContext, EntityKind entityKind, String permId, boolean keyPressed) { - viewContext.getCommonService().getEntityInformationHolder(entityKind, permId, - new OpenEntityDetailsTabCallback(viewContext, keyPressed)); + open(viewContext, entityKind, permId, keyPressed, ""); } + + public static void open(IViewContext<?> viewContext, EntityKind entityKind, String permId, + boolean keyPressed, String subtab) + { + viewContext.getCommonService().getEntityInformationHolder(entityKind, permId, + new OpenEntityDetailsTabCallback(viewContext, keyPressed, subtab)); + } public static void open(IViewContext<?> viewContext, BasicEntityDescription description, boolean keyPressed) @@ -74,14 +80,24 @@ public class OpenEntityDetailsTabHelper { private final boolean keyPressed; + + private final String subtab; private OpenEntityDetailsTabCallback(final IViewContext<?> viewContext, - final boolean keyPressed) + final boolean keyPressed, final String subtab) { super(viewContext); this.keyPressed = keyPressed; + this.subtab = subtab; + } + + private OpenEntityDetailsTabCallback(final IViewContext<?> viewContext, + final boolean keyPressed) + { + this(viewContext, keyPressed, ""); } + private OpenEntityDetailsTabCallback(final IViewContext<?> viewContext) { this(viewContext, false); @@ -97,7 +113,7 @@ public class OpenEntityDetailsTabHelper @Override protected final void process(final IEntityInformationHolderWithPermId result) { - new OpenEntityDetailsTabAction(result, viewContext, keyPressed).execute(); + new OpenEntityDetailsTabAction(result, viewContext, keyPressed, subtab).execute(); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/PermlinkUtilities.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/PermlinkUtilities.java index 88cd95f021bb8a6d888389df1ffb49b92ef53814..bdfa260d11771cbeaccfd49de5ee4f583dae1a1b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/PermlinkUtilities.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/PermlinkUtilities.java @@ -34,6 +34,9 @@ public class PermlinkUtilities /** The HTTP URL parameter used to specify the entity kind. */ public static final String ENTITY_KIND_PARAMETER_KEY = "entity"; + /** The optional HTTP URL parameter used to specify the subtab that should be opened. */ + public static final String SUBTAB_PARAMETER_KEY = "ui-subtab"; + public final static String createPermlinkURL(final String baseIndexURL, final EntityKind entityKind, final String permId) {