From 5bbfe9e68d4a1c293285c9a58997062f2b7eb708 Mon Sep 17 00:00:00 2001 From: tudtianus <tudtianus@gmail.com> Date: Sun, 8 Jul 2018 18:30:22 +0200 Subject: [PATCH] feat: connect Journal to DB --- .../gf/core/database/mysql/MysqlConnect.java | 28 +-- .../modules/journal/model/JournalDAOImpl.java | 6 +- .../journal/service/JournalServiceImpl.java | 4 +- .../gf/modules/journal/view/JournalView.java | 4 +- .../main/webapp/assets/js/createJournal.js | 6 +- .../src/main/webapp/assets/js/e-portfolio.js | 99 ++++++----- .../src/main/webapp/pages/createJournal.jsp | 164 +++++++++--------- .../src/main/webapp/pages/eportfolio.jsp | 5 +- 8 files changed, 166 insertions(+), 150 deletions(-) diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/MysqlConnect.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/MysqlConnect.java index 80ed128c..7ce548e4 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/MysqlConnect.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/MysqlConnect.java @@ -1,5 +1,7 @@ package unipotsdam.gf.core.database.mysql; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import unipotsdam.gf.config.GFDatabaseConfig; import java.sql.*; @@ -7,6 +9,7 @@ import java.util.Date; public class MysqlConnect { + private final Logger log = LoggerFactory.getLogger(MysqlConnect.class); public Connection conn = null; private static String createConnectionString() { @@ -25,7 +28,7 @@ public class MysqlConnect { } catch (ClassNotFoundException ex) { System.out.println(ex); //logger? } - conn = DriverManager.getConnection(createConnectionString()); + conn = DriverManager.getConnection(MysqlConnect.createConnectionString()); } catch (SQLException ex) { System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); @@ -40,17 +43,17 @@ public class MysqlConnect { if (conn != null) { conn.close(); } - } catch (final SQLException e) { + } catch (SQLException e) { throw new Error("could not close mysql"); } } - private PreparedStatement addParameters(final String statement, final Object[] args) { + private PreparedStatement addParameters(String statement, Object[] args) { try { - final PreparedStatement ps = conn.prepareStatement(statement); + PreparedStatement ps = conn.prepareStatement(statement); if (args != null) { for (int i = 0; i < args.length; i++) { - final Object arg = args[i]; + Object arg = args[i]; setParam(ps, arg, i + 1); } } @@ -62,7 +65,7 @@ public class MysqlConnect { } - public VereinfachtesResultSet issueSelectStatement(final String statement, final Object... args) { + public VereinfachtesResultSet issueSelectStatement(String statement, Object... args) { try { PreparedStatement ps = addParameters(statement, args); ResultSet queryResult = ps.executeQuery(); @@ -74,17 +77,18 @@ public class MysqlConnect { } - public void otherStatements(final String statement) { + public void otherStatements(String statement) { try { - this.conn.createStatement().execute(statement); + conn.createStatement().execute(statement); } catch (SQLException ex) { System.out.println(ex); } } - public Integer issueUpdateStatement(final String statement, final Object... args) { + public Integer issueUpdateStatement(String statement, Object... args) { PreparedStatement ps = addParameters(statement, args); + log.debug("Statement:" + ps.toString()); try { return ps.executeUpdate(); } catch (SQLException ex) { @@ -94,7 +98,7 @@ public class MysqlConnect { } - public void issueInsertOrDeleteStatement(final String statement, final Object... args) { + public void issueInsertOrDeleteStatement(String statement, Object... args) { PreparedStatement ps = addParameters(statement, args); try { ps.execute(); @@ -103,7 +107,7 @@ public class MysqlConnect { } } - private void setParam(final PreparedStatement ps, final Object arg, final int i) throws SQLException { + private void setParam(PreparedStatement ps, Object arg, int i) throws SQLException { if (arg instanceof String) { ps.setString(i, (String) arg); } else if (arg instanceof Integer) { @@ -123,7 +127,7 @@ public class MysqlConnect { } else if (arg instanceof Character) { ps.setString(i, arg.toString()); } else if (arg instanceof Date) { - final java.sql.Date d = new java.sql.Date(((Date) arg).getTime()); + java.sql.Date d = new java.sql.Date(((Date) arg).getTime()); ps.setDate(i, d); } else if (arg == null) { ps.setNull(i, Types.NULL); diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/JournalDAOImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/JournalDAOImpl.java index 29051320..497a6f9a 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/JournalDAOImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/JournalDAOImpl.java @@ -23,8 +23,8 @@ public class JournalDAOImpl implements JournalDAO { connection.connect(); // build and execute request - String request = "INSERT INTO journals (`id`, `timestamp`, `author`, `project`, `text`, `visibility`,`category`, `open` ) VALUES (?,?,?,?,?,?,?,?);"; - connection.issueInsertOrDeleteStatement(request, uuid, journal.getTimestamp(), journal.getStudentIdentifier().getStudentId(), + String request = "INSERT INTO journals (`id`, `author`, `project`, `text`, `visibility`,`category`, `open` ) VALUES (?,?,?,?,?,?,?);"; + connection.issueInsertOrDeleteStatement(request, uuid, journal.getStudentIdentifier().getStudentId(), journal.getStudentIdentifier().getProjectId(), journal.getEntryMD(), journal.getVisibility(), journal.getCategory(), true); //close connection @@ -205,7 +205,7 @@ public class JournalDAOImpl implements JournalDAO { String category = rs.getString("category"); boolean open = rs.getBoolean("open"); - return new Journal(id, new StudentIdentifier(student, project), text, timestamp, JournalUtils.stringToVisibility(visibility), JournalUtils.stringToCategory(category), open); + return new Journal(id, new StudentIdentifier(project, student), text, timestamp, JournalUtils.stringToVisibility(visibility), JournalUtils.stringToCategory(category), open); } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalServiceImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalServiceImpl.java index da139f7a..56e7a407 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalServiceImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalServiceImpl.java @@ -15,7 +15,7 @@ public class JournalServiceImpl implements JournalService { @Override public Journal getJournal(String id) { - return null; + return journalDAO.getJournal(id); } @Override @@ -76,7 +76,7 @@ public class JournalServiceImpl implements JournalService { @Override public void closeJournal(String journal) { - + journalDAO.closeJournal(journal); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/view/JournalView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/view/JournalView.java index 7fda61ff..e1f597c1 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/view/JournalView.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/view/JournalView.java @@ -94,7 +94,7 @@ public class JournalView { //TODO token URI location; try { - location = new URI("../pages/eportfolio.jsp"); + location = new URI("../pages/eportfolio.jsp?token=test"); log.debug("<<< createJournal: redirect to " + location.toString()); return Response.temporaryRedirect(location).build(); @@ -139,7 +139,7 @@ public class JournalView { journalService.closeJournal(journal); //TODO token try { - URI location = new URI("../pages/eportfolio.jsp?"); + URI location = new URI("../pages/eportfolio.jsp?token=test"); log.debug("<<< closeJournal: redirect to " +location.toString()); return Response.temporaryRedirect(location).build(); diff --git a/gemeinsamforschen/src/main/webapp/assets/js/createJournal.js b/gemeinsamforschen/src/main/webapp/assets/js/createJournal.js index 7a5dba5a..31ba273f 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/createJournal.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/createJournal.js @@ -17,18 +17,20 @@ $(document).ready(function() { var journalID = getQueryVariable("journal"); console.log(journalID); if(journalID){ + $.ajax({ url: "../rest/journal/"+journalID }).then(function(data) { $('#editor').append(data.entryMD); //TODO preselet in select tags + new InscrybMDE({ element: document.getElementById("editor"), spellChecker: false, forceSync: true, }); - + $('#journalid').val(journalID); console.log(data); }); @@ -38,6 +40,8 @@ $(document).ready(function() { spellChecker: false, forceSync: true, }); + + $('#journalid').val("0"); } diff --git a/gemeinsamforschen/src/main/webapp/assets/js/e-portfolio.js b/gemeinsamforschen/src/main/webapp/assets/js/e-portfolio.js index 70ccf818..3e9df813 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/e-portfolio.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/e-portfolio.js @@ -1,13 +1,13 @@ //TODO Get student and project form context $(document).ready(function() { - $('#editDescriptionLink').on('click', function(){ + $('#editDescriptionLink').on('click', function () { /*TODO getJournal*/ - location.href="editDescription.jsp?project=0&token="+getUserTokenFromUrl(); + location.href = "editDescription.jsp?project=0&token=" + getUserTokenFromUrl(); }); - $('#createJournalLink').on('click', function(){ - location.href="createJournal.jsp?token="+getUserTokenFromUrl(); + $('#createJournalLink').on('click', function () { + location.href = "createJournal.jsp?token=" + getUserTokenFromUrl(); }); $.ajax({ @@ -36,6 +36,13 @@ $(document).ready(function() { }); +$(document).on("click", ".open-CloseJournalDialog", function () { + var journalID = $(this).data('id'); + console.log("on:" + $(this).data('id')); + $('#journalID-input').val(journalID); +}); + + function timestampToDateString(timestamp) { var date = new Date(timestamp); return date.toLocaleString("de-DE"); @@ -58,28 +65,38 @@ function filterJournals() { function loadJournals(data) { for (var journal in data) { - $('.journal').append( - '<div class="journal-container">' + - '<div class="journal-avatar">' + - 'getBild' + - '</div>' + - '<div class="journal-date"> ' + - timestampToDateString(data[journal].timestamp) + - '</div>' + - '<div class="journal-name">' + - data[journal].creator + - '</div>' + - '<div class="journal-category">' + - data[journal].category + - '</div>' + - '<div class="journal-edit" align="right">' + - '<a class="btn btn-default btn-sm" href="createJournal.jsp?token='+getUserTokenFromUrl()+'&journal=' + data[journal].id + '"><i class="fa fa-pencil"></i> Bearbeiten</a>' + - '<a class="btn btn-default btn-sm" data-toggle="modal" data-target="#closeJournalModal"><i class="fa fa-check-square" aria-hidden="true"></i>Abschließen</a>' + - '</div>' + - '<div class="journal-text">' + - data[journal].entryHTML + - '</div>' + - '</div><br><br>') + var journalString = '<div class="journal-container">' + + '<div class="journal-avatar">' + + 'getBild' + + '</div>' + + '<div class="journal-date"> ' + + timestampToDateString(data[journal].timestamp) + + '</div>' + + '<div class="journal-name">' + + // TODO id to name + data[journal].studentIdentifier.studentId + + '</div>' + + '<div class="journal-category">' + + data[journal].category + + '</div>' + + '<div class="journal-edit" align="right">'; + + //TODO userToken... + if (data[journal].studentIdentifier.studentId == "0" && data[journal].open) { + journalString = journalString + + '<a class="btn btn-default btn-sm" href="createJournal.jsp?token=' + getUserTokenFromUrl() + '&journal=' + data[journal].id + '"><i class="fa fa-pencil"></i> Bearbeiten</a>' + + '<a class="open-CloseJournalDialog btn btn-default btn-sm" data-toggle="modal" data-id =' + + data[journal].id + + ' data-target ="#closeJournalModal" > <i class="fa fa-check-square" aria-hidden = "true" ></i> Abschließen</a> ' + } + + journalString = journalString + '</div>' + + '<div class="journal-text">' + + data[journal].entryHTML + + '</div>' + + '</div><br><br>'; + + $('.journal').append(journalString) }}; @@ -88,7 +105,7 @@ function linkLoeschen(name) { $.ajax({ type: "POST", url: "../rest/projectdescription/deleteLink", - data: JSON.stringify(name), + data: JSON.stringify(eval(name)), contentType: "application/json; charset=utf-8", crossDomain: true, dataType: "json", @@ -100,36 +117,22 @@ function linkLoeschen(name) { } -function closeJournal(journal) { - console.log("löschen" + journal); +function closeJournal() { + var journalID = $('#journalID-input').val(); + console.log("schließe:=" + journalID); + $.ajax({ type: "POST", url: "../rest/journal/close", - data: JSON.stringify(journal), + data: journalID, contentType: "application/json; charset=utf-8", crossDomain: true, dataType: "json", success: function (data, status, jqXHR) { - alert(success); - } - }); - -} -function closeJournal(description) { - console.log("löschen" + description); - $.ajax({ - type: "POST", - url: "../rest/projectdescription/close", - data: JSON.stringify(description), - contentType: "application/json; charset=utf-8", - crossDomain: true, - dataType: "json", - success: function (data, status, jqXHR) { - - alert(success); } - }); + }); + filterJournals(); } \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/createJournal.jsp b/gemeinsamforschen/src/main/webapp/pages/createJournal.jsp index ac3da978..2f3243e1 100644 --- a/gemeinsamforschen/src/main/webapp/pages/createJournal.jsp +++ b/gemeinsamforschen/src/main/webapp/pages/createJournal.jsp @@ -1,105 +1,107 @@ -<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %> <!DOCTYPE html> <html> <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Tagebucheintrag erstellen</title> - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> - <link rel="stylesheet" href="../assets/css/styles.css"> - <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.css"> - <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> - <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> - <script src="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.js"></script> - <script src="../assets/js/utility.js"></script> - <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css"> - <link rel="stylesheet" href="../assets/css/Community-ChatComments.css"> - <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css"> - <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css"> - <link rel="stylesheet" type="text/css" href="../assets/css/create-journal.css"> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Tagebucheintrag erstellen</title> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> + <link rel="stylesheet" href="../assets/css/styles.css"> + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.css"> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> + <script src="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.js"></script> + <script src="../assets/js/utility.js"></script> + <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css"> + <link rel="stylesheet" href="../assets/css/Community-ChatComments.css"> + <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css"> + <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css"> + <link rel="stylesheet" type="text/css" href="../assets/css/create-journal.css"> </head> <body> <div id="wrapper"> - <menu:menu></menu:menu> + <menu:menu></menu:menu> - <div class="page-content-wrapper"> - <div class="container-fluid"> - <h1 id="projectId">project1 - <a href="#"> + <div class="page-content-wrapper"> + <div class="container-fluid"> + <h1 id="projectId">project1 + <a href="#"> <span class="glyphicon glyphicon-envelope" - style="font-size:27px;margin-top:-17px;margin-left:600px;"></span> - </a> - <a href="#"> - <span class="glyphicon glyphicon-cog" style="font-size:29px;margin-left:5px;margin-top:-25px;"></span> - </a></h1> - </div> - <div> - <table> - <tr> - <td id="yourContent"> - <h1> Tagebucheintrag erstellen </h1> - - <form id="journalform" class="form-journal" method="POST" action="../rest/journal/save" > - - <input type="hidden" name="student" value="0"> - <input type="hidden" name="project" value="0"> - - <div class="journal-form-container"> - - <div class = "journal-form-visibility"> - Sichtbarkeit: - <select id="visibility" name="visibility" form="journalform"> - <option value="ALL"> Alle </option> - <option value="GROUP"> Gruppe </option> - <option value="DOZENT"> Dozent </option> - <option value="NONE"> Nur Ich </option> - </select> - </div> - - <div class = "journal-form-category"> - Kategorie: - <select name="category" form="journalform"> - <option value="TITEL"> Titel </option> - <option value="RECHERCHE"> Recherche </option> - <option value="LITERATURVERZEICHNIS"> Literaturverzeichnis </option> - <option value="FORSCHUNGSFRAGE"> Forschungsfrage </option> - <option value="UNTERSUCHUNGSKONZEPT"> Untersuchungskonzept </option> - <option value="METHODIK"> Methodik </option> - <option value="DURCHFUEHRUNG"> Durchführung </option> - <option value="AUSWERTUNG"> Auswertung </option> - - </select> - </div> - - - <div class ="journal-form-editor"> - <textarea id = "editor" name="text" form="journalform" > + style="font-size:27px;margin-top:-17px;margin-left:600px;"></span> + </a> + <a href="#"> + <span class="glyphicon glyphicon-cog" + style="font-size:29px;margin-left:5px;margin-top:-25px;"></span> + </a></h1> + </div> + <div> + <table> + <tr> + <td id="yourContent"> + <h1> Tagebucheintrag erstellen </h1> + + <form id="journalform" class="form-journal" method="POST" action="../rest/journal/save"> + + <input type="hidden" name="student" value="0"> + <input type="hidden" name="project" value="0"> + <input type="hidden" id="journalid" name="id"> + + <div class="journal-form-container"> + + <div class="journal-form-visibility"> + Sichtbarkeit: + <select id="visibility" name="visibility" form="journalform"> + <option value="ALL"> Alle</option> + <option value="GROUP"> Gruppe</option> + <option value="DOZENT"> Dozent</option> + <option value="NONE"> Nur Ich</option> + </select> + </div> + + <div class="journal-form-category"> + Kategorie: + <select name="category" form="journalform"> + <option value="TITEL"> Titel</option> + <option value="RECHERCHE"> Recherche</option> + <option value="LITERATURVERZEICHNIS"> Literaturverzeichnis</option> + <option value="FORSCHUNGSFRAGE"> Forschungsfrage</option> + <option value="UNTERSUCHUNGSKONZEPT"> Untersuchungskonzept</option> + <option value="METHODIK"> Methodik</option> + <option value="DURCHFUEHRUNG"> Durchführung</option> + <option value="AUSWERTUNG"> Auswertung</option> + + </select> + </div> + + + <div class="journal-form-editor"> + <textarea id="editor" name="text" form="journalform"> </textarea> - </div> + </div> - <div class="journal-form-buttons"> - <input class="btn btn-default btn-sm" type="submit"> - <a id="backLink" class="btn btn-default btn-sm"> Zurück </a> - </div> + <div class="journal-form-buttons"> + <input class="btn btn-default btn-sm" type="submit"> + <a id="backLink" class="btn btn-default btn-sm"> Zurück </a> + </div> - </div> - </form> + </div> + </form> - </td> - </tr> - </table> - </div> - </div> + </td> + </tr> + </table> + </div> + </div> </div> <script src="../assets/js/jquery.min.js"></script> <script src="../assets/bootstrap/js/bootstrap.min.js"></script> <script src="../assets/js/Sidebar-Menu.js"></script> -<script src="../assets/js/createJournal.js"></script> +<script src="../assets/js/createJournal.js"></script> </body> </html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/eportfolio.jsp b/gemeinsamforschen/src/main/webapp/pages/eportfolio.jsp index 9b8c7327..e0fe94c1 100644 --- a/gemeinsamforschen/src/main/webapp/pages/eportfolio.jsp +++ b/gemeinsamforschen/src/main/webapp/pages/eportfolio.jsp @@ -124,11 +124,14 @@ <h4 class="modal-title">Tagebucheintrag schließen</h4> </div> <div class="modal-body"> + <input type="hidden" name="journalID" id="journalID-input" value=""/> Tagebucheintrag schließen? Dieser Eintrag kann nach Bestätigung nicht mehr bearbeitet werden. </div> <div class="modal-footer"> <div class="btn-group"> - <button type="button" class="btn btn-primary mr-auto">Ja</button> + <button type="button" class="btn btn-primary mr-auto" data-dismiss="modal" onclick="closeJournal()"> + Ja + </button> <button type="button" class="btn btn-secondary" data-dismiss="modal">Nein</button> </div> -- GitLab