From e77737f5d37ff65f714c50f77e33e1149b86af7a Mon Sep 17 00:00:00 2001
From: Sonia Zorba <sonia.zorba@inaf.it>
Date: Wed, 28 Jul 2021 15:27:57 +0200
Subject: [PATCH] Set transfer target element as string instead of list of
 strings again. Used view with include param instead of custom protocol for
 async recall operations

---
 .../it/inaf/oats/vospace/FileServiceClient.java |  7 +------
 .../java/it/inaf/oats/vospace/JobService.java   |  7 ++-----
 .../java/it/inaf/oats/vospace/MoveService.java  |  7 +------
 .../inaf/oats/vospace/TransferController.java   |  2 +-
 .../java/it/inaf/oats/vospace/UriService.java   |  9 ++-------
 .../oats/vospace/AsyncTransferServiceTest.java  |  5 ++---
 .../oats/vospace/FileServiceClientTest.java     |  9 ++++-----
 .../it/inaf/oats/vospace/JobServiceTest.java    |  3 +--
 .../it/inaf/oats/vospace/MoveServiceTest.java   |  3 +--
 .../oats/vospace/TransferControllerTest.java    |  3 +--
 .../it/inaf/oats/vospace/UriServiceTest.java    | 17 ++++++++---------
 .../oats/vospace/persistence/JobDAOTest.java    |  3 +--
 12 files changed, 25 insertions(+), 50 deletions(-)

