From bda0ca966c6c338b4cd6f4a01a61a6281bcfa719 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sven=20K=C3=A4stle?= <sven.kaestle@gmx.de>
Date: Thu, 6 Sep 2018 14:59:52 +0200
Subject: [PATCH] feat: Add REST gateway to receive a submission project
 representation based by the project id

---
 .../unipotsdam/gf/interfaces/ISubmission.java | 13 +++--
 .../controller/SubmissionController.java      | 43 +++++++++++++++
 .../SubmissionProjectRepresentation.java      | 55 +++++++++++++++++++
 .../submission/view/SubmissionService.java    | 18 ++++++
 4 files changed, 125 insertions(+), 4 deletions(-)
 create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/SubmissionProjectRepresentation.java

diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ISubmission.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ISubmission.java
index 975f180b..01a45002 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ISubmission.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ISubmission.java
@@ -1,10 +1,7 @@
 package unipotsdam.gf.interfaces;
 
 import unipotsdam.gf.modules.peer2peerfeedback.Category;
-import unipotsdam.gf.modules.submission.model.FullSubmission;
-import unipotsdam.gf.modules.submission.model.FullSubmissionPostRequest;
-import unipotsdam.gf.modules.submission.model.SubmissionPart;
-import unipotsdam.gf.modules.submission.model.SubmissionPartPostRequest;
+import unipotsdam.gf.modules.submission.model.*;
 
 import java.util.ArrayList;
 
@@ -63,6 +60,14 @@ public interface ISubmission {
      */
     ArrayList<SubmissionPart> getAllSubmissionParts(String fullSubmissionId);
 
+    /**
+     * Get all project representations of submission part for a given project id
+     *
+     * @param projectId The given project id
+     * @return An ArrayList of submission project representations
+     */
+    ArrayList<SubmissionProjectRepresentation> getSubmissionPartsByProjectId(String projectId);
+
     /**
      * Checks if a submission part already exists in the database
      *
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java
index 6053a7f4..adced7f9 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java
@@ -239,6 +239,33 @@ public class SubmissionController implements ISubmission {
 
     }
 
+    @Override
+    public ArrayList<SubmissionProjectRepresentation> getSubmissionPartsByProjectId(String projectId) {
+
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "SELECT s.userId, s.category, s.fullSubmissionId " +
+                "FROM fullsubmissions f " +
+                "LEFT JOIN submissionparts s " +
+                "ON f.id = s.fullSubmissionId " +
+                "WHERE f.projectId = ?";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, projectId);
+
+        ArrayList<SubmissionProjectRepresentation> representations;
+
+        // save submission
+        representations = getAllSubmissionProjectRepresentationsFromResultSet(rs);
+
+        // close connection
+        connection.close();
+
+        return representations;
+
+    }
+
     @Override
     public boolean existsSubmissionPart(String fullSubmissionId, Category category) {
 
@@ -372,6 +399,22 @@ public class SubmissionController implements ISubmission {
         return submissionParts;
     }
 
+    private ArrayList<SubmissionProjectRepresentation> getAllSubmissionProjectRepresentationsFromResultSet(VereinfachtesResultSet rs) {
+
+        ArrayList<SubmissionProjectRepresentation> representations = new ArrayList<>();
+
+        while (rs.next()) {
+            representations.add(new SubmissionProjectRepresentation(
+                    rs.getString("userId"),
+                    Category.valueOf(rs.getString("category").toUpperCase()),
+                    rs.getString("fullSubmissionId")
+            ));
+        }
+
+        return representations;
+
+    }
+
     /**
      * Calculates how many similar body elements (based on start and end character) can be found in the database
      *
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/SubmissionProjectRepresentation.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/SubmissionProjectRepresentation.java
new file mode 100644
index 00000000..998bc1fb
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/SubmissionProjectRepresentation.java
@@ -0,0 +1,55 @@
+package unipotsdam.gf.modules.submission.model;
+
+import unipotsdam.gf.modules.peer2peerfeedback.Category;
+
+public class SubmissionProjectRepresentation {
+
+    // variables
+    private String user;
+    private Category category;
+    private String fullSubmissionId;
+
+    // constructor
+    public SubmissionProjectRepresentation(String user, Category category, String fullSubmissionId) {
+        this.user = user;
+        this.category = category;
+        this.fullSubmissionId = fullSubmissionId;
+    }
+
+    public SubmissionProjectRepresentation(){}
+
+    // methods
+    public String getUser() {
+        return user;
+    }
+
+    public void setUser(String user) {
+        this.user = user;
+    }
+
+    public Category getCategory() {
+        return category;
+    }
+
+    public void setCategory(Category category) {
+        this.category = category;
+    }
+
+    public String getFullSubmissionId() {
+        return fullSubmissionId;
+    }
+
+    public void setFullSubmissionId(String fullSubmissionId) {
+        this.fullSubmissionId = fullSubmissionId;
+    }
+
+    @Override
+    public String toString() {
+        return "SubmissionProjectRepresentation{" +
+                "user='" + user + '\'' +
+                ", category=" + category +
+                ", fullSubmissionId='" + fullSubmissionId + '\'' +
+                '}';
+    }
+
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/view/SubmissionService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/view/SubmissionService.java
index 07aacbd4..6b6bfd25 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/view/SubmissionService.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/view/SubmissionService.java
@@ -96,4 +96,22 @@ public class SubmissionService {
             return Response.status(Response.Status.NOT_FOUND).entity(response).build();
         }
     }
+
+    @GET
+    @Path("/project/{id}")
+    public Response getSubmissionPartsByProjectId(@PathParam("id") String projectId) {
+        // get submission project representation from database based by project id
+        SubmissionController controller = new SubmissionController();
+        ArrayList<SubmissionProjectRepresentation> representations = controller.getSubmissionPartsByProjectId(projectId);
+
+        if (representations.size() > 0) {
+            return Response.ok(representations).build();
+        }
+        else {
+            SubmissionResponse response = new SubmissionResponse();
+            response.setMessage("No submission parts found for project id '" + projectId + "'");
+
+            return Response.status(Response.Status.NOT_FOUND).entity(response).build();
+        }
+    }
 }
-- 
GitLab