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 3e44d64e49b4e49fbc69607863e7b7a1aec6b9f0..0666c37dd9168da6d1ae0de4941a552afd020e2d 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 cb2d05ecd71fcdf80e434383bee30ae2796fd917..75a61fa58b58d7b1916a43773a7c264514cd6820 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 b92fcec069e0839847eada5c8e7969d1bc9c190e..b6a98ca3d75fd619f7ffaf2067e936de6c2badc5 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 4fbcaa6c3ea3ca48ceb4eb7dceccb9af1269aced..0a2244a987d2d60d8255e92bf709c68ba93d6e95 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() {