New servlet containing all survey results

This commit is contained in:
Imbus 2024-02-15 13:28:33 +01:00
parent 0043e3d9c0
commit 73c60d9c52
7 changed files with 183 additions and 19 deletions

View file

@ -25,6 +25,7 @@ dumptables:
sqlite3 $(DB_NAME) "SELECT * FROM Respondents;" sqlite3 $(DB_NAME) "SELECT * FROM Respondents;"
sqlite3 $(DB_NAME) "SELECT * FROM Answers;" sqlite3 $(DB_NAME) "SELECT * FROM Answers;"
sqlite3 $(DB_NAME) "SELECT * FROM ProjectDetails;" sqlite3 $(DB_NAME) "SELECT * FROM ProjectDetails;"
sqlite3 $(DB_NAME) "SELECT * FROM SurveyResults;"
# Phony targets # Phony targets
.PHONY: all init_db clean .PHONY: all init_db clean

View file

@ -1,18 +1,35 @@
CREATE TABLE IF NOT EXISTS Respondents ( CREATE TABLE
name VARCHAR(255) PRIMARY KEY IF NOT EXISTS Respondents (name VARCHAR(255) PRIMARY KEY);
);
CREATE TABLE IF NOT EXISTS Answers ( CREATE TABLE
IF NOT EXISTS Answers (
answerOne INT, answerOne INT,
answerTwo INT, answerTwo INT,
answerThree INT, answerThree INT,
answerFour INT, answerFour INT,
name VARCHAR(255), name VARCHAR(255) NOT NULL,
FOREIGN KEY (name) REFERENCES Respondents(name) projectName VARCHAR(255) NOT NULL,
); FOREIGN KEY (name) REFERENCES Respondents (name),
FOREIGN KEY (projectName) REFERENCES ProjectDetails (projectName)
);
CREATE TABLE IF NOT EXISTS ProjectDetails ( CREATE TABLE
projectID INT PRIMARY KEY, IF NOT EXISTS ProjectDetails (
projectName VARCHAR(255), projectName VARCHAR(255) PRIMARY KEY,
projectDescription TEXT projectDescription TEXT
); );
CREATE VIEW
IF NOT EXISTS SurveyResults AS
SELECT
Respondents.name,
Answers.answerOne,
Answers.answerTwo,
Answers.answerThree,
Answers.answerFour,
Answers.projectName,
ProjectDetails.projectDescription
FROM
Respondents
JOIN Answers ON Respondents.name = Answers.name
JOIN ProjectDetails ON Answers.projectName = ProjectDetails.projectName;

View file

@ -66,8 +66,8 @@ public class Database implements AutoCloseable {
} }
} }
public boolean addAnswer(String name, String answerOne, String answerTwo, String answerThree, String answerFour) { public boolean addAnswer(String name, String projectName, String answerOne, String answerTwo, String answerThree, String answerFour) {
String sql = "insert into Answers (answerOne, answerTwo, answerThree, answerFour, name) values(?,?,?,?,?)"; String sql = "insert into Answers (answerOne, answerTwo, answerThree, answerFour, name, projectName) values(?,?,?,?,?,?)";
try (PreparedStatement ps = conn.prepareStatement(sql)) { try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, answerOne); ps.setString(1, answerOne);
@ -75,6 +75,7 @@ public class Database implements AutoCloseable {
ps.setString(3, answerThree); ps.setString(3, answerThree);
ps.setString(4, answerFour); ps.setString(4, answerFour);
ps.setString(5, name); ps.setString(5, name);
ps.setString(6, projectName);
ps.executeUpdate(); ps.executeUpdate();
return true; return true;
} catch (SQLException e) { } catch (SQLException e) {
@ -86,7 +87,32 @@ public class Database implements AutoCloseable {
} }
return false; return false;
} }
}
/**
* Get all the survey results from the database
*/
public SurveyResult[] getSurveyResults() {
String sql = "select * from SurveyResults";
try (Statement stmt = conn.createStatement()) {
ResultSet rs = stmt.executeQuery(sql);
SurveyResult[] results = new SurveyResult[100];
int i = 0;
while (rs.next()) {
String respName = rs.getString("name");
String projectName = rs.getString("projectName");
String projectDescription = rs.getString("projectDescription");
int[] data = { rs.getInt("answerOne"), rs.getInt("answerTwo"), rs.getInt("answerThree"),
rs.getInt("answerFour") };
results[i] = new SurveyResult(respName, projectName, projectDescription, data);
i++;
}
return results;
} catch (SQLException e) {
printSqlError(e);
return null;
}
} }
private void printSqlError(SQLException e) { private void printSqlError(SQLException e) {

View file

@ -56,4 +56,17 @@ public class FormGenerator {
return html; return html;
} }
public String resultsTable(SurveyResult[] results) {
String html = "<table border=" + formElement("1") + ">";
html += "<tr><th>Respondent</th><th>Project</th><th>Description</th><th>Factor 1</th><th>Factor 2</th><th>Factor 3</th><th>Factor 4</th></tr>";
for (SurveyResult result : results) {
if (result == null)
break;
html += "<tr><td>" + result.getName() + "</td><td>" + result.getProjectName() + "</td><td>"
+ result.getProjectDesc() + "</td><td>" + result.getData()[0] + "</td><td>" + result.getData()[1]
+ "</td><td>" + result.getData()[2] + "</td><td>" + result.getData()[3] + "</td></tr>";
}
html += "</table>";
return html;
}
} }

