diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java index 5e74d0320fd482029e50d3369650343a55131550..b67218084e687c6cb1c279d90e22ac28a7a9d1f0 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java @@ -1,6 +1,7 @@ package unipotsdam.gf.config; import org.glassfish.hk2.utilities.binding.AbstractBinder; +import unipotsdam.gf.core.database.mysql.MysqlConnect; import unipotsdam.gf.core.management.Management; import unipotsdam.gf.core.management.ManagementImpl; import unipotsdam.gf.core.management.group.GroupDAO; @@ -45,6 +46,7 @@ public class GFApplicationBinder extends AbstractBinder { bind(UserDAO.class).to(UserDAO.class); bind(ProjectDAO.class).to(ProjectDAO.class); bind(GroupDAO.class).to(GroupDAO.class); + bind(MysqlConnect.class).to(MysqlConnect.class); } } 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 d5c42e2cceb64410da5b040a276c63c10083d4ee..c0330b7c98da9d0451026fe31c9eecdea02272f3 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 @@ -3,152 +3,160 @@ package unipotsdam.gf.core.database.mysql; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import unipotsdam.gf.config.GFDatabaseConfig; -import unipotsdam.gf.modules.communication.view.CommunicationView; -import java.sql.*; +import javax.annotation.ManagedBean; +import javax.annotation.Resource; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Types; import java.util.Date; +@ManagedBean +@Resource public class MysqlConnect { - private static final Logger log = LoggerFactory.getLogger(MysqlConnect.class); - - public Connection conn = null; - - private static String createConnectionString() { - - String connString = "jdbc:mysql://" + "localhost" + - "/" + GFDatabaseConfig.DB_NAME + - "?user=" + GFDatabaseConfig.USER + - "&password=" + GFDatabaseConfig.PASS; - return String.format(connString, GFDatabaseConfig.DB_NAME); - } - - public void connect() { - try { - try { - Class.forName("com.mysql.jdbc.Driver"); - } catch (ClassNotFoundException ex) { - System.out.println(ex); //logger? - } - conn = DriverManager.getConnection(createConnectionString()); - } catch (SQLException ex) { - System.out.println("SQLException: " + ex.getMessage()); - System.out.println("SQLState: " + ex.getSQLState()); - System.out.println("VendorError: " + ex.getErrorCode()); - throw new Error("could not connect to mysql"); - } - } - - - public void close() { - try { - if (conn != null) { - conn.close(); - } - } catch (final SQLException e) { - log.error(e.toString()); - throw new Error("could not close mysql"); - } - } - - private PreparedStatement addParameters(final String statement, final Object[] args) { - try { - final PreparedStatement ps = conn.prepareStatement(statement); - if (args != null) { - for (int i = 0; i < args.length; i++) { - final Object arg = args[i]; - setParam(ps, arg, i + 1); - } - } - return ps; - } catch (SQLException ex) { - log.error(ex.toString()); - System.out.println(ex); - } - return null; - } - - - public VereinfachtesResultSet issueSelectStatement(final String statement, final Object... args) { - try { - PreparedStatement ps = addParameters(statement, args); - ResultSet queryResult = ps.executeQuery(); - return new VereinfachtesResultSet(queryResult); - } catch (SQLException ex) { - log.error(ex.toString()); - System.out.println(ex); - } - return null; - } - - - public void otherStatements(final String statement) { - try { - this.conn.createStatement().execute(statement); - } catch (SQLException ex) { - log.error(ex.toString()); - System.out.println(ex); - } - } - - - public Integer issueUpdateStatement(final String statement, final Object... args) { - PreparedStatement ps = addParameters(statement, args); - try { - return ps.executeUpdate(); - } catch (SQLException ex) { - log.error(ex.toString()); - System.out.println(ex); - } - return null; - } - - - public void issueInsertOrDeleteStatement(final String statement, final Object... args) { - PreparedStatement ps = addParameters(statement, args); - try { - ps.execute(); - } catch (SQLException ex) { - - log.error(ex.toString()); - System.out.println(ex); - } - } - - private void setParam(final PreparedStatement ps, final Object arg, final int i) throws SQLException { - if (arg instanceof String) { - ps.setString(i, (String) arg); - } else if (arg instanceof Integer) { - ps.setInt(i, (Integer) arg); - } else if (arg instanceof Double) { - ps.setDouble(i, (Double) arg); - } else if (arg instanceof Boolean) { - ps.setBoolean(i, (Boolean) arg); - } else if (arg instanceof Float) { - ps.setFloat(i, (Float) arg); - } else if (arg instanceof Short) { - ps.setShort(i, (Short) arg); - } else if (arg instanceof Long) { - ps.setLong(i, (Long) arg); - } else if (arg instanceof Byte) { - ps.setByte(i, (Byte) arg); - } 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()); - ps.setDate(i, d); - } else if (arg == null) { - ps.setNull(i, Types.NULL); - } else { - ps.setString(i, arg.toString()); - } - } - - public Connection getConnection() { - return conn; - } - - public void setConnection(Connection conn) { - this.conn = conn; - } + private static final Logger log = LoggerFactory.getLogger(MysqlConnect.class); + + public Connection conn = null; + + private static String createConnectionString() { + + String connString = "jdbc:mysql://" + "localhost" + + "/" + GFDatabaseConfig.DB_NAME + + "?user=" + GFDatabaseConfig.USER + + "&password=" + GFDatabaseConfig.PASS; + return String.format(connString, GFDatabaseConfig.DB_NAME); + } + + public void connect() { + try { + try { + Class.forName("com.mysql.jdbc.Driver"); + } catch (ClassNotFoundException ex) { + System.out.println(ex); //logger? + } + conn = DriverManager.getConnection(createConnectionString()); + } catch (SQLException ex) { + System.out.println("SQLException: " + ex.getMessage()); + System.out.println("SQLState: " + ex.getSQLState()); + System.out.println("VendorError: " + ex.getErrorCode()); + throw new Error("could not connect to mysql"); + } + } + + + public void close() { + try { + if (conn != null) { + conn.close(); + } + } catch (final SQLException e) { + log.error(e.toString()); + throw new Error("could not close mysql"); + } + } + + private PreparedStatement addParameters(final String statement, final Object[] args) { + try { + final PreparedStatement ps = conn.prepareStatement(statement); + if (args != null) { + for (int i = 0; i < args.length; i++) { + final Object arg = args[i]; + setParam(ps, arg, i + 1); + } + } + return ps; + } catch (SQLException ex) { + log.error(ex.toString()); + System.out.println(ex); + } + return null; + } + + + public VereinfachtesResultSet issueSelectStatement(final String statement, final Object... args) { + try { + PreparedStatement ps = addParameters(statement, args); + ResultSet queryResult = ps.executeQuery(); + return new VereinfachtesResultSet(queryResult); + } catch (SQLException ex) { + log.error(ex.toString()); + System.out.println(ex); + } + return null; + } + + + public void otherStatements(final String statement) { + try { + this.conn.createStatement().execute(statement); + } catch (SQLException ex) { + log.error(ex.toString()); + System.out.println(ex); + } + } + + + public Integer issueUpdateStatement(final String statement, final Object... args) { + PreparedStatement ps = addParameters(statement, args); + try { + return ps.executeUpdate(); + } catch (SQLException ex) { + log.error(ex.toString()); + System.out.println(ex); + } + return null; + } + + + public void issueInsertOrDeleteStatement(final String statement, final Object... args) { + PreparedStatement ps = addParameters(statement, args); + try { + ps.execute(); + } catch (SQLException ex) { + + log.error(ex.toString()); + System.out.println(ex); + } + } + + private void setParam(final PreparedStatement ps, final Object arg, final int i) throws SQLException { + if (arg instanceof String) { + ps.setString(i, (String) arg); + } else if (arg instanceof Integer) { + ps.setInt(i, (Integer) arg); + } else if (arg instanceof Double) { + ps.setDouble(i, (Double) arg); + } else if (arg instanceof Boolean) { + ps.setBoolean(i, (Boolean) arg); + } else if (arg instanceof Float) { + ps.setFloat(i, (Float) arg); + } else if (arg instanceof Short) { + ps.setShort(i, (Short) arg); + } else if (arg instanceof Long) { + ps.setLong(i, (Long) arg); + } else if (arg instanceof Byte) { + ps.setByte(i, (Byte) arg); + } 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()); + ps.setDate(i, d); + } else if (arg == null) { + ps.setNull(i, Types.NULL); + } else { + ps.setString(i, arg.toString()); + } + } + + public Connection getConnection() { + return conn; + } + + public void setConnection(Connection conn) { + this.conn = conn; + } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/GroupDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/GroupDAO.java index 2d7ce6d3a83f2108c53c9d683ed3cb263da399b9..6467339a6bc7544772a6a3c14292c1151959f7bc 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/GroupDAO.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/GroupDAO.java @@ -7,6 +7,7 @@ import unipotsdam.gf.core.management.util.ResultSetUtil; import javax.annotation.ManagedBean; import javax.annotation.Resource; +import javax.inject.Inject; import javax.inject.Singleton; import java.util.ArrayList; import java.util.Collections; @@ -18,8 +19,14 @@ import java.util.List; @Singleton public class GroupDAO { + private MysqlConnect connect; + + @Inject + public GroupDAO(MysqlConnect connect) { + this.connect = connect; + } + public void persist(Group group) { - MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequestGroup = "INSERT INTO groups (`projectId`,`chatRoomId`) values (?,?)"; @@ -33,11 +40,10 @@ public class GroupDAO { } public void update(Group group) { - MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "UPDATE group SET projectId=?,chatRoomid=?"; connect.issueUpdateStatement(mysqlRequest, group.getProjectId(), group.getChatRoomId()); - + connect.close(); // TODO: implement update of groupuser if needed later (if member list need to be updated) } @@ -56,7 +62,6 @@ public class GroupDAO { } public List<Group> getGroupsByProjectId(String projectId) { - MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "SELECT * FROM groups g " + "JOIN groupuser gu ON g.id=gu.groupId " + "JOIN users u ON gu.userEmail=u.email" + @@ -69,11 +74,11 @@ public class GroupDAO { } ArrayList<Group> groups = new ArrayList<>(); groupHashMap.forEach((key, group) -> groups.add(group)); + + connect.close(); if (groups.isEmpty()) { return null; } - connect.close(); - return groups; } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/ProjectDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/ProjectDAO.java index 4dec207bf972d569a98c57e8fa77ad7528e34fee..d987951de5ebb166f2d0d3a4ff28dd7df4bcc460 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/ProjectDAO.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/ProjectDAO.java @@ -6,6 +6,7 @@ import unipotsdam.gf.core.states.ProjectPhase; import javax.annotation.ManagedBean; import javax.annotation.Resource; +import javax.inject.Inject; import javax.inject.Singleton; import java.sql.Timestamp; import java.util.UUID; @@ -15,12 +16,17 @@ import java.util.UUID; @Singleton public class ProjectDAO { + private MysqlConnect connect; + + @Inject + public ProjectDAO(MysqlConnect connect) { + this.connect = connect; + } + public void persist(Project project) { UUID uuid = UUID.randomUUID(); String token = uuid.toString(); - - MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "INSERT INTO projects (`id`, `password`, `active`, `timecreated`, `author`, " @@ -32,7 +38,6 @@ public class ProjectDAO { } public void delete(Project project) { - MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "DELETE FROM projects where id = (?)"; connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId()); @@ -44,7 +49,6 @@ public class ProjectDAO { public Boolean exists(Project project) { Boolean result; - MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "SELECT * FROM projects where id = ? and adminPassword = ?"; VereinfachtesResultSet vereinfachtesResultSet = @@ -55,7 +59,6 @@ public class ProjectDAO { } public Project getProjectById(String id) { - MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "SELECT * FROM projects where id = ?"; VereinfachtesResultSet vereinfachtesResultSet = diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserDAO.java index f3e2bd2bcc5b99ca1b83aec370529033982baa86..693964a1f3ff56cbae122c8ba72c7777f8197f0f 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserDAO.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserDAO.java @@ -7,6 +7,7 @@ import unipotsdam.gf.core.management.util.ResultSetUtil; import javax.annotation.ManagedBean; import javax.annotation.Resource; +import javax.inject.Inject; import javax.inject.Singleton; import java.util.ArrayList; import java.util.List; @@ -17,11 +18,18 @@ import java.util.UUID; @Singleton public class UserDAO { + + private MysqlConnect connect; + + @Inject + public UserDAO(MysqlConnect connect) { + this.connect = connect; + } + public void persist(User user, UserProfile profile) { UUID uuid = UUID.randomUUID(); String token = uuid.toString(); - MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "INSERT INTO users (`name`, `password`, `email`, `token`,`isStudent`," + "`rocketChatId`,`rocketChatAuthToken`) values (?,?,?,?,?,?,?)"; @@ -33,7 +41,6 @@ public class UserDAO { } public void delete(User user) { - MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "DELETE FROM users where email = (?)"; connect.issueInsertOrDeleteStatement(mysqlRequest, user.getEmail()); @@ -41,7 +48,6 @@ public class UserDAO { } public void update(User user) { - MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "UPDATE `users` SET `name`=?,`password`=?,`email`=?,`token`=?,`isStudent`=?," + "`rocketChatId`=?,`rocketChatAuthToken`=? WHERE email=? LIMIT 1"; @@ -55,7 +61,6 @@ public class UserDAO { public boolean exists(User user) { boolean result; - MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "SELECT * FROM users where email = ? and password = ?"; VereinfachtesResultSet vereinfachtesResultSet = @@ -73,7 +78,6 @@ public class UserDAO { + " WHERE pu.projectId = ?"; ArrayList<User> result = new ArrayList<>(); - MysqlConnect connect = new MysqlConnect(); connect.connect(); VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(query, project.getId()); while (!vereinfachtesResultSet.isLast()) { @@ -92,7 +96,6 @@ public class UserDAO { } public String getUserToken(User user) { - MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "SELECT * FROM users where email = ? and password = ?"; VereinfachtesResultSet vereinfachtesResultSet = @@ -116,7 +119,6 @@ public class UserDAO { } private User getUserByField(String field, String value) { - MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "SELECT * FROM users where " + field + " = ?"; VereinfachtesResultSet vereinfachtesResultSet = @@ -131,6 +133,4 @@ public class UserDAO { return null; } } - - }