From 43f3bdb6fb59e7d87459b45cf231226bd78c39a0 Mon Sep 17 00:00:00 2001 From: pkupczyk <pkupczyk> Date: Mon, 13 Aug 2012 14:36:37 +0000 Subject: [PATCH] SP-159 / BIS-93: YeastLab: Implement a way to download template files as part of the Custom Import functionality - initial implementation only for SAMPLE and EXPERIMENT (PROJECT doesn't work yet as it doesn't have permid) SVN: 26358 --- .../application/ui/CustomImportComponent.java | 5 +- .../application/ui/CustomImportForm.java | 72 +++++++++++++++++-- .../shared/basic/dto/CustomImport.java | 23 +++++- 3 files changed, 92 insertions(+), 8 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CustomImportComponent.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CustomImportComponent.java index a45d32e2cac..7620ae3c7ab 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CustomImportComponent.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CustomImportComponent.java @@ -72,8 +72,9 @@ public class CustomImportComponent extends LayoutContainer removeAll(); add(toolBar); customImportForm = - new CustomImportForm(viewContext, ID, (String) se - .getSelectedItem().get(ModelDataPropertyNames.CODE)); + new CustomImportForm(viewContext, ID, (CustomImport) se + .getSelectedItem().get( + ModelDataPropertyNames.OBJECT)); add(customImportForm); layout(); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CustomImportForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CustomImportForm.java index 48642c01355..b86dc20d664 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CustomImportForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CustomImportForm.java @@ -18,14 +18,26 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui; import static ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareField.wrapUnaware; +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.Field; import com.extjs.gxt.ui.client.widget.form.FileUploadField; +import com.extjs.gxt.ui.client.widget.form.LabelField; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.Window; 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.FormPanelListener; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.file.BasicFileFieldManager; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WindowUtils; +import ch.systemsx.cisd.openbis.generic.shared.basic.PermlinkUtilities; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AttachmentHolderKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CustomImport; /** * @author Pawel Glyzewski @@ -38,7 +50,7 @@ public class CustomImportForm extends AbstractRegistrationForm private final String sessionKey; - private final String customImportCode; + private final CustomImport customImport; private final IViewContext<ICommonClientServiceAsync> viewContext; @@ -49,14 +61,20 @@ public class CustomImportForm extends AbstractRegistrationForm * @param id */ public CustomImportForm(IViewContext<ICommonClientServiceAsync> viewContext, String id, - String customImportCode) + CustomImport customImport) { super(viewContext, id); setResetButtonVisible(true); - this.sessionKey = id + "-" + customImportCode; - this.customImportCode = customImportCode; + this.sessionKey = id + "-" + customImport.getCode(); + this.customImport = customImport; this.viewContext = viewContext; + Field<?> templateField = createTemplateField(); + if (templateField != null) + { + formPanel.add(templateField); + } + fileFieldsManager = new BasicFileFieldManager(sessionKey, NUMBER_OF_FIELDS, FIELD_LABEL_TEMPLATE); fileFieldsManager.setMandatory(); @@ -79,7 +97,7 @@ public class CustomImportForm extends AbstractRegistrationForm { CustomImportForm.this.viewContext.getCommonService().performCustomImport( sessionKey, - CustomImportForm.this.customImportCode, + CustomImportForm.this.customImport.getCode(), new AbstractRegistrationCallback<String>( CustomImportForm.this.viewContext) { @@ -99,10 +117,54 @@ public class CustomImportForm extends AbstractRegistrationForm }); } + private LabelField createTemplateField() + { + final String templateEntityKind = + customImport.getProperty(CustomImport.PropertyNames.TEMPLATE_ENTITY_KIND.getName()); + final String templateEntityPermId = + customImport.getProperty(CustomImport.PropertyNames.TEMPLATE_ENTITY_PERMID + .getName()); + final String templateAttachmentName = + customImport.getProperty(CustomImport.PropertyNames.TEMPLATE_ATTACHMENT_NAME + .getName()); + + if (templateEntityKind == null || AttachmentHolderKind.valueOf(templateEntityKind) == null + || templateEntityPermId == null || templateAttachmentName == null) + { + return null; + } + + LabelField result = + new LabelField(LinkRenderer.renderAsLink(viewContext + .getMessage(Dict.FILE_TEMPLATE_LABEL))); + result.sinkEvents(Event.ONCLICK); + result.addListener(Events.OnClick, new Listener<BaseEvent>() + { + @Override + public void handleEvent(BaseEvent be) + { + AttachmentHolderKind attachmentHolderKind = + AttachmentHolderKind.valueOf(templateEntityKind); + + if (AttachmentHolderKind.PROJECT.equals(attachmentHolderKind)) + { + Window.alert("TODO: implement me !!!"); + } else + { + WindowUtils.openWindow(PermlinkUtilities.createAttachmentPermlinkURL( + GWTUtils.getBaseIndexURL(), templateAttachmentName, null, + attachmentHolderKind, templateEntityPermId)); + } + } + }); + return result; + } + @Override protected void submitValidForm() { CustomImportForm.this.setUploadEnabled(false); formPanel.submit(); } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/CustomImport.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/CustomImport.java index a506cadf0a1..11118074ac6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/CustomImport.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/CustomImport.java @@ -29,7 +29,9 @@ public class CustomImport implements Serializable public static enum PropertyNames { CUSTOM_IMPORTS("custom-imports"), NAME("name"), DATASTORE_CODE("dss-code"), DROPBOX_NAME( - "dropbox-name"), DESCRIPTION("description"); + "dropbox-name"), DESCRIPTION("description"), TEMPLATE_ENTITY_KIND( + "template-entity-kind"), TEMPLATE_ENTITY_PERMID("template-entity-permid"), + TEMPLATE_ATTACHMENT_NAME("template-attachment-name"); private final String name; @@ -68,6 +70,25 @@ public class CustomImport implements Serializable this.code = name; } + public String getProperty(String propertyName) + { + if (properties == null) + { + return null; + } else + { + String propertyValue = properties.get(propertyName); + + if (propertyValue == null || propertyValue.trim().length() == 0) + { + return null; + } else + { + return propertyValue.trim(); + } + } + } + public Map<String, String> getProperties() { return properties; -- GitLab