View file

@ -0,0 +1,67 @@
package servlet;
import java.io.*;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Results.
*
* This class is responsible for displaying the results of the survey.
* It should be able to display the results of the survey in a table.
*/
@WebServlet("/Results")
public class Results extends HttpServlet {
private static final long serialVersionUID = 1L;
private Database db = new Database();
private FormGenerator formGenerator = new FormGenerator();
/**
* Default constructor.
*/
public Results() {
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
SurveyResult[] results = db.getSurveyResults();
// SurveyResult[] results = {
// new SurveyResult("John", "Project 1", new int[] { 1, 2, 3, 4 }),
// new SurveyResult("Jane", "Project 2", new int[] { 5, 6, 7, 8 }),
// new SurveyResult("Joe", "Project 3", new int[] { 9, 10, 1, 2 }),
// new SurveyResult("Jill", "Project 4", new int[] { 3, 4, 5, 6 }),
// new SurveyResult("Jack", "Project 5", new int[] { 7, 8, 9, 10 }),
// };
for (SurveyResult result : results) {
if (result == null)
break;
System.out.println(result.toString());
}
// Get a writer
PrintWriter out = response.getWriter();
out.println(formGenerator.resultsTable(results));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

View file

@ -105,6 +105,7 @@ public class Survey extends HttpServlet {
name = (String) session.getAttribute("name"); name = (String) session.getAttribute("name");
String description = request.getParameter("proj_desc"); String description = request.getParameter("proj_desc");
String proj_name = request.getParameter("proj_name"); String proj_name = request.getParameter("proj_name");
session.setAttribute("proj_name", proj_name);
System.out.println("description: " + description); System.out.println("description: " + description);
if (description != null) { if (description != null) {
state = NEED_PROJECT_DATA; state = NEED_PROJECT_DATA;
@ -138,11 +139,14 @@ public class Survey extends HttpServlet {
// display the next page // display the next page
if (valuesOk) { if (valuesOk) {
int sum = s11 + s12 + s13 + s14; int sum = s11 + s12 + s13 + s14;
db.addAnswer(name, s11String, s12String, s13String, s14String); // db.addAnswer(name, s11String, s12String, s13String, s14String);
db.addAnswer(name, (String) session.getAttribute("proj_name"), s11String, s12String, s13String,
s14String);
// This is only to show that it is possible to do something with the values. // This is only to show that it is possible to do something with the values.
// It is of course meaningless to calculate the sum. // It is of course meaningless to calculate the sum.
out.println("<p> Hello " + name); out.println("<p> Hello " + name);
out.println("<p> The sum of the values you entered is " + sum); out.println("<p> The sum of the values you entered is " + sum);
out.println("<p>To view other results, click <a href=\"Results\">here</a>");
sessionShouldBeEnded = true; sessionShouldBeEnded = true;
} else { } else {
out.println("The values you entered were not OK"); out.println("The values you entered were not OK");

View file

@ -0,0 +1,36 @@
package servlet;
public class SurveyResult {
private String respName;
private String projectName;
private String projectDesc;
private int[] data;
public SurveyResult(String respName, String projectName, String projectDesc, int[] data) {
this.respName = respName;
this.projectName = projectName;
this.projectDesc = projectDesc;
this.data = data;
}
public String getName() {
return respName;
}
public String getProjectName() {
return projectName;
}
public String getProjectDesc() {
return projectDesc;
}
public int[] getData() {
return data;
}
public String toString() {
return String.format("Name: %s, Project: %s, Project Description: %s, Data: %d, %d, %d, %d", respName,
projectName, projectDesc, data[0], data[1], data[2], data[3]);
}
}