From a0f2730b4ee31bb362ac84d08766e8f029d1d417 Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Fri, 5 Mar 2010 11:23:46 +0000 Subject: [PATCH] [LMS-1415] added support for optional experiment browser parameters (experiment type and project auto selection) SVN: 15053 --- .../framework/ComponentProvider.java | 12 ++++- .../locator/BrowserLocatorResolver.java | 22 +++++--- .../ui/experiment/ExperimentBrowserGrid.java | 20 +++++-- .../experiment/ExperimentBrowserToolbar.java | 12 ++++- .../ExperimentTypeSelectionWidget.java | 53 +++++++++++++++++-- .../ProjectSelectionTreeGridContainer.java | 26 +++++++-- .../application/ui/widget/DropDownList.java | 5 ++ .../module/QuerySelectionWidget.java | 15 ++---- 8 files changed, 132 insertions(+), 33 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java index 59a00d6f92e..6bf0de22454 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java @@ -446,13 +446,16 @@ public final class ComponentProvider }; } - public ITabItemFactory getExperimentBrowser() + public ITabItemFactory getExperimentBrowser(final String initialProjectOrNull, + final String initialExperimentTypeOrNull) { return new ITabItemFactory() { public ITabItem create() { - IDisposableComponent browser = ExperimentBrowserGrid.create(viewContext); + IDisposableComponent browser = + ExperimentBrowserGrid.create(viewContext, initialProjectOrNull, + initialExperimentTypeOrNull); return createTab(Dict.EXPERIMENT_BROWSER, browser); } @@ -468,6 +471,11 @@ public final class ComponentProvider }; } + public ITabItemFactory getExperimentBrowser() + { + return getExperimentBrowser(null, null); + } + public ITabItemFactory getPropertyTypeBrowser() { return new ITabItemFactory() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/BrowserLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/BrowserLocatorResolver.java index 5bad8873df9..ccecc4c708f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/BrowserLocatorResolver.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/BrowserLocatorResolver.java @@ -19,6 +19,10 @@ public class BrowserLocatorResolver extends AbstractViewLocatorResolver public final static String BROWSE_ACTION = "BROWSE"; + public final static String TYPE_PARAMETER_KEY = "type"; + + public final static String PROJECT_PARAMETER_KEY = "project"; + public BrowserLocatorResolver(IViewContext<ICommonClientServiceAsync> viewContext) { super(BROWSE_ACTION); @@ -31,7 +35,9 @@ public class BrowserLocatorResolver extends AbstractViewLocatorResolver switch (entityKind) { case EXPERIMENT: - openExperimentBrowser(); + final String projectOrNull = locator.getParameters().get(PROJECT_PARAMETER_KEY); + final String experimentTypeOrNull = locator.getParameters().get(TYPE_PARAMETER_KEY); + openExperimentBrowser(projectOrNull, experimentTypeOrNull); break; case SAMPLE: openSampleBrowser(); @@ -45,21 +51,23 @@ public class BrowserLocatorResolver extends AbstractViewLocatorResolver } } - private void openMaterialBrowser() + private void openExperimentBrowser(String initialProjectOrNull, + String initialExperimentTypeOrNull) { - // TODO select experiment type and project - DispatcherHelper.dispatchNaviEvent(new ComponentProvider(viewContext).getMaterialBrowser()); + DispatcherHelper.dispatchNaviEvent(new ComponentProvider(viewContext).getExperimentBrowser( + initialProjectOrNull, initialExperimentTypeOrNull)); } private void openSampleBrowser() { + // TODO select sample type and group DispatcherHelper.dispatchNaviEvent(new ComponentProvider(viewContext).getSampleBrowser()); } - private void openExperimentBrowser() + private void openMaterialBrowser() { - DispatcherHelper.dispatchNaviEvent(new ComponentProvider(viewContext) - .getExperimentBrowser()); + // TODO select material type + DispatcherHelper.dispatchNaviEvent(new ComponentProvider(viewContext).getMaterialBrowser()); } private EntityKind getEntityKind(ViewLocator locator) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java index 3c875348f43..ae9581b0d59 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java @@ -98,19 +98,31 @@ public class ExperimentBrowserGrid extends return browserGrid.asDisposableWithToolbarAndTree(toolbar, tree); } - /** Create a grid with the toolbar and a tree. */ + /** + * Create a grid with the toolbar and a tree and optional initial selection of experiment type + * and project. + */ public static DisposableEntityChooser<Experiment> create( - final IViewContext<ICommonClientServiceAsync> viewContext) + final IViewContext<ICommonClientServiceAsync> viewContext, String initialProjectOrNull, + String initialExperimentTypeOrNull) { final ProjectSelectionTreeGridContainer tree = - new ProjectSelectionTreeGridContainer(viewContext); - final ExperimentBrowserToolbar toolbar = new ExperimentBrowserToolbar(viewContext, tree); + new ProjectSelectionTreeGridContainer(viewContext, initialProjectOrNull); + final ExperimentBrowserToolbar toolbar = + new ExperimentBrowserToolbar(viewContext, tree, initialExperimentTypeOrNull); final ExperimentBrowserGrid browserGrid = new ExperimentBrowserGrid(viewContext, toolbar); browserGrid.addGridRefreshListener(toolbar); browserGrid.extendBottomToolbar(); return browserGrid.asDisposableWithToolbarAndTree(toolbar, tree); } + /** Create a grid with the toolbar and a tree with no initial selection. */ + public static DisposableEntityChooser<Experiment> create( + final IViewContext<ICommonClientServiceAsync> viewContext) + { + return create(viewContext, null, null); + } + private final ICriteriaProvider<ListExperimentsCriteria> criteriaProvider; private ExperimentBrowserGrid(final IViewContext<ICommonClientServiceAsync> viewContext, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserToolbar.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserToolbar.java index d59d54fc878..553bff09262 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserToolbar.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserToolbar.java @@ -59,14 +59,22 @@ class ExperimentBrowserToolbar extends ToolBar implements private final IViewContext<ICommonClientServiceAsync> viewContext; public ExperimentBrowserToolbar(final IViewContext<ICommonClientServiceAsync> viewContext, - ProjectSelectionTreeGridContainer tree) + ProjectSelectionTreeGridContainer tree, String initialExperimentTypeOrNull) { this.viewContext = viewContext; - selectExperimentTypeCombo = new ExperimentTypeSelectionWidget(viewContext, ID, true); + selectExperimentTypeCombo = + new ExperimentTypeSelectionWidget(viewContext, ID, true, + initialExperimentTypeOrNull); selectProjectTree = tree; display(); } + public ExperimentBrowserToolbar(final IViewContext<ICommonClientServiceAsync> viewContext, + ProjectSelectionTreeGridContainer tree) + { + this(viewContext, tree, null); + } + public void setCriteriaChangedListeners(final IDelegatedAction refreshAction) { selectExperimentTypeCombo diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentTypeSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentTypeSelectionWidget.java index 8ab25041d32..232dbb3d0c8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentTypeSelectionWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentTypeSelectionWidget.java @@ -21,6 +21,7 @@ import static ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModifica import java.util.List; +import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.form.ComboBox; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; @@ -49,14 +50,17 @@ public final class ExperimentTypeSelectionWidget extends private final boolean withAll; + private final String initialCodeOrNull; + public ExperimentTypeSelectionWidget(final IViewContext<ICommonClientServiceAsync> viewContext, - final String idSuffix, final boolean withAll) + final String idSuffix, final boolean withAll, final String initialCodeOrNull) { super(viewContext, SUFFIX + idSuffix, Dict.EXPERIMENT_TYPE, ModelDataPropertyNames.CODE, "experiment type", "experiment types"); this.viewContext = viewContext; this.withAll = withAll; - setAutoSelectFirst(withAll); + this.initialCodeOrNull = initialCodeOrNull; + setAutoSelectFirst(withAll && initialCodeOrNull == null); setTemplate(GWTUtils.getTooltipTemplate(ModelDataPropertyNames.CODE, ModelDataPropertyNames.TOOLTIP)); } @@ -64,7 +68,7 @@ public final class ExperimentTypeSelectionWidget extends public ExperimentTypeSelectionWidget(final IViewContext<ICommonClientServiceAsync> viewContext, final String idSuffix) { - this(viewContext, idSuffix, false); + this(viewContext, idSuffix, false, null); } /** @@ -86,7 +90,8 @@ public final class ExperimentTypeSelectionWidget extends @Override protected void loadData(AbstractAsyncCallback<List<ExperimentType>> callback) { - viewContext.getService().listExperimentTypes(callback); + viewContext.getService().listExperimentTypes(new ListExperimentTypesCallback(viewContext)); + callback.ignore(); } public DatabaseModificationKind[] getRelevantModifications() @@ -97,4 +102,44 @@ public final class ExperimentTypeSelectionWidget extends edit(ObjectKind.PROPERTY_TYPE_ASSIGNMENT) }; } + // + // initial value support + // + + private void selectInitialValue() + { + if (initialCodeOrNull != null) + { + trySelectByCode(initialCodeOrNull); + updateOriginalValue(); + } + } + + private void trySelectByCode(String code) + { + try + { + GWTUtils.setSelectedItem(this, ModelDataPropertyNames.CODE, code); + } catch (IllegalArgumentException ex) + { + MessageBox.alert("Error", "Experiment Type '" + code + "' doesn't exist.", null); + } + } + + private class ListExperimentTypesCallback extends + ExperimentTypeSelectionWidget.ListItemsCallback + { + + protected ListExperimentTypesCallback(IViewContext<?> viewContext) + { + super(viewContext); + } + + @Override + public void process(List<ExperimentType> result) + { + super.process(result); + selectInitialValue(); + } + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java index a06fc42f3a1..f7bbad78fdd 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java @@ -63,8 +63,8 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetCo import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet; import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind; /** @@ -81,6 +81,8 @@ public final class ProjectSelectionTreeGridContainer extends LayoutContainer imp private final IViewContext<?> viewContext; + private final String initialIdentifierOrNull; + private Project selectedProjectOrNull; private SelectionChangedListener<?> selectionChangedListener; @@ -91,10 +93,12 @@ public final class ProjectSelectionTreeGridContainer extends LayoutContainer imp private final Map<Project, Widget> projectLinks = new HashMap<Project, Widget>(); - public ProjectSelectionTreeGridContainer(final IViewContext<?> viewContext) + public ProjectSelectionTreeGridContainer(final IViewContext<?> viewContext, + String initialIdentifierOrNull) { super(new FitLayout()); this.viewContext = viewContext; + this.initialIdentifierOrNull = initialIdentifierOrNull; ColumnConfig codeColumn = createCodeColumn(); ColumnModel columnModel = new ColumnModel(Arrays.asList(codeColumn)); @@ -110,6 +114,11 @@ public final class ProjectSelectionTreeGridContainer extends LayoutContainer imp refreshTree(); } + public ProjectSelectionTreeGridContainer(final IViewContext<?> viewContext) + { + this(viewContext, null); + } + /** @return tree grid with empty store and specified column model */ private TreeGrid<ModelData> createTreeGrid(ColumnModel columnModel) { @@ -134,6 +143,7 @@ public final class ProjectSelectionTreeGridContainer extends LayoutContainer imp @Override public void selectionChanged(SelectionChangedEvent<ModelData> se) { + if (selectedProjectOrNull != null) { selectedProjectLinkOrNull.setVisible(false); @@ -411,11 +421,19 @@ public final class ProjectSelectionTreeGridContainer extends LayoutContainer imp List<Project> projects = result.getList().extractOriginalObjects(); rebuildTree(projects); - if (selectedProjectOrNull != null) + String identifierOrNull = tryGetProjectIdentifierToSelect(); + if (identifierOrNull != null) { - selectByIdentifierIfPossible(selectedProjectOrNull.getIdentifier()); + selectByIdentifierIfPossible(identifierOrNull); } } + + private String tryGetProjectIdentifierToSelect() + { + return selectedProjectOrNull != null ? selectedProjectOrNull.getIdentifier() + : initialIdentifierOrNull; + } + } private static class BaseModelDataWithCode extends NonHierarchicalBaseModelData diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java index d0c9c284aaf..2625a9c3553 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java @@ -468,4 +468,9 @@ abstract public class DropDownList<M extends ModelData, E> extends ComboBox<M> i dataRefreshCallbacks.add(callback); } + protected void updateOriginalValue() + { + setOriginalValue(getValue()); + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QuerySelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QuerySelectionWidget.java index e1fd20fc479..720d734d791 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QuerySelectionWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QuerySelectionWidget.java @@ -72,7 +72,7 @@ public final class QuerySelectionWidget extends DropDownList<QueryModel, QueryEx @Override protected void loadData(AbstractAsyncCallback<List<QueryExpression>> callback) { - viewContext.getService().listQueries(new ListTermsCallback(viewContext)); + viewContext.getService().listQueries(new ListQueriesCallback(viewContext)); callback.ignore(); } @@ -85,7 +85,7 @@ public final class QuerySelectionWidget extends DropDownList<QueryModel, QueryEx // initial value support // - public void selectInitialValue() + private void selectInitialValue() { if (initialQueryNameOrNull != null) { @@ -94,7 +94,7 @@ public final class QuerySelectionWidget extends DropDownList<QueryModel, QueryEx } } - public void trySelectByName(String queryName) + private void trySelectByName(String queryName) { try { @@ -105,15 +105,10 @@ public final class QuerySelectionWidget extends DropDownList<QueryModel, QueryEx } } - public void updateOriginalValue() - { - setOriginalValue(getValue()); - } - - private class ListTermsCallback extends QuerySelectionWidget.ListItemsCallback + private class ListQueriesCallback extends QuerySelectionWidget.ListItemsCallback { - protected ListTermsCallback(IViewContext<?> viewContext) + protected ListQueriesCallback(IViewContext<?> viewContext) { super(viewContext); } -- GitLab