From b5297688cf4ee03590ee62fa9c5196eaa3787014 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Tue, 14 Jul 2009 13:41:42 +0000
Subject: [PATCH] [LMS-970] implemented server side ('Export All Data Sets')

SVN: 11749
---
 .../web/client/ICommonClientService.java      |  4 +-
 .../web/client/ICommonClientServiceAsync.java |  9 ++-
 .../ui/data/AbstractExternalDataGrid.java     | 34 +++++++++---
 .../ui/data/DataSetComputeMenu.java           | 20 +------
 .../DisplayedOrSelectedDatasetCriteria.java   |  5 +-
 .../client/web/client/dto/ExternalData.java   | 11 ++++
 .../web/server/CommonClientService.java       | 55 ++++++++++++++++---
 7 files changed, 94 insertions(+), 44 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
index 31a4639ae3b..7a6d2c68f0e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
@@ -515,8 +515,8 @@ public interface ICommonClientService extends IClientService
      * 
      * @return a message or an empty string.
      */
-    public String uploadDataSets(List<String> dataSetCodes, DataSetUploadParameters uploadParameters)
-            throws UserFailureException;
+    public String uploadDataSets(DisplayedOrSelectedDatasetCriteria criteria,
+            DataSetUploadParameters uploadParameters) throws UserFailureException;
 
     /**
      * Information about the time and kind of the last modification, separately for each kind of
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
index 023d79cff53..f9c624b3c2a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
@@ -440,9 +440,12 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync
     /** @see ICommonClientService#listDataSetTypes() */
     public void listDataSetTypes(AsyncCallback<List<DataSetType>> callback);
 
-    /** @see ICommonClientService#uploadDataSets(List, DataSetUploadParameters) */
-    public void uploadDataSets(List<String> dataSetCodes, DataSetUploadParameters uploadParameters,
-            AsyncCallback<String> callback);
+    /**
+     * @see ICommonClientService#uploadDataSets(DisplayedOrSelectedDatasetCriteria,
+     *      DataSetUploadParameters)
+     */
+    public void uploadDataSets(DisplayedOrSelectedDatasetCriteria criteria,
+            DataSetUploadParameters uploadParameters, AsyncCallback<String> callback);
 
     /** @see ICommonClientService#getLastModificationState() */
     public void getLastModificationState(AsyncCallback<LastModificationState> asyncCallback);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java
index fe36349b850..bc48970d3a7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java
@@ -16,7 +16,6 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
@@ -53,6 +52,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.DataSetUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedActionWithResult;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataSetUploadParameters;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedDatasetCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IColumnDefinition;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
@@ -170,19 +170,23 @@ public abstract class AbstractExternalDataGrid
             parameters.setComment(commentField.getValue());
             parameters.setUserID(userField.getValue());
             parameters.setPassword(passwordField.getValue());
-            viewContext.getCommonService().uploadDataSets(getDataSetCodes(data), parameters,
+
+            // TODO 2009-07-14, Piotr Buczek: get uploadSelected value from a radioButton
+            final boolean uploadSelected = true;
+            final SelectedAndDisplayedItems selectedAndDisplayedItems =
+                    getSelectedAndDisplayedItemsAction().execute();
+            final DisplayedOrSelectedDatasetCriteria uploadCriteria =
+                    createCriteria(selectedAndDisplayedItems, uploadSelected);
+
+            viewContext.getCommonService().uploadDataSets(uploadCriteria, parameters,
                     new UploadCallback(viewContext));
         }
-    }
 
-    private List<String> getDataSetCodes(List<ExternalData> dataSets)
-    {
-        List<String> dataSetCodes = new ArrayList<String>();
-        for (ExternalData externalData : dataSets)
+        private DisplayedOrSelectedDatasetCriteria createCriteria(
+                SelectedAndDisplayedItems selectedAndDisplayedItems, boolean uploadSelected)
         {
-            dataSetCodes.add(externalData.getCode());
+            return selectedAndDisplayedItems.createCriteria(uploadSelected);
         }
-        return dataSetCodes;
     }
 
     public static final String SHOW_DETAILS_BUTTON_ID_SUFFIX = "_show-details-button";
@@ -278,6 +282,18 @@ public abstract class AbstractExternalDataGrid
         {
             return selectedItems;
         }
+
+        public DisplayedOrSelectedDatasetCriteria createCriteria(boolean selected)
+        {
+            if (selected)
+            {
+                return DisplayedOrSelectedDatasetCriteria.createSelectedItems(getSelectedItems());
+            } else
+            {
+                return DisplayedOrSelectedDatasetCriteria
+                        .createDisplayedItems(getDisplayedItemsConfig());
+            }
+        }
     }
 
     private final IDelegatedActionWithResult<SelectedAndDisplayedItems> getSelectedAndDisplayedItemsAction()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetComputeMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetComputeMenu.java
index 6bd6ad10ff0..deb7411bf1d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetComputeMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetComputeMenu.java
@@ -180,15 +180,7 @@ public class DataSetComputeMenu extends TextToolItem
     private static DisplayedOrSelectedDatasetCriteria createCriteria(
             SelectedAndDisplayedItems selectedAndDisplayedItems, boolean computeOnSelected)
     {
-        if (computeOnSelected)
-        {
-            return DisplayedOrSelectedDatasetCriteria
-                    .createSelectedItems(extractCodes(selectedAndDisplayedItems.getSelectedItems()));
-        } else
-        {
-            return DisplayedOrSelectedDatasetCriteria
-                    .createDisplayedItems(selectedAndDisplayedItems.getDisplayedItemsConfig());
-        }
+        return selectedAndDisplayedItems.createCriteria(computeOnSelected);
     }
 
     public final class ProcessingDisplayCallback extends AbstractAsyncCallback<Void>
