From 31e7fe3761ae280ad776e2d550d27b12820e84ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sven=20K=C3=A4stle?= <sven.kaestle@gmx.de>
Date: Thu, 6 Sep 2018 13:34:28 +0200
Subject: [PATCH] feat: Add projectId to full submission and redirect user
 after button click

---
 .../controller/SubmissionController.java       |  7 ++++---
 .../submission/model/FullSubmission.java       | 13 ++++++++++++-
 .../model/FullSubmissionPostRequest.java       | 13 ++++++++++++-
 .../main/webapp/assets/js/project-student.js   |  2 +-
 .../webapp/assets/js/unstructuredAnnotation.js | 18 ++++++++++++++----
 .../main/webapp/assets/js/unstructuredRest.js  |  3 ++-
 .../webapp/assets/js/unstructuredUpload.js     | 14 +++++++-------
 .../src/main/webapp/assets/js/utility.js       | 11 +++++++++++
 .../src/scripts/dbschema/fltrail.sql           |  1 +
 9 files changed, 64 insertions(+), 18 deletions(-)

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 b3b86098..6053a7f4 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
@@ -30,8 +30,8 @@ public class SubmissionController implements ISubmission {
         connection.connect();
 
         // build and execute request
-        String request = "INSERT INTO fullsubmissions (`id`, `user`, `text`) VALUES (?,?,?);";
-        connection.issueInsertOrDeleteStatement(request, uuid, fullSubmissionPostRequest.getUser(), fullSubmissionPostRequest.getText());
+        String request = "INSERT INTO fullsubmissions (`id`, `user`, `text`, `projectId`) VALUES (?,?,?,?);";
+        connection.issueInsertOrDeleteStatement(request, uuid, fullSubmissionPostRequest.getUser(), fullSubmissionPostRequest.getText(), fullSubmissionPostRequest.getProjectId());
 
         // get the new submission from database
         FullSubmission fullSubmission = getFullSubmission(uuid);
@@ -283,8 +283,9 @@ public class SubmissionController implements ISubmission {
         long timestamp = rs.getTimestamp("timestamp").getTime();
         String user = rs.getString("user");
         String text = rs.getString("text");
+        String projectId = rs.getString("projectId");
 
-        return new FullSubmission(id, timestamp, user, text);
+        return new FullSubmission(id, timestamp, user, text, projectId);
 
     }
 
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmission.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmission.java
index 725db4b2..37b35c9f 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmission.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmission.java
@@ -11,13 +11,15 @@ public class FullSubmission {
     private long timestamp;
     private String user;
     private String text;
+    private String projectId;
 
     // constructor
-    public FullSubmission(String id, long timestamp, String user, String text) {
+    public FullSubmission(String id, long timestamp, String user, String text, String projectId) {
         this.id = id;
         this.timestamp = timestamp;
         this.user = user;
         this.text = text;
+        this.projectId = projectId;
     }
 
     // methods
@@ -53,6 +55,14 @@ public class FullSubmission {
         this.text = text;
     }
 
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
     @Override
     public String toString() {
         return "FullSubmission{" +
@@ -60,6 +70,7 @@ public class FullSubmission {
                 ", timestamp=" + timestamp +
                 ", user='" + user + '\'' +
                 ", text='" + text + '\'' +
+                ", projectId='" + projectId + '\'' +
                 '}';
     }
 
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmissionPostRequest.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmissionPostRequest.java
index a807283a..48a2dfe7 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmissionPostRequest.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmissionPostRequest.java
@@ -9,11 +9,13 @@ public class FullSubmissionPostRequest {
     // variables
     private String user;
     private String text;
+    private String projectId;
 
     // constructors
-    public FullSubmissionPostRequest(String user, String text) {
+    public FullSubmissionPostRequest(String user, String text, String projectId) {
         this.user = user;
         this.text = text;
+        this.projectId = projectId;
     }
 
     public FullSubmissionPostRequest() {}
@@ -35,11 +37,20 @@ public class FullSubmissionPostRequest {
         this.text = text;
     }
 
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
     @Override
     public String toString() {
         return "FullSubmissionPostRequest{" +
                 "user='" + user + '\'' +
                 ", text='" + text + '\'' +
+                ", projectId='" + projectId + '\'' +
                 '}';
     }
 
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/project-student.js b/gemeinsamforschen/src/main/webapp/assets/js/project-student.js
index b8f739b4..3a487384 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/project-student.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/project-student.js
@@ -18,6 +18,6 @@ $(document).ready(function(){
     });
 
     $('#btnUnstructuredUpload').click(function () {
-        location.href="unstructured-upload.jsp?token="+getUserTokenFromUrl();
+        location.href="unstructured-upload.jsp?token="+getUserTokenFromUrl() + "&projectId=" + getProjectIdFromUrl();
     })
 });
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/unstructuredAnnotation.js b/gemeinsamforschen/src/main/webapp/assets/js/unstructuredAnnotation.js
index 8c770dfd..6ffb2c1a 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/unstructuredAnnotation.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/unstructuredAnnotation.js
@@ -26,7 +26,7 @@ $(document).ready(function() {
 
     }, function () {
         // jump to upload page on error
-        location.href="unstructured-upload.jsp?token="+getUserTokenFromUrl();
+        location.href="unstructured-upload.jsp?token=" + getUserTokenFromUrl() + "&projectId=" + getProjectIdFromUrl();
     });
 
     // set click listener to save button
@@ -246,6 +246,8 @@ function addSelectionDataToList(startCharacter, endCharacter, category) {
 function saveButtonHandler() {
     // show alert message
     if (window.confirm("Möchten Sie wirklich ihre Annotationen speichern?")) {
+        // declare array of promises
+        let promises = []
         $('#annotations').find('.category-card').each(function () {
             let array = $(this).data('array');
             if (array != null) {
@@ -273,13 +275,21 @@ function saveButtonHandler() {
                     submissionPartPostRequest.body.push(submissionPartBodyElement);
                 }
 
-                // send the post request to the back-end
-                createSubmissionPart(submissionPartPostRequest, function (response) {
+                // send the post request to the back-end and save promise
+                promises.push(createSubmissionPart(submissionPartPostRequest, function (response) {
                     console.log("send " + response.category + "'s post request to back-end")
-                })
+                }));
 
             }
         });
+
+        $.when.apply($, promises).then(function () {
+            // redirect user to project page after saving
+            location.href="project-student.jsp?token=" + getUserTokenFromUrl() + "&projectId=" + getProjectIdFromUrl();
+        });
+
+        // redirect user to project page after saving
+        // location.href="project-student.jsp?token=" + getUserTokenFromUrl() + "&projectId=" + getProjectIdFromUrl();
     }
 }
 
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/unstructuredRest.js b/gemeinsamforschen/src/main/webapp/assets/js/unstructuredRest.js
index 047018ef..3e678ca6 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/unstructuredRest.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/unstructuredRest.js
@@ -48,11 +48,12 @@ function getFullSubmission(id, responseHandler, errorHandler) {
  *
  * @param submissionPartPostRequest The post request
  * @param responseHandler The response handler
+ * @returns A promise object
  */
 function createSubmissionPart(submissionPartPostRequest, responseHandler) {
     var url = "../rest/submissions/part/";
     var json = JSON.stringify(submissionPartPostRequest);
-    $.ajax({
+    return $.ajax({
         url: url,
         type: "POST",
         data: json,
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/unstructuredUpload.js b/gemeinsamforschen/src/main/webapp/assets/js/unstructuredUpload.js
index e9beb2f4..265a0a90 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/unstructuredUpload.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/unstructuredUpload.js
@@ -13,7 +13,8 @@ $(document).ready(function() {
             // build request
             var fullSubmissionPostRequest = {
                 user: user,
-                text: text
+                text: text,
+                projectId: getProjectIdFromUrl()
             };
 
             // save request in database
@@ -22,7 +23,7 @@ $(document).ready(function() {
                 $('#upload-textarea').val("");
 
                 // jump to next page
-                location.href="unstructured-annotation.jsp?token=" + getUserTokenFromUrl() + "&submission=" + response.id;
+                location.href="unstructured-annotation.jsp?token=" + getUserTokenFromUrl() + "&projectId=" + getProjectIdFromUrl() + "&submission=" + response.id;
             });
         }
     });
@@ -36,13 +37,15 @@ $(document).ready(function() {
                 $('#upload-textarea').val("");
 
                 // jump to previous page
-                location.href="project-student.jsp?token="+getUserTokenFromUrl();
+                window.history.back();
+                //location.href="project-student.jsp?token=" + getUserTokenFromUrl() + "&projectId=" + getProjectIdFromUrl();
             }
         }
         // nothing to check
         else {
             // jump to previous page
-            location.href="project-student.jsp?token="+getUserTokenFromUrl();
+            window.history.back();
+            //location.href="project-student.jsp?token=" + getUserTokenFromUrl() + "&projectId=" + getProjectIdFromUrl();
         }
     });
 
@@ -63,6 +66,3 @@ $(document).ready(function() {
     });
 
 });
-
-
-
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/utility.js b/gemeinsamforschen/src/main/webapp/assets/js/utility.js
index 33be09a5..ad821640 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/utility.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/utility.js
@@ -13,3 +13,14 @@ function getUserTokenFromUrl() {
 
 }
 
+function getProjectIdFromUrl() {
+    var parts = window.location.search.substr(1).split("&");
+    var $_GET = {};
+    for (var i = 0; i < parts.length; i++) {
+        var temp = parts[i].split("=");
+        $_GET[decodeURIComponent(temp[0])] = decodeURIComponent(temp[1]);
+    }
+    return $_GET['projectId'];
+
+}
+
diff --git a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql
index 1a069f1b..978bd4b9 100644
--- a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql
+++ b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql
@@ -126,6 +126,7 @@ CREATE TABLE if not exists `fullsubmissions` (
   `timestamp` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `user` VARCHAR(120) NOT NULL,
   `text` MEDIUMTEXT NOT NULL,
+  `projectId` VARCHAR(120) NOT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE = InnoDB DEFAULT CHARSET=utf8;
 
-- 
GitLab