Skip to content
Snippets Groups Projects
Commit f5156172 authored by Dennis Eisold's avatar Dennis Eisold
Browse files

Merge branch 'master' into 'master'

Unnötige Variablen und Funktionen raus gelöscht, Codierer dokumentiert

See merge request !46
parents 6e7e6c92 f03b01a8
No related branches found
No related tags found
No related merge requests found
...@@ -7,29 +7,49 @@ import java.util.Calendar; ...@@ -7,29 +7,49 @@ import java.util.Calendar;
import java.util.Random; import java.util.Random;
/** /**
* TODO: Dokumentieren * Die Codierer Klasse beschreibt den Benutzer welcher die Enigma benutzt.
* Alle Vorgänge wie z.B. das zusammenbauen der Hardware, auslesen des Codebuches und das anschließende codieren,
* finden hier statt. Dieser ist quasi die Schnittstelle zwischen der GUI (Hauptmann welcher ihm sagt was er zu
* verschlüsseln hat), der Enigma und dem Funker im Funkraum, welcher die Nachricht im Anschluß versendet.
*/ */
public class Codierer { public class Codierer {
/** /**
* TODO: Dokumentieren * Der Klartext Spruchschlüssel zur codierung der Nachricht
*/ */
private String spruchschluessel; private String spruchschluessel;
/**
* Der Spruchschlüssel, mit den Tageswerten aus dem Codebuch, codiert
*/
private String spruchschluesselCodiert; private String spruchschluesselCodiert;
private String kenngruppe, kenngruppeCodiert; /**
* Die Kenngruppe für die versendeten Nachrichten gedacht sind. Diese ist relevant für den Webservice (Funkraum)
*/
private String kenngruppe;
/**
* Die Nachricht, welche der Benutzer eingibt, wird als String nachricht gespeichert
* und im laufe der Benutzung ergänzt
*/
private String nachricht; private String nachricht;
/**
* Das Hardware Objekt. Hier werden alle Hardware relevanten Baugruppen gespeichert und verarbeitet.
*/
private Hardware hardware; private Hardware hardware;
/**
* Im Codebuch sind die Tageswerte zu finden. Über dieses Objekt kann darauf zugegriffen werden.
*/
private Codebuch codebuch; private Codebuch codebuch;
/** /**
* TODO: Dokumentieren * Der Konstruktor des Codierers
* Hier werden die globalen Variablen auf ihre Standart Werte gesetzt sowie die Objekte Initialisiert.
*/ */
public Codierer() { public Codierer() {
this.nachricht = ""; this.nachricht = "";
this.spruchschluessel = ""; this.spruchschluessel = "";
this.spruchschluesselCodiert = ""; this.spruchschluesselCodiert = "";
this.kenngruppe = ""; this.kenngruppe = "";
this.kenngruppeCodiert = "";
this.codebuch = new Codebuch(); this.codebuch = new Codebuch();
this.codebuch.fetchTagesschluessel(); this.codebuch.fetchTagesschluessel();
} }
...@@ -74,16 +94,15 @@ public class Codierer { ...@@ -74,16 +94,15 @@ public class Codierer {
/** /**
* Hier wird ein neuer Spruchschlüssel generiert. * Hier wird ein neuer Spruchschlüssel generiert.
* <p>
* Mit diesem werden die Walzen auf eine neue Startposition gestellt und dem Kopf, mit dem * Mit diesem werden die Walzen auf eine neue Startposition gestellt und dem Kopf, mit dem
* Tagesschlüssel codiert, hinzugefügt. * Tagesschlüssel codiert, hinzugefügt.
* <p> * <br>
* Hierfür wird mittels der Funktion "randomBuchstabe" ein zufälliger Buchstabe generiert, * Hierfür wird mittels der Funktion "randomBuchstabe" ein zufälliger Buchstabe generiert,
* und geschaut ob dieser bereits in der globalen Variable this.spruchschluessel vorhanden ist. * und geschaut ob dieser bereits in der globalen Variable (this.spruchschluessel) vorhanden ist.
* Wenn nicht, wird der Buchstabe dem Spruchschlüssel hinzugefügt. * Wenn nicht, wird der Buchstabe dem Spruchschlüssel hinzugefügt.
* <p> * <br>
* Dies wir nun so lange gemacht bis der Spruchschlüssel eine länge von drei Zeichen hat. * Dies wir nun so lange gemacht bis der Spruchschlüssel eine länge von drei Zeichen hat.
* <p>
* TODO: Doku aktuallisieren
*/ */
public void generateSpruchschluessel() { public void generateSpruchschluessel() {
...@@ -104,21 +123,13 @@ public class Codierer { ...@@ -104,21 +123,13 @@ public class Codierer {
this.hardware.setzePosition(1, this.spruchschluessel.charAt(1)); this.hardware.setzePosition(1, this.spruchschluessel.charAt(1));
this.hardware.setzePosition(2, this.spruchschluessel.charAt(2)); this.hardware.setzePosition(2, this.spruchschluessel.charAt(2));
// Die Kenngruppe codieren // Die Kenngruppe codieren und in der Nachricht speichern
this.kenngruppeCodiert = this.codiere(this.kenngruppe, true); this.codiere(this.kenngruppe, true);
} }
/** /**
* TODO: Dokumentieren * Der Spruchschlüssel wird, zur internen Verwendung, auch im Klartext gespeichert.
* * Wir brauchen diesen dann zum codieren der eigentlichen Nachricht.
* @return String : Der codierte Spruchschlüssel
*/
public String getSpruchschluesselCodiert() {
return this.spruchschluesselCodiert;
}
/**
* TODO: Dokumentieren
* *
* @return String : Der klartext Spruchschlüssel * @return String : Der klartext Spruchschlüssel
*/ */
...@@ -127,14 +138,14 @@ public class Codierer { ...@@ -127,14 +138,14 @@ public class Codierer {
} }
/** /**
* TODO: Dokumentieren * Erstellen des Nachrichten Kopfes.
* Hierfür wird die aktuelle Uhrzeit ausgelesen, die Länge der Nachricht sowie der, mit den
* Tagescodes codierte, Spruchschlüssel.
*/ */
private String generateKopf() { private String generateKopf() {
Calendar cal = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
// Uhrzeit an den Kopf hängen // Uhrzeit an den Kopf hängen
// TODO: Da gab es doch noch eine besser Lösung für den Korrekturfaktor der Uhrzeit?
return String.format("%02d%02d", cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE)) + " " + return String.format("%02d%02d", cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE)) + " " +
// Zeichen Anzahl der Nachricht // Zeichen Anzahl der Nachricht
...@@ -142,9 +153,6 @@ public class Codierer { ...@@ -142,9 +153,6 @@ public class Codierer {
// Spruchschlüssel anhängen // Spruchschlüssel anhängen
this.spruchschluesselCodiert.substring(0, 3) + " " + this.spruchschluesselCodiert.substring(3, 6) + " "; this.spruchschluesselCodiert.substring(0, 3) + " " + this.spruchschluesselCodiert.substring(3, 6) + " ";
// Kenngruppe an das Ende setzen
//this.kenngruppeCodiert;
} }
/** /**
...@@ -191,7 +199,7 @@ public class Codierer { ...@@ -191,7 +199,7 @@ public class Codierer {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(nachricht[1], 0, 16); sb.append(nachricht[1], 0, 16);
for(int i = 17; i <= nachricht[1].length();) { for (int i = 17; i <= nachricht[1].length(); ) {
if ((i + 5) < nachricht[1].length()) { if ((i + 5) < nachricht[1].length()) {
sb.append(nachricht[1], i, i + 5).append(" "); sb.append(nachricht[1], i, i + 5).append(" ");
i += 5; i += 5;
...@@ -240,7 +248,7 @@ public class Codierer { ...@@ -240,7 +248,7 @@ public class Codierer {
/** /**
* Gibt die aktuellen Buchstaben auf den Walzen zurück * Gibt die aktuellen Buchstaben auf den Walzen zurück
* *
* @return * @return char[] : Walzen Array mit der aktuellen Position
*/ */
public char[] getWalzen() { public char[] getWalzen() {
char[] walzen = new char[3]; char[] walzen = new char[3];
...@@ -252,19 +260,13 @@ public class Codierer { ...@@ -252,19 +260,13 @@ public class Codierer {
} }
/** /**
* Setzt ein neues Hardware Objekt * Hier wird ein einzelner Buchstabe verschlüsselt.
* Man muss hier ebenfalls mitgeben ob der codierte String in Codierer.nachricht gespeichert werden soll oder nicht.
* In der Regel ist dies der Fall.
* *
* @param hardware : Hardware * @param buchstabe : char : Der zu codierende Buchstabe
*/ * @param save : boolean : Nachricht speichern oder nicht
public void setHardware(Hardware hardware) { * @return char : Der codierte Buchstabe
this.hardware = hardware;
}
/**
* TODO: Dokumentieren
*
* @param buchstabe
* @return
*/ */
public char codiere(char buchstabe, boolean save) { public char codiere(char buchstabe, boolean save) {
char codiert = this.hardware.codiere(buchstabe); char codiert = this.hardware.codiere(buchstabe);
...@@ -276,11 +278,13 @@ public class Codierer { ...@@ -276,11 +278,13 @@ public class Codierer {
} }
/** /**
* TODO: Dokumentieren * Codiert den Übergebenen String.
* Man muss hier ebenfalls mitgeben ob der codierte String in Codierer.nachricht gespeichert werden soll oder nicht.
* In der Regel ist dies der Fall.
* *
* @param klartext * @param klartext : String : Der zu codierende Text
* @param save * @param save : boolean : Nachricht speichern oder nicht
* @return * @return String : Der codierte Text zusätzlich als Rückgabe
*/ */
public String codiere(String klartext, boolean save) { public String codiere(String klartext, boolean save) {
...@@ -294,7 +298,9 @@ public class Codierer { ...@@ -294,7 +298,9 @@ public class Codierer {
} }
/** /**
* TODO: Dokumentieren * Diese Funktion erwartet als (codierteNachricht) eine korrekte Enigma Nachricht.
* Ihr muss auch der Tag der codierung mitgegeben werden. Dieser weiß dein Funker im Funkraum.
* In der Regel ist dies der Tag des Nachrichten empfangs.
* *
* @param codierteNachricht : String : Enigma codierte Nachricht * @param codierteNachricht : String : Enigma codierte Nachricht
* @param tag : int : Tag der Nachricht * @param tag : int : Tag der Nachricht
...@@ -332,12 +338,13 @@ public class Codierer { ...@@ -332,12 +338,13 @@ public class Codierer {
} }
/** /**
* TODO: Dokumentieren * Zerlegt den übergebenen String in einen char Array und decodiert jedes Zeichen.
* Der String wird dann decodiert zurück gegeben.
* *
* @param nachricht * @param nachricht : String : Der zu decodierende Text
* @return * @return String : Der decodierte Text
*/ */
public String decodiereString(String nachricht) { private String decodiereString(String nachricht) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
...@@ -351,51 +358,66 @@ public class Codierer { ...@@ -351,51 +358,66 @@ public class Codierer {
} }
/** /**
* TODO: Dokumentieren * Setzt die Enigma auf die Einstellungen des aktuellen Tages, aus dem Codebuch zurück.
*/ */
public void resetHardware() { public void resetHardware() {
this.initialisiereHardware(); this.initialisiereHardware();
} }
/** /**
* Setzt die Walze auf der Position (walzenPosition) in die Enigma ein. * Setzt den anzuzeigenden Buchstaben (buchstabe) auf der Walze (wlazenPosition)
* Mit dem char (position) sagt man auf welchen Buchstaben sie eingestellt werden soll. * TODO: Wenn die Walzen, Notches, Kabel, etc. verändert werden, muss die bisherige Nachricht (this.nachricht) gelöscht werden.
* *
* @param walzenPosition * @param walzenPosition : int : Nummer der Walze
* @param position * @param buchstabe : char : Buchstabe der zugewiesen soll
*/ */
public void setWalze(int walzenPosition, char position) { public void setWalze(int walzenPosition, char buchstabe) {
this.hardware.setzePosition(walzenPosition, position); this.hardware.setzePosition(walzenPosition, buchstabe);
} }
/** /**
* TODO: Dokumentieren * Setzt den Ring auf der Walze auf einen neuen Umstprungwert.
* *
* @param walzenPosition * @param walzenPosition : int : Walze auf die der Ring gesteckt wird
* @param position * @param umsprungPunkt : int : Buchstabe auf dem der Notch sitzt
*/ */
public void setRing(int walzenPosition, int position) { public void setRing(int walzenPosition, int umsprungPunkt) {
this.hardware.setzeRing(walzenPosition, position); this.hardware.setzeRing(walzenPosition, umsprungPunkt);
} }
/** /**
* TODO: Dokumentieren * Setzt die Walze (walzeNr) in die Position (walzenPosition) der Enigma ein.
* Mit (ringstellung) gibt man die Position des Umsprungpunktes an.
* *
* @param walzenPosition * @param walzenPosition : int : Position der Walze in der Enigma (1-2-3)
* @param walzeNr * @param walzeNr : int : Nummer der Walze die eingesetzt wird
* @param ringstellung : int : Stellung des Ringes
*/ */
public void setWalzeNr(int walzenPosition, int walzeNr) { public void setWalzeNr(int walzenPosition, int walzeNr, int ringstellung) {
this.hardware.setzeWalzenNr(walzenPosition, walzeNr, 1); this.hardware.setzeWalzenNr(walzenPosition, walzeNr, ringstellung);
} }
/** /**
* TODO: Dokumentieren * Setzt das Kabel in beide Ports ein und fügt es dem Steckbrett Array hinzu.
* *
* @param feldNr * @param feldNr : int : Kabel Nummer welches am Steckbrett eingesteckt wird
* @param verbindung * @param verbindung : String : Verbindung welche die vertauschten Buchstaben angibt
*/ */
public void setSteckbrett(int feldNr, String verbindung) { public void setSteckbrett(int feldNr, String verbindung) {
this.hardware.getSteckbrett().setzeVertauschung(verbindung.charAt(0), verbindung.charAt(1)); this.hardware.getSteckbrett().setzeVertauschung(verbindung.charAt(0), verbindung.charAt(1));
} }
/**
* Prüft ob der Port auf den das Kabel gesteckt werden soll, noch frei ist.
* <p>
* TODO: Prüfen ob im aktuellen Feld bereits zwei Buchstaben stehen, wenn ja, nach erfolg dieser Funktion,
* setSteckbrett ausführen mit beiden Buchstaben als String
*
* @param buchstabe : char : Der zuletzt eingegebene Buchstabe
* @return boolean : Wenn der Buchstabe nicht vorhanden ist, wird true zurückgegeben, ansonsten false
*/
public boolean pruefeSteckbrettPort(char buchstabe) {
return true;
}
} }
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