From bb37069205fda3ca45b41b02a368abc96cc359da Mon Sep 17 00:00:00 2001 From: juanf <juanf> Date: Tue, 28 May 2013 08:21:40 +0000 Subject: [PATCH] SP-640 BIS-436: New vocabulary registration pop up used at the new property type pop up. SVN: 29231 --- .../ui/AbstractRegistrationForm.java | 80 ++++++++++++++----- .../ui/vocabulary/AddVocabularyDialog.java | 70 ++++++++++++++++ .../VocabularyRegistrationForm.java | 41 ++++++++-- .../vocabulary/VocabularySelectionWidget.java | 27 +++++-- .../application/ui/widget/DropDownList.java | 40 +++++----- 5 files changed, 204 insertions(+), 54 deletions(-) create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/AddVocabularyDialog.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java index 72b2cd0a71f..b078605887b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java @@ -19,6 +19,24 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui; import java.util.ArrayList; import java.util.List; +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.GenericConstants; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ICallbackListener; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.InfoBoxCallbackListener; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IComponentWithCloseConfirmation; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ButtonWithConfirmations; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ButtonWithConfirmations.IConfirmation; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ButtonWithConfirmations.IConfirmationChain; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ConfirmationDialog; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FormPanelWithSavePoint; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FormPanelWithSavePoint.DirtyChangeEvent; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.InfoBox; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils; +import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder; + import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.event.ButtonEvent; @@ -39,23 +57,6 @@ import com.google.gwt.core.client.JavaScriptException; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; -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.GenericConstants; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.InfoBoxCallbackListener; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IComponentWithCloseConfirmation; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ButtonWithConfirmations; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ButtonWithConfirmations.IConfirmation; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ButtonWithConfirmations.IConfirmationChain; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ConfirmationDialog; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FormPanelWithSavePoint; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FormPanelWithSavePoint.DirtyChangeEvent; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.InfoBox; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils; -import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder; - /** * An <i>abstract</i> registration form. * @@ -113,17 +114,31 @@ public abstract class AbstractRegistrationForm extends ContentPanel implements private boolean dirtyCheckEnabled = true; + protected final boolean isPopUp; + protected AbstractRegistrationForm(final IMessageProvider messageProvider, final String id) { - this(messageProvider, id, DEFAULT_LABEL_WIDTH, DEFAULT_FIELD_WIDTH); + this(messageProvider, id, DEFAULT_LABEL_WIDTH, DEFAULT_FIELD_WIDTH, false); } protected AbstractRegistrationForm(final IMessageProvider messageProvider, final String id, final int labelWidth, final int fieldWidth) + { + this(messageProvider, id, labelWidth, fieldWidth, false); + } + + protected AbstractRegistrationForm(final IMessageProvider messageProvider, final String id, final boolean isPopUp) + { + this(messageProvider, id, DEFAULT_LABEL_WIDTH, DEFAULT_FIELD_WIDTH, isPopUp); + } + + protected AbstractRegistrationForm(final IMessageProvider messageProvider, final String id, + final int labelWidth, final int fieldWidth, final boolean isPopUp) { this.messageProvider = messageProvider; this.labelWidth = labelWidth; this.fieldWidth = fieldWidth; + this.isPopUp = isPopUp; setHeaderVisible(false); setLayout(new FlowLayout(5)); setBodyBorder(false); @@ -131,12 +146,25 @@ public abstract class AbstractRegistrationForm extends ContentPanel implements setScrollMode(Scroll.AUTO); setId(id); add(infoBox = createInfoBox(messageProvider)); + if (isPopUp) + { + infoBox.setVisible(false); + } add(loadingInfo = createLoadingInfo()); add(WidgetUtils.inRow(formPanel = createFormPanel(), rightPanel = createAdditionalPanel())); + if (isPopUp) + { + rightPanel.setVisible(false); + } formPanel.setId("registration-panel-" + id); add(unsavedChangesInfo = createUnsavedChangesInfo()); } + public FormPanel getFormPanel() + { + return formPanel; + } + private LayoutContainer createAdditionalPanel() { LayoutContainer c = new LayoutContainer(); @@ -342,9 +370,13 @@ public abstract class AbstractRegistrationForm extends ContentPanel implements } }); - panel.addButton(resetButton); - panel.addButton(revertButton); - panel.addButton(saveButton); + if (false == isPopUp) + { + panel.addButton(resetButton); + panel.addButton(revertButton); + panel.addButton(saveButton); + } + return panel; } @@ -420,6 +452,12 @@ public abstract class AbstractRegistrationForm extends ContentPanel implements setUploadEnabled(false); } + protected AbstractRegistrationCallback(final IViewContext<?> viewContext, final ICallbackListener<T> listener) + { + super(viewContext, listener); + setUploadEnabled(false); + } + // // AbstractAsyncCallback // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/AddVocabularyDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/AddVocabularyDialog.java new file mode 100644 index 00000000000..cd9ac3a029f --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/AddVocabularyDialog.java @@ -0,0 +1,70 @@ +package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabulary; + +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.CallbackListenerAdapter; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabulary.VocabularyRegistrationForm.VocabularyRegistrationCallback; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractRegistrationDialog; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider; + +import com.extjs.gxt.ui.client.widget.MessageBox; +import com.google.gwt.user.client.rpc.AsyncCallback; + +public class AddVocabularyDialog extends AbstractRegistrationDialog +{ + + private final VocabularyRegistrationForm vocabularyRegistrationForm; + + public class VocabularyPopUpCallbackListener extends CallbackListenerAdapter<Void> + { + @Override + public void onFailureOf(final IMessageProvider messageProvider, + final AbstractAsyncCallback<Void> callback, final String failureMessage, + final Throwable throwable) + { + MessageBox.alert("Error", failureMessage, null); + } + + @Override + public void finishOnSuccessOf(final AbstractAsyncCallback<Void> callback, final Void result) + { + VocabularyRegistrationCallback vocabularyCallback = (VocabularyRegistrationCallback) callback; + MessageBox.info("Success", vocabularyCallback.createSuccessfullRegistrationInfo(null), null); + hide(); + } + + } + + public AddVocabularyDialog(IViewContext<ICommonClientServiceAsync> viewContext, IDelegatedAction postRegistrationCallback) + { + super(viewContext, "Register Vocabulary", postRegistrationCallback); + vocabularyRegistrationForm = new VocabularyRegistrationForm(viewContext, true, new VocabularyPopUpCallbackListener()); + addField(vocabularyRegistrationForm); + } + + @Override + protected void afterRender() + { + super.afterRender(); + + this.getFormPanel().layout(); + this.layout(); + + vocabularyRegistrationForm.getBody().setStyleAttribute("background-color", "transparent"); + vocabularyRegistrationForm.getFormPanel().getBody().setStyleAttribute("background-color", "transparent"); + int innerWidth = AbstractRegistrationForm.DEFAULT_LABEL_WIDTH + AbstractRegistrationForm.DEFAULT_FIELD_WIDTH + 111; + int innerHeight = 400; + vocabularyRegistrationForm.getFormPanel().setSize(innerWidth, innerHeight); + this.setSize(innerWidth - 30, innerHeight + 80); + this.center(); + } + + @Override + protected void register(AsyncCallback<Void> registrationCallback) + { + vocabularyRegistrationForm.submitValidForm(); + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyRegistrationForm.java index 6d55e033bc2..f4183e99cd0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyRegistrationForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyRegistrationForm.java @@ -16,18 +16,20 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabulary; -import com.extjs.gxt.ui.client.event.ButtonEvent; -import com.extjs.gxt.ui.client.event.Events; -import com.extjs.gxt.ui.client.event.SelectionListener; - import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; import ch.systemsx.cisd.openbis.generic.client.web.client.application.FormPanelListener; import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ICallbackListener; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabulary.AddVocabularyDialog.VocabularyPopUpCallbackListener; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewVocabulary; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary; +import com.extjs.gxt.ui.client.event.ButtonEvent; +import com.extjs.gxt.ui.client.event.Events; +import com.extjs.gxt.ui.client.event.SelectionListener; + /** * Form allowing to register new vocabularies. * @@ -47,9 +49,18 @@ public final class VocabularyRegistrationForm extends AbstractRegistrationForm protected final VocabularyRegistrationFieldSet vocabularyRegistrationFieldSet; + private final VocabularyPopUpCallbackListener dialogCallback; + public VocabularyRegistrationForm(final IViewContext<ICommonClientServiceAsync> viewContext) { - super(viewContext, ID); + this(viewContext, false, null); + } + + public VocabularyRegistrationForm(final IViewContext<ICommonClientServiceAsync> viewContext, final boolean isPopUp, + VocabularyPopUpCallbackListener dialogCallback) + { + super(viewContext, ID, isPopUp); + this.dialogCallback = dialogCallback; setResetButtonVisible(true); this.viewContext = viewContext; termsSessionKey = ID + "_terms"; @@ -64,11 +75,18 @@ public final class VocabularyRegistrationForm extends AbstractRegistrationForm protected final void submitValidForm() { final NewVocabulary vocabulary = vocabularyRegistrationFieldSet.createVocabulary(); - viewContext.getService().registerVocabulary(termsSessionKey, vocabulary, - new VocabularyRegistrationCallback(viewContext, vocabulary)); + VocabularyRegistrationCallback asyncCallback; + if (isPopUp) + { + asyncCallback = new VocabularyRegistrationCallback(viewContext, vocabulary, dialogCallback); + } else + { + asyncCallback = new VocabularyRegistrationCallback(viewContext, vocabulary); + } + viewContext.getService().registerVocabulary(termsSessionKey, vocabulary, asyncCallback); } - private final class VocabularyRegistrationCallback extends + final class VocabularyRegistrationCallback extends AbstractRegistrationForm.AbstractRegistrationCallback<Void> { private final Vocabulary vocabulary; @@ -80,6 +98,13 @@ public final class VocabularyRegistrationForm extends AbstractRegistrationForm this.vocabulary = vocabulary; } + VocabularyRegistrationCallback(final IViewContext<?> viewContext, + final Vocabulary vocabulary, final ICallbackListener<Void> listener) + { + super(viewContext, listener); + this.vocabulary = vocabulary; + } + @Override protected String createSuccessfullRegistrationInfo(Void result) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularySelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularySelectionWidget.java index 1d6ed746400..89b18c42c6b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularySelectionWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularySelectionWidget.java @@ -19,10 +19,6 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabu import java.util.ArrayList; import java.util.List; -import com.extjs.gxt.ui.client.data.BaseModelData; -import com.extjs.gxt.ui.client.widget.form.ComboBox; -import com.google.gwt.user.client.rpc.AsyncCallback; - 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; @@ -37,6 +33,13 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKin import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary; +import com.extjs.gxt.ui.client.data.BaseModelData; +import com.extjs.gxt.ui.client.event.BaseEvent; +import com.extjs.gxt.ui.client.event.Events; +import com.extjs.gxt.ui.client.event.Listener; +import com.extjs.gxt.ui.client.widget.form.ComboBox; +import com.google.gwt.user.client.rpc.AsyncCallback; + /** * A {@link ComboBox} extension for selecting a {@link Vocabulary}. * @@ -52,9 +55,20 @@ public class VocabularySelectionWidget extends DropDownList<BaseModelData, Vocab public VocabularySelectionWidget(final IViewContext<ICommonClientServiceAsync> viewContext) { super(viewContext, PREFIX, Dict.VOCABULARY, ModelDataPropertyNames.CODE, viewContext - .getMessage(Dict.VOCABULARY), viewContext.getMessage(Dict.VOCABULARY)); + .getMessage(Dict.VOCABULARY), viewContext.getMessage(Dict.VOCABULARY), true); this.viewContext = viewContext; setWidth(100); + + this.addListener(Events.TwinTriggerClick, new AddVocabularyListener()); + } + + private class AddVocabularyListener implements Listener<BaseEvent> + { + public void handleEvent(BaseEvent be) + { + AddVocabularyDialog dialog = new AddVocabularyDialog(viewContext, null); + dialog.show(); + }; } // @@ -125,7 +139,6 @@ public class VocabularySelectionWidget extends DropDownList<BaseModelData, Vocab @Override public DatabaseModificationKind[] getRelevantModifications() { - return new DatabaseModificationKind[] - { DatabaseModificationKind.createOrDelete(ObjectKind.VOCABULARY) }; + return new DatabaseModificationKind[] { DatabaseModificationKind.createOrDelete(ObjectKind.VOCABULARY) }; } } 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 07d171f300a..08cd7cf800b 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 @@ -21,6 +21,17 @@ import java.util.Collection; import java.util.List; import java.util.Set; +import ch.systemsx.cisd.common.shared.basic.string.StringUtils; +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.GenericConstants; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.VoidAsyncCallback; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareField; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; + import com.extjs.gxt.ui.client.GXT; import com.extjs.gxt.ui.client.core.El; import com.extjs.gxt.ui.client.data.ModelData; @@ -37,17 +48,6 @@ import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Event; -import ch.systemsx.cisd.common.shared.basic.string.StringUtils; -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.GenericConstants; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.VoidAsyncCallback; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareField; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; - /** * @author Izabela Adamczyk */ @@ -100,12 +100,18 @@ abstract public class DropDownList<M extends ModelData, E> extends ComboBox<M> i protected El span; public DropDownList(final IViewContext<?> viewContext, String idSuffix, String labelDictCode, - String displayField, String chooseSuffix, String nothingFoundSuffix) + String displayField, String chooseSuffix, String nothingFoundSuffix, boolean twinTriggerEnabled) { this(idSuffix, displayField, viewContext.getMessage(labelDictCode), viewContext.getMessage( Dict.COMBO_BOX_CHOOSE, chooseSuffix), viewContext.getMessage(Dict.COMBO_BOX_EMPTY, nothingFoundSuffix), viewContext - .getMessage(Dict.COMBO_BOX_EXPECTED_VALUE_FROM_THE_LIST), true, viewContext, true); + .getMessage(Dict.COMBO_BOX_EXPECTED_VALUE_FROM_THE_LIST), true, viewContext, true, twinTriggerEnabled); + } + + public DropDownList(final IViewContext<?> viewContext, String idSuffix, String labelDictCode, + String displayField, String chooseSuffix, String nothingFoundSuffix) + { + this(viewContext, idSuffix, labelDictCode, displayField, chooseSuffix, nothingFoundSuffix, false); } public DropDownList(String idSuffix, String displayField, String label, String chooseMsg, @@ -246,9 +252,8 @@ abstract public class DropDownList<M extends ModelData, E> extends ComboBox<M> i } /** - * Refreshes the whole store of the combobox. If the previously chosen value is no longer - * present in the store, it will be changed to empty. Otherwise the previous selection will be - * preserved. + * Refreshes the whole store of the combobox. If the previously chosen value is no longer present in the store, it will be changed to empty. + * Otherwise the previous selection will be preserved. */ public void refreshStore() { @@ -473,8 +478,7 @@ abstract public class DropDownList<M extends ModelData, E> extends ComboBox<M> i /** * @return true if anything has been selected. <br> - * Note that the result can be different from tryGetSelected() != null if there are null - * values in the model. + * Note that the result can be different from tryGetSelected() != null if there are null values in the model. */ protected boolean isAnythingSelected() { -- GitLab