Skip to content
Snippets Groups Projects
Commit 685ee78c authored by anttil's avatar anttil
Browse files

SSDM-772: Link to navigate to a specific sub-tab in the generic web UI

SVN: 32392
parent a94212d4
No related branches found
No related tags found
No related merge requests found
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
......@@ -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);
}
}
}
......
......@@ -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);
......
......@@ -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();
}
}
......
......@@ -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)
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment