diff --git a/pom.xml b/pom.xml index 6035d0d533e8fbf2fb4c5162451d781cb11c4989..680b9ad5b923a384115bb376c477879ec0abd7d2 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,7 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> - <groupId>Projektarbeit</groupId> + <groupId>projekt</groupId> <artifactId>enigma</artifactId> <version>0.0.1</version> <properties> @@ -9,7 +9,7 @@ <!--region[useage]--> <use.java.version>11</use.java.version> <use.javafx.version>11.0.2</use.javafx.version> - <use.app.main.class>${project.artifactId}.Main</use.app.main.class> + <use.app.main.class>${project.groupId}.${project.artifactId}.Main</use.app.main.class> <!--endregion[useage]--> <maven.compiler.source>${use.java.version}</maven.compiler.source> <maven.compiler.target>${use.java.version}</maven.compiler.target> diff --git a/src/main/java/enigma/model/Steckbrett.java b/src/main/java/enigma/model/Steckbrett.java deleted file mode 100644 index 63bf834938258d61db0c6dfa2e555ce1ec2c20e4..0000000000000000000000000000000000000000 --- a/src/main/java/enigma/model/Steckbrett.java +++ /dev/null @@ -1,79 +0,0 @@ -package enigma.model; - -/** - *TODO: Dokumentieren - */ -public class Steckbrett { - /** - *TODO: Dokumentieren - */ - private int zaehler; - private Character[] orginalBuchstaben; - private Character[] getauschteBuchstaben; - - /** - *TODO: Dokumentieren - */ - public Steckbrett() { - - orginalBuchstaben = new Character[10]; - getauschteBuchstaben = new Character[10]; - } - - /** - *TODO: Dokumentieren - * - * @param buchstabe1 : char - * @param buchstabe2 : char - * @return boolean - */ - public boolean setzeVertauschung(char buchstabe1, char buchstabe2) { - - if (zaehler < orginalBuchstaben.length) { - orginalBuchstaben[zaehler] = buchstabe1; - getauschteBuchstaben[zaehler++] = buchstabe2; - } else { - System.err.println("Zu viele Vertauschungen angegeben!"); - } - - return ueberpruefeVertauschungen(); - } - - /** - *TODO: Dokumentieren - * - * @return boolean - */ - public boolean ueberpruefeVertauschungen() { - - boolean result = true; - for (int n = 0; n < orginalBuchstaben.length; n++) { - if (orginalBuchstaben.equals(orginalBuchstaben[n]) || getauschteBuchstaben.equals(orginalBuchstaben[n]) || getauschteBuchstaben.equals(getauschteBuchstaben[n])) { - System.err.println("Vertauschungen enthalten unzulässige Dopplungen"); - result = false; - } - } - - return result; - } - - /** - * TODO: Dokumentieren - * - * @param buchstabe : Character - * @return char - */ - public char codiere(Character buchstabe) { - - for (int index = 0; index < getauschteBuchstaben.length; index++) { - if (buchstabe.equals(getauschteBuchstaben[index])) { - buchstabe = orginalBuchstaben[index]; - } else if (buchstabe.equals(orginalBuchstaben[index])) { - buchstabe = getauschteBuchstaben[index]; - } - } - - return buchstabe; - } - -} diff --git a/src/main/java/enigma/model/Walze.java b/src/main/java/enigma/model/Walze.java deleted file mode 100644 index 42d9c8715a3ce319622489b3fa98bfadcc83dc4e..0000000000000000000000000000000000000000 --- a/src/main/java/enigma/model/Walze.java +++ /dev/null @@ -1,245 +0,0 @@ -package enigma.model; - -/** - * Klasse Walze - * <p> - * Erzeugt ein Objekt des Typs Walze mit den Eigenschaften: - * <p> - * 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) - * <p> - * 2. Ringstellung (Umspringpunkt der Walze wird festgelegt. Der Umspringpunkt bestimmt - * den Drehzeitpunkt der linken Nachbarwalze) - */ -public class Walze { - - /** - * Konstanten und Variablen der Klasse Walze - * <p> - * ringstellung : Bestimmt den Umspringpunkt der Walze - * walzennr : Bestimmt die Walzennr. (also wie der Buchstabe codiert wird) - */ - private Character[] walzeAlpha; - private char ringstellung; - private int walzennr; - private Character[] alphabet; - - - /** - * Gibt die Parameter der Walze mit - * - * @param walzennr : int : Nummer der gewaehlten Walze - * @param ringstellung : Character : Einstellung des Notch - */ - public Walze(int walzennr, int ringstellung) { - this.alphabet = new Character[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; - this.walzeAlpha = new Character[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; - - // Setzen der Walzennummer - this.setWalzennr(walzennr); - - // Setzen der Ringstellung - this.setRingstellung(ringstellung); - } - - /** - * Sortiert den Walzennummern das passenden Character-Array mittels switch zu. - * - * @return walze : Character[] : gibt die gewaehlte Walze zurueck - */ - private Character[] walzenNummer() { - - Character[] walze = new Character[26]; - Character[] walzeEins = {'E', 'K', 'M', 'F', 'L', 'G', 'D', 'Q', 'V', 'Z', 'N', 'T', 'O', 'W', 'Y', 'H', 'X', 'U', 'S', 'P', 'A', 'I', 'B', 'R', 'C', 'J'}; - Character[] walzeZwei = {'A', 'J', 'D', 'K', 'S', 'I', 'R', 'U', 'X', 'B', 'L', 'H', 'W', 'T', 'M', 'C', 'Q', 'G', 'Z', 'N', 'P', 'Y', 'F', 'V', 'O', 'E'}; - Character[] walzeDrei = {'B', 'D', 'F', 'H', 'J', 'L', 'C', 'P', 'R', 'T', 'X', 'V', 'Z', 'N', 'Y', 'E', 'I', 'W', 'G', 'A', 'K', 'M', 'U', 'S', 'Q', 'O'}; - Character[] walzeVier = {'E', 'S', 'O', 'V', 'P', 'Z', 'J', 'A', 'Y', 'Q', 'U', 'I', 'R', 'H', 'X', 'L', 'N', 'F', 'T', 'G', 'K', 'D', 'C', 'M', 'W', 'B'}; - Character[] walzeFuenf = {'V', 'Z', 'B', 'R', 'G', 'I', 'T', 'Y', 'U', 'P', 'S', 'D', 'N', 'H', 'L', 'X', 'A', 'W', 'M', 'J', 'Q', 'O', 'F', 'E', 'C', 'K'}; - - switch (this.walzennr) { - case 1: - walze = walzeEins; - break; - case 2: - walze = walzeZwei; - break; - case 3: - walze = walzeDrei; - break; - case 4: - walze = walzeVier; - break; - case 5: - walze = walzeFuenf; - break; - } - - return walze; - } - - /** - * TODO: Dokumentieren - * - * @return ringstellung : Character : gibt die neue Ringstellung zurueck - */ - public char getRingstellung() { - return ringstellung; - } - - /** - * Gibt die Initiale Ringstellung der Walze an. - * Es sind nur Zahlen von 1 - 26 zugelassen. - * Im Fehlerfall wird die Ringstellung standardmaessig auf '1' gesetzt. - * - * @param ringstellung : Character : Punkt an dem die Walze umspringt - */ - public void setRingstellung(int ringstellung) { - if (ringstellung > 0 && ringstellung <= 26) { - this.ringstellung = this.alphabet[ringstellung - 1]; - } else { - this.ringstellung = 'Z'; - } - } - - /** - * dreheWalze() return boolean => Wenn Notch erreicht, gib true zurück, ansonsten false - * TODO: Doku - */ - public boolean dreheWalze(int... drehung) { - - boolean checkRing = false; - - verschiebung(); - - if (drehung.length > 0) { - for (int i = 1; i < drehung[0]; i++) { - verschiebung(); - } - } - - if (this.getPosition().equals(this.ringstellung)) { - checkRing = true; - } - - return checkRing; - } - - /** - * TODO: Dokumentieren - */ - private void verschiebung() { - - Character[] neueWalze = new Character[26]; - - for (int index = 0; index < neueWalze.length; index++) { - neueWalze[(index + 1) % neueWalze.length] = this.walzeAlpha[index]; - } - this.walzeAlpha = neueWalze; - } - - /** - * TODO: Dokumentieren - * @return - */ - public char getAnzeige() { - int temp = this.getArrayIndex('A', this.walzeAlpha); - - return this.alphabet[temp]; - } - - /** - * Chiffriert den Buchstaben an der Position aus der Methode positionBuchstabe() - * anhand der gewaehlten Walze. - * - * @return chiffrierterBuchstabe : Character : chiffrierter Buchstabe - */ - public char codiere(char buchstabe) { - for (int i = 0; i < walzeAlpha.length; i++) { - if (walzeAlpha[i].equals(buchstabe)) { - buchstabe = walzenNummer()[i]; - break; - } - } - - return buchstabe; - } - - /** - * Chiffriert den Buchstaben an der Position aus der Methode positionBuchstabeReverse() - * anhand der AlphaWalze. - * - * @return codierterBuchstabeRe : Character : chiffrierter Buchstabe - */ - public char codiere2(char buchstabe) { - for (int i = 0; i < walzenNummer().length; i++) { - if (walzenNummer()[i].equals(buchstabe)) { - buchstabe = walzeAlpha[i]; - break; - } - } - - return buchstabe; - } - - /** - * TODO: Dokumentieren - * - * @param buchstabe : Character - * @param array : Character[] - * @return int - */ - private int getArrayIndex(Character buchstabe, Character[] array) { - - int result = -1; - - for (int i = 0; i < array.length; i++) { - if (array[i].equals(buchstabe)) { - result = i; - break; - } - } - - return result; - } - - /** - * Definiert die Walze. Es stehen fuenf Walze zur Auswahl. - * - * @param walzennr : int : setzt die Walzennummer - */ - public void setWalzennr(int walzennr) { - if (walzennr > 0 && walzennr < 6) { - this.walzennr = walzennr; - } else { - System.err.println("Keine gültige Walzennummer"); - } - } - - /** - * TODO: Dokumentieren - * - * @return Character - */ - public Character getPosition() { - return walzeAlpha[0]; - } - - /** - * Gibt die Grundeinstellung der Walze ein. Nur Buchstaben von A - Z sind zugelassen. - * Buchstaben werden automatisch in Grossbuchstaben umgewandelt. - * Im Fehlerfall wird die Grundeinstellung der Walze standardmaessig auf 'A' gesetzt. - * TODO: Funktionsname hat sich geändert - * - * @param buchstabe : Character : Grundeinstellung der Walze - */ - public void setPosition(Character buchstabe) { - if (Character.isLetter(buchstabe)) { - buchstabe = Character.toUpperCase(buchstabe); - System.arraycopy(this.alphabet, 0, this.walzeAlpha, 0, this.alphabet.length); - if (buchstabe > 'A') { - dreheWalze(this.getArrayIndex(buchstabe, this.alphabet)); - } - } - } -} diff --git a/src/main/java/enigma/App.java b/src/main/java/projekt/enigma/App.java similarity index 92% rename from src/main/java/enigma/App.java rename to src/main/java/projekt/enigma/App.java index 5d078d0fa9d532dec6b8ea972abe90408a6b69ca..72a9b8a5bb3b6636a3e15044ac516f19eae64eb5 100644 --- a/src/main/java/enigma/App.java +++ b/src/main/java/projekt/enigma/App.java @@ -1,13 +1,11 @@ -package enigma; +package projekt.enigma; -import enigma.model.Codierer; +import projekt.enigma.model.Codierer; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; -import org.apache.http.HttpException; - import java.io.IOException; /** @@ -66,4 +64,4 @@ public class App extends Application { stage.show(); } -} \ No newline at end of file +} diff --git a/src/main/java/enigma/GuiController.java b/src/main/java/projekt/enigma/GuiController.java similarity index 61% rename from src/main/java/enigma/GuiController.java rename to src/main/java/projekt/enigma/GuiController.java index 1d9e3b1c0e54a773251542d7ebc9c07058a0b5ea..6ad24987ce724c61ff3b2dbe322ff05869569658 100644 --- a/src/main/java/enigma/GuiController.java +++ b/src/main/java/projekt/enigma/GuiController.java @@ -1,11 +1,11 @@ -package enigma; +package projekt.enigma; -import enigma.model.Codierer; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.scene.shape.Circle; import org.apache.http.HttpException; +import projekt.enigma.model.Codierer; import java.io.IOException; import java.util.ArrayList; @@ -22,199 +22,208 @@ public class GuiController { private Codierer codierer; @FXML - private Button btnL; + private TextField tfStecker1; @FXML - private Button btnP; + private TextField tfStecker2; @FXML - private Button btnY; + private TextField tfStecker3; @FXML - private Button btnX; + private TextField tfStecker4; @FXML - private Button btnC; + private TextField tfStecker5; @FXML - private Button btnV; + private TextField tfStecker6; @FXML - private Button btnB; + private TextField tfStecker7; @FXML - private Button btnN; + private TextField tfStecker8; + + @FXML + private TextField tfStecker9; + + @FXML + private TextField tfStecker10; @FXML private Button btnM; @FXML - private Button btnA; + private Button btnN; @FXML - private Button btnS; + private Button btnB; @FXML - private Button btnD; + private Button btnV; @FXML - private Button btnF; + private Button btnC; @FXML - private Button btnG; + private Button btnX; @FXML - private Button btnH; + private Button btnY; @FXML - private Button btnJ; + private Button btnP; @FXML - private Button btnK; + private Button btnL; @FXML - private Button btnQ; + private Button btnK; @FXML - private Button btnW; + private Button btnJ; @FXML - private Button btnE; + private Button btnH; @FXML - private Button btnR; + private Button btnG; @FXML - private Button btnT; + private Button btnF; @FXML - private Button btnZ; + private Button btnD; @FXML - private Button btnU; + private Button btnS; @FXML - private Button btnI; + private Button btnA; @FXML private Button btnO; @FXML - private MenuButton mBtnWalzPos1; + private Button btnI; @FXML - private MenuButton mBtnWalzPos3; + private Button btnU; @FXML - private MenuButton mBtnWalzPos2; + private Button btnZ; @FXML - private MenuButton mBtnNotchPos3; + private Button btnT; @FXML - private MenuButton mBtnNotchPos2; + private Button btnR; @FXML - private MenuButton mBtnStartPos1; + private Button btnE; @FXML - private MenuButton mBtnStartPos3; + private Button btnW; @FXML - private MenuButton mBtnStartPos2; + private Button btnQ; @FXML - private TextField tfKlartext; + private Circle circL; @FXML - private TextField tfCodiert; + private Circle circM; @FXML - private MenuButton mBtnNotchPos1; + private Circle circN; @FXML - private TextField tfStecker1; + private Circle circB; @FXML - private TextField tfStecker2; + private Circle circV; @FXML - private TextField tfStecker3; + private Circle circC; @FXML - private TextField tfStecker4; + private Circle circX; @FXML - private TextField tfStecker5; + private Circle circY; @FXML - private TextField tfStecker6; + private Circle circP; @FXML - private TextField tfStecker7; + private Circle circK; @FXML - private TextField tfStecker8; + private Circle circJ; @FXML - private TextField tfStecker9; + private Circle circH; @FXML - private TextField tfStecker10; + private Circle circG; @FXML - private Label lblQ; + private Circle circF; @FXML - private Label lblE; + private Circle circD; @FXML - private Label lblW; + private Circle circS; @FXML - private Label lblR; + private Circle circA; @FXML - private Label lblT; + private Circle circO; @FXML - private Label lblZ; + private Circle circI; @FXML - private Label lblO; + private Circle circU; @FXML - private Label lblI; + private Circle circZ; @FXML - private Label lblU; + private Circle circT; @FXML - private Label lblA; + private Circle circR; @FXML - private Label lblD; + private Circle circE; @FXML - private Label lblS; + private Circle circW; @FXML - private Label lblF; + private Circle circQ; @FXML - private Label lblG; + private Label lblL; @FXML - private Label lblH; + private Label lblM; @FXML - private Label lblK; + private Label lblN; @FXML - private Label lblJ; + private Label lblB; @FXML - private Label lblP; + private Label lblV; + + @FXML + private Label lblC; @FXML private Label lblX; @@ -223,108 +232,111 @@ public class GuiController { private Label lblY; @FXML - private Label lblC; + private Label lblP; @FXML - private Label lblV; + private Label lblK; @FXML - private Label lblB; + private Label lblJ; @FXML - private Label lblL; + private Label lblH; @FXML - private Label lblM; + private Label lblG; @FXML - private Label lblN; + private Label lblF; @FXML - private Circle circE; + private Label lblD; @FXML - private Circle circR; + private Label lblS; @FXML - private Circle circT; + private Label lblA; @FXML - private Circle circZ; + private Label lblQ; @FXML - private Circle circU; + private Label lblW; @FXML - private Circle circI; + private Label lblE; @FXML - private Circle circO; + private Label lblR; @FXML - private Circle circA; + private Label lblT; @FXML - private Circle circS; + private Label lblZ; @FXML - private Circle circD; + private Label lblU; @FXML - private Circle circF; + private Label lblI; @FXML - private Circle circG; + private Label lblO; @FXML - private Circle circH; + private TextField tfCodiert; @FXML - private Circle circJ; + private TextField tfKlartext; @FXML - private Circle circK; + private ProgressBar pbLadeNachricht; @FXML - private Circle circP; + private MenuButton mBtnWalzPos1; @FXML - private Circle circY; + private MenuButton mBtnWalzPos2; @FXML - private Circle circX; + private MenuButton mBtnWalzPos3; @FXML - private Circle circC; + private MenuButton mBtnNotchPos1; @FXML - private Circle circV; + private MenuButton mBtnNotchPos2; @FXML - private Circle circB; + private MenuButton mBtnNotchPos3; @FXML - private Circle circN; + private MenuButton mBtnStartPos1; @FXML - private Circle circM; + private MenuButton mBtnStartPos2; @FXML - private Circle circL; + private MenuButton mBtnStartPos3; @FXML - private Circle circW; + private Label lblLadeNachricht; @FXML - private Circle circQ; + private Label lblTagesschluessel; + + @FXML + private Label lblSpruchschluessel; @FXML void initialize() { - // Variablen setzen - textEingabe = ""; - textCodiert = ""; - resetDisplay = true; + // Variablen setzen + textEingabe = ""; + textCodiert = ""; + resetDisplay = true; //Einträge für Walzen menu(mBtnWalzPos1, walzenNr); @@ -341,7 +353,6 @@ public class GuiController { menu(mBtnStartPos3, position); menu(mBtnStartPos2, position); - //Setze Leucht Event bei Tastendruck leuchten(btnA, circA); leuchten(btnB, circB); @@ -370,20 +381,45 @@ public class GuiController { leuchten(btnY, circY); leuchten(btnZ, circZ); + // Initialisieren des Codierers und setzen der Kenngruppe this.codierer = new Codierer(); - this.codierer.setKenngruppe("enigma"); + this.codierer.setKenngruppe("enigma"); - // Walzen auf ihre Position setzen. Der Spruchschlüssel ist hier bereits berücksichtigt. - mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0])); - mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1])); - mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2])); + // Beim nächsten Tastendruck erstmal das Display löschen damit falschen Nachrichten geschickt werden. + this.resetDisplay = true; + + // Einstellungen aus dem Logbuch auslesen und setzen + this.setzeTagesSchluessel(); + this.setzeSteckverbindungen(); } + /** + * Hier werden die TextFelder, welche die Steckverbindungen darstellen, + * mit dem Werten die die Klasse Codierer zur Verfügung stellt gefüllt. + */ + private void setzeSteckverbindungen() { + tfStecker1.setText(codierer.getSteckverbindungen()[0][0]+""+codierer.getSteckverbindungen()[0][1]); + tfStecker2.setText(codierer.getSteckverbindungen()[1][0]+""+codierer.getSteckverbindungen()[1][1]); + tfStecker3.setText(codierer.getSteckverbindungen()[2][0]+""+codierer.getSteckverbindungen()[2][1]); + tfStecker4.setText(codierer.getSteckverbindungen()[3][0]+""+codierer.getSteckverbindungen()[3][1]); + tfStecker5.setText(codierer.getSteckverbindungen()[4][0]+""+codierer.getSteckverbindungen()[4][1]); + tfStecker6.setText(codierer.getSteckverbindungen()[5][0]+""+codierer.getSteckverbindungen()[5][1]); + tfStecker7.setText(codierer.getSteckverbindungen()[6][0]+""+codierer.getSteckverbindungen()[6][1]); + tfStecker8.setText(codierer.getSteckverbindungen()[7][0]+""+codierer.getSteckverbindungen()[7][1]); + tfStecker9.setText(codierer.getSteckverbindungen()[8][0]+""+codierer.getSteckverbindungen()[8][1]); + tfStecker10.setText(codierer.getSteckverbindungen()[9][0]+""+codierer.getSteckverbindungen()[9][1]); + } + + /** + * TODO: Die Löschen Funktion muss noch ausgeschrieben werden. Der letzte char muss aus beiden + * Feldern entfernt werden. + * Der Codierer muss den letzten Buchstaben aus (codierer.nachricht) löschen und die Walzen um eines zurück drehen. + */ @FXML private void loeschen() { - if (textEingabe.length()==0){ + if (textEingabe.length() == 0) { tfKlartext.setText(""); - }else { + } else { textEingabe = textEingabe.substring(0, textEingabe.length() - 1); tfKlartext.setText(textEingabe); } @@ -391,16 +427,17 @@ public class GuiController { @FXML void btnempfangen() { - String[] empfangeneNachricht = this.codierer.empfangeNachricht(); + String[] empfangeneNachricht = this.codierer.empfangeNachricht(); if (empfangeneNachricht[0] != null) { - this.tfKlartext.setText(empfangeneNachricht[2]); - this.tfCodiert.setText(empfangeneNachricht[1]); - this.resetDisplay = true; - - mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0])); - mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1])); - mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2])); - } + this.tfKlartext.setText(empfangeneNachricht[2]); + this.tfCodiert.setText(empfangeneNachricht[1]); + this.resetDisplay = true; + + // Spruchschluessel in das Feld lblSpruchschluessel schreiben + lblSpruchschluessel.setText(this.codierer.empfangenerSpruchschluessel(empfangeneNachricht[2])); + + this.setzeTagesSchluessel(); + } } @FXML @@ -425,19 +462,18 @@ public class GuiController { private void listener(MenuButton mb, MenuItem mi) { // mb.setText(mi.getText()); - if(mb.getId().equals(mBtnStartPos1.getId()))setzePosition(1,mi.getText().charAt(0)); - if(mb.getId().equals(mBtnStartPos2.getId()))setzePosition(2,mi.getText().charAt(0)); - if(mb.getId().equals(mBtnStartPos3.getId()))setzePosition(3,mi.getText().charAt(0)); - if(mb.getId().equals(mBtnWalzPos1.getId()))setzeWalze(1,mi.getText()); - if(mb.getId().equals(mBtnWalzPos2.getId()))setzeWalze(2,mi.getText()); - if(mb.getId().equals(mBtnWalzPos3.getId()))setzeWalze(3,mi.getText()); - if(mb.getId().equals(mBtnNotchPos1.getId())) - setzeRing(1,Integer.parseInt(mi.getText())-1); - if(mb.getId().equals(mBtnNotchPos2.getId())) - setzeRing(2,Integer.parseInt(mi.getText())-1); - if(mb.getId().equals(mBtnNotchPos3.getId())) - setzeRing(3,Integer.parseInt(mi.getText())-1); - + if (mb.getId().equals(mBtnStartPos1.getId())) setzePosition(1, mi.getText().charAt(0)); + if (mb.getId().equals(mBtnStartPos2.getId())) setzePosition(2, mi.getText().charAt(0)); + if (mb.getId().equals(mBtnStartPos3.getId())) setzePosition(3, mi.getText().charAt(0)); + if (mb.getId().equals(mBtnWalzPos1.getId())) setzeWalze(1, mi.getText()); + if (mb.getId().equals(mBtnWalzPos2.getId())) setzeWalze(2, mi.getText()); + if (mb.getId().equals(mBtnWalzPos3.getId())) setzeWalze(3, mi.getText()); + if (mb.getId().equals(mBtnNotchPos1.getId())) + setzeRing(1, Integer.parseInt(mi.getText()) - 1); + if (mb.getId().equals(mBtnNotchPos2.getId())) + setzeRing(2, Integer.parseInt(mi.getText()) - 1); + if (mb.getId().equals(mBtnNotchPos3.getId())) + setzeRing(3, Integer.parseInt(mi.getText()) - 1); } /** @@ -503,26 +539,29 @@ public class GuiController { */ private void setText(Button b) { if (textEingabe.length() < 250) { - if(this.resetDisplay) { - this.tfCodiert.setText(""); - this.tfKlartext.setText(""); - this.resetDisplay = false; - this.codierer.resetHardware(); - textCodiert = ""; - textEingabe = ""; - // Spruchschlüssel generieren und codieren - this.codierer.generateSpruchschluessel(); - } - textEingabe += b.getText(); - textCodiert += this.codierer.codiere(b.getText().charAt(0), true); + if (this.resetDisplay) { + this.tfCodiert.setText(""); + this.tfKlartext.setText(""); + this.resetDisplay = false; + this.codierer.resetHardware(); + textCodiert = ""; + textEingabe = ""; + // Spruchschlüssel generieren und codieren + this.codierer.generateSpruchschluessel(); + // Spruchschluessel in das Feld lblSpruchschluessel schreiben + lblSpruchschluessel.setText(this.codierer.getSpruchschluessel()); + } + textEingabe += b.getText(); + textCodiert += this.codierer.codiere(b.getText().charAt(0), true); tfKlartext.setText(textEingabe); tfCodiert.setText(textCodiert); + // Position der Walzen aktuallisieren mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0])); - mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1])); - mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2])); - } + mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1])); + mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2])); + } } private void leuchten(Button taste, Circle leuchte) { @@ -538,26 +577,26 @@ public class GuiController { * Setzt die Anzeige des entsprechende Gui-Element auf die entsprechende Walze * ->d.h. welche Walze sitzt auf welcher Position * - * @param walzeRoemischNr => gibt die Walzennummer an - * @param walzenPosition => gibt die Position der Walze + * @param walzeRoemischNr => gibt die Walzennummer an + * @param walzenPosition => gibt die Position der Walze */ private void setzeWalze(int walzenPosition, String walzeRoemischNr) { - int walzeNr=0; - switch (walzeRoemischNr){ + int walzeNr = 0; + switch (walzeRoemischNr) { case "I": - walzeNr=0; + walzeNr = 0; break; case "II": - walzeNr=1; + walzeNr = 1; break; case "III": - walzeNr=2; + walzeNr = 2; break; case "IV": - walzeNr=4; + walzeNr = 4; break; case "V": - walzeNr=4; + walzeNr = 4; break; default: break; @@ -585,7 +624,7 @@ public class GuiController { * Mitnahmeposition meint => die nächste Walze wird bei erreichen dieser Position (notch) * um eine Stelle versetzt * - * @param ringStellung => gibt die walze an + * @param ringStellung => gibt die walze an * @param walzenPosition => gibt den notch der Walze (walze) an */ private void setzeRing(int walzenPosition, int ringStellung) { @@ -628,25 +667,42 @@ public class GuiController { /** * Setzt den aktuellen TagesSchluessel - * - * @param tagesSchluessel => neuen Tagesschluessel übergeben */ - public void setzeTagesSchluessel(String tagesSchluessel) { - /* - * TODO Benötige TestString aus der DB Codebuch - * - * Den Tagesschlüssel bekommst du wie folgt: - * <p> - * // Aktuelle Position der Walzen - * codierer.codebuch.getWalzenlage(); - * - * // Position der Ringe - * codierer.codebuch.getRingstellung(); - * - * //Position der Steckverbindungen - * codierer.codebuch.getSteckverbindung(); - * </p> - */ + public void setzeTagesSchluessel() { + + // Umsprungpunkte anzeigen + mBtnNotchPos1.setText(String.valueOf(this.codierer.fetchRingstellung()[0])); + mBtnNotchPos2.setText(String.valueOf(this.codierer.fetchRingstellung()[1])); + mBtnNotchPos3.setText(String.valueOf(this.codierer.fetchRingstellung()[2])); + // Walzennummern anzeigen + mBtnWalzPos1.setText(String.valueOf(this.codierer.getchWalzenNr()[0])); + mBtnWalzPos2.setText(String.valueOf(this.codierer.getchWalzenNr()[1])); + mBtnWalzPos3.setText(String.valueOf(this.codierer.getchWalzenNr()[2])); + // Position der Walzen anzeigen + mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0])); + mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1])); + mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2])); + // Steckbrett Felder setzen + tfStecker1.setText(this.codierer.getSteckverbindungen()[0][0] + "" + + this.codierer.getSteckverbindungen()[0][1]); + tfStecker2.setText(this.codierer.getSteckverbindungen()[1][0] + "" + + this.codierer.getSteckverbindungen()[1][1]); + tfStecker3.setText(this.codierer.getSteckverbindungen()[2][0] + "" + + this.codierer.getSteckverbindungen()[2][1]); + tfStecker4.setText(this.codierer.getSteckverbindungen()[3][0] + "" + + this.codierer.getSteckverbindungen()[3][1]); + tfStecker5.setText(this.codierer.getSteckverbindungen()[4][0] + "" + + this.codierer.getSteckverbindungen()[4][1]); + tfStecker6.setText(this.codierer.getSteckverbindungen()[5][0] + "" + + this.codierer.getSteckverbindungen()[5][1]); + tfStecker7.setText(this.codierer.getSteckverbindungen()[6][0] + "" + + this.codierer.getSteckverbindungen()[6][1]); + tfStecker8.setText(this.codierer.getSteckverbindungen()[7][0] + "" + + this.codierer.getSteckverbindungen()[7][1]); + tfStecker9.setText(this.codierer.getSteckverbindungen()[8][0] + "" + + this.codierer.getSteckverbindungen()[8][1]); + tfStecker10.setText(this.codierer.getSteckverbindungen()[9][0] + "" + + this.codierer.getSteckverbindungen()[9][1]); } -} \ No newline at end of file +} diff --git a/src/main/java/enigma/KenngruppeController.java b/src/main/java/projekt/enigma/KenngruppeController.java similarity index 88% rename from src/main/java/enigma/KenngruppeController.java rename to src/main/java/projekt/enigma/KenngruppeController.java index a1049e199af8e9f5f698d8a4acb6f8b673fa076c..3371b0f647ea6f27a72082ae0f18a44b79faf489 100644 --- a/src/main/java/enigma/KenngruppeController.java +++ b/src/main/java/projekt/enigma/KenngruppeController.java @@ -1,4 +1,4 @@ -package enigma; +package projekt.enigma; import java.io.IOException; import javafx.fxml.FXML; diff --git a/src/main/java/enigma/Main.java b/src/main/java/projekt/enigma/Main.java similarity index 86% rename from src/main/java/enigma/Main.java rename to src/main/java/projekt/enigma/Main.java index 22bb0df9e78ca242102994c499a059a629b4c57a..f016016d5dd3ebc14cae30918487a14eec35ac8e 100644 --- a/src/main/java/enigma/Main.java +++ b/src/main/java/projekt/enigma/Main.java @@ -1,4 +1,4 @@ -package enigma; +package projekt.enigma; import java.sql.SQLException; diff --git a/src/main/java/enigma/database/DatenbankSqlite.java b/src/main/java/projekt/enigma/database/DatenbankSqlite.java similarity index 94% rename from src/main/java/enigma/database/DatenbankSqlite.java rename to src/main/java/projekt/enigma/database/DatenbankSqlite.java index 00e88ea8e5293d287074570f9f020d161fea6c76..ac7c9024be694baff54f6573ac70dc695fc45081 100644 --- a/src/main/java/enigma/database/DatenbankSqlite.java +++ b/src/main/java/projekt/enigma/database/DatenbankSqlite.java @@ -1,4 +1,4 @@ -package enigma.database; +package projekt.enigma.database; import java.sql.*; @@ -22,7 +22,7 @@ public class DatenbankSqlite { */ private Connection connect() { - String url = "jdbc:sqlite::resource:enigma/codebuch.sqlite"; + String url = "jdbc:sqlite::resource:projekt/enigma/codebuch.sqlite"; Connection conn = null; try { @@ -40,11 +40,16 @@ public class DatenbankSqlite { * 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. * - * TODO: Es wird kein Codebuch Objekt mehr erzeugt sondern ein String[] zurück gegeben * Hole den heutigen Eintrag aus der SQLite Datenbank und erstelle daraus ein Codebuch Objekt * * @param tag : int : Tag für welchen ein Codebuch benötigt wird. - * @return Codebuch : Codebuch Object mit dem Codebuch des angefragten Tages + * @return String : Die Einstellungen des angefragten Tages + * <p> + * String[0] : Tag + * String[1] : Walzenlage + * String[2] : Ringstellung + * String[3] : Steckverbindung + * </p> */ public String[] getCodebuch(int tag) { diff --git a/src/main/java/enigma/model/Codebuch.java b/src/main/java/projekt/enigma/model/Codebuch.java similarity index 79% rename from src/main/java/enigma/model/Codebuch.java rename to src/main/java/projekt/enigma/model/Codebuch.java index 115ed442dfbebc191cbe532998cfa47833987acf..9ded525e6d41617d76f148556b5c8f278bb88a63 100644 --- a/src/main/java/enigma/model/Codebuch.java +++ b/src/main/java/projekt/enigma/model/Codebuch.java @@ -1,13 +1,13 @@ -package enigma.model; +package projekt.enigma.model; -import enigma.database.DatenbankSqlite; +import projekt.enigma.database.DatenbankSqlite; import java.time.LocalDate; import java.time.ZoneId; /** * 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. + * Jeder Enigma gehörte auch ein Codebuch bei, welches notwendig 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 Walze gesetzt und deren Grundeinstellung @@ -22,22 +22,36 @@ import java.time.ZoneId; * geben kann. */ public class Codebuch { + /** - * TODO: Dokumentieren + * TODO: Dokumentieren tag + * tag : int : gibt den Tag an */ private int tag; + + /** + * walzenlage : int[] : legt die Positionen der Walzen fest + */ private int[] walzenlage; + + /** + * ringstellung : int[] : TODO ringstellung: char || int ? + */ private int[] ringstellung; + + /** + * steckverbindung : char[][] : stellt die Steckverbindungen im Steckbrett dar + */ private char[][] steckverbindung; /** - * Im Konstruktor werden die Standart Werte gesetzt + * Im Konstruktor werden die Standardwerte gesetzt * <p> * walzenlage : int[3] : Hier wird die Position der drei Walzen festgelegt. * ringstellung : char[3] : Jede Walze hat einen Ring. Der Index steht für die Walze und der Value für * die Position des Ringes. * steckverbindung : char[10][] : Zehn Kabel können in das Steckbrett gesteckt werden. In diesem Array werden - * die Kabel mit ihren jeweiligen Buchsen hinterlegt. + * die Kabel mit ihren jeweiligen Buchsen hinterlegt. */ public Codebuch() { this.walzenlage = new int[3]; @@ -53,12 +67,16 @@ public class Codebuch { /** * TODO: Dokumentieren - * @param tag + * 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 */ - public void getTagesschluessel(int... tag) { + public void fetchTagesschluessel(int... tag) { String[] walzenlage, ringstellung, db; - if(tag.length > 0) { + if (tag.length > 0) { db = new DatenbankSqlite().getCodebuch(tag[0]); } else { db = new DatenbankSqlite().getCodebuch(LocalDate.now(ZoneId.of("Europe/Berlin")).getDayOfMonth()); @@ -82,7 +100,7 @@ public class Codebuch { /** * Gibt die aktuelle Instanz des Codebuches als String zurück. - * Hierbei werden der Tag die Walzenlagen, Ring/Grundstellung sowie die Steckverbindungen zurück gegeben. + * Hierbei werden der Tag die Walzenlagen, Ring-/Grundstellung sowie die Steckverbindungen zurück gegeben. * * @return String : String des gesamten Objektes */ @@ -138,16 +156,14 @@ public class Codebuch { /** * Setzt den Tag dieser Instanz * - * @param tag : int + * @param tag : int : Tag */ - void setTag(int tag) { - this.tag = tag; - } + void setTag(int tag) { this.tag = tag; } /** * Gibt die Walzenlage dieser Instanz zurück * - * @return String[] : Walzenlage + * @return String[] : Walzenlage TODO: String[] || int[]? */ public int[] getWalzenlage() { return walzenlage; @@ -156,7 +172,7 @@ public class Codebuch { /** * Gibt die Ringstellung dieser Instanz zurück * - * @return String[] : Ringstellung + * @return String[] : Ringstellung TODO: String[] || int[]? */ public int[] getRingstellung() { return ringstellung; @@ -177,7 +193,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 char zerlegt und anschließend im globalen + * Diese werden in zwei chars zerlegt und anschließend im globalen * Array gespeichert. */ private void setSteckverbindung(String[] kabel) { @@ -205,7 +221,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. + * @param ringstellung : char : An dieser Position soll die nächste Walze weiter gedreht werden.TODO: String[] || int[]? */ private void setRingstellung(int position, int ringstellung) { this.ringstellung[position] = ringstellung; diff --git a/src/main/java/enigma/model/Codierer.java b/src/main/java/projekt/enigma/model/Codierer.java similarity index 52% rename from src/main/java/enigma/model/Codierer.java rename to src/main/java/projekt/enigma/model/Codierer.java index 8b1ff3bb4ba9a89def61d34a21be45df40f9d748..f62108eab6856329005cb2c7dfffac1b3ac9d548 100644 --- a/src/main/java/enigma/model/Codierer.java +++ b/src/main/java/projekt/enigma/model/Codierer.java @@ -1,37 +1,62 @@ -package enigma.model; +package projekt.enigma.model; import org.apache.http.HttpException; import java.io.IOException; +import java.util.Arrays; import java.util.Calendar; 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 { /** - * TODO: Dokumentieren + * Der Klartext Spruchschlüssel zur codierung der Nachricht */ private String spruchschluessel; + /** + * Der Spruchschlüssel, mit den Tageswerten aus dem Codebuch, codiert + */ 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; + /** + * Das Hardware Objekt. Hier werden alle Hardware relevanten Baugruppen gespeichert und verarbeitet. + */ private Hardware hardware; + /** + * Im Codebuch sind die Tageswerte zu finden. Über dieses Objekt kann darauf zugegriffen werden. + */ private Codebuch codebuch; + /** + * Der aktuelle Tagesschluessel. Dieser wird aus dem Codebuch ausgelesen und hier hinterlegt. + */ + private String tagesSchluessel; /** - * TODO: Dokumentieren + * Der Konstruktor des Codierers + * Hier werden die globalen Variablen auf ihre Standart Werte gesetzt sowie die Objekte Initialisiert. */ public Codierer() { + this.nachricht = ""; this.spruchschluessel = ""; this.spruchschluesselCodiert = ""; this.kenngruppe = ""; - this.kenngruppeCodiert = ""; this.codebuch = new Codebuch(); - this.codebuch.getTagesschluessel(); + this.codebuch.fetchTagesschluessel(); } /** @@ -74,16 +99,15 @@ public class Codierer { /** * Hier wird ein neuer Spruchschlüssel generiert. + * <p> * Mit diesem werden die Walzen auf eine neue Startposition gestellt und dem Kopf, mit dem * Tagesschlüssel codiert, hinzugefügt. - * <p> + * <br> * 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. - * <p> + * <br> * Dies wir nun so lange gemacht bis der Spruchschlüssel eine länge von drei Zeichen hat. - * <p> - * TODO: Doku aktuallisieren */ public void generateSpruchschluessel() { @@ -104,21 +128,13 @@ public class Codierer { this.hardware.setzePosition(1, this.spruchschluessel.charAt(1)); this.hardware.setzePosition(2, this.spruchschluessel.charAt(2)); - // Die Kenngruppe codieren - this.kenngruppeCodiert = this.codiere(this.kenngruppe, true); + // Die Kenngruppe codieren und in der Nachricht speichern + this.codiere(this.kenngruppe, true); } /** - * TODO: Dokumentieren - * - * @return String : Der codierte Spruchschlüssel - */ - public String getSpruchschluesselCodiert() { - return this.spruchschluesselCodiert; - } - - /** - * 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 klartext Spruchschlüssel */ @@ -127,14 +143,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() { Calendar cal = Calendar.getInstance(); // 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)) + " " + // Zeichen Anzahl der Nachricht @@ -142,9 +158,6 @@ public class Codierer { // Spruchschlüssel anhängen this.spruchschluesselCodiert.substring(0, 3) + " " + this.spruchschluesselCodiert.substring(3, 6) + " "; - - // Kenngruppe an das Ende setzen - //this.kenngruppeCodiert; } /** @@ -173,7 +186,7 @@ public class Codierer { /** * Gibt die letzte empfangene Nachricht zurück * <br> - * String[0} Tag wann die Nachricht gesendet wurde + * String[0] Tag wann die Nachricht gesendet wurde * String[1] = Die verschlüsselte Nachricht * String[2] = Nachricht im Klartext */ @@ -181,13 +194,26 @@ public class Codierer { this.nachricht = ""; Morsecode mc = new Morsecode(); - String[] nachricht = new String[3]; + String[] nachricht = new String[4]; String[] codierteNachricht = new Funkraum().empfangeFunkspruch(this.kenngruppe); if (codierteNachricht[1] != null) { nachricht[0] = codierteNachricht[0]; nachricht[1] = mc.convertMorsecodeToBuchstabe(codierteNachricht[1]); nachricht[2] = this.decodiere(nachricht[1], Integer.parseInt(nachricht[0])); + StringBuilder sb = new StringBuilder(); + + sb.append(nachricht[1], 0, 16); + for (int i = 17; i <= nachricht[1].length(); ) { + if ((i + 5) < nachricht[1].length()) { + sb.append(nachricht[1], i, i + 5).append(" "); + i += 5; + } else { + sb.append(nachricht[1].substring(i)); + break; + } + } + nachricht[1] = sb.toString(); } return nachricht; @@ -227,7 +253,7 @@ public class Codierer { /** * Gibt die aktuellen Buchstaben auf den Walzen zurück * - * @return + * @return char[] : Walzen Array mit der aktuellen Position */ public char[] getWalzen() { char[] walzen = new char[3]; @@ -239,23 +265,17 @@ 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 - */ - public void setHardware(Hardware hardware) { - this.hardware = hardware; - } - - /** - * TODO: Dokumentieren - * - * @param buchstabe - * @return + * @param buchstabe : char : Der zu codierende Buchstabe + * @param save : boolean : Nachricht speichern oder nicht + * @return char : Der codierte Buchstabe */ public char codiere(char buchstabe, boolean save) { char codiert = this.hardware.codiere(buchstabe); - if(save) { + if (save) { this.nachricht += codiert; } @@ -263,10 +283,13 @@ public class Codierer { } /** - * TODO: Dokumentieren - * @param klartext - * @param save - * @return + * 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 : String : Der zu codierende Text + * @param save : boolean : Nachricht speichern oder nicht + * @return String : Der codierte Text zusätzlich als Rückgabe */ public String codiere(String klartext, boolean save) { @@ -280,7 +303,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 tag : int : Tag der Nachricht @@ -290,11 +315,13 @@ public class Codierer { // Hardware reseten und Tageseinstellungen aus dem Codebuch laden this.initialisiereHardware(); - this.codebuch.getTagesschluessel(tag); + this.codebuch.fetchTagesschluessel(tag); String[] nachricht = codierteNachricht.split(" "); StringBuilder sb = new StringBuilder(); + System.out.println(Arrays.toString(nachricht)); + // Uhrzeit sb.append(nachricht[0]).append(" "); @@ -318,11 +345,13 @@ public class Codierer { } /** - * TODO: Dokumentieren - * @param nachricht - * @return + * Zerlegt den übergebenen String in einen char Array und decodiert jedes Zeichen. + * Der String wird dann decodiert zurück gegeben. + * + * @param nachricht : String : Der zu decodierende Text + * @return String : Der decodierte Text */ - public String decodiereString(String nachricht) { + private String decodiereString(String nachricht) { StringBuilder sb = new StringBuilder(); @@ -336,11 +365,103 @@ public class Codierer { } /** - * TODO: Dokumentieren + * Setzt die Enigma auf die Einstellungen des aktuellen Tages, aus dem Codebuch zurück. */ public void resetHardware() { - this.initialisiereHardware(); } + /** + * Setzt den anzuzeigenden Buchstaben (buchstabe) auf der Walze (wlazenPosition) + * TODO: Wenn die Walzen, Notches, Kabel, etc. verändert werden, muss die bisherige Nachricht (this.nachricht) gelöscht werden. + * + * @param walzenPosition : int : Nummer der Walze + * @param buchstabe : char : Buchstabe der zugewiesen soll + */ + public void setWalze(int walzenPosition, char buchstabe) { + this.hardware.setzePosition(walzenPosition, buchstabe); + } + + /** + * Setzt den Ring auf der Walze auf einen neuen Umstprungwert. + * + * @param walzenPosition : int : Walze auf die der Ring gesteckt wird + * @param umsprungPunkt : int : Buchstabe auf dem der Notch sitzt + */ + public void setRing(int walzenPosition, int umsprungPunkt) { + this.hardware.setzeRing(walzenPosition, umsprungPunkt); + } + + /** + * Setzt die Walze (walzeNr) in die Position (walzenPosition) der Enigma ein. + * Mit (ringstellung) gibt man die Position des Umsprungpunktes an. + * + * @param walzenPosition : int : Position der Walze in der Enigma (1-2-3) + * @param walzeNr : int : Nummer der Walze die eingesetzt wird + * @param ringstellung : int : Stellung des Ringes + */ + public void setWalzeNr(int walzenPosition, int walzeNr, int ringstellung) { + this.hardware.setzeWalzenNr(walzenPosition, walzeNr, ringstellung); + } + + /** + * Setzt das Kabel in beide Ports ein und fügt es dem Steckbrett Array hinzu. + * @param port : int : Kabel Nummer welches am Steckbrett eingesteckt wird + * @param verbindung : String : Verbindung welche die vertauschten Buchstaben angibt + * @return + */ + public boolean setSteckbrett(int port, String verbindung) { + return this.hardware.getSteckbrett().setzeVertauschung(port, verbindung.charAt(0), verbindung.charAt(1)); + } + + /** + * Prüft ob der Port auf den das Kabel gesteckt werden soll, noch frei ist. + * <p> + * 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 this.hardware.getSteckbrett().ueberpruefeVertauschungen(buchstabe); + } + + /** + * Ließt aus der empfangenen Nachricht den Spruchschlüssel aus und gibt ihn zurück. + * + * @param empfangeneNachricht : String : Die empfangene Nachricht als String + * @return String : Der Spruchschlüssel mit welcher die Nachricht codiert wurde. + */ + public String empfangenerSpruchschluessel(String empfangeneNachricht) { + String[] nachricht = empfangeneNachricht.split(" "); + + return nachricht[2]; + } + + /** + * Gibt die Ringstellungen aus dem Codebuch zurück + * + * @return int[] : Array mit den Ringstellungen der drei eingesetzten Walzen + */ + public int[] fetchRingstellung() { + return this.codebuch.getRingstellung(); + } + + /** + * Gibt die Walzennummer aus dem Codebuch zurück + * + * @return int[] : Array mit den Nummern der drei eingesetzten Walzen + */ + public int[] getchWalzenNr() { + return this.codebuch.getWalzenlage(); + } + + /** + * Gibt die Steckverbindungen aus dem Codebuch zurück + * + * @return char[][] : Array mit den gesteckten Verbindungen im Steckbrett + */ + public char[][] getSteckverbindungen() { + return this.codebuch.getSteckverbindung(); + } } diff --git a/src/main/java/enigma/model/Funkraum.java b/src/main/java/projekt/enigma/model/Funkraum.java similarity index 99% rename from src/main/java/enigma/model/Funkraum.java rename to src/main/java/projekt/enigma/model/Funkraum.java index d3fe2883fd86fb468ce832cfd64cf460176b6a99..96a3a35b3fa9391afad8d5193ff4923bb368c391 100644 --- a/src/main/java/enigma/model/Funkraum.java +++ b/src/main/java/projekt/enigma/model/Funkraum.java @@ -1,4 +1,4 @@ -package enigma.model; +package projekt.enigma.model; import org.apache.http.HttpEntity; import org.apache.http.HttpException; diff --git a/src/main/java/enigma/model/Hardware.java b/src/main/java/projekt/enigma/model/Hardware.java similarity index 99% rename from src/main/java/enigma/model/Hardware.java rename to src/main/java/projekt/enigma/model/Hardware.java index 1842e1e6725e2cf6c1aa669db1a9e85ac6b6d818..b37ddd166c98d2274e0722e401418c81d354bc16 100644 --- a/src/main/java/enigma/model/Hardware.java +++ b/src/main/java/projekt/enigma/model/Hardware.java @@ -1,4 +1,4 @@ -package enigma.model; +package projekt.enigma.model; /** * In dieser Klasse wird die Hardware zusammen gefasst. diff --git a/src/main/java/enigma/model/Morsecode.java b/src/main/java/projekt/enigma/model/Morsecode.java similarity index 99% rename from src/main/java/enigma/model/Morsecode.java rename to src/main/java/projekt/enigma/model/Morsecode.java index 01df55dcd0c655202208e050cf11cb4d75af4971..7d99652547325b95631bb82dc8216ff4bdf5bc25 100644 --- a/src/main/java/enigma/model/Morsecode.java +++ b/src/main/java/projekt/enigma/model/Morsecode.java @@ -1,4 +1,4 @@ -package enigma.model; +package projekt.enigma.model; import java.util.*; import java.util.Map.Entry; diff --git a/src/main/java/enigma/model/Reflektor.java b/src/main/java/projekt/enigma/model/Reflektor.java similarity index 63% rename from src/main/java/enigma/model/Reflektor.java rename to src/main/java/projekt/enigma/model/Reflektor.java index 4aabb1b6841b475125ee7fd8c5df1feb0a158f86..9e5e6b1424852c8ee063179f8a8d216aac9c969a 100644 --- a/src/main/java/enigma/model/Reflektor.java +++ b/src/main/java/projekt/enigma/model/Reflektor.java @@ -1,43 +1,41 @@ -package enigma.model; +package projekt.enigma.model; /** * Klasse Reflektor - * <p> + * <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. - * <p> - * Prinzipiell verhält sich die Klasse Refelktor wie die Klasse Walze, außer das sie sich - * nach Betätigung einer Taste nicht dreht (starr montiert) und sie gibt keine Signale + * <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. */ public class Reflektor { /** - * Konstanten und Variablen der Klasse Reflektor - * <p> * WALZE_ALPHABET : konstanter Char-Array mit den Werten des Alphabeths (26 Werte) - * WALZE_REFLEKTOR : konstanter Char-Array mit den Werten des Reflektors (26 Werte) - * reflektorBuchstabeRein : Character mit dem an die Klasse übergebenen Character - * reflektorBuchstabeRaus : Character nach der Codierung in der Klasse Reflektor - * iPositionReflektor : Integer mit der Positionsnummer des Characters im Array */ private final Character[] WALZE_ALPHABET = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; + + /** + * WALZE_REFLEKTOR : konstanter Char-Array mit den Werten des Reflektors (26 Werte) + */ private final Character[] WALZE_REFLEKTOR = {'E', 'J', 'M', 'Z', 'A', 'L', 'Y', 'X', 'V', 'B', 'W', 'F', 'C', 'R', 'Q', 'U', 'O', 'N', 'T', 'S', 'P', 'I', 'K', 'H', 'G', 'D'}; /** - * Funktion Codiere - * <p> + * 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. * - * @return reflektorBuchstabeRaus: Character: Der kodierte Buchstabe aus dem Reflektor + * @return WALZE_REFLEKTOR[iPositionReflektor]: Character: Der kodierte Buchstabe aus dem Reflektor */ public char codiere(Character buchstabe) { int iPositionReflektor = 0; - /*Ermittelt die Position des Buchstaben buchstabe auf der Alphabetswalze*/ + //Ermittelt die Position des Buchstaben "buchstabe" auf der Alphabetswalze for (int index = 0; index < WALZE_ALPHABET.length; index++) { if (buchstabe.equals(WALZE_ALPHABET[index])) { iPositionReflektor = index; @@ -45,8 +43,6 @@ public class Reflektor { } } - /*Im Char-Array WALZE_REFLEKTOR wird der Character an der Position iPositionReflektor ausgegeben*/ return WALZE_REFLEKTOR[iPositionReflektor]; } - } diff --git a/src/main/java/projekt/enigma/model/Steckbrett.java b/src/main/java/projekt/enigma/model/Steckbrett.java new file mode 100644 index 0000000000000000000000000000000000000000..f1fbfcb792783d7e83034fa45d3996a0a0d4011a --- /dev/null +++ b/src/main/java/projekt/enigma/model/Steckbrett.java @@ -0,0 +1,151 @@ +package projekt.enigma.model; + +/** + * Klasse Steckbrett + * <br> + * Das Steckbrett diente dazu Buchstaben paarweise zu vertauschen noch bevor diese durch die Walzen codiert werden. + * Die Klasse Steckbrett nimmt bis zu 10 paarweise zu vertauschende Buchstabenpaare entgegen, prueft diese auf + * Zulaessigkeit und tauscht diese dann paarweise aus. + */ +public class Steckbrett { + + /** + * zaehler: Int, der als Laufvariable genutzt wird + */ + private int zaehler; + + /** + * orginalBuchstaben: Character-Array, der jeweils den ersten zu vertauschenden Buchstaben enthält + */ + private Character[] orginalBuchstaben; + + /** + * getauschteBuchstaben: Character-Array, der jeweils den zweiten zu vertauschenden Buchstaben enthält + */ + private Character[] getauschteBuchstaben; + + + /** + * Konstruktor Steckbrett + * <br> + * Erzeugt zwei Charakter-Arrays (orginalBuchstaben und getauschteBuchstaben) der Länge 10. + */ + public Steckbrett() { + + orginalBuchstaben = new Character[10]; + getauschteBuchstaben = new Character[10]; + } + + /** + * Funktion setzeVertauschung + * <br> + * Der Funktion setzeVertauschung werden 2 Buchstaben (buchstabe1 und buchstabe2) übergeben. + * Zuerst wird überprüft ob einer der beiden Buchstaben bereits enthalten ist, was unzulässig wäre. + * <br> + * Anschließend wird: + * <p> + * buchstabe1 in das Array orginalBuchstaben auf den nächsten, freien Index geschrieben + * buchstabe2 in das Array getauschteBuchstaben auf den nächsten, freien Index geschrieben. + * </p> + * + * @param buchstabe1 : char: Gibt den ersten Buchstaben an, der getauscht werden soll. + * @param buchstabe2 : char: gibt den zweiten Buchstaben an, mit dem der erste getauscht werden soll. + * @return boolean : Wenn die Vertauschung zulässig ist, true, ansonsten false + */ + public boolean setzeVertauschung(char buchstabe1, char buchstabe2) { + + if (!ueberpruefeVertauschungen(buchstabe1) && !ueberpruefeVertauschungen(buchstabe2)) { + return false; + } else { + if (zaehler < orginalBuchstaben.length) { + orginalBuchstaben[zaehler] = buchstabe1; + getauschteBuchstaben[zaehler++] = buchstabe2; + + return true; + } else { + return false; + } + } + } + + /** + * Funktion setzeVertauschung mit angabe eines Ports von 1 - 10 + * <br> + * Der Funktion setzeVertauschung werden 2 Buchstaben (buchstabe1 und buchstabe2) sowie der Port übergeben. + * Zuerst wird überprüft ob einer der beiden Buchstaben bereits enthalten ist, was unzulässig wäre. + * <br> + * Anschließend wird: + * <p> + * buchstabe1 in das Array orginalBuchstaben auf den Index (steckbrettPort) geschrieben + * buchstabe2 in das Array getauschteBuchstaben auf den Index (steckbrettPort) geschrieben. + * </p> + * + * @param buchstabe1 : char: Gibt den ersten Buchstaben an, der getauscht werden soll. + * @param buchstabe2 : char: gibt den zweiten Buchstaben an, mit dem der erste getauscht werden soll. + * @return boolean : Wenn die Vertauschung zulässig ist, true, ansonsten false + */ + public boolean setzeVertauschung(int steckbrettPort, char buchstabe1, char buchstabe2) { + + if (!ueberpruefeVertauschungen(buchstabe1) && !ueberpruefeVertauschungen(buchstabe2)) { + return false; + } else { + orginalBuchstaben[steckbrettPort - 1] = buchstabe1; + getauschteBuchstaben[steckbrettPort - 1] = buchstabe2; + + return true; + } + + } + + /** + * Funktion ueberpruefeVertauschungen + * <br> + * Die Funktion ueberpruefeVertauschungen prueft ob der übergebene Buchstabe bereits in den beiden Arrays + * (orginalBuchstaben) und (getauschteBuchstaben) vorhanden ist. + * Eine Buchstabenvertauschung ist zulaessig, wenn keine Dopplungen der zu vertauschenden Buchstaben auftritt + * (ein Buchstabe nicht mehrmals vertauscht wird). + * + * @return boolean : Wenn false, dann darf der Buchstabe genutzt werden. + * Wenn er schon vorhanden ist, wird true zurück gegeben + */ + public boolean ueberpruefeVertauschungen(char buchstabe) { + + boolean result = false; + + for (char c : orginalBuchstaben) { + if (c == buchstabe) { + result = true; + break; + } + } + for (char c : getauschteBuchstaben) { + if (c == buchstabe) { + result = true; + break; + } + } + + return result; + } + + /** + * Funktion codiere + * <br> + * Die Funktion codiere tauscht den uebergebenen Character buchstabe mit dem zu tauschenden Character aus. + * + * @param buchstabe : Character : Buchstabe der codiert werden soll. + * @return buchstabe : Character : Codierter Buchstabe. + */ + public char codiere(Character buchstabe) { + for (int index = 0; index < getauschteBuchstaben.length; index++) { + if (buchstabe.equals(getauschteBuchstaben[index])) { + buchstabe = orginalBuchstaben[index]; + } else if (buchstabe.equals(orginalBuchstaben[index])) { + buchstabe = getauschteBuchstaben[index]; + } + } + + return buchstabe; + } + +} diff --git a/src/main/java/projekt/enigma/model/Walze.java b/src/main/java/projekt/enigma/model/Walze.java new file mode 100644 index 0000000000000000000000000000000000000000..51bf3a8b377e37edaa1e303a21409f0dea83c87f --- /dev/null +++ b/src/main/java/projekt/enigma/model/Walze.java @@ -0,0 +1,268 @@ +package projekt.enigma.model; + +/** + * 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) + * <br> + * 2. Ringstellung (Umspringpunkt der Walze wird festgelegt. Der Umspringpunkt bestimmt + * den Drehzeitpunkt der linken Nachbarwalze) + */ +public class Walze { + + /** + * walzeAlpha : Character[] : Array, dass die Buchstaben des Alphabets enthaelt + */ + private Character[] alphabet; + + /** + * ringstellung : char : zeigt die Einstellung fuer den Umspringpunkt + */ + private char ringstellung; + + /** + * walzennr : int : Bestimmt, welche Walze genutzt wird + */ + private int walzennr; + + /** + * alphabet : Character[] : Enthaelt die Buchstaben des Alphabets. Wird im Laufe des Programmes + * aber immer wieder ueberschrieben. + */ + private Character[] walzeAlpha; + + /** + * Ueberschriebener Konstruktor, der die Eingangsparameter der Walze mitgibt + * + * @param walzennr : int : Nummer der gewaehlten Walze + * @param ringstellung : int : Einstellung des Umsprungpunktes + */ + public Walze(int walzennr, int ringstellung) { + this.alphabet = new Character[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; + this.walzeAlpha = new Character[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; + + this.setWalzennr(walzennr); + this.setRingstellung(ringstellung); + } + + /** + * Sortiert der Walzennummer das passende Character-Array mittels switch zu. + * + * @return walze : Character[] : gibt die gewaehlte Walze zurueck + */ + private Character[] walzenNummer() { + Character[] walze = new Character[26]; + + // Character-Arrays fuer die Codierung jeder Walze + Character[] walzeEins = {'E', 'K', 'M', 'F', 'L', 'G', 'D', 'Q', 'V', 'Z', 'N', 'T', 'O', 'W', 'Y', + 'H', 'X', 'U', 'S', 'P', 'A', 'I', 'B', 'R', 'C', 'J'}; + Character[] walzeZwei = {'A', 'J', 'D', 'K', 'S', 'I', 'R', 'U', 'X', 'B', 'L', 'H', 'W', 'T', 'M', + 'C', 'Q', 'G', 'Z', 'N', 'P', 'Y', 'F', 'V', 'O', 'E'}; + Character[] walzeDrei = {'B', 'D', 'F', 'H', 'J', 'L', 'C', 'P', 'R', 'T', 'X', 'V', 'Z', 'N', 'Y', + 'E', 'I', 'W', 'G', 'A', 'K', 'M', 'U', 'S', 'Q', 'O'}; + Character[] walzeVier = {'E', 'S', 'O', 'V', 'P', 'Z', 'J', 'A', 'Y', 'Q', 'U', 'I', 'R', 'H', 'X', + 'L', 'N', 'F', 'T', 'G', 'K', 'D', 'C', 'M', 'W', 'B'}; + Character[] walzeFuenf = {'V', 'Z', 'B', 'R', 'G', 'I', 'T', 'Y', 'U', 'P', 'S', 'D', 'N', 'H', 'L', + 'X', 'A', 'W', 'M', 'J', 'Q', 'O', 'F', 'E', 'C', 'K'}; + + switch (this.walzennr) { + case 1: + walze = walzeEins; + break; + case 2: + walze = walzeZwei; + break; + case 3: + walze = walzeDrei; + break; + case 4: + walze = walzeVier; + break; + case 5: + walze = walzeFuenf; + break; + } + + return walze; + } + + /** + * TODO: Dokumentieren + * + * @return ringstellung : char : gibt die neue Ringstellung als char zurueck + */ + public char getRingstellung() { + return ringstellung; + } + + /** + * Setzt die Initiale Ringstellung der Walze. + * Es sind nur Zahlen von 1 - 26 zugelassen. + * + * Die Ringstellung wird zum char umgewandelt. + * Im Fehlerfall wird die Ringstellung standardmaessig auf 'Z' gesetzt. + * + * @param ringstellung : int : Punkt an dem die Walze umspringt + */ + //TODO ??? Setter Ringstellung + public void setRingstellung(int ringstellung) { + if ((ringstellung > 0) && (ringstellung <= 26)) { + this.ringstellung = this.alphabet[ringstellung - 1]; + } else { + this.ringstellung = 'Z'; + } + } + + /** + * Dreht die Walze: verschiebt das Alphabet um keine, eine oder mehrere Stellen und ueberschreibt + * das Array alphabet mit der neuen Anordnung. + * + * Ueberprueft, ob der Umspringpunkt der Walze nach der Drehung erreicht wurde. + * + * @param drehung : int[] : Anzahl der Drehungen + * @return checkRing : boolean : gibt true zurueck wenn der Umspringpunkt erreicht wurde + * TODO: Doku + */ + public boolean dreheWalze(int... drehung) { + boolean checkRing = false; + + // fuehrt die Verschiebung des Alphabets um eine Stelle durch + verschiebung(); + + // fuehrt die Verschiebung mehrfach aus, wenn mehrere Drehungen ausgefuehrt werden sollen + if (drehung.length > 0) { + for (int i = 1; i < drehung[0]; i++) { + verschiebung(); + } + } + + // gleicht die Ringstellung mit der aktuellen Position ab + if (this.getPosition().equals(this.ringstellung)) { + checkRing = true; + } + + return checkRing; + } + + /** + * Ueberschreibt die Alphabetswalze mit dem, durch die Drehung, verschobenen Alphabet. + * TODO: Dokumentieren + */ + private void verschiebung() { + Character[] neueWalze = new Character[26]; + + for (int index = 0; index < neueWalze.length; index++) { + neueWalze[(index + 1) % neueWalze.length] = this.walzeAlpha[index]; + } + + this.walzeAlpha = neueWalze; + } + + /** + * TODO: Dokumentieren // dass selbe wie getPosition + * Gibt den Buchstaben zurueck der in der Walze aktuell eingestellt ist. + * + * @return char an der Stelle temp des Alphabets + */ + public char getAnzeige() { + int temp = this.fetchArrayIndex('A', this.walzeAlpha); + return this.alphabet[temp]; + } + + /** + * Codiert den mitgegebenen Buchstaben anhand der gewaehlten Walze. + * + * @param buchstabe : char : Buchstabe, der verschluesselt werden soll + * @return buchstabe : char : verschluesselter Buchstabe + */ + public char codiere(char buchstabe) { + /* durchsucht die (verschobene) Alphabetswalze nach dem aktuellen Buchstaben und + uebertraegt den Index auf die gewaehlte Codierwalze*/ + buchstabe = walzenNummer()[fetchArrayIndex(buchstabe, walzeAlpha)]; + + return buchstabe; + } + + /** + * Decodiert den mitgegebenen Buchstaben mit Hilfe der (verschobenen) Alphabetswalze + * + * @param buchstabe : char : Buchstabe, der decodiert werden soll + * @return buchstabe : char : decodierter Buchstabe + */ + public char codiere2(char buchstabe) { + /* durchsucht die gewaehlte Walze nach dem aktuellen Buchstaben und + uebertraegt den Index auf die (verschobene) Alphabetswalze*/ + buchstabe = walzeAlpha[fetchArrayIndex(buchstabe, walzenNummer())]; + + return buchstabe; + } + + /** + * TODO: Dokumentieren + * Ermittelt den Index eines Characters in einem Array ueber eine for-Schleife + * + * @param buchstabe : Character : Buchstabe, dessen Index benoetigt wird + * @param array : Character[] : Array, in dem der Buchstabe vorkommen soll + * @return result : int : index des Buchstaben + */ + private int fetchArrayIndex(Character buchstabe, Character[] array) { + // wird mit ungueltigem Wert initialisiert + int result = -1; + + for (int i = 0; i < array.length; i++) { + if (array[i].equals(buchstabe)) { + result = i; + break; + } + } + + return result; + } + + /** + * Setzt die Walzennummer. Es stehen fuenf Walze zur Auswahl. + * + * @param walzennr : int : Walzennummer + */ + public void setWalzennr(int walzennr) { + if ((walzennr > 0) && (walzennr < 6)) { + this.walzennr = walzennr; + } else { + System.err.println("Keine gültige Walzennummer"); + } + } + + /** + * TODO: Dokumentieren // das selbe wie getAnzeig? + * Gibt den Character zurueck, der aktuell in der Walze eingestellt ist + * + * @return Character am Index 0 des (verschobenen) Alphabets zurueck + */ + public Character getPosition() { + return walzeAlpha[0]; + } + + /** + * * 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. + * + * @param buchstabe : Character : Einstellung der Walze + */ + public void setPosition(Character buchstabe) { + if (Character.isLetter(buchstabe)) { + buchstabe = Character.toUpperCase(buchstabe); + System.arraycopy(this.alphabet, 0, this.walzeAlpha, 0, this.alphabet.length); + if (buchstabe > 'A') { + dreheWalze(this.fetchArrayIndex(buchstabe, this.walzeAlpha)); + } + } + } +} diff --git a/src/main/resources/enigma/gui.fxml b/src/main/resources/enigma/gui.fxml deleted file mode 100644 index 32d90e59765987fa30ac32353d1ad2069c58e295..0000000000000000000000000000000000000000 --- a/src/main/resources/enigma/gui.fxml +++ /dev/null @@ -1,374 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<?import javafx.scene.control.Button?> -<?import javafx.scene.control.Label?> -<?import javafx.scene.control.MenuButton?> -<?import javafx.scene.control.TextField?> -<?import javafx.scene.layout.AnchorPane?> -<?import javafx.scene.shape.Circle?> -<?import javafx.scene.text.Font?> - -<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="677.0" prefWidth="967.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="enigma.GuiController"> - <children> - <Circle fx:id="circQ" fill="#f0f3f5" layoutX="127.0" layoutY="309.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circE" fill="#f0f3f5" layoutX="315.0" layoutY="309.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circR" fill="#f0f3f5" layoutX="389.0" layoutY="309.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circT" fill="#f0f3f5" layoutX="480.0" layoutY="309.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circZ" fill="#f0f3f5" layoutX="561.0" layoutY="309.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circU" fill="#f0f3f5" layoutX="647.0" layoutY="309.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circI" fill="#f0f3f5" layoutX="736.0" layoutY="309.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circO" fill="#f0f3f5" layoutX="814.0" layoutY="309.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circA" fill="#f0f3f5" layoutX="162.0" layoutY="361.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circS" fill="#f0f3f5" layoutX="251.0" layoutY="361.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circD" fill="#f0f3f5" layoutX="329.0" layoutY="361.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circF" fill="#f0f3f5" layoutX="419.0" layoutY="361.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circG" fill="#f0f3f5" layoutX="502.0" layoutY="361.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circH" fill="#f0f3f5" layoutX="594.0" layoutY="361.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circJ" fill="#f0f3f5" layoutX="674.0" layoutY="361.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circK" fill="#f0f3f5" layoutX="763.0" layoutY="361.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circP" fill="#f0f3f5" layoutX="113.0" layoutY="416.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circY" fill="#f0f3f5" layoutX="197.0" layoutY="416.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circX" fill="#f0f3f5" layoutX="286.0" layoutY="416.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circC" fill="#f0f3f5" layoutX="369.0" layoutY="416.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circV" fill="#f0f3f5" layoutX="462.0" layoutY="416.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circB" fill="#f0f3f5" layoutX="546.0" layoutY="416.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circN" fill="#f0f3f5" layoutX="623.0" layoutY="416.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circM" fill="#f0f3f5" layoutX="703.0" layoutY="416.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circL" fill="#f0f3f5" layoutX="798.0" layoutY="416.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <Circle fx:id="circW" fill="#f0f3f5" layoutX="221.0" layoutY="309.0" radius="22.0" stroke="BLACK" strokeType="INSIDE" /> - <AnchorPane layoutX="109.0" layoutY="631.0" prefHeight="25.0" prefWidth="787.0"> - <children> - <TextField fx:id="tfStecker1" prefHeight="25.0" prefWidth="48.0" /> - <TextField fx:id="tfStecker2" layoutX="80.0" prefHeight="25.0" prefWidth="48.0" /> - <TextField fx:id="tfStecker3" layoutX="159.0" prefHeight="25.0" prefWidth="48.0" /> - <TextField fx:id="tfStecker4" layoutX="239.0" prefHeight="25.0" prefWidth="48.0" /> - <TextField fx:id="tfStecker5" layoutX="312.0" prefHeight="25.0" prefWidth="48.0" /> - <TextField fx:id="tfStecker6" layoutX="392.0" prefHeight="25.0" prefWidth="48.0" /> - <TextField fx:id="tfStecker7" layoutX="472.0" prefHeight="25.0" prefWidth="48.0" /> - <TextField fx:id="tfStecker8" layoutX="552.0" prefHeight="25.0" prefWidth="48.0" /> - <TextField fx:id="tfStecker9" layoutX="632.0" prefHeight="25.0" prefWidth="48.0" /> - <TextField fx:id="tfStecker10" layoutX="712.0" prefHeight="25.0" prefWidth="48.0" /> - </children> - </AnchorPane> - <MenuButton fx:id="mBtnWalzPos1" alignment="CENTER_RIGHT" contentDisplay="CENTER" layoutX="91.0" layoutY="76.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="I"> - </MenuButton> - <MenuButton fx:id="mBtnWalzPos3" alignment="CENTER_RIGHT" layoutX="208.0" layoutY="80.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="I" textAlignment="CENTER"> - </MenuButton> - <MenuButton fx:id="mBtnWalzPos2" alignment="CENTER_RIGHT" layoutX="152.0" layoutY="80.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="I" textAlignment="CENTER"> - </MenuButton> -<!-- <MenuButton layoutX="93.0" layoutY="114.0" mnemonicParsing="false">--> -<!-- <items>--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z1" text="1" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z2" text="2" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z3" text="3" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z4" text="4" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z5" text="5" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z6" text="6" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z7" text="7" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z8" text="8" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z9" text="9" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z10" text="10" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z11" text="11" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z12" text="12" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z13" text="13" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z14" text="14" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z15" text="15" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z16" text="16" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z17" text="17" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z18" text="18" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z19" text="19" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z20" text="20" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z21" text="21" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z22" text="22" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z23" text="23" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z24" text="24" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z25" text="25" />--> -<!-- <MenuItem mnemonicParsing="false" onAction="#z26" text="26" />--> -<!-- </items>--> -<!-- </MenuButton>--> - <MenuButton fx:id="mBtnNotchPos3" alignment="CENTER_RIGHT" layoutX="208.0" layoutY="120.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="1" textAlignment="CENTER"> - </MenuButton> - <MenuButton fx:id="mBtnNotchPos2" alignment="CENTER_RIGHT" layoutX="152.0" layoutY="120.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="1" textAlignment="CENTER"> - </MenuButton> - <MenuButton fx:id="mBtnStartPos1" alignment="CENTER_RIGHT" layoutX="95.0" layoutY="157.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="A" textAlignment="CENTER"> - </MenuButton> - <MenuButton fx:id="mBtnStartPos3" alignment="CENTER_RIGHT" layoutX="208.0" layoutY="160.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="A" textAlignment="CENTER"> - </MenuButton> - <MenuButton fx:id="mBtnStartPos2" alignment="CENTER_RIGHT" layoutX="152.0" layoutY="160.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="A" textAlignment="CENTER"> - </MenuButton> - <TextField fx:id="tfKlartext" editable="false" layoutX="280.0" layoutY="54.0" prefHeight="77.0" prefWidth="410.0" AnchorPane.bottomAnchor="546.0" AnchorPane.leftAnchor="280.0" AnchorPane.rightAnchor="277.0" AnchorPane.topAnchor="54.0" /> - <TextField fx:id="tfCodiert" editable="false" layoutX="280.0" layoutY="149.0" prefHeight="77.0" prefWidth="410.0" AnchorPane.bottomAnchor="451.0" AnchorPane.leftAnchor="280.0" AnchorPane.rightAnchor="277.0" AnchorPane.topAnchor="149.0" /> - <Button layoutX="730.0" layoutY="58.0" mnemonicParsing="false" onAction="#btnsenden" prefHeight="69.0" prefWidth="164.0" text="An Funker senden" AnchorPane.topAnchor="58.0" /> - <Button layoutX="730.0" layoutY="153.0" mnemonicParsing="false" onAction="#btnempfangen" prefHeight="69.0" prefWidth="164.0" text="Funkspruch empfangen" /> - <MenuButton fx:id="mBtnNotchPos1" alignment="CENTER_RIGHT" layoutX="93.0" layoutY="114.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="1" textAlignment="CENTER" /> - <Label layoutX="29.0" layoutY="80.0" text="Walze" /> - <Label layoutX="29.0" layoutY="127.0" text="Ringe" /> - <Label layoutX="17.0" layoutY="164.0" text="Startposition" /> - <Label layoutX="68.0" layoutY="226.0" prefHeight="17.0" prefWidth="172.0" text="Spruchschlüssel" /> - <Label fx:id="lblE" alignment="CENTER" layoutX="300.0" layoutY="292.0" prefHeight="30.0" prefWidth="30.0" text="E" textAlignment="CENTER" AnchorPane.bottomAnchor="351.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblW" alignment="CENTER" layoutX="204.0" layoutY="291.0" prefHeight="36.0" prefWidth="30.0" text="W" AnchorPane.bottomAnchor="350.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblR" alignment="CENTER" layoutX="374.0" layoutY="292.0" prefHeight="30.0" prefWidth="30.0" text="R" textAlignment="CENTER" AnchorPane.bottomAnchor="351.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblT" alignment="CENTER" layoutX="463.0" layoutY="292.0" prefHeight="30.0" prefWidth="30.0" text="T" textAlignment="CENTER" AnchorPane.bottomAnchor="351.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblZ" alignment="CENTER" layoutX="548.0" layoutY="292.0" prefHeight="30.0" prefWidth="30.0" text="Z" textAlignment="CENTER" AnchorPane.bottomAnchor="351.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblO" alignment="CENTER" layoutX="801.0" layoutY="292.0" prefHeight="30.0" prefWidth="30.0" text="O" textAlignment="CENTER" AnchorPane.bottomAnchor="351.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblI" alignment="CENTER" layoutX="721.0" layoutY="292.0" prefHeight="30.0" prefWidth="30.0" text="I" textAlignment="CENTER" AnchorPane.bottomAnchor="351.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblU" alignment="CENTER" layoutX="630.0" layoutY="292.0" prefHeight="30.0" prefWidth="30.0" text="U" textAlignment="CENTER" AnchorPane.bottomAnchor="351.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblA" alignment="CENTER" layoutX="147.0" layoutY="346.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="A" AnchorPane.bottomAnchor="301.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblD" alignment="CENTER" layoutX="314.0" layoutY="346.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="D" AnchorPane.bottomAnchor="301.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblS" alignment="CENTER" layoutX="236.0" layoutY="346.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="S" AnchorPane.bottomAnchor="301.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblF" alignment="CENTER" layoutX="404.0" layoutY="346.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="F" AnchorPane.bottomAnchor="301.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblG" alignment="CENTER" layoutX="487.0" layoutY="346.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="G" AnchorPane.bottomAnchor="301.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblH" alignment="CENTER" layoutX="579.0" layoutY="346.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="H" AnchorPane.bottomAnchor="301.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblK" alignment="CENTER" layoutX="748.0" layoutY="346.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="K" AnchorPane.bottomAnchor="301.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblJ" alignment="CENTER" layoutX="659.0" layoutY="346.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="J" AnchorPane.bottomAnchor="301.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblP" alignment="CENTER" layoutX="97.0" layoutY="401.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="P" AnchorPane.bottomAnchor="246.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblX" alignment="CENTER" layoutX="270.0" layoutY="401.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="X" AnchorPane.bottomAnchor="246.0" AnchorPane.leftAnchor="270.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblY" alignment="CENTER" layoutX="181.0" layoutY="401.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="Y" AnchorPane.bottomAnchor="246.0" AnchorPane.leftAnchor="181.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblC" alignment="CENTER" layoutX="353.0" layoutY="401.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="C" AnchorPane.bottomAnchor="246.0" AnchorPane.leftAnchor="353.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblV" alignment="CENTER" layoutX="443.0" layoutY="401.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="V" AnchorPane.bottomAnchor="246.0" AnchorPane.leftAnchor="443.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblB" alignment="CENTER" layoutX="527.0" layoutY="401.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="B" AnchorPane.bottomAnchor="246.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblL" alignment="CENTER" layoutX="782.0" layoutY="401.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="L" AnchorPane.bottomAnchor="246.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblM" alignment="CENTER" layoutX="687.0" layoutY="401.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="M" AnchorPane.bottomAnchor="246.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Label fx:id="lblN" alignment="CENTER" layoutX="607.0" layoutY="401.0" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="N" AnchorPane.bottomAnchor="246.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Button fx:id="btnQ" layoutX="154.0" layoutY="464.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="Q" textFill="#fffdfd"> - <font> - <Font name="System Bold" size="18.0" /> - </font></Button> - <Label fx:id="lblQ" alignment="CENTER" layoutX="112.0" layoutY="292.0" prefHeight="30.0" prefWidth="30.0" text="Q" AnchorPane.bottomAnchor="351.0"> - <font> - <Font size="23.0" /> - </font> - </Label> - <Button fx:id="btnW" layoutX="243.0" layoutY="464.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="W" textFill="#fffdfd"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnE" layoutX="306.0" layoutY="464.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="E" textFill="#fffdfd"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnR" layoutX="381.0" layoutY="464.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="R" textFill="#fffdfd"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnT" layoutX="455.0" layoutY="464.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="T" textFill="#fffdfd"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnZ" layoutX="539.0" layoutY="464.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="Z" textFill="#fffdfd"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnU" layoutX="623.0" layoutY="464.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="U" textFill="#fffdfd"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnI" layoutX="706.0" layoutY="464.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="I" textFill="#fffdfd"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnO" layoutX="791.0" layoutY="464.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="O" textFill="#fffdfd"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button layoutX="858.0" layoutY="517.0" mnemonicParsing="false" onAction="#löschen" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="<" textFill="#fffdfd"> - <font> - <Font size="18.0" /> - </font> - </Button> - <Button fx:id="btnP" layoutX="152.0" layoutY="573.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="P" textFill="#fffdfd" AnchorPane.bottomAnchor="60.0" AnchorPane.leftAnchor="152.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnY" layoutX="229.0" layoutY="573.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="Y" textFill="#fffdfd" AnchorPane.bottomAnchor="60.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnX" layoutX="306.0" layoutY="573.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="X" textFill="#fffdfd" AnchorPane.bottomAnchor="60.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnC" layoutX="382.0" layoutY="573.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="C" textFill="#fffdfd" AnchorPane.bottomAnchor="60.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnV" layoutX="462.0" layoutY="573.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="V" textFill="#fffdfd" AnchorPane.bottomAnchor="60.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnB" layoutX="539.0" layoutY="573.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="B" textFill="#fffdfd" AnchorPane.bottomAnchor="60.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnN" layoutX="615.0" layoutY="573.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="N" textFill="#fffdfd" AnchorPane.bottomAnchor="60.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnM" layoutX="706.0" layoutY="573.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="M" textFill="#fffdfd" AnchorPane.bottomAnchor="60.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnL" layoutX="776.0" layoutY="573.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="L" textFill="#fffdfd" AnchorPane.bottomAnchor="60.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnA" layoutX="203.0" layoutY="517.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="A" textFill="#fffdfd" AnchorPane.bottomAnchor="116.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnS" layoutX="284.0" layoutY="517.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="S" textFill="#fffdfd" AnchorPane.bottomAnchor="116.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnD" layoutX="355.0" layoutY="517.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="D" textFill="#fffdfd" AnchorPane.bottomAnchor="116.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnF" layoutX="430.0" layoutY="517.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="F" textFill="#fffdfd" AnchorPane.bottomAnchor="116.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnG" layoutX="510.0" layoutY="517.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="G" textFill="#fffdfd" AnchorPane.bottomAnchor="116.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnH" layoutX="590.0" layoutY="517.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="H" textFill="#fffdfd" AnchorPane.bottomAnchor="116.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnJ" layoutX="670.0" layoutY="517.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="J" textFill="#fffdfd" AnchorPane.bottomAnchor="116.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Button fx:id="btnK" layoutX="740.0" layoutY="517.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="44.0" prefWidth="44.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="K" textFill="#fffdfd" AnchorPane.bottomAnchor="116.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Button> - <Label layoutX="68.0" layoutY="205.0" prefHeight="17.0" prefWidth="172.0" text="Tagesschlüssel" /> - </children> -</AnchorPane> diff --git a/src/main/resources/enigma/kenngruppe.fxml b/src/main/resources/enigma/kenngruppe.fxml deleted file mode 100644 index 2494b0530fec509d2a3807969c43ca299537588c..0000000000000000000000000000000000000000 --- a/src/main/resources/enigma/kenngruppe.fxml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<?import javafx.scene.control.Button?> -<?import javafx.scene.control.Label?> -<?import javafx.scene.control.TextField?> -<?import javafx.scene.layout.AnchorPane?> -<?import javafx.scene.layout.Pane?> - -<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="257.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="enigma.KenngruppeController"> - <children> - <Label layoutX="81.0" layoutY="29.0" text="Bitte Kenngruppe eingeben!" /> - <Button fx:id="secondaryButton" layoutX="72.0" layoutY="178.0" onAction="#switchToPrimary" text="Kenngruppe bestätigen!" /> - <Pane layoutX="14.0" layoutY="100.0" prefHeight="25.0" prefWidth="234.0"> - <children> - <TextField prefHeight="25.0" prefWidth="71.0" /> - <TextField layoutX="126.0" prefHeight="25.0" prefWidth="108.0" /> - </children> - </Pane> - </children> -</AnchorPane> diff --git a/src/main/resources/enigma/codebuch.sqlite b/src/main/resources/projekt/enigma/codebuch.sqlite similarity index 100% rename from src/main/resources/enigma/codebuch.sqlite rename to src/main/resources/projekt/enigma/codebuch.sqlite diff --git a/src/main/resources/projekt/enigma/gui.fxml b/src/main/resources/projekt/enigma/gui.fxml new file mode 100644 index 0000000000000000000000000000000000000000..afcbb00cf3d4e6dacede96f74d58b64c61443626 --- /dev/null +++ b/src/main/resources/projekt/enigma/gui.fxml @@ -0,0 +1,630 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.control.MenuButton?> +<?import javafx.scene.control.ProgressBar?> +<?import javafx.scene.control.TextField?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.ColumnConstraints?> +<?import javafx.scene.layout.FlowPane?> +<?import javafx.scene.layout.GridPane?> +<?import javafx.scene.layout.Pane?> +<?import javafx.scene.layout.RowConstraints?> +<?import javafx.scene.layout.TilePane?> +<?import javafx.scene.layout.VBox?> +<?import javafx.scene.shape.Circle?> +<?import javafx.scene.text.Font?> + +<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="677.0" prefWidth="967.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.GuiController"> + <children> + <GridPane layoutY="313.0" prefHeight="393.0" prefWidth="968.0" AnchorPane.bottomAnchor="-7.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="313.0"> + <columnConstraints> + <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> + </columnConstraints> + <rowConstraints> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="63.0" minHeight="10.0" prefHeight="63.0" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="41.0" minHeight="10.0" prefHeight="29.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + </rowConstraints> + <children> + <TextField fx:id="tfStecker1" prefHeight="25.0" prefWidth="48.0" GridPane.columnIndex="1" GridPane.rowIndex="7"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </TextField> + <TextField fx:id="tfStecker2" prefHeight="25.0" prefWidth="48.0" GridPane.columnIndex="2" GridPane.rowIndex="7"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </TextField> + <TextField fx:id="tfStecker3" prefHeight="25.0" prefWidth="48.0" GridPane.columnIndex="3" GridPane.rowIndex="7"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </TextField> + <TextField fx:id="tfStecker4" prefHeight="25.0" prefWidth="48.0" GridPane.columnIndex="4" GridPane.rowIndex="7"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </TextField> + <TextField fx:id="tfStecker5" prefHeight="25.0" prefWidth="48.0" GridPane.columnIndex="5" GridPane.rowIndex="7"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </TextField> + <TextField fx:id="tfStecker6" prefHeight="25.0" prefWidth="48.0" GridPane.columnIndex="6" GridPane.rowIndex="7"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </TextField> + <TextField fx:id="tfStecker7" prefHeight="25.0" prefWidth="48.0" GridPane.columnIndex="7" GridPane.rowIndex="7"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </TextField> + <TextField fx:id="tfStecker8" prefHeight="25.0" prefWidth="48.0" GridPane.columnIndex="8" GridPane.rowIndex="7"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </TextField> + <TextField fx:id="tfStecker9" prefHeight="25.0" prefWidth="48.0" GridPane.columnIndex="9" GridPane.rowIndex="7"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </TextField> + <TextField fx:id="tfStecker10" prefHeight="25.0" prefWidth="48.0" GridPane.columnIndex="10" GridPane.rowIndex="7"> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </TextField> + <Button fx:id="btnM" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="M" textFill="#fffdfd" GridPane.columnIndex="9" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnN" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="N" textFill="#fffdfd" GridPane.columnIndex="8" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnB" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="B" textFill="#fffdfd" GridPane.columnIndex="7" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnV" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="V" textFill="#fffdfd" GridPane.columnIndex="6" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnC" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="C" textFill="#fffdfd" GridPane.columnIndex="5" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnX" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="X" textFill="#fffdfd" GridPane.columnIndex="4" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnY" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="Y" textFill="#fffdfd" GridPane.columnIndex="3" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnP" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="P" textFill="#fffdfd" GridPane.columnIndex="2" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnL" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="L" textFill="#fffdfd" GridPane.columnIndex="10" GridPane.rowIndex="6"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnK" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="K" textFill="#fffdfd" GridPane.columnIndex="9" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + <GridPane.margin> + <Insets left="28.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnJ" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="J" textFill="#fffdfd" GridPane.columnIndex="8" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + <GridPane.margin> + <Insets left="28.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnH" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="H" textFill="#fffdfd" GridPane.columnIndex="7" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + <GridPane.margin> + <Insets left="28.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnG" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="G" textFill="#fffdfd" GridPane.columnIndex="6" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + <GridPane.margin> + <Insets left="28.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnF" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="F" textFill="#fffdfd" GridPane.columnIndex="5" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + <GridPane.margin> + <Insets left="28.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnD" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="D" textFill="#fffdfd" GridPane.columnIndex="4" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + <GridPane.margin> + <Insets left="28.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnS" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="S" textFill="#fffdfd" GridPane.columnIndex="3" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + <GridPane.margin> + <Insets left="28.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnO" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="O" textFill="#fffdfd" GridPane.columnIndex="10" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnI" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="I" textFill="#fffdfd" GridPane.columnIndex="9" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnU" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="U" textFill="#fffdfd" GridPane.columnIndex="8" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnZ" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="Z" textFill="#fffdfd" GridPane.columnIndex="7" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnT" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="T" textFill="#fffdfd" GridPane.columnIndex="6" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnR" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="R" textFill="#fffdfd" GridPane.columnIndex="5" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnE" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="E" textFill="#fffdfd" GridPane.columnIndex="4" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnW" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="W" textFill="#fffdfd" GridPane.columnIndex="3" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button fx:id="btnQ" minHeight="44.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="Q" textFill="#fffdfd" GridPane.columnIndex="2" GridPane.rowIndex="4"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + <Button minHeight="44.0" mnemonicParsing="false" onAction="#loeschen" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="<" textFill="#fffdfd" GridPane.columnIndex="10" GridPane.rowIndex="5"> + <font> + <Font size="18.0" /> + </font> + <GridPane.margin> + <Insets left="28.0" /> + </GridPane.margin> + </Button> + <Circle fx:id="circL" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="10" GridPane.rowIndex="2" /> + <Circle fx:id="circM" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="9" GridPane.rowIndex="2" /> + <Circle fx:id="circN" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="8" GridPane.rowIndex="2" /> + <Circle fx:id="circB" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="7" GridPane.rowIndex="2" /> + <Circle fx:id="circV" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="6" GridPane.rowIndex="2" /> + <Circle fx:id="circC" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="5" GridPane.rowIndex="2" /> + <Circle fx:id="circX" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="4" GridPane.rowIndex="2" /> + <Circle fx:id="circY" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="3" GridPane.rowIndex="2" /> + <Circle fx:id="circP" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="2" GridPane.rowIndex="2" /> + <Circle fx:id="circK" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="9" GridPane.rowIndex="1"> + <GridPane.margin> + <Insets left="35.0" /> + </GridPane.margin> + </Circle> + <Circle fx:id="circJ" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="8" GridPane.rowIndex="1"> + <GridPane.margin> + <Insets left="35.0" /> + </GridPane.margin> + </Circle> + <Circle fx:id="circH" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="7" GridPane.rowIndex="1"> + <GridPane.margin> + <Insets bottom="4.0" left="42.0" /> + </GridPane.margin> + </Circle> + <Circle fx:id="circG" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="6" GridPane.rowIndex="1"> + <GridPane.margin> + <Insets left="35.0" /> + </GridPane.margin> + </Circle> + <Circle fx:id="circF" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="5" GridPane.rowIndex="1"> + <GridPane.margin> + <Insets left="35.0" /> + </GridPane.margin> + </Circle> + <Circle fx:id="circD" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="4" GridPane.rowIndex="1"> + <GridPane.margin> + <Insets left="35.0" /> + </GridPane.margin> + </Circle> + <Circle fx:id="circS" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="3" GridPane.rowIndex="1"> + <GridPane.margin> + <Insets left="35.0" /> + </GridPane.margin> + </Circle> + <Circle fx:id="circA" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="2" GridPane.rowIndex="1"> + <GridPane.margin> + <Insets left="35.0" /> + </GridPane.margin> + </Circle> + <Circle fx:id="circO" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="10" /> + <Circle fx:id="circI" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="9" /> + <Circle fx:id="circU" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="8" /> + <Circle fx:id="circZ" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="7" /> + <Circle fx:id="circT" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="6" /> + <Circle fx:id="circR" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="5" /> + <Circle fx:id="circE" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="4" /> + <Circle fx:id="circW" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="3" /> + <Circle fx:id="circQ" fill="#f0f3f5" radius="22.0" stroke="BLACK" strokeType="INSIDE" GridPane.columnIndex="2" /> + <Label fx:id="lblL" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="L" GridPane.columnIndex="10" GridPane.rowIndex="2"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblM" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="M" GridPane.columnIndex="9" GridPane.rowIndex="2"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblN" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="N" GridPane.columnIndex="8" GridPane.rowIndex="2"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblB" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="B" GridPane.columnIndex="7" GridPane.rowIndex="2"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblV" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="V" GridPane.columnIndex="6" GridPane.rowIndex="2"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblC" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="C" GridPane.columnIndex="5" GridPane.rowIndex="2"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblX" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="X" GridPane.columnIndex="4" GridPane.rowIndex="2"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblY" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="Y" GridPane.columnIndex="3" GridPane.rowIndex="2"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblP" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="P" GridPane.columnIndex="2" GridPane.rowIndex="2"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblK" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="K" GridPane.columnIndex="9" GridPane.rowIndex="1"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="4.0" left="42.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblJ" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="J" GridPane.columnIndex="8" GridPane.rowIndex="1"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="4.0" left="42.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblH" alignment="CENTER" minHeight="0.0" prefHeight="27.0" prefWidth="25.0" text="H" GridPane.columnIndex="7" GridPane.rowIndex="1"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="6.0" left="50.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblG" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="G" GridPane.columnIndex="6" GridPane.rowIndex="1"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="4.0" left="42.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblF" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="F" GridPane.columnIndex="5" GridPane.rowIndex="1"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="4.0" left="42.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblD" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="D" GridPane.columnIndex="4" GridPane.rowIndex="1"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="4.0" left="42.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblS" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="S" GridPane.columnIndex="3" GridPane.rowIndex="1"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="4.0" left="42.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblA" alignment="CENTER" minHeight="0.0" prefHeight="30.0" prefWidth="30.0" text="A" GridPane.columnIndex="2" GridPane.rowIndex="1"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="4.0" left="42.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblQ" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="Q" GridPane.columnIndex="2"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblW" alignment="CENTER" prefHeight="36.0" prefWidth="30.0" text="W" GridPane.columnIndex="3"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="1.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblE" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="E" textAlignment="CENTER" GridPane.columnIndex="4"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblR" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="R" textAlignment="CENTER" GridPane.columnIndex="5"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblT" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="T" textAlignment="CENTER" GridPane.columnIndex="6"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblZ" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="Z" textAlignment="CENTER" GridPane.columnIndex="7"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblU" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="U" textAlignment="CENTER" GridPane.columnIndex="8"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblI" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="I" textAlignment="CENTER" GridPane.columnIndex="9"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <Label fx:id="lblO" alignment="CENTER" prefHeight="30.0" prefWidth="30.0" text="O" textAlignment="CENTER" GridPane.columnIndex="10"> + <font> + <Font size="23.0" /> + </font> + <GridPane.margin> + <Insets bottom="2.0" left="7.0" /> + </GridPane.margin> + </Label> + <TilePane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="4" /> + <VBox prefHeight="200.0" prefWidth="152.0" GridPane.columnIndex="11" /> + <Button fx:id="btnA" minHeight="35.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="35.0" prefWidth="42.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="A" textFill="#fffdfd" GridPane.columnIndex="2" GridPane.rowIndex="5"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Button> + </children> + </GridPane> + <AnchorPane layoutX="241.0" layoutY="130.0" prefHeight="111.0" prefWidth="487.0" AnchorPane.leftAnchor="241.0" AnchorPane.rightAnchor="240.0"> + <children> + <VBox layoutX="72.0" layoutY="-89.0" prefHeight="210.0" prefWidth="377.0" AnchorPane.bottomAnchor="-10.0" AnchorPane.leftAnchor="72.0" AnchorPane.rightAnchor="37.0" AnchorPane.topAnchor="-89.0"> + <children> + <TextField fx:id="tfKlartext" editable="false" prefHeight="80.0" prefWidth="377.0" /> + <Label prefHeight="17.0" prefWidth="385.0" /> + <TextField fx:id="tfCodiert" editable="false" prefHeight="79.0" prefWidth="377.0" /> + <Label prefHeight="17.0" prefWidth="385.0" /> + <Label fx:id="lblLadeNachricht" alignment="BASELINE_CENTER" contentDisplay="CENTER" prefHeight="5.0" prefWidth="377.0" text="Neue Nachricht wird vom Funkraum abgerufen!" /> + <ProgressBar fx:id="pbLadeNachricht" prefHeight="10.0" prefWidth="377.0" progress="0.0" /> + </children> + </VBox> + </children></AnchorPane> + <GridPane layoutX="23.0" layoutY="60.0" prefHeight="158.0" prefWidth="237.0" AnchorPane.leftAnchor="23.0" AnchorPane.topAnchor="60.0"> + <columnConstraints> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> + </columnConstraints> + <rowConstraints> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + </rowConstraints> + <children> + <Label text="Walze" /> + <Label text="Ringe" GridPane.rowIndex="1" /> + <Label text="Position" GridPane.rowIndex="2" /> + <MenuButton fx:id="mBtnWalzPos1" alignment="CENTER_RIGHT" contentDisplay="CENTER" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="I" GridPane.columnIndex="1"> + </MenuButton> + <MenuButton fx:id="mBtnWalzPos2" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="I" textAlignment="CENTER" GridPane.columnIndex="2"> + </MenuButton> + <MenuButton fx:id="mBtnWalzPos3" mnemonicParsing="false" popupSide="TOP" prefHeight="25.0" prefWidth="48.0" text="I" textAlignment="CENTER" GridPane.columnIndex="3"> + </MenuButton> + <MenuButton fx:id="mBtnNotchPos1" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="1" textAlignment="CENTER" GridPane.columnIndex="1" GridPane.rowIndex="1" /> + <MenuButton fx:id="mBtnNotchPos2" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="1" textAlignment="CENTER" GridPane.columnIndex="2" GridPane.rowIndex="1"> + </MenuButton> + <!-- <MenuButton layoutX="93.0" layoutY="114.0" mnemonicParsing="false">--> + <!-- <items>--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z1" text="1" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z2" text="2" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z3" text="3" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z4" text="4" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z5" text="5" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z6" text="6" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z7" text="7" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z8" text="8" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z9" text="9" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z10" text="10" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z11" text="11" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z12" text="12" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z13" text="13" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z14" text="14" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z15" text="15" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z16" text="16" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z17" text="17" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z18" text="18" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z19" text="19" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z20" text="20" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z21" text="21" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z22" text="22" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z23" text="23" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z24" text="24" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z25" text="25" />--> + <!-- <MenuItem mnemonicParsing="false" onAction="#z26" text="26" />--> + <!-- </items>--> + <!-- </MenuButton>--> + <MenuButton fx:id="mBtnNotchPos3" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="1" textAlignment="CENTER" GridPane.columnIndex="3" GridPane.rowIndex="1"> + </MenuButton> + <MenuButton fx:id="mBtnStartPos1" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="A" textAlignment="CENTER" GridPane.columnIndex="1" GridPane.rowIndex="2"> + </MenuButton> + <MenuButton fx:id="mBtnStartPos2" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="A" textAlignment="CENTER" GridPane.columnIndex="2" GridPane.rowIndex="2"> + </MenuButton> + <MenuButton fx:id="mBtnStartPos3" alignment="CENTER_RIGHT" mnemonicParsing="false" prefHeight="25.0" prefWidth="48.0" text="A" textAlignment="CENTER" GridPane.columnIndex="3" GridPane.rowIndex="2"> + </MenuButton> + </children> + </GridPane> + <FlowPane layoutX="736.0" layoutY="51.0" prefHeight="173.0" prefWidth="195.0" AnchorPane.rightAnchor="36.0" AnchorPane.topAnchor="51.0"> + <children> + <Button mnemonicParsing="false" onAction="#btnempfangen" prefHeight="80.0" prefWidth="195.0" text="Funkspruch empfangen" /> + <Label prefHeight="17.0" prefWidth="195.0" /> + <Button mnemonicParsing="false" onAction="#btnsenden" prefHeight="80.0" prefWidth="195.0" text="An Funker senden" /> + </children> + </FlowPane> + <GridPane layoutX="23.0" layoutY="222.0" prefHeight="60.0" prefWidth="270.0" AnchorPane.leftAnchor="23.0" AnchorPane.topAnchor="222.0"> + <columnConstraints> + <ColumnConstraints hgrow="SOMETIMES" maxWidth="130.0" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="SOMETIMES" maxWidth="224.0" minWidth="10.0" prefWidth="170.0" /> + </columnConstraints> + <rowConstraints> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + </rowConstraints> + <children> + <Label alignment="CENTER_RIGHT" text="Tagesschlüssel:" /> + <Label text="Spruchschlüssel:" GridPane.rowIndex="1" /> + <Label fx:id="lblTagesschluessel" prefHeight="17.0" prefWidth="181.0" GridPane.columnIndex="1" /> + <Label fx:id="lblSpruchschluessel" prefHeight="17.0" prefWidth="181.0" GridPane.columnIndex="1" GridPane.rowIndex="1" /> + </children> + </GridPane> + </children> +</AnchorPane> diff --git a/src/main/resources/projekt/enigma/kenngruppe.fxml b/src/main/resources/projekt/enigma/kenngruppe.fxml new file mode 100644 index 0000000000000000000000000000000000000000..2cedf3644a5b65ea0c8f53751137ac55e051acd3 --- /dev/null +++ b/src/main/resources/projekt/enigma/kenngruppe.fxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.shape.Circle?> + +<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="411.0" prefWidth="512.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.KenngruppeController"> + <children> + <Label layoutX="81.0" layoutY="29.0" text="Bitte Kenngruppe eingeben!" AnchorPane.leftAnchor="81.0" AnchorPane.rightAnchor="70.0" AnchorPane.topAnchor="29.0" /> + <HBox layoutX="107.0" layoutY="141.0" prefHeight="26.0" prefWidth="276.0" AnchorPane.leftAnchor="107.0" AnchorPane.rightAnchor="129.0" AnchorPane.topAnchor="141.0"> + <children> + <Button fx:id="secondaryButton" onAction="#switchToPrimary" prefHeight="25.0" prefWidth="142.0" text="Kenngruppe bestätigen!" /> + <Label prefHeight="17.0" prefWidth="159.0" text="Label" /> + <Button mnemonicParsing="false" prefHeight="25.0" prefWidth="150.0" text="Button" /> + </children> + </HBox> + <Circle fill="DODGERBLUE" layoutX="226.0" layoutY="267.0" radius="100.0" stroke="BLACK" strokeType="INSIDE" AnchorPane.leftAnchor="126.0" AnchorPane.rightAnchor="186.0" AnchorPane.topAnchor="167.0" /> + <Button fx:id="secondaryButton" layoutX="40.0" layoutY="85.0" onAction="#switchToPrimary" prefHeight="25.0" prefWidth="241.0" text="Kenngruppe bestätigen!" /> + </children> +</AnchorPane> diff --git a/src/test/java/enigma/model/CodebuchTest.java b/src/test/java/projekt/enigma/model/CodebuchTest.java similarity index 56% rename from src/test/java/enigma/model/CodebuchTest.java rename to src/test/java/projekt/enigma/model/CodebuchTest.java index 5dd7d2ed0157a2ce26dbea07d991b90065608785..ce7da24a9153fcda79ae1811ac3759e58327a21a 100644 --- a/src/test/java/enigma/model/CodebuchTest.java +++ b/src/test/java/projekt/enigma/model/CodebuchTest.java @@ -1,9 +1,7 @@ -package enigma.model; +package projekt.enigma.model; -import enigma.database.DatenbankSqlite; import org.junit.Assert; import org.junit.Test; -import java.sql.SQLException; public class CodebuchTest { @@ -14,13 +12,11 @@ public class CodebuchTest { "Ringstellung: 16,11,13\n" + "Steckverbindung: E:U,O:H,T:Z,A:S,M:R,I:V,C:G,F:Q,B:X,Y:K\n"; - try { - // Ausgabe auf der Konsole - String result = new DatenbankSqlite().getCodebuch(1).toString(); - Assert.assertEquals(result, expected, result); - } catch (SQLException e) { - e.printStackTrace(); - } + // Ausgabe auf der Konsole + Codebuch cb = new Codebuch(); + cb.fetchTagesschluessel(1); + String result = cb.toString(); + Assert.assertEquals(result, expected, result); } @Test diff --git a/src/test/java/enigma/model/HardwareTest.java b/src/test/java/projekt/enigma/model/HardwareTest.java similarity index 98% rename from src/test/java/enigma/model/HardwareTest.java rename to src/test/java/projekt/enigma/model/HardwareTest.java index 5eaeec04b8fc5e4b8fdcf726e901998350f04e31..742e6aba1b8679f81f8729a183fc7dd377616aa9 100644 --- a/src/test/java/enigma/model/HardwareTest.java +++ b/src/test/java/projekt/enigma/model/HardwareTest.java @@ -1,4 +1,4 @@ -package enigma.model; +package projekt.enigma.model; import org.junit.Assert; import org.junit.Test; diff --git a/src/test/java/enigma/model/ReflektorTest.java b/src/test/java/projekt/enigma/model/ReflektorTest.java similarity index 95% rename from src/test/java/enigma/model/ReflektorTest.java rename to src/test/java/projekt/enigma/model/ReflektorTest.java index 793b8cc987f4eabdeda5b27b6e363b5157add7d4..8cb11a94b3c94191e9d0cdec15ddfbf97f5d27ea 100644 --- a/src/test/java/enigma/model/ReflektorTest.java +++ b/src/test/java/projekt/enigma/model/ReflektorTest.java @@ -1,4 +1,4 @@ -package enigma.model; +package projekt.enigma.model; import org.junit.Assert; import org.junit.Test; diff --git a/src/test/java/enigma/model/SteckbrettTest.java b/src/test/java/projekt/enigma/model/SteckbrettTest.java similarity index 94% rename from src/test/java/enigma/model/SteckbrettTest.java rename to src/test/java/projekt/enigma/model/SteckbrettTest.java index 0f3fedb099afdc45ce8b57c766dabefd577dff3c..689b923f05fa2261a0b75ce33b9905221eb3fac6 100644 --- a/src/test/java/enigma/model/SteckbrettTest.java +++ b/src/test/java/projekt/enigma/model/SteckbrettTest.java @@ -1,4 +1,4 @@ -package enigma.model; +package projekt.enigma.model; import org.junit.Assert; import org.junit.Test; diff --git a/src/test/java/enigma/model/WalzeTest.java b/src/test/java/projekt/enigma/model/WalzeTest.java similarity index 94% rename from src/test/java/enigma/model/WalzeTest.java rename to src/test/java/projekt/enigma/model/WalzeTest.java index 819a94e25da96eafaa0e47901ca0a1be22ad12cc..7a898dd9c28224efe22df8d49726af786ed9e3db 100644 --- a/src/test/java/enigma/model/WalzeTest.java +++ b/src/test/java/projekt/enigma/model/WalzeTest.java @@ -1,4 +1,4 @@ -package enigma.model; +package projekt.enigma.model; import org.junit.Assert; import org.junit.Test; @@ -23,7 +23,7 @@ public class WalzeTest { } @Test - public void walzenPoition() { + public void getAnzeige() { Walze w = new Walze(1, 1); char temp = w.getAnzeige(); Assert.assertEquals('A', temp);