From 1a0ebcbdab8d1688cdce5aea30bddee5a66bf05c Mon Sep 17 00:00:00 2001
From: vkovtun <viktor.kovtun@id.ethz.ch>
Date: Thu, 12 Jan 2023 15:58:22 +0100
Subject: [PATCH] SSDM-13253 In progress of implementing registering the files
 from the session workspace.

---
 .../etlserver/api/v1/PutDataSetService.java     | 17 ++++++++++++++++-
 .../ch/ethz/sis/openbis/generic/OpenBISAPI.java | 17 ++++++++++++-----
 2 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetService.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetService.java
index d3a01aa9ede..c4f42f17cb6 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetService.java
@@ -59,6 +59,7 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.validation.ValidationS
 import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
 import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DssPropertyParametersUtil;
 import ch.systemsx.cisd.openbis.dss.generic.shared.utils.SegmentedStoreUtils;
+import ch.systemsx.cisd.openbis.dss.generic.shared.utils.SessionWorkspaceUtil;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CustomImportFile;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance;
 
@@ -96,6 +97,9 @@ public class PutDataSetService implements IPutDataSetService
 
     private DatabaseInstance homeDatabaseInstance;
 
+    private File sessionWorkspace = SessionWorkspaceUtil.getSessionWorkspace(
+            DssPropertyParametersUtil.loadServiceProperties());
+
     /**
      * The designated constructor.
      * 
@@ -286,16 +290,27 @@ public class PutDataSetService implements IPutDataSetService
         String dataSetType = newDataSet.tryDataSetType();
         ITopLevelDataSetRegistrator registrator = registratorMap.getRegistratorForType(dataSetType);
 
+        // TODO: here look in the session workspace.
         File sessionUploadDir = new File(getTemporaryIncomingRoot(dataSetType), sessionToken);
         File uploadIdDir = new File(sessionUploadDir, uploadId);
+        System.out.println("uploadIdDir = " + uploadIdDir);
+
         File multipleFilesUploadDir = new File(uploadIdDir, MULTIPLE_FILES_UPLOAD_DIR);
+        System.out.println("multipleFilesUploadDir = " + multipleFilesUploadDir);
+
+        File sessionWorkspaceUploadDir = new File(sessionWorkspace, sessionToken);
+        System.out.println("multipleFilesUploadDir = " + multipleFilesUploadDir);
 
         File[] uploadedFiles = null;
         File dataSet = null;
 
-        if (multipleFilesUploadDir.exists() && multipleFilesUploadDir.isDirectory())
+        if (multipleFilesUploadDir.isDirectory())
         {
             uploadedFiles = multipleFilesUploadDir.listFiles();
+        } else if (sessionWorkspaceUploadDir.isDirectory())
+        {
+            // TODO: use atomic move in this case.
+            uploadedFiles = sessionWorkspaceUploadDir.listFiles();
         }
 
         if (uploadedFiles == null || uploadedFiles.length == 0)
diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/OpenBISAPI.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/OpenBISAPI.java
index 42aa29922ad..6e9d50baf69 100644
--- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/OpenBISAPI.java
+++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/OpenBISAPI.java
@@ -65,9 +65,9 @@ public class OpenBISAPI {
     {
         this.timeout = timeout;
         this.asURL = asURL;
-        asFacade = HttpInvokerUtils.createServiceStub(IApplicationServerApi.class, this.asURL, timeout);
+        asFacade = HttpInvokerUtils.createServiceStub(IApplicationServerApi.class, this.asURL + IApplicationServerApi.SERVICE_URL, timeout);
         this.dssURL = dssURL;
-        dssFacade = HttpInvokerUtils.createServiceStub(IDataStoreServerApi.class, this.dssURL, timeout);
+        dssFacade = HttpInvokerUtils.createServiceStub(IDataStoreServerApi.class, this.dssURL + IDataStoreServerApi.SERVICE_URL, timeout);
     }
 
     public String getSessionToken()
@@ -80,6 +80,16 @@ public class OpenBISAPI {
         this.sessionToken = sessionToken;
     }
 
+    public String login(String userId, String password) {
+        String sessionToken = asFacade.login(userId, password);
+        setSessionToken(sessionToken);
+        return sessionToken;
+    }
+
+    public void logout() {
+        asFacade.logout(sessionToken);
+    }
+
     private List<File> contentOf(final File item)
     {
         if (item.getName().startsWith("."))
@@ -136,8 +146,6 @@ public class OpenBISAPI {
 
     }
 
-
-
     /**
      * Upload file or folder to the DSS SessionWorkspaceFileUploadServlet and return the ID to be used by createUploadedDataSet
      * This method hides the complexities of uploading a folder with many files and does the uploads in chunks.
@@ -230,7 +238,6 @@ public class OpenBISAPI {
 
     public DataSetPermId createUploadedDataSet(final UploadedDataSetCreation newDataSet)
     {
-        // TODO: add to the facade the possibility to create a dataset.
         return dssFacade.createUploadedDataSet(sessionToken, newDataSet);
     }
 
-- 
GitLab