diff --git a/src/main/java/it/inaf/oats/vospace/FileServiceClient.java b/src/main/java/it/inaf/oats/vospace/FileServiceClient.java
index ed3bf41..83a8f1b 100644
--- a/src/main/java/it/inaf/oats/vospace/FileServiceClient.java
+++ b/src/main/java/it/inaf/oats/vospace/FileServiceClient.java
@@ -41,12 +41,7 @@ public class FileServiceClient {
 
     public String startArchiveJob(Transfer transfer, String jobId) {
 
-        if (transfer.getTarget().size() != 1) {
-            throw new IllegalArgumentException("Target size is " + transfer.getTarget().size());
-        }
-
-        String target = transfer.getTarget().get(0)
-                .substring("vos://".length() + authority.length());
+        String target = transfer.getTarget().substring("vos://".length() + authority.length());
 
         String viewUri = transfer.getView().getUri();
 
diff --git a/src/main/java/it/inaf/oats/vospace/JobService.java b/src/main/java/it/inaf/oats/vospace/JobService.java
index 8d77a2b..cba63cd 100644
--- a/src/main/java/it/inaf/oats/vospace/JobService.java
+++ b/src/main/java/it/inaf/oats/vospace/JobService.java
@@ -140,10 +140,7 @@ public class JobService {
         for (Protocol protocol : transfer.getProtocols()) {
             switch (protocol.getUri()) {
                 case "ivo://ivoa.net/vospace/core#httpget":
-                    if (transfer.getTarget().size() != 1) {
-                        throw new InvalidArgumentException("Invalid target size for pullToVoSpace: " + transfer.getTarget().size());
-                    }
-                    String nodeUri = transfer.getTarget().get(0);
+                    String nodeUri = transfer.getTarget();
                     String contentUri = protocol.getEndpoint();
                     uriService.setNodeRemoteLocation(nodeUri, contentUri);
                     Transfer negotiatedTransfer = uriService.getNegotiatedTransfer(job, transfer);
@@ -249,7 +246,7 @@ public class JobService {
             case pushToVoSpace:
                 ResultReference dataNodeRef = new ResultReference();
                 dataNodeRef.setId("dataNode");
-                dataNodeRef.setHref(transfer.getTarget().get(0));
+                dataNodeRef.setHref(transfer.getTarget());
                 jobSummary.getResults().add(dataNodeRef);
                 break;
         }
diff --git a/src/main/java/it/inaf/oats/vospace/MoveService.java b/src/main/java/it/inaf/oats/vospace/MoveService.java
index 6fba8eb..8968386 100644
--- a/src/main/java/it/inaf/oats/vospace/MoveService.java
+++ b/src/main/java/it/inaf/oats/vospace/MoveService.java
@@ -8,7 +8,6 @@ package it.inaf.oats.vospace;
 import it.inaf.ia2.aa.data.User;
 import it.inaf.oats.vospace.datamodel.NodeUtils;
 import it.inaf.oats.vospace.exception.InternalFaultException;
-import it.inaf.oats.vospace.exception.InvalidArgumentException;
 import it.inaf.oats.vospace.exception.NodeBusyException;
 import it.inaf.oats.vospace.exception.NodeNotFoundException;
 import it.inaf.oats.vospace.exception.PermissionDeniedException;
@@ -42,12 +41,8 @@ public class MoveService {
     @Transactional(rollbackFor = { Exception.class }, isolation = Isolation.REPEATABLE_READ)
     public void processMoveJob(Transfer transfer, User user) {
 
-        if (transfer.getTarget().size() != 1) {
-            throw new InvalidArgumentException("Invalid target size for moveNode: " + transfer.getTarget().size());
-        }
-
         // Get Source Vos Path
-        String sourcePath = URIUtils.returnVosPathFromNodeURI(transfer.getTarget().get(0), authority);
+        String sourcePath = URIUtils.returnVosPathFromNodeURI(transfer.getTarget(), authority);
 
         // Get Destination Vos Path (it's in transfer direction)
         String destinationPath = URIUtils.returnVosPathFromNodeURI(transfer.getDirection(), authority);
diff --git a/src/main/java/it/inaf/oats/vospace/TransferController.java b/src/main/java/it/inaf/oats/vospace/TransferController.java
index c7c2d51..52d0bed 100644
--- a/src/main/java/it/inaf/oats/vospace/TransferController.java
+++ b/src/main/java/it/inaf/oats/vospace/TransferController.java
@@ -81,7 +81,7 @@ public class TransferController {
             @RequestParam("DIRECTION") String direction, @RequestParam("PROTOCOL") String protocolUris, User principal) {
 
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList(target));
+        transfer.setTarget(target);
         transfer.setDirection(direction);
 
         // CADC client sends multiple protocol parameters and Spring join them using a comma separator.
diff --git a/src/main/java/it/inaf/oats/vospace/UriService.java b/src/main/java/it/inaf/oats/vospace/UriService.java
index 06ed2b4..13f755d 100644
--- a/src/main/java/it/inaf/oats/vospace/UriService.java
+++ b/src/main/java/it/inaf/oats/vospace/UriService.java
@@ -144,13 +144,8 @@ public class UriService {
     }
 
     private String getEndpoint(JobSummary job, Transfer transfer) {
-        boolean isArchiveView = isArchiveView(transfer);
 
-        if (!isArchiveView && transfer.getTarget().size() != 1) {
-            throw new InvalidArgumentException("Invalid target size: " + transfer.getTarget().size());
-        }
-
-        String relativePath = URIUtils.returnVosPathFromNodeURI(transfer.getTarget().get(0), authority);
+        String relativePath = URIUtils.returnVosPathFromNodeURI(transfer.getTarget(), authority);
 
         User user = (User) servletRequest.getUserPrincipal();
         String creator = user.getName();
@@ -183,7 +178,7 @@ public class UriService {
             throw new NodeBusyException(relativePath);
         }
 
-        if (isArchiveView) {
+        if (isArchiveView(transfer)) {
             return fileServiceClient.startArchiveJob(transfer, job.getJobId());
         }
 
diff --git a/src/test/java/it/inaf/oats/vospace/AsyncTransferServiceTest.java b/src/test/java/it/inaf/oats/vospace/AsyncTransferServiceTest.java
index b426531..75dd4e4 100644
--- a/src/test/java/it/inaf/oats/vospace/AsyncTransferServiceTest.java
+++ b/src/test/java/it/inaf/oats/vospace/AsyncTransferServiceTest.java
@@ -7,7 +7,6 @@ package it.inaf.oats.vospace;
 
 import it.inaf.oats.vospace.datamodel.Views;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import net.ivoa.xml.uws.v1.JobSummary;
 import net.ivoa.xml.vospace.v2.Param;
@@ -28,7 +27,7 @@ import redis.clients.jedis.Jedis;
 @ExtendWith(MockitoExtension.class)
 public class AsyncTransferServiceTest {
 
-    private static final String JSON_JOB = "{\"jobId\":\"job_id\",\"runId\":null,\"ownerId\":null,\"phase\":null,\"quote\":null,\"creationTime\":null,\"startTime\":null,\"endTime\":null,\"executionDuration\":0,\"destruction\":null,\"parameters\":null,\"results\":[],\"errorSummary\":null,\"jobInfo\":{\"transfer\":{\"target\":[\"vos://example.com!vospace/my-node\"],\"direction\":\"pullToVoSpace\",\"view\":{\"param\":[{\"value\":\"file1.txt\",\"uri\":\"ivo://ia2.inaf.it/vospace/views#async-recall/include\"},{\"value\":\"file2.txt\",\"uri\":\"ivo://ia2.inaf.it/vospace/views#async-recall/include\"}],\"uri\":\"ivo://ia2.inaf.it/vospace/views#async-recall\",\"original\":true},\"protocols\":[],\"keepBytes\":false,\"version\":null,\"param\":[]}},\"version\":null}";
+    private static final String JSON_JOB = "{\"jobId\":\"job_id\",\"runId\":null,\"ownerId\":null,\"phase\":null,\"quote\":null,\"creationTime\":null,\"startTime\":null,\"endTime\":null,\"executionDuration\":0,\"destruction\":null,\"parameters\":null,\"results\":[],\"errorSummary\":null,\"jobInfo\":{\"transfer\":{\"target\":\"vos://example.com!vospace/my-node\",\"direction\":\"pullToVoSpace\",\"view\":{\"param\":[{\"value\":\"file1.txt\",\"uri\":\"ivo://ia2.inaf.it/vospace/views#async-recall/include\"},{\"value\":\"file2.txt\",\"uri\":\"ivo://ia2.inaf.it/vospace/views#async-recall/include\"}],\"uri\":\"ivo://ia2.inaf.it/vospace/views#async-recall\",\"original\":true},\"protocols\":[],\"keepBytes\":false,\"version\":null,\"param\":[]}},\"version\":null}";
 
     @Test
     public void testRedisRpc() {
@@ -64,7 +63,7 @@ public class AsyncTransferServiceTest {
         Transfer transfer = new Transfer();
         transfer.setDirection("pullToVoSpace");
 
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/my-node"));
+        transfer.setTarget("vos://example.com!vospace/my-node");
 
         View view = new View();
         view.setUri(Views.ASYNC_RECALL_VIEW_URI);
diff --git a/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java b/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java
index c5c1018..b57b7d1 100644
--- a/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java
+++ b/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java
@@ -14,7 +14,6 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.UncheckedIOException;
 import java.net.URI;
-import java.util.Arrays;
 import javax.servlet.http.HttpServletRequest;
 import net.ivoa.xml.vospace.v2.Param;
 import net.ivoa.xml.vospace.v2.Transfer;
@@ -89,7 +88,7 @@ public class FileServiceClientTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydir"));
+        transfer.setTarget("vos://example.com!vospace/mydir");
         View view = new View();
         view.setUri(Views.ZIP_VIEW_URI);
         transfer.setView(view);
@@ -105,7 +104,7 @@ public class FileServiceClientTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/parent_dir"));
+        transfer.setTarget("vos://example.com!vospace/parent_dir");
         View view = new View();
         view.setUri(Views.TAR_VIEW_URI);
         transfer.setView(view);
@@ -123,7 +122,7 @@ public class FileServiceClientTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/parent_dir"));
+        transfer.setTarget("vos://example.com!vospace/parent_dir");
         View view = new View();
         view.setUri(Views.TAR_VIEW_URI);
         transfer.setView(view);
@@ -140,7 +139,7 @@ public class FileServiceClientTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/parent_dir"));
+        transfer.setTarget("vos://example.com!vospace/parent_dir");
         View view = new View();
         view.setUri(viewUri);
         transfer.setView(view);
diff --git a/src/test/java/it/inaf/oats/vospace/JobServiceTest.java b/src/test/java/it/inaf/oats/vospace/JobServiceTest.java
index 5f634b3..ee017ed 100644
--- a/src/test/java/it/inaf/oats/vospace/JobServiceTest.java
+++ b/src/test/java/it/inaf/oats/vospace/JobServiceTest.java
@@ -9,7 +9,6 @@ import it.inaf.oats.vospace.datamodel.Views;
 import it.inaf.oats.vospace.exception.NodeBusyException;
 import it.inaf.oats.vospace.persistence.JobDAO;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import net.ivoa.xml.uws.v1.ExecutionPhase;
@@ -220,7 +219,7 @@ public class JobServiceTest {
 
     private Transfer getPullFromVoSpaceHttpTransfer() {
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/myfile"));
+        transfer.setTarget("vos://example.com!vospace/myfile");
         transfer.setDirection("pullFromVoSpace");
         Protocol protocol = new Protocol();
         protocol.setUri("ivo://ivoa.net/vospace/core#httpget");
diff --git a/src/test/java/it/inaf/oats/vospace/MoveServiceTest.java b/src/test/java/it/inaf/oats/vospace/MoveServiceTest.java
index 48d05de..b632a65 100644
--- a/src/test/java/it/inaf/oats/vospace/MoveServiceTest.java
+++ b/src/test/java/it/inaf/oats/vospace/MoveServiceTest.java
@@ -11,7 +11,6 @@ import it.inaf.oats.vospace.exception.NodeNotFoundException;
 import it.inaf.oats.vospace.exception.PermissionDeniedException;
 import it.inaf.oats.vospace.persistence.DataSourceConfigSingleton;
 import it.inaf.oats.vospace.persistence.NodeDAO;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
 import net.ivoa.xml.vospace.v2.Transfer;
@@ -212,7 +211,7 @@ public class MoveServiceTest {
 
     private Transfer getTransfer(String vosTarget, String vosDestination) {
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://" + this.authority + vosTarget));
+        transfer.setTarget("vos://" + this.authority + vosTarget);
         transfer.setDirection("vos://" + this.authority + vosDestination);
         return transfer;
     }
diff --git a/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java b/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java
index 2b6fa1f..49e7544 100644
--- a/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java
+++ b/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java
@@ -22,7 +22,6 @@ import java.nio.charset.StandardCharsets;
 import java.sql.Timestamp;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Optional;
 import net.ivoa.xml.uws.v1.ExecutionPhase;
 import net.ivoa.xml.uws.v1.JobSummary;
@@ -458,7 +457,7 @@ public class TransferControllerTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mynode"));
+        transfer.setTarget("vos://example.com!vospace/mynode");
         Protocol protocol = new Protocol();
         protocol.setUri("ivo://ivoa.net/vospace/core#httpget");
         transfer.getProtocols().add(protocol);
diff --git a/src/test/java/it/inaf/oats/vospace/UriServiceTest.java b/src/test/java/it/inaf/oats/vospace/UriServiceTest.java
index 4a59ad7..c0a911c 100644
--- a/src/test/java/it/inaf/oats/vospace/UriServiceTest.java
+++ b/src/test/java/it/inaf/oats/vospace/UriServiceTest.java
@@ -17,7 +17,6 @@ import it.inaf.oats.vospace.persistence.LocationDAO;
 import it.inaf.oats.vospace.persistence.NodeDAO;
 import it.inaf.oats.vospace.persistence.model.Location;
 import it.inaf.oats.vospace.persistence.model.LocationType;
-import java.util.Arrays;
 import java.util.Optional;
 import javax.servlet.http.HttpServletRequest;
 import net.ivoa.xml.uws.v1.JobSummary;
@@ -298,7 +297,7 @@ public class UriServiceTest {
         mockPublicNode();
 
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydata1"));
+        transfer.setTarget("vos://example.com!vospace/mydata1");
         transfer.setDirection("pullFromVoSpace");
 
         Protocol protocol1 = new Protocol();
@@ -338,7 +337,7 @@ public class UriServiceTest {
         when(servletRequest.getUserPrincipal()).thenReturn(user);
 
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydata1"));
+        transfer.setTarget("vos://example.com!vospace/mydata1");
         transfer.setDirection("pushToVoSpace");
 
         Protocol protocol1 = new Protocol();
@@ -367,7 +366,7 @@ public class UriServiceTest {
     public void testSetSyncTransferEndpointsUnsupportedProtocol() {
 
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydata1"));
+        transfer.setTarget("vos://example.com!vospace/mydata1");
         transfer.setDirection("pullFromVoSpace");
 
         Protocol protocol = new Protocol();
@@ -390,7 +389,7 @@ public class UriServiceTest {
     public void testSetSyncTransferEndpointsNoProtocols() {
 
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydata1"));
+        transfer.setTarget("vos://example.com!vospace/mydata1");
         transfer.setDirection("pullFromVoSpace");
 
         JobSummary job = new JobSummary();
@@ -420,7 +419,7 @@ public class UriServiceTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/file1"));
+        transfer.setTarget("vos://example.com!vospace/file1");
 
         JobSummary job = new JobSummary();
         JobSummary.JobInfo jobInfo = new JobSummary.JobInfo();
@@ -440,7 +439,7 @@ public class UriServiceTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/parent_dir"));
+        transfer.setTarget("vos://example.com!vospace/parent_dir");
         Protocol protocol = new Protocol();
         protocol.setUri("ivo://ivoa.net/vospace/core#httpget");
         transfer.getProtocols().add(protocol);
@@ -492,7 +491,7 @@ public class UriServiceTest {
     private JobSummary getJob() {
 
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydata1"));
+        transfer.setTarget("vos://example.com!vospace/mydata1");
         transfer.setDirection(JobService.JobDirection.pullFromVoSpace.toString());
         Protocol protocol = new Protocol();
         protocol.setUri("ivo://ivoa.net/vospace/core#httpget");
@@ -511,7 +510,7 @@ public class UriServiceTest {
 
     private JobSummary getPushToVoSpaceJob() {
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydata1/mydata2"));
+        transfer.setTarget("vos://example.com!vospace/mydata1/mydata2");
         transfer.setDirection(JobService.JobDirection.pushToVoSpace.toString());
         Protocol protocol = new Protocol();
         protocol.setUri("ivo://ivoa.net/vospace/core#httpput");
diff --git a/src/test/java/it/inaf/oats/vospace/persistence/JobDAOTest.java b/src/test/java/it/inaf/oats/vospace/persistence/JobDAOTest.java
index 69b0f8e..7781f05 100644
--- a/src/test/java/it/inaf/oats/vospace/persistence/JobDAOTest.java
+++ b/src/test/java/it/inaf/oats/vospace/persistence/JobDAOTest.java
@@ -29,7 +29,6 @@ import net.ivoa.xml.uws.v1.ErrorSummary;
 import net.ivoa.xml.uws.v1.Jobs;
 import it.inaf.oats.vospace.exception.ErrorSummaryFactory;
 import it.inaf.oats.vospace.exception.PermissionDeniedException;
-import java.util.Arrays;
 import net.ivoa.xml.uws.v1.ResultReference;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -51,7 +50,7 @@ public class JobDAOTest {
     private JobSummary getJob() {
         Transfer transfer = new Transfer();
         transfer.setDirection("pushToVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mynode"));
+        transfer.setTarget("vos://example.com!vospace/mynode");
 
         JobSummary job = new JobSummary();
         job.setJobId("123");
-- 
GitLab