From 4a0650da5cc60a7c06a5956db7280288b549bf11 Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Tue, 2 Apr 2024 10:17:06 +0200
Subject: [PATCH] SSDM-13578 : 2PT : Database and V3 Implementation - js facade

---
 api-openbis-typescript/build.gradle           |  6 ++--
 .../dto/OpenBISJavaScriptAFSFacade.java       |  5 +--
 .../openbis/generic/typescript/type/Blob.java |  6 ++++
 .../openbis-v3-api-test/html/test/test-afs.ts | 31 ++++++++++++++++---
 4 files changed, 39 insertions(+), 9 deletions(-)
 create mode 100644 api-openbis-typescript/source/java/ch/ethz/sis/openbis/generic/typescript/type/Blob.java

diff --git a/api-openbis-typescript/build.gradle b/api-openbis-typescript/build.gradle
index 05dbf637d69..1f7536e6933 100644
--- a/api-openbis-typescript/build.gradle
+++ b/api-openbis-typescript/build.gradle
@@ -27,7 +27,8 @@ generateTypeScript {
     classPatterns = [
             'ch.ethz.sis.openbis.generic.asapi.v3.dto.**',
             'ch.ethz.sis.openbis.generic.dssapi.v3.dto.**',
-            'ch.ethz.sis.openbis.generic.typescript.dto.**'
+            'ch.ethz.sis.openbis.generic.typescript.dto.**',
+            'ch.ethz.sis.openbis.generic.typescript.type.**'
     ]
     excludeClassPatterns = [
             "ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi",
@@ -49,7 +50,8 @@ generateTypeScript {
             "ch.ethz.sis.openbis.generic.asapi.v3.dto.service.execute.AbstractExecutionOptionsWithParameters:as_dto_service_execute_AbstractExecutionOptionsWithParameters",
             "ch.ethz.sis.openbis.generic.dssapi.v3.dto.service.execute.AbstractExecutionOptionsWithParameters:dss_dto_service_execute_AbstractExecutionOptionsWithParameters",
             "ch.ethz.sis.openbis.generic.asapi.v3.dto.common.operation.IOperationResult:as_dto_common_operation_IOperationResult",
-            "ch.ethz.sis.openbis.generic.dssapi.v3.dto.common.operation.IOperationResult:dss_dto_common_operation_IOperationResult"
+            "ch.ethz.sis.openbis.generic.dssapi.v3.dto.common.operation.IOperationResult:dss_dto_common_operation_IOperationResult",
+            "ch.ethz.sis.openbis.generic.typescript.type.Blob:Blob"
     ]
     extensionsWithConfiguration = [
             new ConfiguredExtension(className: 'ch.ethz.sis.openbis.generic.typescript.OpenBISExtension')
diff --git a/api-openbis-typescript/source/java/ch/ethz/sis/openbis/generic/typescript/dto/OpenBISJavaScriptAFSFacade.java b/api-openbis-typescript/source/java/ch/ethz/sis/openbis/generic/typescript/dto/OpenBISJavaScriptAFSFacade.java
index 4cde6e8b222..a41e938d03f 100644
--- a/api-openbis-typescript/source/java/ch/ethz/sis/openbis/generic/typescript/dto/OpenBISJavaScriptAFSFacade.java
+++ b/api-openbis-typescript/source/java/ch/ethz/sis/openbis/generic/typescript/dto/OpenBISJavaScriptAFSFacade.java
@@ -5,6 +5,7 @@ import java.util.List;
 
 import ch.ethz.sis.openbis.generic.typescript.TypeScriptMethod;
 import ch.ethz.sis.openbis.generic.typescript.TypeScriptObject;
+import ch.ethz.sis.openbis.generic.typescript.type.Blob;
 
 @TypeScriptObject
 public class OpenBISJavaScriptAFSFacade
@@ -21,13 +22,13 @@ public class OpenBISJavaScriptAFSFacade
     }
 
     @TypeScriptMethod(sessionToken = false)
-    public byte[] read(final String owner, final String source, final long offset, final int limit)
+    public Blob read(final String owner, final String source, final long offset, final int limit)
     {
         return null;
     }
 
     @TypeScriptMethod(sessionToken = false)
-    public boolean write(final String owner, final String source, final long offset, final byte[] data)
+    public boolean write(final String owner, final String source, final long offset, final String data)
     {
         return false;
     }
diff --git a/api-openbis-typescript/source/java/ch/ethz/sis/openbis/generic/typescript/type/Blob.java b/api-openbis-typescript/source/java/ch/ethz/sis/openbis/generic/typescript/type/Blob.java
new file mode 100644
index 00000000000..d662d6cb78c
--- /dev/null
+++ b/api-openbis-typescript/source/java/ch/ethz/sis/openbis/generic/typescript/type/Blob.java
@@ -0,0 +1,6 @@
+package ch.ethz.sis.openbis.generic.typescript.type;
+
+public class Blob
+{
+
+}
diff --git a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-afs.ts b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-afs.ts
index 7d8f02ecb69..6998395b88f 100644
--- a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-afs.ts
+++ b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-afs.ts
@@ -26,12 +26,12 @@ exports.default = new Promise((resolve) => {
 
                     await c.login(facade)
 
-                    await facade.getAfsServerFacade().write("test-owner", "test-file-1", 0, "test-content-1")
-                    await facade.getAfsServerFacade().write("test-owner/test-folder-1", "test-file-2", 0, "test-content-2")
-                    await facade.getAfsServerFacade().write("test-owner/test-folder-1", "test-file-3", 0, "test-content-3")
-                    await facade.getAfsServerFacade().write("test-owner/test-folder-2", "test-file-4", 0, "test-content-4")
+                    await facade.getAfsServerFacade().write("test-list", "test-file-1", 0, "test-content-1")
+                    await facade.getAfsServerFacade().write("test-list/test-folder-1", "test-file-2", 0, "test-content-2")
+                    await facade.getAfsServerFacade().write("test-list/test-folder-1", "test-file-3", 0, "test-content-3")
+                    await facade.getAfsServerFacade().write("test-list/test-folder-2", "test-file-4", 0, "test-content-4")
 
-                    var list = await facade.getAfsServerFacade().list("test-owner", "", true)
+                    var list = await facade.getAfsServerFacade().list("test-list", "", true)
 
                     list.sort((file1, file2) => {
                         return file1.getPath().localeCompare(file2.getPath())
@@ -52,6 +52,27 @@ exports.default = new Promise((resolve) => {
                     c.finish()
                 }
             })
+
+            QUnit.test("read()", async function (assert) {
+                try {
+                    var c = new common(assert, dtos)
+                    c.start()
+
+                    await c.login(facade)
+
+                    const originalContent = "test-content"
+                    await facade.getAfsServerFacade().write("test-read", "test-file", 0, originalContent)
+
+                    var readContent = await facade.getAfsServerFacade().read("test-read", "test-file", 0, originalContent.length)
+                    c.assertEqual(await readContent.text(), originalContent)
+
+                    c.finish()
+                } catch (error) {
+                    c.fail(error)
+                    c.finish()
+                }
+            })
+
         }
 
         resolve(function () {
-- 
GitLab