From 3f87be5b986e1fe183eba32357034307821225f0 Mon Sep 17 00:00:00 2001
From: Nicola Fulvio Calabria <nicola.calabria@inaf.it>
Date: Sat, 29 Oct 2022 22:23:46 +0200
Subject: [PATCH] added collections dao

---
 .../vospace/persistence/CollectionsDAO.java   | 68 ++++++++++++++++++-
 .../oats/vospace/persistence/NodeDAO.java     |  3 -
 .../persistence/model/NodeCollection.java     | 16 ++---
 3 files changed, 74 insertions(+), 13 deletions(-)

diff --git a/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java b/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java
index 1eaf7cc..cd78547 100644
--- a/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java
+++ b/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java
@@ -6,6 +6,11 @@
 package it.inaf.oats.vospace.persistence;
 
 import it.inaf.oats.vospace.persistence.model.NodeCollection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Optional;
 import javax.sql.DataSource;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -24,9 +29,68 @@ public class CollectionsDAO {
     public CollectionsDAO(DataSource dataSource) {
         jdbcTemplate = new JdbcTemplate(dataSource);
     }
+
+    void createNewCollection(String title, String ownerId) {
+
+        String sql = "INSERT INTO collections (title, owner_id) VALUES (?,?)";
+
+        jdbcTemplate.update(conn -> {
+            PreparedStatement ps = conn.prepareStatement(sql);
+            int i = 0;
+            ps.setString(++i, title);
+            ps.setString(++i, ownerId);
+            return ps;
+        });
+    }
+
+    Optional<NodeCollection> getNodeCollectionById(Long id) {
+        String sql = "SELECT collection_id, title, owner_id FROM collections\n"
+                + "WHERE collection_id = ?";
+
+        Optional<NodeCollection> nc = jdbcTemplate.query(
+                conn -> {
+                    PreparedStatement ps = conn.prepareStatement(sql);
+                    ps.setLong(1, id);
+                    return ps;
+                },
+                rs -> {
+                    if (!rs.next()) {
+                        return Optional.empty();
+                    } else {
+                        return Optional.of(getNodeCollectionFromResultset(rs));
+                    }
+
+                });
+
+        return nc;
+
+    }
     
-    void insertNewCollection(NodeCollection collection) {
-        
+    List<NodeCollection> getUserNodeCollections(String userId) {
+        String sql = "SELECT collection_id, title, owner_id FROM collections\n"
+                + "WHERE owner_id = ?";
+
+        List<NodeCollection> nc = jdbcTemplate.query(
+                conn -> {
+                    PreparedStatement ps = conn.prepareStatement(sql);
+                    ps.setString(1, userId);
+                    return ps;
+                },
+                (row, index) -> {
+                    return this.getNodeCollectionFromResultset(row);
+                });
+
+        return nc;
     }
 
+    private NodeCollection getNodeCollectionFromResultset(ResultSet rs)
+            throws SQLException {
+        NodeCollection nc = new NodeCollection(
+                rs.getLong("collection_id"),
+                rs.getString("title"),
+                rs.getString("owner_id")
+        );
+
+        return nc;
+    }
 }
diff --git a/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java b/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java
index 407dac7..bcec03f 100644
--- a/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java
+++ b/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java
@@ -5,7 +5,6 @@
  */
 package it.inaf.oats.vospace.persistence;
 
-import it.inaf.oats.vospace.DeleteNodeController;
 import it.inaf.oats.vospace.URIUtils;
 import it.inaf.oats.vospace.datamodel.NodeProperties;
 import it.inaf.oats.vospace.datamodel.NodeUtils;
@@ -32,8 +31,6 @@ import net.ivoa.xml.vospace.v2.DataNode;
 import net.ivoa.xml.vospace.v2.LinkNode;
 import net.ivoa.xml.vospace.v2.Property;
 import net.ivoa.xml.vospace.v2.View;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.jdbc.core.JdbcTemplate;
diff --git a/src/main/java/it/inaf/oats/vospace/persistence/model/NodeCollection.java b/src/main/java/it/inaf/oats/vospace/persistence/model/NodeCollection.java
index a1f61e7..e904820 100644
--- a/src/main/java/it/inaf/oats/vospace/persistence/model/NodeCollection.java
+++ b/src/main/java/it/inaf/oats/vospace/persistence/model/NodeCollection.java
@@ -12,12 +12,12 @@ package it.inaf.oats.vospace.persistence.model;
 public class NodeCollection {
     
     private Long id;
-    private String name;
+    private String title;
     private String ownerId;
-
-    public NodeCollection(Long id, String name, String ownerId) {
+        
+    public NodeCollection(Long id, String title, String ownerId) {
         this.id = id;
-        this.name = name;
+        this.title = title;
         this.ownerId = ownerId;
     }    
 
@@ -29,12 +29,12 @@ public class NodeCollection {
         this.id = id;
     }
 
-    public String getName() {
-        return name;
+    public String getTitle() {
+        return title;
     }
 
-    public void setName(String name) {
-        this.name = name;
+    public void setTitle(String title) {
+        this.title = title;
     }
 
     public String getOwnerId() {
-- 
GitLab