diff --git a/src/main/java/projekt/enigma/model/Codebuch.java b/src/main/java/projekt/enigma/model/Codebuch.java index 8971dd7af85df192f23b32d3102710e6dc789b65..d2ab4a6bec190fb04459e49a5cd2d45093ce073a 100644 --- a/src/main/java/projekt/enigma/model/Codebuch.java +++ b/src/main/java/projekt/enigma/model/Codebuch.java @@ -7,18 +7,18 @@ import java.time.ZoneId; /** * Das Codebuch war eines der essentiel wichtigen Sachen bei der Enigma. - * Jeder Enigma gehörte auch ein Codebuch bei, welches notwendig war um die Nachrichten zu ver/entschlüsseln. + * Jeder Enigma gehoerte auch ein Codebuch bei, welches notwendig war um die Nachrichten zu ver/entschluesseln. * 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 Walze gesetzt und deren Grundeinstellung + * mussten um die Texte zu ver/entschluesseln. + * Hiernach wurden die Walzen eingesetzt, die Ringe für den Ruecksprung der Walze 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 + * Bei der Enigma um welche es hier geht (Enigma I) gab es zusaetzlich ein Steckbrett, welches ebenfalls im Codebuch * festgelegt war. * <p> - * Dieses Codebuch Objekt enthält die Einstellungen eines Tages, welche mittels Getter und Setter - * verarbeitet werden können. + * Dieses Codebuch Objekt enthaelt die Einstellungen eines Tages, welche mittels Getter und Setter + * verarbeitet werden koennen. * <p> - * Zusätzlich gibt es zu Debug Zwecken eine überschriebene toString Funktion welche das Objekt als String zurück + * Zusaetzlich gibt es zu Debug Zwecken eine ueberschriebene toString Funktion welche das Objekt als String zurueck * geben kann. */ public class Codebuch { @@ -44,6 +44,7 @@ public class Codebuch { * steckverbindung : char[][] : stellt die Steckverbindungen im Steckbrett dar */ private char[][] steckverbindung; + //endregion //region Konstruktor @@ -67,16 +68,16 @@ public class Codebuch { this.steckverbindung[i][1] = 'A'; } } + //endregion //region Funktionen & Methoden /** - * TODO: Dokumentieren * Holt den Tagesschluessel aus dem Codebuch ab. Ist kein Tag angegeben, wird der aktuelle Tag genutzt. * Aus dem Tagesschluessel werden die Werte fuer die Walzenlage, Ringstellung und Steckverbindung * gesetzt. * - * @param tag : int[] : gibt einen Tag oder mehrere Tage mit + * @param tag : int[] : gibt keinen, einen Tag oder mehrere Tage mit */ public void fetchTagesschluessel(int... tag) { String[] walzenlage, ringstellung, db; @@ -89,6 +90,7 @@ public class Codebuch { this.setTag(Integer.parseInt(db[0])); + // setzen der Walzenlage, Ringstellung, Steckverbindung walzenlage = db[1].split(","); for (int i = 0; i < 3; i++) { this.setWalzenlage(i, Integer.parseInt(walzenlage[i])); @@ -100,12 +102,11 @@ public class Codebuch { } this.setSteckverbindung(db[3].split(",")); - } /** - * Gibt die aktuelle Instanz des Codebuches als String zurück. - * Hierbei werden der Tag die Walzenlagen, Ring-/Grundstellung sowie die Steckverbindungen zurück gegeben. + * Gibt die aktuelle Instanz des Codebuches als String zurueck. + * Hierbei werden der Tag die Walzenlagen, Ring-/Grundstellung sowie die Steckverbindungen zurueck gegeben. * * @return String : String des gesamten Objektes */ @@ -148,6 +149,7 @@ public class Codebuch { return sb.toString(); } + //endregion //region Setter @@ -156,8 +158,7 @@ public class Codebuch { * * @param kabel : String[] : Die Steckverbindungen die gesteckt werden sollen. * Jeder Eintrag im Array ist ein String mit zwei Zeichen. - * Diese werden in zwei chars zerlegt und anschließend im globalen - * Array gespeichert. + * Diese werden in zwei chars zerlegt und anschließend im globalen Array gespeichert. */ private void setSteckverbindung(String[] kabel) { int counter = 0; @@ -184,7 +185,7 @@ public class Codebuch { * Setzt die Ringstellung dieser Instanz * * @param position : int : Auf welche Walze wird der Ring aufgesetzt? - * @param ringstellung : char : An dieser Position soll die nächste Walze weiter gedreht werden.TODO: String[] || int[]? + * @param ringstellung : int : An dieser Position soll die nächste Walze weiter gedreht werden. */ private void setRingstellung(int position, int ringstellung) { this.ringstellung[position] = ringstellung; @@ -195,12 +196,15 @@ public class Codebuch { * * @param tag : int : Tag */ - void setTag(int tag) { this.tag = tag; } + void setTag(int tag) { + this.tag = tag; + } + //endregion //region Getter /** - * Gibt den Tag dieser Instanz zurück + * Gibt den Tag dieser Instanz zurueck * * @return int : Tag */ @@ -209,29 +213,28 @@ public class Codebuch { } /** - * Gibt die Walzenlage dieser Instanz zurück + * Gibt die Walzenlage dieser Instanz zurueck * - * @return String[] : Walzenlage TODO: String[] || int[]? + * @return walzenlage : int[] : Walzenlage */ public int[] getWalzenlage() { return walzenlage; } /** - * Gibt die Ringstellung dieser Instanz zurück + * Gibt die Ringstellung dieser Instanz zurueck * - * @return String[] : Ringstellung TODO: String[] || int[]? + * @return ringstellung : int : Ringstellung */ public int[] getRingstellung() { return ringstellung; } /** - * Gibt die Steckverbindung dieser Instanz zurück + * Gibt die Steckverbindungen dieser Instanz zurueck * - * @return String[] : Steckverbindung + * @return steckerverbindung : char[][] : Steckverbindung */ - // TODO public char[][] getSteckverbindung() { return this.steckverbindung; } diff --git a/src/main/java/projekt/enigma/model/Morsecode.java b/src/main/java/projekt/enigma/model/Morsecode.java index 4ee1e4f69a09a8c30fd5c07801da2ffaa7b5eed9..0c4894c5b72c09aeba8222b5ea844a98193878ba 100644 --- a/src/main/java/projekt/enigma/model/Morsecode.java +++ b/src/main/java/projekt/enigma/model/Morsecode.java @@ -4,18 +4,22 @@ import java.util.*; import java.util.Map.Entry; /** - * Diese Klasse definiert die Zugehörigkeit zwischen den Buchstaben A-Z und dem zugehörigen Morsecode. + * Diese Klasse definiert die Zugehoerigkeit zwischen den Buchstaben A-Z und dem Morsecode. * Die Funktionen sollen Texte von und zu Morsecode konvertieren. */ public class Morsecode { - // Anlegen der codeMap als TreeMap - private TreeMap<String, String> codeMap = new TreeMap<>(); /** - * Im Konstruktor werden alle verfügbaren Buchstaben (A-Z) und deren zugehörigen - * Morsecodes, der codeMap hinzugefügt. + * Anlegen der codeMap als TreeMap + */ + private TreeMap<String, String> codeMap; + + /** + * Im Konstruktor werden alle verfuegbaren Buchstaben (A-Z) und deren zugehoerigen + * Morsecodes, der codeMap hinzugefuegt. */ public Morsecode() { + codeMap = new TreeMap<>(); this.codeMap.put("A", ".-"); this.codeMap.put("B", "-..."); this.codeMap.put("C", "-.-."); @@ -56,60 +60,54 @@ public class Morsecode { } /** - * Diese Funktion überprüft ob das übergebene Buchstabe in der codeMap enthalten ist. - * Wenn es enthalten ist, wird der zugehörige Morsecode zurück gegeben, ansonsten null + * Diese Funktion ueberprueft ob der uebergebene Buchstabe in der codeMap enthalten ist. + * Wenn er enthalten ist, wird der zugehoerige Morsecode zurueck gegeben, ansonsten null. * - * @param buchstabe : char : Zu übersetzender Buchstabe - * @return : String : Das zugehöriger Morsecode aus der codeMap + * @param buchstabe : char : Zu uebersetzender Buchstabe + * @return String : Der zugehoerige Morsecode aus der codeMap */ private String getMorsecode(char buchstabe) { - // Testen ob das Char in der codeMap enthalten ist. Wenn ja, raussuchen und zurück geben return this.codeMap.getOrDefault(String.valueOf(buchstabe).toUpperCase(), null); } /** - * Der übergebene String wird in seine einzelnen Zeichen (char) zerlegt und an die Funktion getMorsecode - * übergeben und der zugehörige Morsecode raus gesucht. + * Der uebergebene String wird in seine einzelnen Zeichen (char) zerlegt und an die Funktion getMorsecode + * uebergeben und der zugehoerige Morsecode raus gesucht. * Mittels eines StringBuilders werden die Ergebnisse zu einem Rückgabe String zusammen gesetzt. - * Wenn kein zugehöriger Code in der codeMap gefunden wurde, wird das Zeichen ignoriert da es bei der + * Wenn kein zugehoeriger Code in der codeMap gefunden wurde, wird das Zeichen ignoriert da es bei der * Enigma nicht vorhanden war. * - * @param input : String : Zu konventierender Text - * @return String : Die in Morsecode konvertierte Text + * @param input : String : Zu konvertierender Text + * @return String : Der in Morsecode konvertierte Text */ public String convertBuchstabeToMorsecode(String input) { StringBuilder sb = new StringBuilder(); String morsecode; - // Durch alle char im übergebenen String loopen - for(int i = 0; i < input.length(); i++) { - - // Wenn der char in der codeMap enthalten ist, an den Rückgabe String anheften, ansonsten nichts ignorieren. + // Durch alle char im uebergebenen String loopen + for (int i = 0; i < input.length(); i++) { morsecode = this.getMorsecode(input.charAt(i)); - if(morsecode != null) { + if (morsecode != null) { sb.append(morsecode).append(' '); } } - // Gibt den konvertierten String zurück return sb.toString(); } /** - * Diese Funktion überprüft ob der übergebene Morsecode in der codeMap enthalten ist. - * Wenn er enthalten ist, wird der zugehörige Buchstabe zurück gegeben, ansonsten null + * Diese Funktion ueberprueft ob der uebergebene Morsecode in der codeMap enthalten ist. + * Wenn er enthalten ist, wird der zugehoerige Buchstabe zurueck gegeben, ansonsten null * - * @param morsecode : String : Der zu übersetzende Morsecode - * @return : String : Das zugehöriger Buchstaben aus der this.codeMap + * @param morsecode : String : Der zu uebersetzende Morsecode + * @return : String : Der zugehoerige Buchstabe aus der codeMap */ private String getBuchstabe(String morsecode) { - // Initialisieren des Rückgabe Strings String result = null; - // Loopt duch die Codemap und erstellt daraus ein Set - for(Entry<String, String> entry : this.codeMap.entrySet()) { - // Wenn Value dem Morsecode entspricht, haben wir unseren Buchstaben gefunden und setzen ihn als Result - if(entry.getValue().equals(morsecode)) { + // Loopt duch die codeMap und erstellt daraus ein Set + for (Entry<String, String> entry : this.codeMap.entrySet()) { + if (entry.getValue().equals(morsecode)) { result = entry.getKey(); } } @@ -118,14 +116,14 @@ public class Morsecode { } /** - * Der übergebene String wird in einen String Array zerlegt. Als Trennzeichen wird das Leerzeichen genutzt. - * Anschließend wird der Array durchlaufen und die Elemente an die Funktion getBuchstabe übergeben um den - * zugehörigen Buchstaben zu erhalten. - * Mittels eines StringBuilders werden die Ergebnisse zu einem Rückgabe String zusammen gesetzt. - * Wenn kein zugehöriger Buchstabe in der codeMap gefunden wurde, wird das Zeichen ignoriert da es bei der + * Der uebergebene String wird in ein String Array zerlegt. Als Trennzeichen wird das Leerzeichen genutzt. + * Anschließend wird das Array durchlaufen und die Elemente an die Funktion getBuchstabe uebergeben um den + * zugehoerigen Buchstaben zu erhalten. + * Mittels eines StringBuilders werden die Ergebnisse zu einem Rueckgabe String zusammengesetzt. + * Wenn kein zugehoeriger Buchstabe in der codeMap gefunden wurde, wird das Zeichen ignoriert da es bei der * Enigma nicht vorhanden war. * - * @param input : String : Zu konventierender Morsecode + * @param input : String : Zu konvertierender Morsecode * @return String : Der in Text konvertierte Morsecode */ public String convertMorsecodeToBuchstabe(String input) { @@ -134,17 +132,14 @@ public class Morsecode { String[] morsecodes = input.split(" "); - // Durch alle char im übergebenen String loopen - for(String morsecode : morsecodes) { - - // Wenn der char in der codeMap enthalten ist, an den Rückgabe String anheften, ansonsten nichts ignorieren. + // Durch alle char im uebergebenen String loopen + for (String morsecode : morsecodes) { buchstabe = this.getBuchstabe(morsecode); - if(buchstabe != null) { + if (buchstabe != null) { sb.append(buchstabe); } } - // Gibt den konvertierten String zurück return sb.toString(); } } diff --git a/src/main/java/projekt/enigma/model/Reflektor.java b/src/main/java/projekt/enigma/model/Reflektor.java index dca62412c87722b6660ae8118899662c636aee04..2e44b400eb99aadee6a6fb9fe5417129fd21541c 100644 --- a/src/main/java/projekt/enigma/model/Reflektor.java +++ b/src/main/java/projekt/enigma/model/Reflektor.java @@ -1,30 +1,30 @@ package projekt.enigma.model; /** - * TODO: Dokumentation aktuallisieren * Klasse Reflektor * <br> - * Der Reflektor nimmt einen Buchstaben der Klasse Walze entgegen und und kodiert diesen. - * Der kodierte Buchstabe wird an die Klasse Walze wieder zurückgegeben. + * Der Reflektor nimmt einen Buchstaben der Klasse Walze entgegen und und codiert diesen. + * Der codierte Buchstabe wird an die Klasse Walze wieder zurückgegeben. * <br> - * Prinzipiell verhält sich die Klasse Reflektor wie die Klasse Walze, außer das sie sich - * nach Betätigung einer Taste nicht dreht (quasi starr montiert ist) und sie gibt keine Signale - * an andere Walzen zum drehen. + * Prinzipiell verhaelt sich die Klasse Reflektor wie die Klasse Walze, außer das sie sich + * nach Betaetigung einer Taste nicht dreht (quasi starr montiert ist) und sie gibt keine Signale + * an andere Walzen zum Drehen. */ public class Reflektor { /** * Funktion codiere * <br> - * Durchsucht das konstante Char-Array WALZE_ALPHABET nach der Position eines bestimmten - * Buchstabens und gibt den Character an der entsprechenden Position im konstanten - * Char-Array WALZE_REFLEKTOR zurück. + * Durchsucht den String alphabet nach der Position des mitgegebenen Buchstabens und + * gibt den Character an der entsprechenden Position im String reflektor zurueck. * - * @return WALZE_REFLEKTOR[iPositionReflektor]: Character: Der kodierte Buchstabe aus dem Reflektor + * @return char : Der codierte Buchstabe aus dem Reflektor */ public char codiere(Character buchstabe) { + // alphabet : String mit den Werten des Alphabeths (26 Werte) String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + // reflektor : String mit den Werten des Reflektors (26 Werte) String reflektor = "EJMZALYXVBWFCRQUONTSPIKHGD"; diff --git a/src/main/java/projekt/enigma/model/Walze.java b/src/main/java/projekt/enigma/model/Walze.java index 92b244d0fa631620e50e297c1964eb0c51951a24..cc0aa8f983dbb9b2d96086cc4111667cb2a2f3fe 100644 --- a/src/main/java/projekt/enigma/model/Walze.java +++ b/src/main/java/projekt/enigma/model/Walze.java @@ -1,33 +1,31 @@ package projekt.enigma.model; /** - * TODO: Dokumentation aktuallisieren - * <p> * Klasse Walze * <br> * Erzeugt ein Objekt des Typs Walze mit den Eigenschaften: * <br> - * 1. Walzennummer (Die Walze enthält die 26 Buchstaben des Alphabeths und codiert diese. - * 5 verschiedene Walzen stehen zur Auswahl, die jeweils verschieden die Buchstaben des Alphabeths - * paarweise vertauschen) + * 1. Walzennummer (Die Walze enthaelt die 26 Buchstaben des Alphabeths und codiert diese. + * fuenf verschiedene Walzen stehen zur Auswahl, die jeweils verschieden die Buchstaben des Alphabeths + * vertauschen) * <br> * 2. Ringstellung (Umspringpunkt der Walze wird festgelegt. Der Umspringpunkt bestimmt - * den Drehzeitpunkt der linken Nachbarwalze) + * den Drehzeitpunkt der linken Nachbarwalze.) */ public class Walze { //region Variablen /** - * Die Anzahl der getätigten Walzen Drehungen + * Die Anzahl der getaetigten Walzen Drehungen * TODO: Wieder auf private setzen */ public int turns; /** - * Das String Array aller bekannter aktuellen Walzen + * Das String Array aller bekannter aktueller Walzen */ private String[] walzen; /** - * alphabet : String dass die Buchstaben des Alphabets enthaelt + * alphabet : String : enthaelt die Buchstaben des Alphabets */ private String alphabet; /** @@ -35,9 +33,10 @@ public class Walze { */ private char ringstellung; /** - * walzennr : int : Bestimmt, welche Walze genutzt wird + * walzenNr : int : Bestimmt, welche Walze genutzt wird */ private int walzenNr; + //endregion //region Konstruktor @@ -48,7 +47,6 @@ public class Walze { * @param ringstellung : int : Einstellung des Umsprungpunktes */ public Walze(int walzenNr, int ringstellung) { - this.walzen = new String[5]; this.walzen[0] = "EKMFLGDQVZNTOWYHXUSPAIBRCJ"; this.walzen[1] = "AJDKSIRUXBLHWTMCQGZNPYFVOE"; @@ -61,33 +59,34 @@ public class Walze { this.setWalzenNr(walzenNr); this.setRingstellung(ringstellung); } + //endregion //region Funktionen & Methoden /** - * Dreht die Walze: Zählt die Umdrehungen (Turns) um eines hoch oder runter, je nach Drehrichtung. + * Dreht die Walze: Zaehlt die Umdrehungen (turns) um eins hoch oder runter, je nach Drehrichtung. * <p> * Ueberprueft, ob der Umspringpunkt der Walze nach der Drehung erreicht wurde. * - * @param richtung : int : 1 dreht die Walze weiter und -1 dreht sie einen Schritt zurück + * @param richtung : int : 1 dreht die Walze weiter und -1 dreht sie einen Schritt zurueck * @return checkRing : boolean : gibt true zurueck wenn der Umspringpunkt erreicht wurde * TODO: Doku */ public boolean dreheWalze(int richtung) { - boolean checkRing = false; - int korrektorFaktor = 0; + int korrekturFaktor = 0; - if (richtung == -1 || richtung == 1) { + if ((richtung == -1) || (richtung == 1)) { if (richtung == 1) { this.turns++; } else if (richtung == -1) { - korrektorFaktor = 1; + korrekturFaktor = 1; this.turns--; } // gleicht die Ringstellung mit der aktuellen Position ab - if ((this.alphabet.indexOf(this.getPosition()) + korrektorFaktor) % 26 == this.alphabet.indexOf(this.ringstellung)) { + if ((this.alphabet.indexOf(this.getPosition()) + korrekturFaktor) % 26 + == this.alphabet.indexOf(this.ringstellung)) { checkRing = true; } } @@ -96,34 +95,32 @@ public class Walze { } /** - * Codiert den mitgegebenen Buchstaben anhand der gewaehlten Walze. + * Codiert den mitgegebenen Buchstaben anhand er gewaehlten Walze. * * @param buchstabe : char : Buchstabe, der verschluesselt werden soll - * @return buchstabe : char : verschluesselter Buchstabe + * @return char : verschluesselter Buchstabe */ public char codiere(char buchstabe) { return this.fetchWalze().charAt((this.alphabet.indexOf(buchstabe) + this.turns) % 26); } /** - * Decodiert den mitgegebenen Buchstaben mit Hilfe der (verschobenen) Walze + * Decodiert den mitgegebenen Buchstaben anhand des Alphabets. * * @param buchstabe : char : Buchstabe, der decodiert werden soll - * @return buchstabe : char : decodierter Buchstabe + * @return char : decodierter Buchstabe */ public char codiere2(char buchstabe) { return this.alphabet.charAt((this.fetchWalze().indexOf(buchstabe) - this.turns + 260) % 26); } /** - * Holt den korrekten String zu der Walze - * - * @return walze : Character[] : gibt die gewaehlte Walze zurueck + * @return String : Gibt den Verschluesselunngsstring der ausgewaehlten Walze zurueck. */ private String fetchWalze() { - return walzen[walzenNr]; } + //endregion //region Setter @@ -143,11 +140,11 @@ public class Walze { /** * Setzt die Initiale Ringstellung der Walze. * Es sind nur Zahlen von 1 - 26 zugelassen. - * <p> + * <br> * Die Ringstellung wird zum char umgewandelt. * Im Fehlerfall wird die Ringstellung standardmaessig auf 'Z' gesetzt. * - * @param ringstellung : int : Punkt an dem die Walze umspringt + * @param ringstellung : int : Punkt an dem die Nachbarwalze umspringt */ public void setRingstellung(int ringstellung) { if ((ringstellung > 0) && (ringstellung <= 26)) { @@ -159,9 +156,8 @@ public class Walze { /** * * TODO: Funktionsname hat sich geändert - * Gibt die Grundeinstellung der Walze ein. Nur Buchstaben von A - Z sind zugelassen. - * Buchstaben werden automatisch in Grossbuchstaben umgewandelt. - * Ist die Grundeinstellung nicht 'A', wird die Methode dreheWalze() aufgerufen. + * Stellt die Grundeinstellung der Walze ein. + * Ermittelt, wie oft die Walze gedreht werden muss, bis die Grundeinstellung erreicht ist. * * @param buchstabe : Character : Einstellung der Walze */ @@ -172,9 +168,9 @@ public class Walze { //region Getter /** - * Gibt den Character zurueck, der aktuell in der Walze eingestellt ist + * Gibt den Buchstabe zurueck, der aktuell in der Walze eingestellt ist. * - * @return Character am Index 0 des (verschobenen) Alphabets zurueck + * @return char : Ermittelte stelle im Alphabet, anhand der aktuellen Anzahl der Drehungen */ public Character getPosition() { return this.alphabet.charAt(turns % 26); diff --git a/src/main/java/projekt/enigma/threads/ThreadFunkraum.java b/src/main/java/projekt/enigma/threads/ThreadFunkraum.java index d47b2bf08312b5fcc9092137d543c1463f39e517..de29d542844c7821056d85b39cdc646ce3dd1f70 100644 --- a/src/main/java/projekt/enigma/threads/ThreadFunkraum.java +++ b/src/main/java/projekt/enigma/threads/ThreadFunkraum.java @@ -14,7 +14,7 @@ public class ThreadFunkraum implements Runnable { } /** - * Ueberschriebene Funktion - fuehrt die Klasse Funkraum aus und startet + * Ueberschriebene Funktion - fuehrt die Klasse Funkraum aus und startet die Methode empfangeFunkspruch */ @Override public void run() {