From a049883e1b8f1d2de25874016fb6d8ca7858c691 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sven=20K=C3=A4stle?= <sven.kaestle@gmx.de> Date: Thu, 6 Sep 2018 23:23:12 +0200 Subject: [PATCH] feat: Remove 'text' column from submission part and add submissionPart GET to front-end --- .../controller/SubmissionController.java | 147 ++++++++++++------ .../main/webapp/assets/js/annotationRest.js | 5 +- .../main/webapp/assets/js/annotationScript.js | 11 +- .../main/webapp/pages/annotation-document.jsp | 2 + .../src/scripts/dbschema/fltrail.sql | 1 - 5 files changed, 111 insertions(+), 55 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 adced7f9..2b59c012 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 @@ -132,8 +132,8 @@ public class SubmissionController implements ISubmission { // no similar element case 0: if (!hasOverlappingBoundaries(submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getCategory(), element)) { - requestElement = "INSERT IGNORE INTO submissionpartbodyelements (`fullSubmissionId`, `category`, `text`, `startCharacter`, `endCharacter`) VALUES (?,?,?,?,?);"; - connection.issueInsertOrDeleteStatement(requestElement, submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getCategory().toString().toUpperCase(), element.getText(), element.getStartCharacter(), element.getEndCharacter()); + requestElement = "INSERT IGNORE INTO submissionpartbodyelements (`fullSubmissionId`, `category`, `startCharacter`, `endCharacter`) VALUES (?,?,?,?);"; + connection.issueInsertOrDeleteStatement(requestElement, submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getCategory().toString().toUpperCase(), element.getStartCharacter(), element.getEndCharacter()); } break; // similar element on the right side @@ -181,31 +181,47 @@ public class SubmissionController implements ISubmission { MysqlConnect connection = new MysqlConnect(); connection.connect(); - // build and execute request - String request = "SELECT * FROM submissionparts s " + - "LEFT JOIN submissionpartbodyelements b " + - "ON s.fullSubmissionId = b.fullSubmissionId " + - "AND s.category = b.category " + - "WHERE s.fullSubmissionId = ? " + - "AND s.category = ?;"; - VereinfachtesResultSet rs = connection.issueSelectStatement(request, fullSubmissionId, category); + // declare text + String text; - if (rs.next()) { - // save submission - SubmissionPart submissionPart = getSubmissionPartFromResultSet(rs); + // build and execute request to receive text + String requestText = "SELECT text " + + "FROM fullsubmissions " + + "WHERE id = ?"; + VereinfachtesResultSet rsText = connection.issueSelectStatement(requestText, fullSubmissionId); - // close connection - connection.close(); + if (rsText.next()) { + // save text + text = rsText.getString("text"); - return submissionPart; - } - else { - // close connection - connection.close(); + // build and execute request + String request = "SELECT * FROM submissionparts s " + + "LEFT JOIN submissionpartbodyelements b " + + "ON s.fullSubmissionId = b.fullSubmissionId " + + "AND s.category = b.category " + + "WHERE s.fullSubmissionId = ? " + + "AND s.category = ?;"; + VereinfachtesResultSet rs = connection.issueSelectStatement(request, fullSubmissionId, category); - return null; + if (rs.next()) { + // save submission + SubmissionPart submissionPart = getSubmissionPartFromResultSet(rs, text); + + // close connection + connection.close(); + + return submissionPart; + } + else { + // close connection + connection.close(); + + return null; + } } + return null; + } @Override @@ -215,27 +231,46 @@ public class SubmissionController implements ISubmission { MysqlConnect connection = new MysqlConnect(); connection.connect(); - // build and execute request - String request = "SELECT * " + - "FROM submissionparts sp " + - "LEFT JOIN submissionpartbodyelements spbe " + - "ON sp.fullSubmissionId = spbe.fullSubmissionId " + - "AND sp.category = spbe.category " + - "WHERE sp.fullSubmissionId = ? " + - "ORDER BY sp.timestamp;"; - VereinfachtesResultSet rs = connection.issueSelectStatement(request, fullSubmissionId); + // declare text + String text; + + // build and execute request to receive text + String requestText = "SELECT text " + + "FROM fullsubmissions " + + "WHERE id = ?"; + VereinfachtesResultSet rsText = connection.issueSelectStatement(requestText, fullSubmissionId); + + if (rsText.next()) { + // save text + text = rsText.getString("text"); + + // build and execute request + String request = "SELECT * " + + "FROM submissionparts sp " + + "LEFT JOIN submissionpartbodyelements spbe " + + "ON sp.fullSubmissionId = spbe.fullSubmissionId " + + "AND sp.category = spbe.category " + + "WHERE sp.fullSubmissionId = ? " + + "ORDER BY sp.timestamp;"; + VereinfachtesResultSet rs = connection.issueSelectStatement(request, fullSubmissionId); + + ArrayList<SubmissionPart> submissionParts = new ArrayList<>(); + + if (rs.next()) { + // save submission + submissionParts = getAllSubmissionPartsFromResultSet(rs, text); + } - ArrayList<SubmissionPart> submissionParts = new ArrayList<>(); + // close connection + connection.close(); - if (rs.next()) { - // save submission - submissionParts = getAllSubmissionPartsFromResultSet(rs); + return submissionParts; } // close connection connection.close(); - return submissionParts; + return null; } @@ -322,8 +357,13 @@ public class SubmissionController implements ISubmission { * @param rs The result set from the database query * @return A new submission part object */ - private SubmissionPart getSubmissionPartFromResultSet(VereinfachtesResultSet rs) { + private SubmissionPart getSubmissionPartFromResultSet(VereinfachtesResultSet rs, String text) { + // declare variables + int start, end; + String textPart; + + // initialize variables long timestamp = rs.getTimestamp("timestamp").getTime(); String userId = rs.getString("userId"); String fullSubmissionId = rs.getString("fullSubmissionId"); @@ -333,15 +373,15 @@ public class SubmissionController implements ISubmission { ArrayList<SubmissionPartBodyElement> body = new ArrayList<>(); do { - // only add it if the element is not empty - if (!Strings.isNullOrEmpty(rs.getString("text"))) { - SubmissionPartBodyElement element = new SubmissionPartBodyElement( - rs.getString("text"), - rs.getInt("startCharacter"), - rs.getInt("endCharacter")); - - body.add(element); - } + // initialize body variables + start = rs.getInt("startCharacter"); + end = rs.getInt("endCharacter"); + textPart = text.substring(start, end); + + // build element + SubmissionPartBodyElement element = new SubmissionPartBodyElement(textPart, start, end); + + body.add(element); } while (rs.next()); return new SubmissionPart(timestamp, userId, fullSubmissionId, category, body); @@ -353,7 +393,11 @@ public class SubmissionController implements ISubmission { * @param rs The result set from the database query, holding different submission parts * @return An array of submission parts */ - private ArrayList<SubmissionPart> getAllSubmissionPartsFromResultSet(VereinfachtesResultSet rs) { + private ArrayList<SubmissionPart> getAllSubmissionPartsFromResultSet(VereinfachtesResultSet rs, String text) { + + // declare variables + int start, end; + String textPart; ArrayList<SubmissionPart> submissionParts = new ArrayList<>(); // tmp part @@ -383,11 +427,12 @@ public class SubmissionController implements ISubmission { ); } - tmpElement = new SubmissionPartBodyElement( - rs.getString("text"), - rs.getInt("startCharacter"), - rs.getInt("endCharacter") - ); + // initialize body variables + start = rs.getInt("startCharacter"); + end = rs.getInt("endCharacter"); + textPart = text.substring(start, end); + + tmpElement = new SubmissionPartBodyElement(textPart, start, end); tmpPart.getBody().add(tmpElement); diff --git a/gemeinsamforschen/src/main/webapp/assets/js/annotationRest.js b/gemeinsamforschen/src/main/webapp/assets/js/annotationRest.js index 787ccd96..76fd89c8 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/annotationRest.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/annotationRest.js @@ -81,10 +81,11 @@ function getAnnotation(id, responseHandler) { * GET: Get all annotations from database for a specific target * * @param targetId The target id + * @param targetCategory The category of the target * @param responseHandler The response handler */ -function getAnnotations(targetId, responseHandler) { - var url = "../rest/annotations/target/" + targetId; +function getAnnotations(targetId, targetCategory, responseHandler) { + var url = "../rest/annotations/targetid/" + targetId + "/targetcategory/" + targetCategory; $.ajax({ url: url, type: "GET", diff --git a/gemeinsamforschen/src/main/webapp/assets/js/annotationScript.js b/gemeinsamforschen/src/main/webapp/assets/js/annotationScript.js index 5150c1f9..f1f7ccee 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/annotationScript.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/annotationScript.js @@ -3,6 +3,7 @@ var userToken = getUserTokenFromUrl(); var userColors = new Map(); var userColorsDark = new Map(); var targetId = 200; +var targetCategory = "TITEL"; // declare document text, start and end character var documentText, startCharacter, endCharacter; @@ -15,6 +16,13 @@ $(document).ready(function() { // connect to websocket on page ready connect(targetId); + // receive text + getSubmissionPart("2f216683-5f13-4b5f-8a26-4ffa0566eca1", targetCategory, function (response) { + // todo success + }, function () { + // todo error + }); + /** * Context menu handler */ @@ -204,7 +212,7 @@ $(document).ready(function() { documentText = $('#documentText').html(); // fetch annotations from server on page start - getAnnotations(targetId, function (response) { + getAnnotations(targetId, targetCategory, function (response) { // iterate over annotations and display each $.each(response, function (i, annotation) { displayAnnotation(annotation); @@ -526,6 +534,7 @@ function saveNewAnnotation(title, comment, startCharacter, endCharacter) { var annotationPostRequest = { userToken: userToken, targetId: targetId, + targetCategory: targetCategory, body: { title: title, comment: comment, diff --git a/gemeinsamforschen/src/main/webapp/pages/annotation-document.jsp b/gemeinsamforschen/src/main/webapp/pages/annotation-document.jsp index 0feb17e0..4780336a 100644 --- a/gemeinsamforschen/src/main/webapp/pages/annotation-document.jsp +++ b/gemeinsamforschen/src/main/webapp/pages/annotation-document.jsp @@ -24,6 +24,8 @@ <script src="../assets/js/annotationWebsocket.js"></script> <!-- js - annotation REST script --> <script src="../assets/js/annotationRest.js"></script> + <!-- js - unstructuredRest --> + <script src="../assets/js/unstructuredRest.js"></script> <!-- js - annotationScript --> <script src="../assets/js/annotationScript.js"></script> </head> diff --git a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql index 2ceb83f7..5ef4d315 100644 --- a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql +++ b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql @@ -142,7 +142,6 @@ CREATE TABLE if not exists `submissionparts` ( CREATE TABLE if not exists `submissionpartbodyelements` ( `fullSubmissionId` VARCHAR(120) NOT NULL, `category` VARCHAR(30) NOT NULL, - `text` MEDIUMTEXT NOT NULL, `startCharacter` int(11) NOT NULL, `endCharacter` int(11) NOT NULL, PRIMARY KEY (`fullSubmissionId`, `category`, `startCharacter`, `endCharacter`) -- GitLab