Skip to content
Snippets Groups Projects
Commit 4ebbc932 authored by Sven Kästle's avatar Sven Kästle
Browse files

feat: Alter submission parts to use array as body

parent 65fcc977
No related branches found
No related tags found
No related merge requests found
Showing with 262 additions and 38 deletions
......@@ -5,6 +5,8 @@ import unipotsdam.gf.modules.submission.model.FullSubmissionPostRequest;
import unipotsdam.gf.modules.submission.model.SubmissionPart;
import unipotsdam.gf.modules.submission.model.SubmissionPartPostRequest;
import java.util.ArrayList;
/**
* @author Sven Kästle
* skaestle@uni-potsdam.de
......@@ -51,6 +53,14 @@ public interface ISubmission {
*/
SubmissionPart getSubmissionPart(String submissionPartId);
/**
* Get all submission parts based on an id
*
* @param fullSubmissionId The id of a full submission
* @return An ArrayList holding the submission parts
*/
ArrayList<SubmissionPart> getAllSubmissionParts(String fullSubmissionId);
/**
* Checks if a submission part id already exists in the database
*
......
package unipotsdam.gf.modules.submission.controller;
import com.google.common.base.Strings;
import unipotsdam.gf.core.database.mysql.MysqlConnect;
import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
import unipotsdam.gf.interfaces.ISubmission;
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.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.UUID;
/**
......@@ -119,8 +119,14 @@ public class SubmissionController implements ISubmission {
connection.connect();
// build and execute request
String request = "INSERT INTO submissionparts (`id`, `userId`, `fullSubmissionId`, `text`, `category`) VALUES (?,?,?,?,?);";
connection.issueInsertOrDeleteStatement(request, uuid, submissionPartPostRequest.getUserId(), submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getText(), submissionPartPostRequest.getCategory().toString());
String request = "INSERT INTO submissionparts (`id`, `userId`, `fullSubmissionId`, `category`) VALUES (?,?,?,?);";
connection.issueInsertOrDeleteStatement(request, uuid, submissionPartPostRequest.getUserId(), submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getCategory().toString());
// build and execute body requests
String requestElement = "INSERT INTO submissionpartbodyelements (`submissionPartId`, `text`, `startCharacter`, `endCharacter`) VALUES (?,?,?,?)";
for (SubmissionPartBodyElement element : submissionPartPostRequest.getBody()) {
connection.issueInsertOrDeleteStatement(requestElement, uuid, element.getText(), element.getStartCharacter(), element.getEndCharacter());
}
// get the new submission from database
SubmissionPart submissionPart = getSubmissionPart(uuid);
......@@ -140,12 +146,12 @@ public class SubmissionController implements ISubmission {
connection.connect();
// build and execute request
String request = "SELECT * FROM submissionparts WHERE id = ?;";
String request = "SELECT * FROM submissionparts LEFT JOIN submissionpartbodyelements ON id = submissionPartId WHERE id = ?;";
VereinfachtesResultSet rs = connection.issueSelectStatement(request, submissionPartId);
if (rs.next()) {
// save submission
SubmissionPart submissionPart = getSubmissionPartFromResultSelt(rs);
SubmissionPart submissionPart = getSubmissionPartFromResultSet(rs);
// close connection
connection.close();
......@@ -161,6 +167,36 @@ public class SubmissionController implements ISubmission {
}
@Override
public ArrayList<SubmissionPart> getAllSubmissionParts(String fullSubmissionId) {
// establish connection
MysqlConnect connection = new MysqlConnect();
connection.connect();
// build and execute request
String request = "SELECT * " +
"FROM submissionparts " +
"LEFT JOIN submissionpartbodyelements " +
"ON id = submissionPartId " +
"WHERE fullSubmissionId = ? " +
"ORDER BY id;";
VereinfachtesResultSet rs = connection.issueSelectStatement(request, fullSubmissionId);
ArrayList<SubmissionPart> submissionParts = new ArrayList<>();
if (rs.next()) {
// save submission
submissionParts = getAllSubmissionPartsFromResultSet(rs);
}
// close connection
connection.close();
return submissionParts;
}
@Override
public boolean existsSubmissionPartId(String submissionPartId) {
......@@ -216,15 +252,78 @@ public class SubmissionController implements ISubmission {
* @param rs The result set from the database query
* @return A new submission part object
*/
private SubmissionPart getSubmissionPartFromResultSelt(VereinfachtesResultSet rs) {
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");
String text = rs.getString("text");
Category category = Category.valueOf(rs.getString("category").toUpperCase());
return new SubmissionPart(id, timestamp, userId, fullSubmissionId, text, category);
// build body and iterate over result set
ArrayList<SubmissionPartBodyElement> body = new ArrayList<>();
do {
// only add it if the element is not empty
if (!Strings.isNullOrEmpty(rs.getString("submissionPartId"))) {
SubmissionPartBodyElement element = new SubmissionPartBodyElement(
rs.getString("text"),
rs.getInt("startCharacter"),
rs.getInt("endCharacter"));
body.add(element);
}
} while (rs.next());
return new SubmissionPart(id, timestamp, userId, fullSubmissionId, category, body);
}
private ArrayList<SubmissionPart> getAllSubmissionPartsFromResultSet(VereinfachtesResultSet rs) {
ArrayList<SubmissionPart> submissionParts = new ArrayList<>();
// tmp part
SubmissionPart tmpPart = null;
// tmp body element
SubmissionPartBodyElement tmpElement;
// tmp category
String tmpCategory = "";
do {
if (!tmpCategory.equals(rs.getString("category").toUpperCase())) {
// current tmp category
tmpCategory = rs.getString("category").toUpperCase();
// add last submission part
if (tmpPart != null) {
submissionParts.add(tmpPart);
}
// build submission part with empty body
tmpPart = new SubmissionPart(
rs.getString("id"),
rs.getTimestamp("timestamp").getTime(),
rs.getString("userId"),
rs.getString("fullSubmissionId"),
Category.valueOf(tmpCategory),
new ArrayList<SubmissionPartBodyElement>()
);
}
tmpElement = new SubmissionPartBodyElement(
rs.getString("text"),
rs.getInt("startCharacter"),
rs.getInt("endCharacter")
);
tmpPart.getBody().add(tmpElement);
} while (rs.next());
// add last part
submissionParts.add(tmpPart);
System.out.println(submissionParts.toString());
return submissionParts;
}
}
......@@ -2,27 +2,30 @@ package unipotsdam.gf.modules.submission.model;
import unipotsdam.gf.modules.peer2peerfeedback.Category;
import java.util.ArrayList;
/**
* @author Sven Kästle
* skaestle@uni-potsdam.de
*/
public class SubmissionPart {
// variables
private String id;
private long timestamp;
private String userId;
private String fullSubmissionId;
private String text;
private Category category;
private ArrayList<SubmissionPartBodyElement> body;
// constructor
public SubmissionPart(String id, long timestamp, String userId, String fullSubmissionId, String text, Category category) {
public SubmissionPart(String id, long timestamp, String userId, String fullSubmissionId, Category category, ArrayList<SubmissionPartBodyElement> body) {
this.id = id;
this.timestamp = timestamp;
this.userId = userId;
this.fullSubmissionId = fullSubmissionId;
this.text = text;
this.category = category;
this.body = body;
}
public SubmissionPart(){}
......@@ -60,14 +63,6 @@ public class SubmissionPart {
this.fullSubmissionId = fullSubmissionId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Category getCategory() {
return category;
}
......@@ -76,6 +71,14 @@ public class SubmissionPart {
this.category = category;
}
public ArrayList<SubmissionPartBodyElement> getBody() {
return body;
}
public void setBody(ArrayList<SubmissionPartBodyElement> body) {
this.body = body;
}
@Override
public String toString() {
return "SubmissionPart{" +
......@@ -83,8 +86,9 @@ public class SubmissionPart {
", timestamp=" + timestamp +
", userId='" + userId + '\'' +
", fullSubmissionId='" + fullSubmissionId + '\'' +
", text='" + text + '\'' +
", category=" + category +
", body=" + body +
'}';
}
}
package unipotsdam.gf.modules.submission.model;
/**
* @author Sven Kästle
* skaestle@uni-potsdam.de
*/
public class SubmissionPartBodyElement {
// variables
private String text;
private int startCharacter;
private int endCharacter;
// constructors
public SubmissionPartBodyElement(String text, int startCharacter, int endCharacter) {
this.text = text;
this.startCharacter = startCharacter;
this.endCharacter = endCharacter;
}
public SubmissionPartBodyElement() {}
// methods
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public int getStartCharacter() {
return startCharacter;
}
public void setStartCharacter(int startCharacter) {
this.startCharacter = startCharacter;
}
public int getEndCharacter() {
return endCharacter;
}
public void setEndCharacter(int endCharacter) {
this.endCharacter = endCharacter;
}
@Override
public String toString() {
return "SubmissionPartBodyElement{" +
", text='" + text + '\'' +
", startCharacter=" + startCharacter +
", endCharacter=" + endCharacter +
'}';
}
}
......@@ -2,23 +2,26 @@ package unipotsdam.gf.modules.submission.model;
import unipotsdam.gf.modules.peer2peerfeedback.Category;
import java.util.ArrayList;
/**
* @author Sven Kästle
* skaestle@uni-potsdam.de
*/
public class SubmissionPartPostRequest {
// variables
private String userId;
private String fullSubmissionId;
private String text;
private Category category;
private ArrayList<SubmissionPartBodyElement> body;
// constructors
public SubmissionPartPostRequest(String userId, String fullSubmissionId, String text, Category category) {
public SubmissionPartPostRequest(String userId, String fullSubmissionId, Category category, ArrayList<SubmissionPartBodyElement> body) {
this.userId = userId;
this.fullSubmissionId = fullSubmissionId;
this.text = text;
this.category = category;
this.body = body;
}
public SubmissionPartPostRequest(){}
......@@ -40,14 +43,6 @@ public class SubmissionPartPostRequest {
this.fullSubmissionId = fullSubmissionId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Category getCategory() {
return category;
}
......@@ -56,13 +51,22 @@ public class SubmissionPartPostRequest {
this.category = category;
}
public ArrayList<SubmissionPartBodyElement> getBody() {
return body;
}
public void setBody(ArrayList<SubmissionPartBodyElement> body) {
this.body = body;
}
@Override
public String toString() {
return "SubmissionPartPostRequest{" +
"userId='" + userId + '\'' +
", fullSubmissionId='" + fullSubmissionId + '\'' +
", text='" + text + '\'' +
", category=" + category +
", body=" + body +
'}';
}
}
......@@ -6,6 +6,7 @@ import unipotsdam.gf.modules.submission.model.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
/**
* @author Sven Kästle
......@@ -65,13 +66,31 @@ public class SubmissionService {
SubmissionController controller = new SubmissionController();
SubmissionPart submissionPart = controller.getSubmissionPart(submissionPartId);
if(submissionPart != null) {
if (submissionPart != null) {
return Response.ok(submissionPart).build();
}
else {
// declare response
SubmissionResponse response = new SubmissionResponse();
response.setMessage("Submission with the id '" + submissionPartId + "' can't be found");
response.setMessage("Submission part with the id '" + submissionPartId + "' can't be found");
return Response.status(Response.Status.NOT_FOUND).entity(response).build();
}
}
@GET
@Path("/full/{id}/parts")
public Response getAllSubmissionParts(@PathParam("id") String fullSubmissionId) {
// get submission parts from database based by id
SubmissionController controller = new SubmissionController();
ArrayList<SubmissionPart> parts = controller.getAllSubmissionParts(fullSubmissionId);
if (parts.size() > 0) {
return Response.ok(parts).build();
}
else {
SubmissionResponse response = new SubmissionResponse();
response.setMessage("No submission parts found for submission with the id '" + fullSubmissionId + "'");
return Response.status(Response.Status.NOT_FOUND).entity(response).build();
}
......
......@@ -86,4 +86,28 @@ function getSubmissionPart(id, responseHandler, errorHandler) {
errorHandler();
}
})
}
/**
* GET: Get all submission parts for a given full submission id
*
* @param id The id of the full submission
* @param responseHandler The response handler
* @param errorHandler The error handler
*/
function getAllSubmissionParts(id, responseHandler, errorHandler) {
var url = "../rest/submissions/full/" + id + "/parts";
$.ajax({
url: url,
type: "GET",
dataType: "json",
success: function (response) {
// handle the response
responseHandler(response);
},
error: function () {
// handle the error
errorHandler();
}
})
}
\ No newline at end of file
......@@ -134,11 +134,18 @@ CREATE TABLE if not exists `submissionparts` (
`timestamp` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`userId` VARCHAR(120) NOT NULL,
`fullSubmissionId` VARCHAR(120) NOT NULL,
`text` MEDIUMTEXT NOT NULL,
`category` VARCHAR(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE if not exists `submissionpartbodyelements` (
`submissionPartId` VARCHAR(120) NOT NULL,
`text` MEDIUMTEXT NOT NULL,
`startCharacter` int(11) NOT NULL,
`endCharacter` int(11) NOT NULL,
PRIMARY KEY (`submissionPartId`, `startCharacter`, `endCharacter`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
alter table users
add isStudent tinyint(1) default '1' null;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment