diff --git a/src/main/java/Enigma/Main.java b/src/main/java/Enigma/Main.java index 37c9833e5330d953580ce896ef61cfbb30be991e..6adb9204e8eda602b491142bacbe98185c6c0eaa 100644 --- a/src/main/java/Enigma/Main.java +++ b/src/main/java/Enigma/Main.java @@ -1,9 +1,14 @@ package Enigma; +import Enigma.model.DatenbankSqlite; +import Enigma.model.Morsecode; + +import java.sql.SQLException; + public class Main { - public static void main(String[] args) { - App.main(args); - } + public static void main(String[] args) { + App.main(args); + } } diff --git a/src/main/java/Enigma/model/Codebuch.java b/src/main/java/Enigma/model/Codebuch.java new file mode 100644 index 0000000000000000000000000000000000000000..c32345ed483066ea6daa01e4d0f9bc88776e49f0 --- /dev/null +++ b/src/main/java/Enigma/model/Codebuch.java @@ -0,0 +1,166 @@ +package Enigma.model; + +/** + * Das Codebuch war eines der essentiel wichtigen Sachen bei der Enigma. + * Jeder Enigma gehörte auch ein Codebuch bei, welches notwenidg war um die Nachrichten zu ver/entschlüsseln. + * Im Codebuch standen für jeden Tag des Monats die notwendigen Einstellungen welche vorgenommen werden + * mussten um die Texte zu ver/entschlüsseln. + * Hiernach wurden die Walzen eingesetzt, die Ringe für den Rücksprung der Walzen gesetzt und deren Grundeinstellung + * vorgenommen. + * Bei der Enigma um welche es hier geht (Enigma I) gab es zusätzlich ein Steckbrett, welches ebenfalls im Codebuch + * festgelegt war. + * + * Dieses Codebuch Objekt enthält die Einstellungen eines Tages, welche mittels Getter und Setter + * verarbeitet werden können. + * + * Zusätzlich gibt es zu Debug Zwecken eine überschriebene toString Funktion welche das Objekt als String zurück + * geben kann. + */ +public class Codebuch { + private int tag; + private String[] Walzenlage = new String[3]; + private String[] Ringstellung = new String[3]; + private String[] Grundstellung = new String[3]; + private String[] Steckverbindung = new String[10]; + + /** + * Gibt die aktuelle Instanz des Codebuches als String zurück. + * Hierbei werden der Tag die Walzenlagen, Ring/Grundstellung sowie die Steckverbindungen zurück gegeben. + * + * @return String : String des gesamten Objektes + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + boolean wlLoop = false; + boolean rsLoop = false; + boolean gsLoop = false; + boolean svLoop = false; + + sb.append("Tag: ").append(this.getTag()).append("\n"); + + sb.append("Walzenlage: "); + for(String wl : this.getWalzenlage()) { + sb.append(wl).append(","); + wlLoop = true; + } + if(wlLoop) { + sb.setLength(sb.length() - 1); + } + sb.append("\n"); + + sb.append("Ringstellung: "); + for(String rs : this.getRingstellung()) { + sb.append(rs).append(","); + rsLoop = true; + } + if(rsLoop) { + sb.setLength(sb.length() - 1); + } + sb.append("\n"); + + sb.append("Grundstellung: "); + for (String gs : this.getGrundstellung()) { + sb.append(gs).append(","); + gsLoop = true; + } + if(gsLoop) { + sb.setLength(sb.length() - 1); + } + sb.append("\n"); + + sb.append("Steckverbindung: "); + for (String s : this.getSteckverbindung()) { + if (!s.isEmpty()) { + sb.append(s).append(","); + svLoop = true; + } + } + if(svLoop) { + sb.setLength(sb.length() - 1); + } + sb.append("\n"); + + return sb.toString(); + } + + /** + * Gibt den Tag dieser Instanz zurück + * @return int : Tag + */ + public int getTag() { + return tag; + } + + /** + * Gibt die Walzenlage dieser Instanz zurück + * @return String[] : Walzenlage + */ + public String[] getWalzenlage() { + return Walzenlage; + } + + /** + * Gibt die Ringstellung dieser Instanz zurück + * @return String[] : Ringstellung + */ + public String[] getRingstellung() { + return Ringstellung; + } + + /** + * Gibt die Grundstellung dieser Instanz zurück + * @return String[] : Grundstellung + */ + public String[] getGrundstellung() { + return Grundstellung; + } + + /** + * Gibt die Steckverbindung dieser Instanz zurück + * @return String[] : Steckverbindung + */ + public String[] getSteckverbindung() { + return Steckverbindung; + } + + /** + * Setzt den Tag dieser Instanz + * @param tag : int + */ + public void setTag(int tag) { + this.tag = tag; + } + + /** + * Setzt die Walzenlage dieser Instanz + * @param walzenlage : String[] + */ + public void setWalzenlage(String[] walzenlage) { + Walzenlage = walzenlage; + } + + /** + * Setzt die Ringstellung dieser Instanz + * @param ringstellung : String[] + */ + public void setRingstellung(String[] ringstellung) { + Ringstellung = ringstellung; + } + + /** + * Setzt die Grundstellung dieser Instanz + * @param grundstellung : String[] + */ + public void setGrundstellung(String[] grundstellung) { + Grundstellung = grundstellung; + } + + /** + * Setzt die Steckverbindung dieser Instanz + * @param steckverbindung : String[] + */ + public void setSteckverbindung(String[] steckverbindung) { + Steckverbindung = steckverbindung; + } +} diff --git a/src/main/java/Enigma/model/DatenbankSqlite.java b/src/main/java/Enigma/model/DatenbankSqlite.java new file mode 100644 index 0000000000000000000000000000000000000000..6a203b58e38cca810c87d4ecf18838dd7c8168f1 --- /dev/null +++ b/src/main/java/Enigma/model/DatenbankSqlite.java @@ -0,0 +1,64 @@ +package Enigma.model; + +import java.sql.*; + +/** + * Dies ist die SQLite Datenbank Klasse + * In der SQLite Datei im Resources Ordner liegt das Codebuch welches benötigt wird um die + * Nachrichten mit der Enigma zu ver/entschlüsseln. + * Die Datenbank ist statisch und deshalb konnte sie im Resources Ordner hinterlegt werden. + * Für jeden Tag des Monats (1-31) ist ein eigener Eintrag enthalten welcher über die Funktion + * getCodebuch abgerufen werden kann. + * Zurückgegeben wird ein Array welcher in der getCodebuch Funktion genauer dokumentiert ist. + */ +public class DatenbankSqlite { + + /** + * Verbindung zur SQLite Datenbank aufbauen. + * Die Datei liegt in den Resources und ändert sich nicht, + * weshalb der Pfad zu derselben fest hinterlegt ist. + * + * @return conn : Connection + */ + private Connection connect() { + + String url = "jdbc:sqlite::resource:Enigma/codebuch.sqlite"; + Connection conn = null; + + try { + conn = DriverManager.getConnection(url); + } catch (SQLException e) { + e.printStackTrace(); + } + + return conn; + } + + /** + * Liest das Codebuch aus der SQLite Datenbank aus + * Dieser Funktion muss ein tag als int Wert übergeben werden. + * Anschließend wir eine Verbindung zur SQLite Datenbank aufgebaut und das Codebuch angefragt. + * Dieses wird in ein Object vom Type Codebuch gepackt und zurück gegeben. + * + * @param tag : int : Tag für welchen ein Codebuch benötigt wird. + * @return Codebuch : Codebuch Object mit dem Codebuch des angefragten Tages + */ + public Codebuch getCodebuch(int tag) throws SQLException { + Codebuch cb = new Codebuch(); + + Connection conn = this.connect(); + PreparedStatement pstm = conn.prepareStatement("SELECT * FROM table_codebuch WHERE Tag=? LIMIT 1"); + pstm.setInt(1, tag); + ResultSet rs = pstm.executeQuery(); + + while (rs.next()) { + cb.setTag(rs.getInt("Tag")); + cb.setWalzenlage(rs.getString("Walzenlage").split(",")); + cb.setRingstellung(rs.getString("Ringstellung").split(",")); + cb.setGrundstellung(rs.getString("Grundstellung").split(",")); + cb.setSteckverbindung(rs.getString("Steckverbindung").split(",")); + } + + return cb; + } +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java deleted file mode 100644 index c9e95ca6609f106a0b33fb601d9ccb92414d4f49..0000000000000000000000000000000000000000 --- a/src/main/java/module-info.java +++ /dev/null @@ -1,7 +0,0 @@ -module Projektarbeit { - requires javafx.controls; - requires javafx.fxml; - - opens Enigma to javafx.fxml; - exports Enigma; -} \ No newline at end of file