@@ -234,16 +226,6 @@ public class DataSetComputeMenu extends TextToolItem
         }
     }
 
-    private static List<String> extractCodes(List<ExternalData> selectedItems)
-    {
-        List<String> codes = new ArrayList<String>();
-        for (ExternalData dataset : selectedItems)
-        {
-            codes.add(dataset.getCode());
-        }
-        return codes;
-    }
-
     private class ComputationData
     {
         private final DataStoreServiceKind pluginTaskKind;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DisplayedOrSelectedDatasetCriteria.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DisplayedOrSelectedDatasetCriteria.java
index 5e363a85d42..396f3782a28 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DisplayedOrSelectedDatasetCriteria.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DisplayedOrSelectedDatasetCriteria.java
@@ -40,9 +40,10 @@ public final class DisplayedOrSelectedDatasetCriteria implements IsSerializable
     }
 
     public static DisplayedOrSelectedDatasetCriteria createSelectedItems(
-            List<String> selectedDatasetCodes)
+            List<ExternalData> selectedDatasets)
     {
-        return new DisplayedOrSelectedDatasetCriteria(null, selectedDatasetCodes);
+        return new DisplayedOrSelectedDatasetCriteria(null, ExternalData
+                .extractCodes(selectedDatasets));
     }
 
     private DisplayedOrSelectedDatasetCriteria(
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalData.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalData.java
index 21ca6e1041a..54601aca8da 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalData.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalData.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.dto;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -348,4 +349,14 @@ public class ExternalData extends CodeWithRegistration<ExternalData> implements
     {
         return SourceType.create(isDerived()).name();
     }
+
+    public static List<String> extractCodes(List<ExternalData> datasets)
+    {
+        List<String> codes = new ArrayList<String>();
+        for (ExternalData dataset : datasets)
+        {
+            codes.add(dataset.getCode());
+        }
+        return codes;
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
index 167554f8f33..4ce2295f4aa 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
@@ -1321,7 +1321,23 @@ public final class CommonClientService extends AbstractClientService implements
         }
     }
 
-    public String uploadDataSets(List<String> dataSetCodes, DataSetUploadParameters uploadParameters)
+    public String uploadDataSets(
+            DisplayedOrSelectedDatasetCriteria displayedOrSelectedDatasetCriteria,
+            DataSetUploadParameters uploadParameters)
+            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
+    {
+        try
+        {
+            List<String> datasetCodes = extractDatasetCodes(displayedOrSelectedDatasetCriteria);
+            return uploadDataSets(datasetCodes, uploadParameters);
+        } catch (final UserFailureException e)
+        {
+            throw UserFailureExceptionTranslator.translate(e);
+        }
+    }
+
+    private String uploadDataSets(List<String> dataSetCodes,
+            DataSetUploadParameters uploadParameters)
             throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
         try
@@ -1751,9 +1767,15 @@ public final class CommonClientService extends AbstractClientService implements
         }
     }
 
+    private List<String> extractDatasetCodes(
+            DisplayedOrSelectedDatasetCriteria displayedOrSelectedDatasetCriteria)
+    {
+        return extractDatasetCodes(displayedOrSelectedDatasetCriteria, null);
+    }
+
     private List<String> extractDatasetCodes(
             DisplayedOrSelectedDatasetCriteria displayedOrSelectedDatasetCriteria,
-            DatastoreServiceDescription serviceDescription)
+            DatastoreServiceDescription serviceDescriptionOrNull)
     {
         if (displayedOrSelectedDatasetCriteria.tryGetSelectedItems() != null)
         {
@@ -1763,27 +1785,42 @@ public final class CommonClientService extends AbstractClientService implements
             TableExportCriteria<ExternalData> displayedItemsCriteria =
                     displayedOrSelectedDatasetCriteria.tryGetDisplayedItems();
             assert displayedItemsCriteria != null : "displayedItemsCriteria is null";
-            final List<ExternalData> datasets = fetchCachedEntities(displayedItemsCriteria);
-            return filterDatasets(datasets, serviceDescription.getDatasetTypeCodes());
+            List<ExternalData> datasets = fetchCachedEntities(displayedItemsCriteria);
+            if (serviceDescriptionOrNull != null)
+            {
+                datasets = filterDatasets(datasets, serviceDescriptionOrNull.getDatasetTypeCodes());
+            }
+            return ExternalData.extractCodes(datasets);
         }
     }
 
-    // returns codes of those datasets which have type code belonging to the specified set
-    private static List<String> filterDatasets(List<ExternalData> datasets,
+    // returns datasets which have type code belonging to the specified set
+    private static List<ExternalData> filterDatasets(List<ExternalData> datasets,
             String[] datasetTypeCodes)
     {
         Set<String> datasetTypeCodesMap = new HashSet<String>(Arrays.asList(datasetTypeCodes));
-        List<String> datasetCodes = new ArrayList<String>();
+        List<ExternalData> result = new ArrayList<ExternalData>();
         for (ExternalData dataset : datasets)
         {
             if (datasetTypeCodesMap.contains(dataset.getDataSetType().getCode()))
             {
-                datasetCodes.add(dataset.getCode());
+                result.add(dataset);
             }
         }
-        return datasetCodes;
+        return result;
     }
 
+    //
+    // private static List<String> getDatasetCodes(List<ExternalData> datasets)
+    // {
+    // List<String> datasetCodes = new ArrayList<String>();
+    // for (ExternalData externalData : datasets)
+    // {
+    // datasetCodes.add(externalData.getCode());
+    // }
+    // return datasetCodes;
+    // }
+
     public void processDatasets(DatastoreServiceDescription serviceDescription,
             DisplayedOrSelectedDatasetCriteria displayedOrSelectedDatasetCriteria)
     {
-- 
GitLab