From 9a25c600fce54b219729c1ac7bad0243cd32e120 Mon Sep 17 00:00:00 2001
From: Nicola Fulvio Calabria <nicola.calabria@inaf.it>
Date: Wed, 23 Nov 2022 10:20:15 +0100
Subject: [PATCH] Partial implementation of node collections controller

---
 .../ia2/vospace/ui/client/VOSpaceClient.java  |  4 +-
 .../controller/NodeCollectionsController.java | 43 +++++++++++++++++++
 2 files changed, 45 insertions(+), 2 deletions(-)
 create mode 100644 vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodeCollectionsController.java

diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
index 8a1722f..744dc43 100644
--- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
+++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
@@ -86,7 +86,7 @@ public class VOSpaceClient {
         return call(request, BodyHandlers.ofInputStream(), 200, res -> unmarshal(res, Node.class));
     }
     
-    public List<NodeCollection> getNodeCollections(Optional<String> token) {
+    public NodeCollectionsWrapper getNodeCollections(Optional<String> token) {
         
         HttpRequest request = getRequest("/collections", token)
                 .header("Accept", useJson ? "application/json" : "text/xml")
@@ -94,7 +94,7 @@ public class VOSpaceClient {
                 .build();
         
         return call(request, BodyHandlers.ofInputStream(), 200, 
-                res -> unmarshal(res, NodeCollectionsWrapper.class)).getNodeCollections();        
+                res -> unmarshal(res, NodeCollectionsWrapper.class));        
     }
 
     public JobSummary startTransferJob(Transfer transfer, Optional<String> token) {
diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodeCollectionsController.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodeCollectionsController.java
new file mode 100644
index 0000000..e8ac1d8
--- /dev/null
+++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodeCollectionsController.java
@@ -0,0 +1,43 @@
+/*
+ * This file is part of vospace-ui
+ * Copyright (C) 2021 Istituto Nazionale di Astrofisica
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+package it.inaf.ia2.vospace.ui.controller;
+
+import it.inaf.ia2.aa.data.User;
+import it.inaf.ia2.vospace.ui.TokenProvider;
+import it.inaf.ia2.vospace.ui.client.VOSpaceClient;
+import it.inaf.oats.vospace.datamodel.collections.NodeCollectionsWrapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class NodeCollectionsController extends BaseController {
+    
+    private static final Logger LOG = LoggerFactory.getLogger(NodeCollectionsController.class);
+    
+    @Autowired
+    private VOSpaceClient client;
+    
+    @Autowired
+    private TokenProvider tokenProvider;
+    
+    @GetMapping(value = "/collections", produces = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity<NodeCollectionsWrapper> listNodeCollections(User principal) 
+            throws Exception
+    {
+        LOG.debug("listNodeCollections called for user {}", principal.getName());
+        
+        NodeCollectionsWrapper ncw =
+                client.getNodeCollections(tokenProvider.getToken());
+        
+        return ResponseEntity.ok(ncw);
+    }
+    
+}
-- 
GitLab