From 261d9fa7dbb4109f756990dbca62cebe7fca7f9e Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Tue, 23 Jun 2009 19:51:42 +0000 Subject: [PATCH] [LMS-960] improved attachments manager implementation to allow adding fieldsests for attachments dynamically to GUI SVN: 11510 --- .../client/web/client/application/Dict.java | 2 +- .../ui/file/AttachmentsFileFieldManager.java | 75 +++++++++++++------ .../application/ui/file/FileFieldManager.java | 3 +- .../AbstractProjectEditRegisterForm.java | 21 +++--- .../dataset/GenericDataSetViewer.java | 5 +- ...ractGenericExperimentRegisterEditForm.java | 13 ++-- .../GenericExperimentRegistrationForm.java | 11 +-- .../sample/GenericSampleEditForm.java | 5 +- .../sample/GenericSampleRegistrationForm.java | 17 +++-- .../cisd/openbis/public/common-dictionary.js | 2 +- 10 files changed, 89 insertions(+), 65 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java index 7a503c7b4ab..0a61fe54fbb 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java @@ -649,7 +649,7 @@ public abstract class Dict public static final String REASON = "reason"; - public static final String ADD_MORE_ATTACHMENTS = "add_more_attachments"; + public static final String ADD_ATTACHMENT = "add_attachment"; public static final String DATA_SET_UPLOAD = "data_set_upload"; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/file/AttachmentsFileFieldManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/file/AttachmentsFileFieldManager.java index f01bdac821a..17ebd3c75eb 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/file/AttachmentsFileFieldManager.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/file/AttachmentsFileFieldManager.java @@ -21,7 +21,6 @@ import java.util.List; import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.Listener; -import com.extjs.gxt.ui.client.widget.form.FieldSet; import com.extjs.gxt.ui.client.widget.form.FormPanel; import com.extjs.gxt.ui.client.widget.form.LabelField; import com.google.gwt.user.client.Event; @@ -38,12 +37,25 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment; */ public class AttachmentsFileFieldManager extends FileFieldManager<AttachmentFileUploadField> { + // by default there are no attachment field sets created + private static final int DEFAULT_NUMBER_OF_ATTACHMENTS = 0; - public AttachmentsFileFieldManager(final String sessionKey, final int initialNumberOfFields, + private final int initialNumberOfFields; + + private LabelField addAttachmentLink; + + public AttachmentsFileFieldManager(final String sessionKey, + final IMessageProvider messageProvider) + { + this(sessionKey, DEFAULT_NUMBER_OF_ATTACHMENTS, messageProvider); + } + + private AttachmentsFileFieldManager(final String sessionKey, final int initialNumberOfFields, final IMessageProvider messageProvider) { super(sessionKey, initialNumberOfFields, messageProvider.getMessage(Dict.FILE), messageProvider); + this.initialNumberOfFields = initialNumberOfFields; } @Override @@ -54,21 +66,39 @@ public class AttachmentsFileFieldManager extends FileFieldManager<AttachmentFile public void addAttachmentFieldSetsToPanel(FormPanel panel) { - boolean first = true; - for (AttachmentFileUploadField attachmentField : this.getFields()) + addAttachmentLink = + createAddAttachmentLink(messageProvider.getMessage(Dict.ADD_ATTACHMENT), panel); + panel.add(addAttachmentLink); + for (AttachmentFileUploadField attachmentField : getFields()) { - FieldSet fieldSet = attachmentField.getFieldSet(); - if (first) - { - fieldSet.add(createAddMoreAttachmentsLink(messageProvider - .getMessage(Dict.ADD_MORE_ATTACHMENTS))); - first = false; - } else - { - fieldSet.hide(); - } - panel.add(fieldSet); + addFileFieldsetToPanel(attachmentField, panel); + } + } + + public void resetAttachmentFieldSetsInPanel(FormPanel panel) + { + for (AttachmentFileUploadField attachmentField : getFields()) + { + removeFileFieldsetFromPanel(attachmentField, panel); } + getFields().clear(); + for (int i = 0; i < initialNumberOfFields; i++) + { + AttachmentFileUploadField newField = addField(); + addFileFieldsetToPanel(newField, panel); + } + panel.layout(); + } + + private void removeFileFieldsetFromPanel(AttachmentFileUploadField attachmentField, + FormPanel panel) + { + panel.remove(attachmentField.getFieldSet()); + } + + private void addFileFieldsetToPanel(AttachmentFileUploadField attachmentField, FormPanel panel) + { + panel.add(attachmentField.getFieldSet()); } public List<NewAttachment> extractAttachments() @@ -85,19 +115,20 @@ public class AttachmentsFileFieldManager extends FileFieldManager<AttachmentFile return result; } - private LabelField createAddMoreAttachmentsLink(String label) + @SuppressWarnings("unchecked") + private LabelField createAddAttachmentLink(final String label, final FormPanel panel) { - final LabelField result = new LabelField(LinkRenderer.renderAsLink(label)); + final String link = LinkRenderer.renderAsLink(label); + final LabelField result = new LabelField(link); + result.setOriginalValue(link); result.sinkEvents(Event.ONCLICK); result.addListener(Event.ONCLICK, new Listener<BaseEvent>() { public void handleEvent(BaseEvent be) { - for (AttachmentFileUploadField attachmentField : getFields()) - { - attachmentField.getFieldSet().show(); - } - result.hide(); + AttachmentFileUploadField newField = addField(); + addFileFieldsetToPanel(newField, panel); + panel.layout(); } }); return result; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/file/FileFieldManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/file/FileFieldManager.java index d68752447f1..de1a92a4a31 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/file/FileFieldManager.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/file/FileFieldManager.java @@ -73,8 +73,7 @@ public abstract class FileFieldManager<T extends FileUploadField> return fileFields; } - @SuppressWarnings("unused") - private FileUploadField addField() + protected T addField() { int counter = fileFields.size(); T field = createFileUploadField(counter); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/AbstractProjectEditRegisterForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/AbstractProjectEditRegisterForm.java index d4bc3ffc658..11f3763e063 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/AbstractProjectEditRegisterForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/AbstractProjectEditRegisterForm.java @@ -47,8 +47,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment; abstract class AbstractProjectEditRegisterForm extends AbstractRegistrationForm { - private static final int DEFAULT_NUMBER_OF_ATTACHMENTS = 3; - final IViewContext<ICommonClientServiceAsync> viewContext; protected CodeField projectCodeField; @@ -57,7 +55,7 @@ abstract class AbstractProjectEditRegisterForm extends AbstractRegistrationForm protected GroupSelectionWidget groupField; - private AttachmentsFileFieldManager attachmentManager; + private AttachmentsFileFieldManager attachmentsManager; protected final String sessionKey; @@ -77,9 +75,7 @@ abstract class AbstractProjectEditRegisterForm extends AbstractRegistrationForm super(viewContext, createId(projectIdOrNull), DEFAULT_LABEL_WIDTH + 20, DEFAULT_FIELD_WIDTH); this.viewContext = viewContext; sessionKey = createId(projectIdOrNull); - attachmentManager = - new AttachmentsFileFieldManager(sessionKey, DEFAULT_NUMBER_OF_ATTACHMENTS, - viewContext); + attachmentsManager = new AttachmentsFileFieldManager(sessionKey, viewContext); projectCodeField = createProjectCodeField(); groupField = createGroupField(); projectDescriptionField = createProjectDescriptionField(); @@ -123,12 +119,19 @@ abstract class AbstractProjectEditRegisterForm extends AbstractRegistrationForm return field; } + @Override + protected void resetPanel() + { + super.resetPanel(); + attachmentsManager.resetAttachmentFieldSetsInPanel(formPanel); + } + private final void addFormFields() { formPanel.add(projectCodeField); formPanel.add(groupField); formPanel.add(projectDescriptionField); - attachmentManager.addAttachmentFieldSetsToPanel(formPanel); + attachmentsManager.addAttachmentFieldSetsToPanel(formPanel); formPanel.addListener(Events.Submit, new FormPanelListener(infoBox) { @Override @@ -156,7 +159,7 @@ abstract class AbstractProjectEditRegisterForm extends AbstractRegistrationForm { if (formPanel.isValid()) { - if (attachmentManager.filesDefined() > 0) + if (attachmentsManager.filesDefined() > 0) { setUploadEnabled(false); formPanel.submit(); @@ -194,7 +197,7 @@ abstract class AbstractProjectEditRegisterForm extends AbstractRegistrationForm protected List<NewAttachment> extractAttachments() { - return attachmentManager.extractAttachments(); + return attachmentsManager.extractAttachments(); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java index 0193a4f3a5b..f79077f4c19 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java @@ -172,7 +172,7 @@ public final class GenericDataSetViewer extends /** * Holder of a {@link Button} that goes to external data browsing on selection. The button is - * disabled until this holder is set up with {@link #setupData(ExternalData)}. + * disabled until data is successfully loaded by the viewer. */ private class BrowseButtonHolder { @@ -188,7 +188,7 @@ public final class GenericDataSetViewer extends Button result = new Button(viewContext.getMessage(Dict.BUTTON_VIEW)); result.setTitle(viewContext.getMessage(Dict.TOOLTIP_VIEW_DATASET)); result.setId(createChildId(VIEW_BUTTON_ID_SUFFIX)); - result.setEnabled(false); + result.disable(); return result; } @@ -208,7 +208,6 @@ public final class GenericDataSetViewer extends DataSetUtils.showDataSet(data, viewContext.getModel()); } }); - button.enable(); } } 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 275f9fa6b75..10cf10cf3e0 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 @@ -69,8 +69,6 @@ abstract public class AbstractGenericExperimentRegisterEditForm extends AbstractGenericEntityRegistrationForm<ExperimentType, ExperimentTypePropertyType, ExperimentProperty> { - private static final int DEFAULT_NUMBER_OF_ATTACHMENTS = 3; - protected AttachmentsFileFieldManager attachmentsManager; protected String attachmentsSessionKey; @@ -211,6 +209,13 @@ abstract public class AbstractGenericExperimentRegisterEditForm attachmentsManager.addAttachmentFieldSetsToPanel(panel); } + @Override + protected void resetPanel() + { + super.resetPanel(); + attachmentsManager.resetAttachmentFieldSetsInPanel(formPanel); + } + private static LabelField createTemplateField(String label, final SampleTypeSelectionWidget typeSelection, final CheckBox autoGenerate) { @@ -272,9 +277,7 @@ abstract public class AbstractGenericExperimentRegisterEditForm createTemplateField(viewContext.getMessage(Dict.FILE_TEMPLATE_LABEL), importSampleTypeSelection, autoGenerateCodes); - attachmentsManager = - new AttachmentsFileFieldManager(attachmentsSessionKey, - DEFAULT_NUMBER_OF_ATTACHMENTS, viewContext); + attachmentsManager = new AttachmentsFileFieldManager(attachmentsSessionKey, viewContext); formPanel.addListener(Events.Submit, new FormPanelListener(infoBox) { @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentRegistrationForm.java index c9972939418..3f6661581f1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentRegistrationForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentRegistrationForm.java @@ -53,10 +53,7 @@ public final class GenericExperimentRegistrationForm extends protected void resetFieldsAfterSave() { codeField.reset(); - for (FileUploadField attachmentField : attachmentsManager.getFields()) - { - attachmentField.reset(); - } + attachmentsManager.resetAttachmentFieldSetsInPanel(formPanel); for (FileUploadField importSamplesField : importSamplesFileManager.getFields()) { importSamplesField.reset(); @@ -89,12 +86,6 @@ public final class GenericExperimentRegistrationForm extends } - @Override - protected void resetPanel() - { - super.resetPanel(); - } - @Override protected void save() { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java index b7a2fbc73ec..b241777c5cb 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java @@ -59,7 +59,6 @@ import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.exp public final class GenericSampleEditForm extends AbstractGenericEntityRegistrationForm<SampleType, SampleTypePropertyType, SampleProperty> { - private static final int DEFAULT_NUMBER_OF_ATTACHMENTS = 3; private AttachmentsFileFieldManager attachmentsManager; @@ -178,9 +177,7 @@ public final class GenericSampleEditForm extends { experimentFieldOrNull = canAttachToExperiment(originalSample) ? createExperimentField() : null; - attachmentsManager = - new AttachmentsFileFieldManager(sessionKey, DEFAULT_NUMBER_OF_ATTACHMENTS, - viewContext); + attachmentsManager = new AttachmentsFileFieldManager(sessionKey, viewContext); formPanel.addListener(Events.Submit, new FormPanelListener(infoBox) { @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java index 2446333e810..560afa94562 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java @@ -24,7 +24,6 @@ import java.util.List; import com.extjs.gxt.ui.client.Events; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.SelectionListener; -import com.extjs.gxt.ui.client.widget.form.FileUploadField; import com.extjs.gxt.ui.client.widget.form.FormPanel; import com.extjs.gxt.ui.client.widget.form.TextField; @@ -66,8 +65,6 @@ public final class GenericSampleRegistrationForm extends public static final String ID_SUFFIX_PARENT = "parent"; - private static final int DEFAULT_NUMBER_OF_ATTACHMENTS = 3; - public static final String SESSION_KEY = createSimpleId(REGISTRATION_IDENTIFIER, EntityKind.SAMPLE); @@ -80,7 +77,7 @@ public final class GenericSampleRegistrationForm extends private TextField<String> parent; private AttachmentsFileFieldManager attachmentsManager = - new AttachmentsFileFieldManager(SESSION_KEY, DEFAULT_NUMBER_OF_ATTACHMENTS, viewContext); + new AttachmentsFileFieldManager(SESSION_KEY, viewContext); public GenericSampleRegistrationForm( final IViewContext<IGenericClientServiceAsync> viewContext, final SampleType sampleType) @@ -113,10 +110,7 @@ public final class GenericSampleRegistrationForm extends protected void resetFieldsAfterSave() { codeField.reset(); - for (FileUploadField attachmentField : attachmentsManager.getFields()) - { - attachmentField.reset(); - } + attachmentsManager.resetAttachmentFieldSetsInPanel(formPanel); } public final void registerSample() @@ -228,6 +222,13 @@ public final class GenericSampleRegistrationForm extends attachmentsManager.addAttachmentFieldSetsToPanel(panel); } + @Override + protected void resetPanel() + { + super.resetPanel(); + attachmentsManager.resetAttachmentFieldSetsInPanel(formPanel); + } + @Override protected PropertiesEditor<SampleType, SampleTypePropertyType, SampleProperty> createPropertiesEditor( String string, IViewContext<ICommonClientServiceAsync> context) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js index d07337fb6ce..f40fb59dfdf 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js +++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js @@ -31,7 +31,7 @@ var common = { url: "URL", reason: "Reason", delete_confirmation_message_with_reason: "You are deleting {0} {1}(s).<br><br>Please enter a reason or cancel deletion.", - add_more_attachments: "Add more attachments", + add_attachment: "Add attachment", // // Field -- GitLab