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