From 583fca89a1a93e5bafe1f89a3c42de24ae64787d Mon Sep 17 00:00:00 2001 From: izabel <izabel> Date: Mon, 17 May 2010 08:02:51 +0000 Subject: [PATCH] [LMS-1528] make the special query parameters (entity keys) fixed (not possible to edit/reset/see) SVN: 15990 --- .../web/client/application/QueryModule.java | 89 +---------- .../application/QueryParameterValue.java | 46 ++++++ .../client/application/QuerySectionPanel.java | 150 ++++++++++++++++++ .../locator/QueryLocatorResolver.java | 12 +- .../module/RunCannedQueryToolbar.java | 34 +++- 5 files changed, 237 insertions(+), 94 deletions(-) create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QueryParameterValue.java create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QuerySectionPanel.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QueryModule.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QueryModule.java index 3e320d87a03..e51342b2e27 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QueryModule.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QueryModule.java @@ -16,14 +16,11 @@ package ch.systemsx.cisd.openbis.plugin.query.client.web.client.application; -import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Set; -import com.extjs.gxt.ui.client.widget.Component; import com.extjs.gxt.ui.client.widget.menu.MenuItem; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -31,24 +28,17 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent; import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IModule; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.QueryType; import ch.systemsx.cisd.openbis.plugin.query.client.web.client.IQueryClientServiceAsync; -import ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.module.AbstractQueryProviderToolbar; import ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.module.QueryModuleDatabaseMenuItem; -import ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.module.QueryViewer; -import ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.module.RunCannedQueryToolbar; /** * @author Piotr Buczek */ public class QueryModule implements IModule { + public static final String ID = GenericConstants.ID_PREFIX; private final IViewContext<IQueryClientServiceAsync> viewContext; @@ -115,79 +105,6 @@ public class QueryModule implements IModule public Collection<? extends DisposableSectionPanel> getSections( IEntityInformationHolderWithIdentifier entity) { - ArrayList<DisposableSectionPanel> result = new ArrayList<DisposableSectionPanel>(); - final IViewContext<IQueryClientServiceAsync> queryModuleContext = viewContext; - result.add(createEntitySectionPanel(queryModuleContext, entity)); - return result; - } - - private DisposableSectionPanel createEntitySectionPanel( - final IViewContext<IQueryClientServiceAsync> queryModuleContext, - final IEntityInformationHolderWithIdentifier entity) - { - DisposableSectionPanel panel = - new DisposableSectionPanel( - viewContext - .getMessage(ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.Dict.QUERY_MODULE_MENU_TITLE), - queryModuleContext) - { - @Override - protected IDisposableComponent createDisposableContent() - { - HashMap<String, String> parameters = new HashMap<String, String>(); - if (entity.getEntityKind().equals(EntityKind.MATERIAL)) - { - parameters.put("_key", entity.getCode()); - parameters.put("_type", entity.getEntityType().getCode()); - } else - { - parameters.put("_key", entity.getPermId()); - } - AbstractQueryProviderToolbar toolbar = - new RunCannedQueryToolbar(queryModuleContext, null, parameters, - translate(entity.getEntityKind())); - final DatabaseModificationAwareComponent viewer = - QueryViewer.create(queryModuleContext, toolbar); - return new IDisposableComponent() - { - public void dispose() - {// FIXME - } - - public Component getComponent() - { - return viewer.get(); - } - - public DatabaseModificationKind[] getRelevantModifications() - { - return viewer.getRelevantModifications(); - } - - public void update( - Set<DatabaseModificationKind> observedModifications) - { - viewer.update(observedModifications); - } - }; - } - }; - return panel; - } - - private static QueryType translate(EntityKind kind) - { - switch (kind) - { - case DATA_SET: - return QueryType.DATA_SET; - case EXPERIMENT: - return QueryType.EXPERIMENT; - case MATERIAL: - return QueryType.MATERIAL; - case SAMPLE: - return QueryType.SAMPLE; - } - return null; + return Arrays.asList(new QuerySectionPanel(viewContext, entity)); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QueryParameterValue.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QueryParameterValue.java new file mode 100644 index 00000000000..793ff470d9d --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QueryParameterValue.java @@ -0,0 +1,46 @@ +/* + * Copyright 2010 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.plugin.query.client.web.client.application; + +/** + * Bean describing query parameter value. + * + * @author Izabela Adamczyk + */ +public class QueryParameterValue +{ + private final String value; + + private final boolean fixed; + + public QueryParameterValue(String value, boolean fixed) + { + this.value = value; + this.fixed = fixed; + } + + public String getValue() + { + return value; + } + + public boolean isFixed() + { + return fixed; + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QuerySectionPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QuerySectionPanel.java new file mode 100644 index 00000000000..3279b40d994 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QuerySectionPanel.java @@ -0,0 +1,150 @@ +/* + * Copyright 2010 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.plugin.query.client.web.client.application; + +import java.util.HashMap; +import java.util.Set; + +import com.extjs.gxt.ui.client.widget.Component; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; +import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.QueryType; +import ch.systemsx.cisd.openbis.plugin.query.client.web.client.IQueryClientServiceAsync; +import ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.module.AbstractQueryProviderToolbar; +import ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.module.QueryViewer; +import ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.module.RunCannedQueryToolbar; + +/** + * Section panel presenting query results for given entity. + * + * @author Izabela Adamczyk + */ +final class QuerySectionPanel extends DisposableSectionPanel +{ + private static final String PARAMETER_PREFIX = "_"; + + private static final String TYPE = "type"; + + private static final String KEY = "key"; + + private final IViewContext<IQueryClientServiceAsync> queryModuleContext; + + private final IEntityInformationHolderWithIdentifier entity; + + public QuerySectionPanel(IViewContext<IQueryClientServiceAsync> queryModuleContext, + final IEntityInformationHolderWithIdentifier entity) + { + super( + queryModuleContext + .getMessage(ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.Dict.QUERY_MODULE_MENU_TITLE), + queryModuleContext); + this.queryModuleContext = queryModuleContext; + this.entity = entity; + + } + + @Override + protected IDisposableComponent createDisposableContent() + { + HashMap<String, QueryParameterValue> parameters = extractFixedQueryParameters(entity); + AbstractQueryProviderToolbar toolbar = + new RunCannedQueryToolbar(queryModuleContext, null, parameters, translate(entity + .getEntityKind())); + final DatabaseModificationAwareComponent viewer = + QueryViewer.create(queryModuleContext, toolbar); + return new IDisposableComponent() + { + public void dispose() + {// FIXME + } + + public Component getComponent() + { + return viewer.get(); + } + + public DatabaseModificationKind[] getRelevantModifications() + { + return viewer.getRelevantModifications(); + } + + public void update(Set<DatabaseModificationKind> observedModifications) + { + viewer.update(observedModifications); + } + }; + } + + /** + * Extracts fixed query parameters from given entity. + * <ul> + * <li>material: code (<code>${key}</code>) + type (<code>${type}</code>) + * <li>data set: code (<code>${key}</code>) + * <li>sample, experiment: perm id (<code>${key}</code>) + * </ul> + */ + private static HashMap<String, QueryParameterValue> extractFixedQueryParameters( + final IEntityInformationHolderWithIdentifier entity) + { + HashMap<String, QueryParameterValue> parameters = + new HashMap<String, QueryParameterValue>(); + if (entity.getEntityKind().equals(EntityKind.MATERIAL)) + { + parameters.put(asParameter(KEY), new QueryParameterValue(entity.getCode(), true)); + parameters.put(asParameter(TYPE), new QueryParameterValue(entity.getEntityType() + .getCode(), true)); + } else + { + parameters.put(asParameter(KEY), new QueryParameterValue(entity.getPermId(), true)); + } + return parameters; + } + + /** + * Adds prefix to given parameter name. + */ + private static String asParameter(String parameterName) + { + return PARAMETER_PREFIX + parameterName; + } + + /** + * Translates {@link EntityKind} to {@link QueryType}. + */ + private static QueryType translate(EntityKind entityKind) + { + switch (entityKind) + { + case DATA_SET: + return QueryType.DATA_SET; + case EXPERIMENT: + return QueryType.EXPERIMENT; + case MATERIAL: + return QueryType.MATERIAL; + case SAMPLE: + return QueryType.SAMPLE; + } + return null; + } + +} \ No newline at end of file diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/locator/QueryLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/locator/QueryLocatorResolver.java index 72422c93572..9b849f96be9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/locator/QueryLocatorResolver.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/locator/QueryLocatorResolver.java @@ -1,5 +1,8 @@ package ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.locator; +import java.util.HashMap; +import java.util.Map; + 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.DatabaseModificationAwareComponent; @@ -14,6 +17,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ITabA import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.QueryType; import ch.systemsx.cisd.openbis.plugin.query.client.web.client.IQueryClientServiceAsync; +import ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.QueryParameterValue; import ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.module.QueryModuleDatabaseMenuItem; import ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.module.QueryViewer; import ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.module.RunCannedQueryToolbar; @@ -43,11 +47,17 @@ public class QueryLocatorResolver extends AbstractViewLocatorResolver // opens a predefined query results viewer with optional: // - query selection using query name // - filling of parameter values using parameter names + Map<String, String> originalParameters = locator.getParameters(); + Map<String, QueryParameterValue> parameters = new HashMap<String, QueryParameterValue>(); + for (String key : originalParameters.keySet()) + { + parameters.put(key, new QueryParameterValue(originalParameters.get(key), false)); + } final String queryNameOrNull = locator.getParameters().get(QUERY_NAME_PARAMETER_KEY); final DatabaseModificationAwareComponent component = QueryViewer.create(viewContext, new RunCannedQueryToolbar(viewContext, - queryNameOrNull, locator.getParameters(), QueryType.GENERIC)); + queryNameOrNull, parameters, QueryType.GENERIC)); final ITabActionMenuItemDefinition<IQueryClientServiceAsync> definition = ActionMenuDefinition.RUN_CANNED_QUERY; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/RunCannedQueryToolbar.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/RunCannedQueryToolbar.java index 916e107bed3..d443b291a1c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/RunCannedQueryToolbar.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/RunCannedQueryToolbar.java @@ -40,6 +40,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKin import ch.systemsx.cisd.openbis.generic.shared.basic.dto.QueryType; import ch.systemsx.cisd.openbis.plugin.query.client.web.client.IQueryClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.Dict; +import ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.QueryParameterValue; import ch.systemsx.cisd.openbis.plugin.query.shared.basic.dto.QueryDatabase; import ch.systemsx.cisd.openbis.plugin.query.shared.basic.dto.QueryExpression; import ch.systemsx.cisd.openbis.plugin.query.shared.basic.dto.QueryParameterBindings; @@ -66,20 +67,23 @@ public class RunCannedQueryToolbar extends AbstractQueryProviderToolbar private final Collection<ParameterField> parameterFields; // <name, value> where name starts with additional INITIAL_PARAMETER_NAME_PREFIX - private final Map<String, String> initialParameterValues; + private final Map<String, QueryParameterValue> initialParameterValues; + + private final Map<String, String> initialFixedParameters; public RunCannedQueryToolbar(final IViewContext<IQueryClientServiceAsync> viewContext, QueryType queryType) { - this(viewContext, null, new HashMap<String, String>(0), queryType); + this(viewContext, null, new HashMap<String, QueryParameterValue>(0), queryType); } public RunCannedQueryToolbar(IViewContext<IQueryClientServiceAsync> viewContext, - String initialQueryNameOrNull, Map<String, String> initialParameterValues, + String initialQueryNameOrNull, Map<String, QueryParameterValue> initialParameterValues, QueryType queryType) { super(viewContext); this.initialParameterValues = initialParameterValues; + initialFixedParameters = new HashMap<String, String>(); querySelectionWidget = new QuerySelectionWidget(viewContext, initialQueryNameOrNull, queryType); parameterContainer = new ButtonGroup(MAX_PARAMETER_COLUMNS); @@ -159,13 +163,25 @@ public class RunCannedQueryToolbar extends AbstractQueryProviderToolbar }; for (String parameter : query.getParameters()) { - final String initialValueOrNull = tryGetInitialValue(parameter); - addParameterField(new ParameterField(parameter, updateExecuteButtonAction, - initialValueOrNull)); + final QueryParameterValue initialValueOrNull = tryGetInitialValue(parameter); + if (initialValueOrNull != null && initialValueOrNull.isFixed()) + { + addInitialBinding(parameter, initialValueOrNull.getValue()); + } else + { + addParameterField(new ParameterField(parameter, updateExecuteButtonAction, + initialValueOrNull == null ? null : initialValueOrNull.getValue())); + } } } - private String tryGetInitialValue(String parameter) + private void addInitialBinding(String parameter, String value) + { + + initialFixedParameters.put(parameter, value); + } + + private QueryParameterValue tryGetInitialValue(String parameter) { return initialParameterValues.get(INITIAL_PARAMETER_NAME_PREFIX + parameter); } @@ -238,6 +254,10 @@ public class RunCannedQueryToolbar extends AbstractQueryProviderToolbar public QueryParameterBindings tryGetQueryParameterBindings() { QueryParameterBindings bindings = new QueryParameterBindings(); + for (String key : initialFixedParameters.keySet()) + { + bindings.addBinding(key, initialFixedParameters.get(key)); + } for (ParameterField field : parameterFields) { ParameterWithValue parameterWithValue = field.getParameterWithValue(); -- GitLab