diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ISubmission.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ISubmission.java index f842d48f0bab046de40f116fc91c78d4c34b1ca1..975f180b4ebb69fd4072162718f5a293f9b9c252 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ISubmission.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ISubmission.java @@ -1,5 +1,6 @@ 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; @@ -48,10 +49,11 @@ public interface ISubmission { /** * Get the entire submission part from database * - * @param submissionPartId The id of the submission part - * @return The new submission part + * @param fullSubmissionId The id of the full submission + * @param category The category of the submission + * @return The returned submission part */ - SubmissionPart getSubmissionPart(String submissionPartId); + SubmissionPart getSubmissionPart(String fullSubmissionId, Category category); /** * Get all submission parts based on an id @@ -62,11 +64,12 @@ public interface ISubmission { ArrayList<SubmissionPart> getAllSubmissionParts(String fullSubmissionId); /** - * Checks if a submission part id already exists in the database + * Checks if a submission part already exists in the database * - * @param submissionPartId The id of the submission part - * @return Returns true if the id exists + * @param fullSubmissionId The id of the full submission + * @param category The category of the submission + * @return Returns true if the submission part exists */ - boolean existsSubmissionPartId(String submissionPartId); + boolean existsSubmissionPart(String fullSubmissionId, Category category); } 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 2bfb87ad675edc236b3793162c5ef447c3c87b98..305311e2f4571278dd20bec905d2fb083b56a2dc 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 @@ -108,28 +108,22 @@ public class SubmissionController implements ISubmission { @Override public SubmissionPart addSubmissionPart(SubmissionPartPostRequest submissionPartPostRequest) { - // create a new id if we found no id. - String uuid = UUID.randomUUID().toString(); - while (existsSubmissionPartId(uuid)) { - uuid = UUID.randomUUID().toString(); - } - // establish connection MysqlConnect connection = new MysqlConnect(); connection.connect(); // build and execute request - String request = "INSERT INTO submissionparts (`id`, `userId`, `fullSubmissionId`, `category`) VALUES (?,?,?,?);"; - connection.issueInsertOrDeleteStatement(request, uuid, submissionPartPostRequest.getUserId(), submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getCategory().toString()); + String request = "INSERT IGNORE INTO submissionparts (`userId`, `fullSubmissionId`, `category`) VALUES (?,?,?);"; + connection.issueInsertOrDeleteStatement(request, submissionPartPostRequest.getUserId(), submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getCategory().toString().toUpperCase()); // build and execute body requests - String requestElement = "INSERT INTO submissionpartbodyelements (`submissionPartId`, `text`, `startCharacter`, `endCharacter`) VALUES (?,?,?,?)"; + String requestElement = "INSERT IGNORE INTO submissionpartbodyelements (`fullSubmissionId`, `category`, `text`, `startCharacter`, `endCharacter`) VALUES (?,?,?,?,?)"; for (SubmissionPartBodyElement element : submissionPartPostRequest.getBody()) { - connection.issueInsertOrDeleteStatement(requestElement, uuid, element.getText(), element.getStartCharacter(), element.getEndCharacter()); + connection.issueInsertOrDeleteStatement(requestElement, submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getCategory().toString().toUpperCase(), element.getText(), element.getStartCharacter(), element.getEndCharacter()); } // get the new submission from database - SubmissionPart submissionPart = getSubmissionPart(uuid); + SubmissionPart submissionPart = getSubmissionPart(submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getCategory()); // close connection connection.close(); @@ -139,15 +133,20 @@ public class SubmissionController implements ISubmission { } @Override - public SubmissionPart getSubmissionPart(String submissionPartId) { + public SubmissionPart getSubmissionPart(String fullSubmissionId, Category category) { // establish connection MysqlConnect connection = new MysqlConnect(); connection.connect(); // build and execute request - String request = "SELECT * FROM submissionparts LEFT JOIN submissionpartbodyelements ON id = submissionPartId WHERE id = ?;"; - VereinfachtesResultSet rs = connection.issueSelectStatement(request, submissionPartId); + 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); if (rs.next()) { // save submission @@ -176,11 +175,12 @@ public class SubmissionController implements ISubmission { // build and execute request String request = "SELECT * " + - "FROM submissionparts " + - "LEFT JOIN submissionpartbodyelements " + - "ON id = submissionPartId " + - "WHERE fullSubmissionId = ? " + - "ORDER BY id;"; + "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<>(); @@ -198,15 +198,15 @@ public class SubmissionController implements ISubmission { } @Override - public boolean existsSubmissionPartId(String submissionPartId) { + public boolean existsSubmissionPart(String fullSubmissionId, Category category) { // establish connection MysqlConnect connection = new MysqlConnect(); connection.connect(); // build and execute request - String request = "SELECT COUNT(*) > 0 AS `exists` FROM submissionparts WHERE id = ?;"; - VereinfachtesResultSet rs = connection.issueSelectStatement(request, submissionPartId); + String request = "SELECT COUNT(*) > 0 AS `exists` FROM submissionparts WHERE fullSubmissionId = ? AND category = ?;"; + VereinfachtesResultSet rs = connection.issueSelectStatement(request, fullSubmissionId, category); if (rs.next()) { // save the response @@ -238,7 +238,7 @@ public class SubmissionController implements ISubmission { private FullSubmission getFullSubmissionFromResultSet(VereinfachtesResultSet rs) { String id = rs.getString("id"); - long timestamp = rs.getTimestamp(2).getTime(); + long timestamp = rs.getTimestamp("timestamp").getTime(); String user = rs.getString("user"); String text = rs.getString("text"); @@ -254,7 +254,6 @@ public class SubmissionController implements ISubmission { */ private SubmissionPart getSubmissionPartFromResultSet(VereinfachtesResultSet rs) { - String id = rs.getString("id"); long timestamp = rs.getTimestamp("timestamp").getTime(); String userId = rs.getString("userId"); String fullSubmissionId = rs.getString("fullSubmissionId"); @@ -265,7 +264,7 @@ public class SubmissionController implements ISubmission { do { // only add it if the element is not empty - if (!Strings.isNullOrEmpty(rs.getString("submissionPartId"))) { + if (!Strings.isNullOrEmpty(rs.getString("text"))) { SubmissionPartBodyElement element = new SubmissionPartBodyElement( rs.getString("text"), rs.getInt("startCharacter"), @@ -275,9 +274,15 @@ public class SubmissionController implements ISubmission { } } while (rs.next()); - return new SubmissionPart(id, timestamp, userId, fullSubmissionId, category, body); + return new SubmissionPart(timestamp, userId, fullSubmissionId, category, body); } + /** + * Build an array of submission part objects from a given result set + * + * @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) { ArrayList<SubmissionPart> submissionParts = new ArrayList<>(); @@ -300,7 +305,6 @@ public class SubmissionController implements ISubmission { // build submission part with empty body tmpPart = new SubmissionPart( - rs.getString("id"), rs.getTimestamp("timestamp").getTime(), rs.getString("userId"), rs.getString("fullSubmissionId"), @@ -322,7 +326,6 @@ public class SubmissionController implements ISubmission { // add last part submissionParts.add(tmpPart); - System.out.println(submissionParts.toString()); return submissionParts; } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/SubmissionPart.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/SubmissionPart.java index de03fa1aae7c3848da77f13bebbe6dae028efb32..1a0b7644d1f69f2c5490f1bc7ac9ab6111eb6daa 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/SubmissionPart.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/SubmissionPart.java @@ -11,7 +11,6 @@ import java.util.ArrayList; public class SubmissionPart { // variables - private String id; private long timestamp; private String userId; private String fullSubmissionId; @@ -19,8 +18,7 @@ public class SubmissionPart { private ArrayList<SubmissionPartBodyElement> body; // constructor - public SubmissionPart(String id, long timestamp, String userId, String fullSubmissionId, Category category, ArrayList<SubmissionPartBodyElement> body) { - this.id = id; + public SubmissionPart(long timestamp, String userId, String fullSubmissionId, Category category, ArrayList<SubmissionPartBodyElement> body) { this.timestamp = timestamp; this.userId = userId; this.fullSubmissionId = fullSubmissionId; @@ -31,14 +29,6 @@ public class SubmissionPart { public SubmissionPart(){} // methods - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - public long getTimestamp() { return timestamp; } @@ -82,8 +72,7 @@ public class SubmissionPart { @Override public String toString() { return "SubmissionPart{" + - "id='" + id + '\'' + - ", timestamp=" + timestamp + + "timestamp=" + timestamp + ", userId='" + userId + '\'' + ", fullSubmissionId='" + fullSubmissionId + '\'' + ", category=" + category + 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 2b3319e7c05b522eb2f7fd1f191a630d5655667b..07aacbd4009828c1019702cccc996e229bb9a3b2 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 @@ -1,5 +1,6 @@ package unipotsdam.gf.modules.submission.view; +import unipotsdam.gf.modules.peer2peerfeedback.Category; import unipotsdam.gf.modules.submission.controller.SubmissionController; import unipotsdam.gf.modules.submission.model.*; @@ -60,11 +61,11 @@ public class SubmissionService { } @GET - @Path("/part/{id}") - public Response getSubmissionPart(@PathParam("id") String submissionPartId) { + @Path("/full/{id}/category/{category}") + public Response getSubmissionPart(@PathParam("id") String fullSubmissionId, @PathParam("category") String category) { // get submission part from database based by id SubmissionController controller = new SubmissionController(); - SubmissionPart submissionPart = controller.getSubmissionPart(submissionPartId); + SubmissionPart submissionPart = controller.getSubmissionPart(fullSubmissionId, Category.valueOf(category.toUpperCase())); if (submissionPart != null) { return Response.ok(submissionPart).build(); @@ -72,7 +73,7 @@ public class SubmissionService { else { // declare response SubmissionResponse response = new SubmissionResponse(); - response.setMessage("Submission part with the id '" + submissionPartId + "' can't be found"); + response.setMessage("Submission part with the full submission id '" + fullSubmissionId + "' and the category '" + category.toUpperCase() + "' can't be found"); return Response.status(Response.Status.NOT_FOUND).entity(response).build(); } diff --git a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql index eaca2fefffcb45baa1f5dc63a994ef96508520b4..1a069f1b37b580532de97074911d5d1f2a98184d 100644 --- a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql +++ b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql @@ -130,20 +130,20 @@ CREATE TABLE if not exists `fullsubmissions` ( ) ENGINE = InnoDB DEFAULT CHARSET=utf8; CREATE TABLE if not exists `submissionparts` ( - `id` VARCHAR(120) NOT NULL, `timestamp` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `userId` VARCHAR(120) NOT NULL, `fullSubmissionId` VARCHAR(120) NOT NULL, `category` VARCHAR(30) NOT NULL, - PRIMARY KEY (`id`) + PRIMARY KEY (`fullSubmissionId`, `category`) ) ENGINE = InnoDB DEFAULT CHARSET=utf8; CREATE TABLE if not exists `submissionpartbodyelements` ( - `submissionPartId` VARCHAR(120) NOT NULL, + `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 (`submissionPartId`, `startCharacter`, `endCharacter`) + PRIMARY KEY (`fullSubmissionId`, `category`, `startCharacter`, `endCharacter`) ) ENGINE = InnoDB DEFAULT CHARSET=utf8; alter table users