From 882771ba41d37609ca1dc2074c5d566c5e100d39 Mon Sep 17 00:00:00 2001 From: pkupczyk <pkupczyk> Date: Wed, 25 Jul 2012 13:30:39 +0000 Subject: [PATCH] SP-104 / BIS-64 and SP-132 / BIS-82 - Registration and edit forms improvements bugfixing: - experiment edit form marked as dirty on entry - cannot close experiment registration tab without choosing experiment type first - reverting doesn't close attachments on edit forms SVN: 26205 --- .../ui/widget/EntityRegistrationPanel.java | 10 ++- .../ui/widget/FormPanelWithSavePoint.java | 67 ++++++++++++------- ...ractGenericExperimentRegisterEditForm.java | 7 ++ ...AbstractGenericSampleRegisterEditForm.java | 7 ++ 4 files changed, 66 insertions(+), 25 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/EntityRegistrationPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/EntityRegistrationPanel.java index 3e44d64e49b..0666c37dd91 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/EntityRegistrationPanel.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/EntityRegistrationPanel.java @@ -194,7 +194,13 @@ abstract public class EntityRegistrationPanel<T extends ModelData, S extends Dro @Override public boolean shouldAskForCloseConfirmation() { - return ComponentWithCloseConfirmationUtil.shouldAskForCloseConfirmation(registrationWidget - .get()); + if (registrationWidget != null) + { + return ComponentWithCloseConfirmationUtil + .shouldAskForCloseConfirmation(registrationWidget.get()); + } else + { + return false; + } } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/FormPanelWithSavePoint.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/FormPanelWithSavePoint.java index cb2d05ecd71..75a61fa58b5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/FormPanelWithSavePoint.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/FormPanelWithSavePoint.java @@ -32,6 +32,7 @@ import com.extjs.gxt.ui.client.util.Util; import com.extjs.gxt.ui.client.widget.Component; import com.extjs.gxt.ui.client.widget.Container; import com.extjs.gxt.ui.client.widget.form.Field; +import com.extjs.gxt.ui.client.widget.form.MultiField; /** * @author pkupczyk @@ -54,9 +55,28 @@ public class FormPanelWithSavePoint extends ClickableFormPanel addListener(Events.Add, new Listener<ContainerEvent>() { @Override - public void handleEvent(ContainerEvent e) + public void handleEvent(ContainerEvent ce) { - addDirtyCheckField(e.getItem()); + List<Field<?>> fields = new ArrayList<Field<?>>(); + getDirtyCheckFields(ce.getItem(), fields); + + for (Field<?> field : fields) + { + field.addListener(Events.Change, new Listener<FieldEvent>() + { + @Override + public void handleEvent(FieldEvent fe) + { + DirtyChangeEvent dirtyChangedEvent = + new DirtyChangeEvent(FormPanelWithSavePoint.this); + + for (Listener<DirtyChangeEvent> dirtyChangeListener : dirtyChangeListeners) + { + dirtyChangeListener.handleEvent(dirtyChangedEvent); + } + } + }); + } } }); } @@ -64,7 +84,8 @@ public class FormPanelWithSavePoint extends ClickableFormPanel public void setSavePoint() { dirtyCheckSavePointValues.clear(); - for (Field field : getFields()) + + for (Field field : getDirtyCheckFields()) { setSavePointValue(field); } @@ -79,7 +100,7 @@ public class FormPanelWithSavePoint extends ClickableFormPanel public void resetToSavePoint() { - for (Field field : getFields()) + for (Field field : getDirtyCheckFields()) { field.setValue(getSavePointValue(field)); } @@ -101,31 +122,31 @@ public class FormPanelWithSavePoint extends ClickableFormPanel } } - private void addDirtyCheckField(Component component) + private List<Field<?>> getDirtyCheckFields() { - if (component instanceof Field<?>) - { - Field<?> field = (Field<?>) component; - field.addListener(Events.Change, new Listener<FieldEvent>() - { - @Override - public void handleEvent(FieldEvent e) - { - DirtyChangeEvent dirtyChangedEvent = - new DirtyChangeEvent(FormPanelWithSavePoint.this); + List<Field<?>> fields = new ArrayList<Field<?>>(); + getDirtyCheckFields(this, fields); + return fields; + } - for (Listener<DirtyChangeEvent> dirtyChangeListener : dirtyChangeListeners) - { - dirtyChangeListener.handleEvent(dirtyChangedEvent); - } - } - }); + private void getDirtyCheckFields(Component component, List<Field<?>> fields) + { + if (component instanceof MultiField<?>) + { + MultiField<?> multifield = (MultiField<?>) component; + for (Component item : multifield.getAll()) + { + getDirtyCheckFields(item, fields); + } + } else if (component instanceof Field<?>) + { + fields.add((Field<?>) component); } else if (component instanceof Container<?>) { Container<Component> container = (Container<Component>) component; for (Component item : container.getItems()) { - addDirtyCheckField(item); + getDirtyCheckFields(item, fields); } } } @@ -137,7 +158,7 @@ public class FormPanelWithSavePoint extends ClickableFormPanel public boolean isDirtyForSavePoint() { - for (Field<?> field : getFields()) + for (Field<?> field : getDirtyCheckFields()) { if (dirtyCheckIgnoredFields.contains(field) == false) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractGenericExperimentRegisterEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractGenericExperimentRegisterEditForm.java index b92fcec069e..b6a98ca3d75 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractGenericExperimentRegisterEditForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractGenericExperimentRegisterEditForm.java @@ -228,6 +228,13 @@ abstract public class AbstractGenericExperimentRegisterEditForm extends attachmentsManager.resetAttachmentFieldSetsInPanel(formPanel); } + @Override + protected void revertPanel() + { + super.revertPanel(); + attachmentsManager.resetAttachmentFieldSetsInPanel(formPanel); + } + private static LabelField createTemplateField(String label, final SampleTypeSelectionWidget typeSelection, final CheckBox autoGenerate) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java index 4fbcaa6c3ea..0a2244a987d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java @@ -285,6 +285,13 @@ abstract public class AbstractGenericSampleRegisterEditForm extends attachmentsManager.resetAttachmentFieldSetsInPanel(formPanel); } + @Override + protected void revertPanel() + { + super.revertPanel(); + attachmentsManager.resetAttachmentFieldSetsInPanel(formPanel); + } + @Override protected String getGeneratedCodePrefix() { -- GitLab