From 3a736e5fc28b9a84c47703d447c6c8870ff9608c Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Wed, 1 Jul 2009 09:26:27 +0000 Subject: [PATCH] LMS-967 Some refactorings needed for fixing a GUI bug for Phosphonetx SVN: 11618 --- .../ui/field/ChosenEntitySetter.java | 54 +++++++++++++++++++ .../ui/field/EntityChooserDialog.java | 13 ----- .../ui/field/ExperimentChooserField.java | 33 ++++++------ .../ui/field/IChosenEntityListener.java | 27 ++++++++++ .../ui/field/MaterialChooserField.java | 10 ++-- .../ui/field/SampleChooserField.java | 8 +-- .../ui/grid/AbstractSimpleBrowserGrid.java | 8 ++- 7 files changed, 109 insertions(+), 44 deletions(-) create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ChosenEntitySetter.java create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/IChosenEntityListener.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ChosenEntitySetter.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ChosenEntitySetter.java new file mode 100644 index 00000000000..1c5ec96414c --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ChosenEntitySetter.java @@ -0,0 +1,54 @@ +/* + * Copyright 2009 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.generic.client.web.client.application.ui.field; + +import java.util.LinkedHashSet; +import java.util.Set; + +import com.extjs.gxt.ui.client.widget.form.TextField; + +public abstract class ChosenEntitySetter<T> extends TextField<String> +{ + private static final int TEXT_CHOOSER_FIELD_WIDTH = 342; + + private final Set<IChosenEntityListener<T>> listeners = + new LinkedHashSet<IChosenEntityListener<T>>(); + + protected ChosenEntitySetter() + { + setWidth(TEXT_CHOOSER_FIELD_WIDTH); + } + + public void addChosenEntityListener(IChosenEntityListener<T> listener) + { + listeners.add(listener); + } + + void setChosenEntity(T entityOrNull) + { + if (entityOrNull != null) + { + setValue(renderEntity(entityOrNull)); + } + for (IChosenEntityListener<T> listener : listeners) + { + listener.entityChosen(entityOrNull); + } + } + + abstract String renderEntity(T entity); +} \ No newline at end of file diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/EntityChooserDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/EntityChooserDialog.java index 477aea3628d..3f48235943e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/EntityChooserDialog.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/EntityChooserDialog.java @@ -17,7 +17,6 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field; import com.extjs.gxt.ui.client.event.ComponentEvent; -import com.extjs.gxt.ui.client.widget.form.TextField; import com.google.gwt.user.client.Event; import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; @@ -47,18 +46,6 @@ class EntityChooserDialog<T> extends SimpleDialog private final IDelegatedAction onCancelAction; - public static abstract class ChosenEntitySetter<T> extends TextField<String> - { - private static final int TEXT_CHOOSER_FIELD_WIDTH = 342; - - protected ChosenEntitySetter() - { - setWidth(TEXT_CHOOSER_FIELD_WIDTH); - } - - abstract void setChosenEntity(T entity); - } - public EntityChooserDialog(DisposableEntityChooser<T> entityBrowser, ChosenEntitySetter<T> chosenEntitySetter, String title, IMessageProvider messageProvider) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ExperimentChooserField.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ExperimentChooserField.java index 3fada205d65..ed41223e8c8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ExperimentChooserField.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ExperimentChooserField.java @@ -23,15 +23,14 @@ import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.form.AdapterField; import com.extjs.gxt.ui.client.widget.form.Field; import com.extjs.gxt.ui.client.widget.form.MultiField; -import com.extjs.gxt.ui.client.widget.form.TextField; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; 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.ui.experiment.ExperimentBrowserGrid; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.EntityChooserDialog.ChosenEntitySetter; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.DisposableEntityChooser; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.StringUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Experiment; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier; @@ -48,7 +47,7 @@ public final class ExperimentChooserField extends ChosenEntitySetter<Experiment> { Field<?> getField(); - TextField<String> getTextField(); + ExperimentChooserField getChooserField(); Button getChooseButton(); @@ -93,14 +92,14 @@ public final class ExperimentChooserField extends ChosenEntitySetter<Experiment> return chooseButton; } - public TextField<String> getTextField() + public ExperimentChooserField getChooserField() { return chooserField; } public ExperimentIdentifier getValue() { - return chooserField.identifer; + return chooserField.tryGetIdentifier(); } public void updateOriginalValue() @@ -137,21 +136,22 @@ public final class ExperimentChooserField extends ChosenEntitySetter<Experiment> private final boolean mandatory; - private ExperimentIdentifier identifer; - @Override - public void setChosenEntity(Experiment entityOrNull) + public String renderEntity(Experiment entity) { - if (entityOrNull != null) - { - identifer = ExperimentIdentifier.createIdentifier(entityOrNull); - setValue(identifer); - } + return print(ExperimentIdentifier.createIdentifier(entity)); } - private void setValue(ExperimentIdentifier chosenEntity) + private ExperimentIdentifier tryGetIdentifier() { - super.setValue(print(chosenEntity)); + String ident = getValue(); + if (StringUtils.isBlank(ident)) + { + return null; + } else + { + return new ExperimentIdentifier(ident); + } } private String print(ExperimentIdentifier chosenEntity) @@ -169,10 +169,9 @@ public final class ExperimentChooserField extends ChosenEntitySetter<Experiment> setRegex(EXPERIMENT_IDENTIFIER_PATTERN); getMessages().setRegexText(viewContext.getMessage(Dict.INCORRECT_EXPERIMENT_SYNTAX)); - identifer = initialValueOrNull; if (initialValueOrNull != null) { - setValue(initialValueOrNull); + super.setValue(print(initialValueOrNull)); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/IChosenEntityListener.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/IChosenEntityListener.java new file mode 100644 index 00000000000..4151ff80d48 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/IChosenEntityListener.java @@ -0,0 +1,27 @@ +/* + * Copyright 2009 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.generic.client.web.client.application.ui.field; + +/** + * + * + * @author Franz-Josef Elmer + */ +public interface IChosenEntityListener<T> +{ + public void entityChosen(T entity); +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MaterialChooserField.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MaterialChooserField.java index d3eccd889f8..a3edf96679c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MaterialChooserField.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MaterialChooserField.java @@ -27,7 +27,6 @@ import com.extjs.gxt.ui.client.widget.form.MultiField; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; 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.ui.field.EntityChooserDialog.ChosenEntitySetter; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.DisposableEntityChooser; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.material.MaterialBrowserGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil; @@ -85,13 +84,10 @@ public final class MaterialChooserField extends ChosenEntitySetter<Material> private final boolean mandatory; @Override - public void setChosenEntity(Material materialOrNull) + public String renderEntity(Material materialOrNull) { - if (materialOrNull != null) - { - MaterialIdentifier chosenMaterial = createIdentifier(materialOrNull); - super.setValue(chosenMaterial.print()); - } + MaterialIdentifier chosenMaterial = createIdentifier(materialOrNull); + return chosenMaterial.print(); } private static MaterialIdentifier createIdentifier(Material material) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/SampleChooserField.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/SampleChooserField.java index d7362963cfa..f68e21a1687 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/SampleChooserField.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/SampleChooserField.java @@ -27,7 +27,6 @@ import com.extjs.gxt.ui.client.widget.form.MultiField; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; 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.ui.field.EntityChooserDialog.ChosenEntitySetter; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.DisposableEntityChooser; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleBrowserGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil; @@ -116,12 +115,9 @@ public final class SampleChooserField extends ChosenEntitySetter<Sample> private final boolean mandatory; @Override - public void setChosenEntity(Sample entityOrNull) + public String renderEntity(Sample entityOrNull) { - if (entityOrNull != null) - { - setValue(entityOrNull.getIdentifier()); - } + return entityOrNull.getIdentifier(); } public SampleChooserField(boolean mandatory, String initialValueOrNull, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractSimpleBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractSimpleBrowserGrid.java index 43fda1cfe54..2ab0cc242ef 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractSimpleBrowserGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractSimpleBrowserGrid.java @@ -37,7 +37,13 @@ abstract public class AbstractSimpleBrowserGrid<T/* Entity */> extends protected AbstractSimpleBrowserGrid(IViewContext<ICommonClientServiceAsync> viewContext, String browserId, String gridId) { - super(viewContext, gridId, false, true); + this(viewContext, browserId, gridId, true); + } + + protected AbstractSimpleBrowserGrid(IViewContext<ICommonClientServiceAsync> viewContext, + String browserId, String gridId, boolean refreshAutomatically) + { + super(viewContext, gridId, false, refreshAutomatically); setId(browserId); updateDefaultRefreshButton(); } -- GitLab