From 7fd5dc00afd52d35bee39c0cc756107cb6c8717f Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Mon, 6 Sep 2010 17:00:08 +0000 Subject: [PATCH] [LMS-1690] save chosen material type in display settings SVN: 17732 --- .../ui/material/MaterialBrowserToolbar.java | 5 +- .../material/MaterialTypeSelectionWidget.java | 106 +++++++++++++++--- .../ExperimentWellMaterialBrowserGrid.java | 3 +- 3 files changed, 97 insertions(+), 17 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserToolbar.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserToolbar.java index 4bbdc03cebd..b62cb8c59a7 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserToolbar.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserToolbar.java @@ -55,12 +55,11 @@ public class MaterialBrowserToolbar extends ToolBar implements private final IViewContext<ICommonClientServiceAsync> viewContext; public MaterialBrowserToolbar(final IViewContext<ICommonClientServiceAsync> viewContext, - MaterialType initValueOrNull) + String displayTypeIdOrNull) { this.viewContext = viewContext; this.selectMaterialTypeCombo = - MaterialTypeSelectionWidget - .createWithInitialValue(viewContext, initValueOrNull, ID); + MaterialTypeSelectionWidget.create(viewContext, displayTypeIdOrNull, ID); display(); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeSelectionWidget.java index 03a2a57a058..5151835f007 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeSelectionWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeSelectionWidget.java @@ -21,12 +21,16 @@ import static ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModifica import java.util.List; +import com.extjs.gxt.ui.client.event.SelectionChangedEvent; +import com.extjs.gxt.ui.client.event.SelectionChangedListener; +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; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplaySettingsManager; import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.MaterialTypeModel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.DropDownList; @@ -49,6 +53,8 @@ public final class MaterialTypeSelectionWidget extends private final String additionalOptionLabelOrNull; + private final String initialCodeOrNull; + /** * Creates a material type chooser with one additional option. It's useful when you want to have * one special value on the list. @@ -57,37 +63,57 @@ public final class MaterialTypeSelectionWidget extends final IViewContext<ICommonClientServiceAsync> viewContext, final String additionalOptionLabel, final String idSuffix) { - return new MaterialTypeSelectionWidget(viewContext, additionalOptionLabel, idSuffix); + return new MaterialTypeSelectionWidget(viewContext, additionalOptionLabel, idSuffix, null); } - public static MaterialTypeSelectionWidget createWithInitialValue( + public static MaterialTypeSelectionWidget create( final IViewContext<ICommonClientServiceAsync> viewContext, - final MaterialType initValueOrNull, final String idSuffix) + final String displayTypeIdOrNull, final String idSuffix) { - MaterialTypeSelectionWidget chooser = - new MaterialTypeSelectionWidget(viewContext, null, idSuffix); - if (initValueOrNull != null) - { - chooser.setValue(new MaterialTypeModel(initValueOrNull)); - } - return chooser; + return new MaterialTypeSelectionWidget(viewContext, null, idSuffix, displayTypeIdOrNull); } public MaterialTypeSelectionWidget(final IViewContext<ICommonClientServiceAsync> viewContext, final String idSuffix) { - this(viewContext, null, idSuffix); + this(viewContext, null, idSuffix, null); } private MaterialTypeSelectionWidget(IViewContext<ICommonClientServiceAsync> viewContext, - String additionalOptionLabelOrNull, String idSuffix) + String additionalOptionLabelOrNull, String idSuffix, final String displayTypeIdOrNull) { super(viewContext, SUFFIX + idSuffix, Dict.MATERIAL_TYPE, ModelDataPropertyNames.CODE, "material type", "material types"); this.viewContext = viewContext; this.additionalOptionLabelOrNull = additionalOptionLabelOrNull; + this.initialCodeOrNull = + tryGetInitialValue(displayTypeIdOrNull, viewContext.getDisplaySettingsManager()); setTemplate(GWTUtils.getTooltipTemplate(ModelDataPropertyNames.CODE, ModelDataPropertyNames.TOOLTIP)); + if (displayTypeIdOrNull != null) + { + final DisplaySettingsManager displaySettingsManager = + viewContext.getDisplaySettingsManager(); + addSelectionChangedListener(new SelectionChangedListener<MaterialTypeModel>() + { + @Override + public void selectionChanged(SelectionChangedEvent<MaterialTypeModel> se) + { + saveSelectedValueAsDisplaySetting(displaySettingsManager, + displayTypeIdOrNull); + } + }); + } + } + + private void saveSelectedValueAsDisplaySetting( + final DisplaySettingsManager displaySettingsManager, final String dropDownId) + { + MaterialType selectedOrNull = tryGetSelected(); + if (selectedOrNull != null) + { + displaySettingsManager.storeDropDownSettings(dropDownId, selectedOrNull.getCode()); + } } /** @@ -128,7 +154,9 @@ public final class MaterialTypeSelectionWidget extends @Override protected void loadData(AbstractAsyncCallback<List<MaterialType>> callback) { - viewContext.getService().listMaterialTypes(callback); + viewContext.getService().listMaterialTypes(new ListMaterialTypesCallback(viewContext)); + callback.ignore(); + } public DatabaseModificationKind[] getRelevantModifications() @@ -138,4 +166,56 @@ public final class MaterialTypeSelectionWidget extends createOrDelete(ObjectKind.PROPERTY_TYPE_ASSIGNMENT), 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", "Material Type '" + code + "' doesn't exist.", null); + } + } + + private class ListMaterialTypesCallback extends MaterialTypeSelectionWidget.ListItemsCallback + { + + protected ListMaterialTypesCallback(IViewContext<?> viewContext) + { + super(viewContext); + } + + @Override + public void process(List<MaterialType> result) + { + super.process(result); + selectInitialValue(); + } + } + + private static String tryGetInitialValue(final String displayTypeIdOrNull, + DisplaySettingsManager displaySettingsManager) + { + if (displayTypeIdOrNull != null) + { + return displaySettingsManager.getDropDownSettings(displayTypeIdOrNull); + } else + { + return null; + } + } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentWellMaterialBrowserGrid.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentWellMaterialBrowserGrid.java index 603f21e5b10..9d2f4053d60 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentWellMaterialBrowserGrid.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentWellMaterialBrowserGrid.java @@ -47,7 +47,8 @@ public class ExperimentWellMaterialBrowserGrid extends MaterialBrowserGrid final IEntityInformationHolderWithIdentifier experiment) { final MaterialBrowserToolbar toolbar = - new MaterialBrowserToolbar(screeningViewContext.getCommonViewContext(), null); + new MaterialBrowserToolbar(screeningViewContext.getCommonViewContext(), + "experiment-well-material-browser-toolbar"); final ICriteriaProvider<ListMaterialDisplayCriteria> criteriaProvider = toolbar; final ExperimentWellMaterialBrowserGrid browserGrid = createBrowserGrid(screeningViewContext, criteriaProvider, experiment); -- GitLab