Skip to content
Snippets Groups Projects
Commit 6295e76b authored by Ellen Seifert's avatar Ellen Seifert
Browse files

added er-diagramm.pdf and database-class-diagramm.pdf

changed database file struture
changed attribute names
added hikari dependency
parent d4795207
No related branches found
No related tags found
1 merge request!14added er-diagramm.pdf and database-class-diagramm.pdf
Showing
with 3066 additions and 73 deletions
File added
File added
......@@ -28,5 +28,12 @@
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
</dependencies>
</project>
package de.uniwue.swp.sshtool.database;
public class ConnectionStatus {
}
package de.uniwue.swp.sshtool.database;
import com.zaxxer.hikari.HikariDataSource;
import de.uniwue.swp.sshtool.database.utils.FileStatus;
import de.uniwue.swp.sshtool.database.utils.SessionStatus;
import de.uniwue.swp.sshtool.database.utils.TransactionType;
import javax.sql.DataSource;
import java.sql.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* Klasse gerade nur für Kopieren im Gebrauch, danach gelöscht
*/
public class DBAccess { /*
private final DataSource dataSource;
private static DBAccess instance;
private DBAccess(DataSource dataSource) {
this.dataSource = dataSource;
}
public static DBAccess login(String username, String password, String url) {
if(instance==null){
HikariDataSource ds=new HikariDataSource();
ds.setJdbcUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return new DBAccess(ds);
}
return instance;
}
@Override
public List<File> getFilesInTransaction(int transaction_id) throws SQLException {
Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement("");
statement.setInt(1, transaction_id);
ResultSet rs = statement.executeQuery();
ArrayList<File> files = new ArrayList<>();
while (rs.next()) {
int id = rs.getInt("file_id");
String localPath = rs.getString("localPath");
String remotePath = rs.getString("remotePath");
FileStatus status = FileStatus.values()[rs.getInt("status")];
files.add(new File(id, localPath, remotePath, status, transaction_id));
}
return files;
}
@Override
public List<Transaction> getIncompleteTransactions(String username) throws SQLException {
Connection connection = dataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement("");
stmt.setString(1, username);
ResultSet rs;
rs = stmt.executeQuery();
ArrayList<Transaction> transactions = new ArrayList<>();
while (rs.next()) {
int id = rs.getInt("transaction_id");
LocalDateTime start = rs.getTimestamp("start_timestamp").toLocalDateTime();
LocalDateTime end = rs.getTimestamp("end_timestamp").toLocalDateTime();
String user = rs.getString("user");
TransactionType type = TransactionType.values()[rs.getInt("type")];
transactions.add(new Transaction(id, start, end, user, type, getFilesInTransaction(id)));
}
return transactions;
}
@Override
public void cancelTransaction(int transaction_id) throws SQLException {
Connection connection = dataSource.getConnection();
PreparedStatement st = connection.prepareStatement("");
st.setInt(1, FileStatus.CANCELLED.i);
st.setInt(2, transaction_id);
st.executeUpdate();
}
@Override
public void startTransaction(Transaction transaction) throws SQLException {
Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement("");
statement.setInt(1, transaction.getTransactionType().i);
statement.setTimestamp(2, Timestamp.valueOf(transaction.getStarting_time()));
statement.setTimestamp(3, Timestamp.valueOf(transaction.getFinishing_time()));
statement.setString(4, transaction.getUser());
statement.executeUpdate();
statement = connection.prepareStatement("select last_insert_id()");
ResultSet rs = statement.executeQuery();
rs.next();
int transaction_id = rs.getInt("transaction_id");
for (File file : transaction.getFiles()) {
statement = connection.prepareStatement("");
statement.setString(1, file.getLocalPath());
statement.setString(2, file.getRemotePath());
statement.setInt(3, file.getFileStatus().i);
statement.setInt(4, transaction_id);
statement.executeUpdate();
}
}
@Override
public void updateFilesStatus(List<File> files) throws SQLException {
Connection connection = dataSource.getConnection();
for (File file : files) {
PreparedStatement st = connection.prepareStatement("");
st.setInt(1, FileStatus.FINISHED.i);
st.setInt(2, file.getFile_id());
st.executeUpdate();
}
}
@Override
public List<Session> getSessions() throws SQLException {
Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery("");
ArrayList<Session> sessions = new ArrayList<>();
while (rs.next()) {
int id = rs.getInt("session_id");
LocalDateTime start = rs.getTimestamp("start_timestamp").toLocalDateTime();
LocalDateTime end = rs.getTimestamp("end_timestamp").toLocalDateTime();
String user = rs.getString("user");
String ssh_hostname = rs.getString("ssh_hostname");
int ssh_port = rs.getInt("ssh_port");
SessionStatus status = SessionStatus.values()[rs.getInt("status")];
sessions.add(new Session(id, start, end, user, ssh_hostname, ssh_port, status));
}
return sessions;
}
@Override
public List<Transaction> getTransactionForSession(int sessionId) throws SQLException {
Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement("");
statement.setInt(1, sessionId);
ResultSet rs = statement.executeQuery();
ArrayList<Transaction> transactions = new ArrayList<>();
while (rs.next()) {
int id = rs.getInt("transaction_id");
TransactionType type = TransactionType.values()[rs.getInt("type")];
LocalDateTime start = rs.getTimestamp("start_timestamp").toLocalDateTime();
LocalDateTime end = rs.getTimestamp("end_timestamp").toLocalDateTime();
String user = rs.getString("user");
transactions.add(new Transaction(id, start, end, user, type, getFilesInTransaction(id)));
}
return transactions;
}
@Override
public List<Session> getSessionsForTransaction(int transactionId) {
throw new UnsupportedOperationException();
}*/
}
package de.uniwue.swp.sshtool.database;
import java.sql.SQLException;
import java.util.List;
/**
* Interface for a database connection and database operations
* The login method is for creating a DataSource instance which later provides the database connection.
*
*/
public interface DBConnection {
public void login(String username, String password, String url);
public Transaction insertTransaction(Transaction transaction) throws SQLException;
public Session insertSession(Session session) throws SQLException;
public void insertTransactionSessionConn(Session session, Transaction transaction) throws SQLException;
public void updateTransaction(Transaction transaction) throws SQLException;
public void updateSession(Session session) throws SQLException;
public List<Session> getSessions() throws SQLException;
public List<Transaction> getTransactions() throws SQLException;
public List<File> getFilesInTransaction(int transaction_id) throws SQLException;
public List<Transaction> getIncompleteTransactions(String username) throws SQLException;
public List<Transaction> getTransactionsInSession(int sessionId) throws SQLException;
public List<Session> getSessionsInTransaction(int transactionId) throws SQLException;
}
package de.uniwue.swp.sshtool.database;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.*;
import java.util.List;
/**
* implements DBConnection
* Singleton
* basiert auf HikariDataSource (ConnectionPool), welches automatisch nach login Verbindungen zur DB bereitstellt
*/
public class DBConnectionImpl implements DBConnection {
private static DBConnectionImpl instance = new DBConnectionImpl();
private HikariDataSource dataSource;
private DBConnectionImpl() {}
/**
* @param username
* @param password
* @param url
* sets the DataSource parameters
*/
public void login(String username, String password, String url) {
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl(url);
ds.setUsername(username);
ds.setPassword(password);
}
/**
* neue Transaction in die Datenbank mit jeweiligen Files eintragen, transaction_id ist noch null
*
* @param transaction
* @return Transaction, die jetzt die ID der Datenbank enthält
*/
@Override
public Transaction insertTransaction(Transaction transaction) throws SQLException {
Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement("insert into transactions(starting_time,finishing_time,transaction_type,username) values(?, ?, ?, ?);");
statement.setTimestamp(1, Timestamp.valueOf(transaction.getStartingTime()));
statement.setTimestamp(2, Timestamp.valueOf(transaction.getFinishingTime()));
statement.setInt(3, transaction.getTransactionType().toInt());
statement.setString(4, transaction.getUser());
statement.executeUpdate();
statement = connection.prepareStatement("select last_insert_id()");
ResultSet rs = statement.executeQuery();
rs.next();
int transactionId = rs.getInt("transactionId");
for (File file : transaction.getFiles()) {
statement = connection.prepareStatement("insert into files (transaction_id,localPath,remotePath,fileStatus) VALUES (?, ?, ?, ?)");
statement.setInt(1, transactionId);
statement.setString(2, file.getLocalPath());
statement.setString(3, file.getRemotePath());
statement.setInt(4, file.getFileStatus().toInt());
statement.executeUpdate();
}
transaction.setTransactionId(transactionId);
return transaction;
}
@Override
public Session insertSession(Session session) throws SQLException {
return null;
}
@Override
public void insertTransactionSessionConn(Session session, Transaction transaction) throws SQLException {
}
@Override
public void updateTransaction(Transaction transaction) throws SQLException {
}
@Override
public void updateSession(Session session) throws SQLException {
}
@Override
public List<Session> getSessions() throws SQLException {
return null;
}
@Override
public List<Transaction> getTransactions() throws SQLException {
return null;
}
@Override
public List<File> getFilesInTransaction(int transactionId) throws SQLException {
return null;
}
@Override
public List<Transaction> getIncompleteTransactions(String username) throws SQLException {
return null;
}
@Override
public List<Transaction> getTransactionsInSession(int sessionId) throws SQLException {
return null;
}
@Override
public List<Session> getSessionsInTransaction(int transactionId) {
return null;
}
}
package de.uniwue.swp.sshtool.database;
import de.uniwue.swp.sshtool.database.utils.FileStatus;
/**
* class for the database table files
*/
public class File {
private Integer fileId;
private String localPath;
private String remotePath;
private FileStatus fileStatus;
private Integer transactionId;
public File(String localPath, String remotePath, FileStatus status) {
this.localPath = localPath;
this.remotePath = remotePath;
this.fileStatus = status;
}
public int getTransactionId() {
return transactionId;
}
public void setTransactionId(int transactionId) {
this.transactionId = transactionId;
}
public int getFileId() {
return fileId;
}
public void setFileId(int fileId) {
this.fileId = fileId;
}
public String getLocalPath() {
return localPath;
}
public void setLocalPath(String localPath) {
this.localPath = localPath;
}
public String getRemotePath() {
return remotePath;
}
public void setRemotePath(String remotePath) {
this.remotePath = remotePath;
}
public FileStatus getFileStatus() {
return fileStatus;
}
public void setFileStatus(FileStatus fileStatus) {
this.fileStatus = fileStatus;
}
}
package de.uniwue.swp.sshtool.database;
import de.uniwue.swp.sshtool.database.results.ClosureResult;
public class MySQLAccess {
public static ConnectionStatus connect(String hostname, int port, String databaseUser, String password){
throw new UnsupportedOperationException();
}
public static ClosureResult closeConnection(){
throw new UnsupportedOperationException();
}
}
package de.uniwue.swp.sshtool.database;
import de.uniwue.swp.sshtool.database.results.*;
import java.util.List;
public abstract class Operations {
public static List<Transaction> getIncompleteTransactions(String username){
throw new UnsupportedOperationException();
}
public static CancellationResult cancelTransaction(Transaction transaction){
throw new UnsupportedOperationException();
}
public static InsertionResult startTransaction(Transaction transaction){
throw new UnsupportedOperationException();
}
public static UpdateFileStatusResult updateFilesStatus(List<File> files){
throw new UnsupportedOperationException();
}
public static List<Session> getSessions(){
throw new UnsupportedOperationException();
}
public static List<Transaction> getTransactionForSession(int sessionId){
throw new UnsupportedOperationException();
}
public static List<Session> getSessionsForTransaction(int transactionId){
throw new UnsupportedOperationException();
}
public static List<File> getFilesForTransaction(int transactionId){
throw new UnsupportedOperationException();
}
}
package de.uniwue.swp.sshtool.database;
import de.uniwue.swp.sshtool.database.utils.SessionStatus;
import java.time.LocalDateTime;
/**
* class for the database table sessions
*/
public class Session {
private int sessionId;
private LocalDateTime startingTime;
private LocalDateTime finishingTime;
private String username;
private String sshHostname;
private int sshPort;
private SessionStatus sessionStatus;
public Session(int id, LocalDateTime startingTime, LocalDateTime finishingTime, String username, String sshHostname, int ssh_port, SessionStatus sessionStatus) {
this.sessionId = id;
this.username = username;
this.startingTime = startingTime;
this.finishingTime = finishingTime;
this.sshHostname = sshHostname;
this.sshPort = ssh_port;
this.sessionStatus = sessionStatus;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public void setSessionId(int sessionId) {
this.sessionId = sessionId;
}
public void setStartingTime(LocalDateTime startingTime) {
this.startingTime = startingTime;
}
public void setFinishingTime(LocalDateTime finishingTime) {
this.finishingTime = finishingTime;
}
public void setSshHostname(String sshHostname) {
this.sshHostname = sshHostname;
}
public void setSshPort(int sshPort) {
this.sshPort = sshPort;
}
public void setSessionStatus(SessionStatus sessionStatus) {
this.sessionStatus = sessionStatus;
}
public int getSessionId() {
return sessionId;
}
public LocalDateTime getStartingTime() {
return startingTime;
}
public LocalDateTime getFinishingTime() {
return finishingTime;
}
public String getSshHostname() {
return sshHostname;
}
public int getSshPort() {
return sshPort;
}
public SessionStatus getSessionStatus() {
return sessionStatus;
}
}
package de.uniwue.swp.sshtool.database;
import de.uniwue.swp.sshtool.database.utils.TransactionType;
import java.time.LocalDateTime;
import java.util.List;
/**
* class for the database table transactions
*/
public class Transaction {
private Integer transactionId =null;
private LocalDateTime startingTime;
private LocalDateTime finishingTime;
private TransactionType transactionType;
private String username;
private List<File> files;
private int sessionId;
public Transaction(LocalDateTime start, LocalDateTime end, String user, TransactionType type, List<File> files) {
this.startingTime = start;
this.finishingTime = end;
this.username = user;
this.transactionType = type;
this.files=files;
}
public int getSessionId() {
return sessionId;
}
public void setSessionId(int sessionId) {
this.sessionId = sessionId;
}
public List<File> getFiles() {
return files;
}
public void setFiles(List<File> files) {
this.files = files;
}
public int getTransactionId() {
return transactionId;
}
public void setTransactionId(int transactionId) {
this.transactionId = transactionId;
}
public LocalDateTime getStartingTime() {
return startingTime;
}
public void setStartingTime(LocalDateTime startingTime) {
this.startingTime = startingTime;
}
public LocalDateTime getFinishingTime() {
return finishingTime;
}
public void setFinishingTime(LocalDateTime finishingTime) {
this.finishingTime = finishingTime;
}
public String getUser() {
return username;
}
public void setUser(String user) {
this.username = user;
}
public TransactionType getTransactionType() {
return transactionType;
}
public void setTransactionType(TransactionType transactionType) {
this.transactionType = transactionType;
}
}
package de.uniwue.swp.sshtool.database.results;
public class CancellationResult extends Result{
}
package de.uniwue.swp.sshtool.database.results;
public class ClosureResult extends Result{
}
package de.uniwue.swp.sshtool.database.results;
public class InsertionResult extends Result {
}
package de.uniwue.swp.sshtool.database.results;
public abstract class Result {
}
package de.uniwue.swp.sshtool.database.results;
public class UpdateFileStatusResult extends Result{
}
package de.uniwue.swp.sshtool.database.utils;
/**
* enum for the status of the file
* started: file is queued for transaction
* finished: file is succesfully deleted/uploaded/downloaded
* cancelled: transaction which the file is part of has been cancelled
*/
public enum FileStatus{
STARTED(0), FINISHED(1), CANCELLED(2);
private final int i;
FileStatus(int i){
this.i=i;
}
public int toInt() {
return i;
}
}
package de.uniwue.swp.sshtool.database.utils;
/**
* enum for status of ssh session
* started: session has been started
* interrupted: ssh session has been interrupted for some reason
* finished: session has been closed
*/
public enum SessionStatus {
STARTED(0), INTERRUPTED(1), FINISHED(2);
private final int i;
SessionStatus(int i){
this.i=i;
}
public int toInt() {
return i;
}
}
package de.uniwue.swp.sshtool.database.utils;
public enum TransactionType {
UPLOAD(0), DOWNLOAD(1), DELETION(2);
private final int i;
TransactionType(int i){
this.i=i;
}
public int toInt() {
return i;
}
}
\ No newline at end of file
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