Skip to content
Snippets Groups Projects
Commit 72133df7 authored by pkupczyk's avatar pkupczyk
Browse files

LMS-2727 - Screening: Permlink to material details should accept empty experiment identifier

SVN: 24081
parent 0ae84b06
No related branches found
No related tags found
No related merge requests found
......@@ -137,30 +137,36 @@ public class ViewLocator
for (int i = 0; i < params.length; i++)
{
final String[] paramPair = params[i].split(KEY_VALUE_SEPARATOR);
assert paramPair.length == 2 : "Incorrectly formatted URL parameters";
String paramName = paramPair.length > 0 ? paramPair[0] : null;
String paramValue = paramPair.length > 1 ? paramPair[1] : null;
// TODO 2010-09-20, Piotr Buczek: use com.google.gwt.http.client.URL.decode, exchange
// BasicURLEncoder with URL.encode
paramPair[1] = StringEscapeUtils.unescapeHtml(paramPair[1].replaceAll("%2F", "/"));
if (GWT_PARAMETER.equals(paramPair[0]))
if (paramValue != null)
{
paramValue = StringEscapeUtils.unescapeHtml(paramValue.replaceAll("%2F", "/"));
}
if (GWT_PARAMETER.equals(paramName))
{
// skip GWT parameters -- only relevant during testing
} else if (ACTION_PARAMETER.equalsIgnoreCase(paramPair[0]))
} else if (ACTION_PARAMETER.equalsIgnoreCase(paramName))
{
actionOrNull = paramPair[1];
} else if (ENTITY_PARAMETER.equalsIgnoreCase(paramPair[0]))
actionOrNull = paramValue;
} else if (ENTITY_PARAMETER.equalsIgnoreCase(paramName))
{
entityOrNull = paramPair[1];
} else if (PERM_ID_PARAMETER.equalsIgnoreCase(paramPair[0]))
entityOrNull = paramValue;
} else if (PERM_ID_PARAMETER.equalsIgnoreCase(paramName))
{
// Permlink URLs have an implied action
if (actionOrNull == null)
{
actionOrNull = PERMLINK_ACTION;
}
parameters.put(paramPair[0], paramPair[1]);
parameters.put(paramName, paramValue);
} else
{
parameters.put(paramPair[0], paramPair[1]);
parameters.put(paramName, paramValue);
}
}
......
......@@ -17,6 +17,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.u
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.dto.ExperimentIdentifierSearchCriteria;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.SingleExperimentSearchCriteria;
/**
* Material detail view for screening materials. Overrides {@link MaterialLocatorResolver}.
......@@ -27,6 +28,8 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver
{
private final IViewContext<IScreeningClientServiceAsync> viewContext;
private static final String EMPTY_EXPERIMENT_IDENTIFIER = "";
public ImagingMaterialLocatorResolver(IViewContext<IScreeningClientServiceAsync> viewContext)
{
super(viewContext.getCommonViewContext());
......@@ -44,8 +47,7 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver
tryGetExperimentIdentifierSearchCriteria(locator);
AnalysisProcedureCriteria analysisProcedureCriteria =
ScreeningResolverUtils.
extractAnalysisProcedureCriteria(locator);
ScreeningResolverUtils.extractAnalysisProcedureCriteria(locator);
openInitialMaterialViewer(extractMaterialIdentifier(locator), experimentCriteriaOrNull,
analysisProcedureCriteria);
......@@ -58,14 +60,24 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver
String experimentIdentifierOrNull =
getOptionalParameter(locator,
ScreeningLinkExtractor.MATERIAL_DETAIL_EXPERIMENT_IDENT_PARAMETER_KEY);
if (experimentIdentifierOrNull != null)
boolean experimentIdentifierSpecified =
locator.getParameters().containsKey(
ScreeningLinkExtractor.MATERIAL_DETAIL_EXPERIMENT_IDENT_PARAMETER_KEY);
if (experimentIdentifierSpecified)
{
if (experimentIdentifierOrNull == null
|| experimentIdentifierOrNull.trim().length() == 0)
{
experimentIdentifierOrNull = EMPTY_EXPERIMENT_IDENTIFIER;
}
boolean restrictGlobalSearchToProject =
getOptionalBooleanParameter(locator,
ScreeningLinkExtractor.RESTRICT_GLOBAL_SEARCH_TO_PROJECT, false);
return ExperimentIdentifierSearchCriteria.createExperimentScope(
experimentIdentifierOrNull, restrictGlobalSearchToProject);
}
// project
String space = getOptionalParameter(locator, ScreeningLinkExtractor.SPACE_CODE_KEY);
String project = getOptionalParameter(locator, ScreeningLinkExtractor.PROJECT_CODE_KEY);
......@@ -95,10 +107,10 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver
*/
protected void openInitialMaterialViewer(MaterialIdentifier identifier,
ExperimentIdentifierSearchCriteria experimentCriteriaOrNull,
AnalysisProcedureCriteria analysisProcedureCriteria)
throws UserFailureException
AnalysisProcedureCriteria analysisProcedureCriteria) throws UserFailureException
{
viewContext.getCommonService().getMaterialInformationHolder(identifier,
viewContext.getCommonService().getMaterialInformationHolder(
identifier,
new OpenEntityDetailsTabCallback(viewContext, experimentCriteriaOrNull,
analysisProcedureCriteria));
}
......@@ -139,12 +151,21 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver
BasicProjectIdentifier project = scopeOrNull.tryGetProject();
if (experimentIdentifier != null)
{
fetchExperimentAndShowLocations(material, experimentIdentifier);
if (EMPTY_EXPERIMENT_IDENTIFIER.equals(experimentIdentifier))
{
openImagingMaterialViewer(material,
ExperimentSearchCriteria.createExperiment(
SingleExperimentSearchCriteria.EMPTY_CRITERIA,
scopeOrNull.getRestrictGlobalSearchLinkToProject()));
} else
{
fetchExperimentAndShowLocations(material, experimentIdentifier);
}
} else if (project != null)
{
openImagingMaterialViewer(material,
ExperimentSearchCriteria
.createAllExperimentsForProject(project));
ExperimentSearchCriteria.createAllExperimentsForProject(project));
} else
{
openImagingMaterialViewer(material,
......@@ -164,8 +185,7 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver
protected void process(Experiment experiment)
{
ExperimentSearchCriteria experimentCriteria =
ExperimentSearchCriteria.createExperiment(
experiment,
ExperimentSearchCriteria.createExperiment(experiment,
scopeOrNull.getRestrictGlobalSearchLinkToProject());
openImagingMaterialViewer(material, experimentCriteria);
}
......
......@@ -42,6 +42,9 @@ public class WellSearchCriteria implements Serializable
{
private static final long serialVersionUID = ServiceVersionHolder.VERSION;
public static final SingleExperimentSearchCriteria EMPTY_CRITERIA =
new SingleExperimentSearchCriteria();
private TechId experimentId;
private String experimentPermId;
......
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