diff --git a/src/main/java/projekt/enigma/App.java b/src/main/java/projekt/enigma/App.java index 03f9260b62accc6a2544ef476fa58c3fb9082b91..2d5dcb1e0061b4fd3cc5bff24bd5cba1c97a55e8 100644 --- a/src/main/java/projekt/enigma/App.java +++ b/src/main/java/projekt/enigma/App.java @@ -2,10 +2,9 @@ package projekt.enigma; import javafx.application.Application; import javafx.fxml.FXMLLoader; +import javafx.geometry.Insets; import javafx.scene.Scene; -import javafx.scene.control.Button; -import javafx.scene.control.Label; -import javafx.scene.control.TextField; +import javafx.scene.control.*; import javafx.scene.input.KeyCode; import javafx.scene.layout.VBox; import javafx.stage.Stage; @@ -20,86 +19,80 @@ import java.io.IOException; */ public class App extends Application { - private static String kenngruppe; - private static GuiController gc; - private static int debug; - - public static void main(String[] args) { - debug = 1; - launch(args); - } - - public static int getDebug() { - return debug; - } - - @Override - public void start(Stage primaryStage) throws IOException { - - primaryStage.setTitle("Kenngruppenabfrage"); - - Label label1 = new Label("Bitte Kenngruppe eingeben!"); - label1.setTranslateX(55); - Label l1 = new Label(""); - Label l2 = new Label(""); - TextField tfield = new TextField(); - Button button1 = new Button("Kenngruppe setzen!"); - VBox layout1 = new VBox(); - - layout1.getChildren().addAll(label1, l1, tfield, l2, button1); - Scene sceKenngruppe = new Scene(layout1, 234, 137); - - FXMLLoader guiLoader = new FXMLLoader(App.class.getResource("gui.fxml")); - - Scene sceApp = new Scene(guiLoader.load(), 962, 677); - - tfield.setOnKeyPressed(e -> { - if (e.getCode() == KeyCode.ENTER) { - if (enter(tfield.getText())) { - gc = guiLoader.getController(); - gc.setKenngruppe(tfield.getText()); - primaryStage.setScene(sceApp); - } else { - tfield.setText(""); - new Fehler().showErrorDialog("error", "Kenngruppe falsch", - "Regeln für die Kenngruppe: 4-8 Zeichen sowie nur Buchstaben von A-Z."); - } - } - }); - - button1.setOnAction(e -> { - if (enter(tfield.getText())) { - gc = guiLoader.getController(); - gc.setKenngruppe(tfield.getText()); - primaryStage.setScene(sceApp); - } else { - tfield.setText(""); - new Fehler().showErrorDialog("error", "Kenngruppe falsch", - "Regeln für die Kenngruppe: 4-8 Zeichen sowie Buchstaben von A-Z."); - } - }); - - primaryStage.setScene(sceKenngruppe); - primaryStage.show(); - } - - private boolean enter(String kenngruppe) { - - String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - boolean result = true; - - for (char c : kenngruppe.toUpperCase().toCharArray()) { - if (!alphabet.contains(String.valueOf(c))) { - result = false; - break; - } - } - if (kenngruppe.length() > 8 || kenngruppe.length() < 4) { - result = false; - } - - return result; - } + private static GuiController gc; + private static int debug; + + public static void main(String[] args) { + debug = 1; + launch(args); + } + + public static int getDebug() { + return debug; + } + + @Override + public void start(Stage primaryStage) throws IOException { + primaryStage.setTitle("Enigma"); + Label lblEingbae = new Label("Bitte Kenngruppe eingeben!"); + TextField tfEingabe = new TextField(); + Button btnKenngruppe = new Button("Kenngruppe setzen!"); + VBox layout = new VBox(); + layout.setSpacing(30); + layout.setPadding(new Insets(30, 30, 30, 30)); + btnKenngruppe.setMaxWidth(Double.MAX_VALUE); + + layout.getChildren().addAll(lblEingbae, tfEingabe, btnKenngruppe); + Scene sceKenngruppe = new Scene(layout); + + FXMLLoader guiLoader = new FXMLLoader(App.class.getResource("gui.fxml")); + Scene sceApp = new Scene(guiLoader.load(), 962, 677); + + tfEingabe.setOnKeyPressed(e -> { + if (e.getCode() == KeyCode.ENTER) { + if (enter(tfEingabe.getText())) { + gc = guiLoader.getController(); + gc.setKenngruppe(tfEingabe.getText()); + primaryStage.setScene(sceApp); + } else { + tfEingabe.setText(""); + new Fehler().showErrorDialog("error", "Kenngruppe falsch", + "Regeln für die Kenngruppe: 4-8 Zeichen sowie nur Buchstaben von A-Z."); + } + } + }); + btnKenngruppe.setOnAction(e -> { + if (enter(tfEingabe.getText())) { + gc = guiLoader.getController(); + gc.setKenngruppe(tfEingabe.getText()); + primaryStage.setScene(sceApp); + } else { + tfEingabe.setText(""); + new Fehler().showErrorDialog("error", "Kenngruppe falsch", + "Regeln für die Kenngruppe: 4-8 Zeichen sowie Buchstaben von A-Z."); + } + }); + primaryStage.setScene(sceKenngruppe); + primaryStage.show(); + } + + private boolean enter(String kenngruppe) { + + String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + boolean result = true; + + for (char c : kenngruppe.toUpperCase().toCharArray()) { + if (!alphabet.contains(String.valueOf(c))) { + result = false; + break; + } + } + if (kenngruppe.length() > 8 || kenngruppe.length() < 4) { + result = false; + } + + return result; + } // /** // * TODO Dokumentieren diff --git a/src/main/java/projekt/enigma/GuiController.java b/src/main/java/projekt/enigma/GuiController.java index 024e2aa1a5327278b7f1daa5dac52e6c8d17762c..611dd941acb5f9a7463edc7986dbd0a829509dd7 100644 --- a/src/main/java/projekt/enigma/GuiController.java +++ b/src/main/java/projekt/enigma/GuiController.java @@ -12,6 +12,7 @@ import javafx.scene.control.MenuItem; import javafx.scene.control.TextField; import javafx.scene.input.MouseEvent; import javafx.scene.layout.GridPane; +import javafx.scene.layout.Pane; import javafx.scene.shape.Circle; import javafx.stage.StageStyle; import org.apache.http.HttpException; @@ -37,10 +38,8 @@ public class GuiController { private Codierer codierer; private char chiffrierterBuchstabe; private String[] empfangeneNachricht; - //deklariert die benötigten Textfelder - @FXML - private TextField tfStecker1, tfStecker2, tfStecker3, tfStecker4, tfStecker5, tfStecker6, tfStecker7, tfStecker8, - tfStecker9, tfStecker10, tfCodiert, tfKlartext; + private static final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + //endregion //region GUI-Elemente @@ -48,7 +47,8 @@ public class GuiController { //deklariert die benötigten Buttons @FXML private Button btnA, btnB, btnC, btnD, btnE, btnF, btnG, btnH, btnI, btnJ, btnK, btnL, btnM, btnN, btnO, btnP, btnQ, - btnR, btnS, btnT, btnU, btnV, btnW, btnX, btnY, btnZ, btnSenden, btnEmpfangen, btnDelete, btnReset; + btnR, btnS, btnT, btnU, btnV, btnW, btnX, btnY, btnZ, btnSenden, btnEmpfangen, btnDelete, btnReset, + btnPort0, btnPort1, btnPort2, btnPort3, btnPort4, btnPort5, btnPort6, btnPort7, btnPort8, btnPort9; //deklariert die benötigten Kreise @FXML private Circle circA, circB, circC, circD, circE, circF, circG, circH, circI, circJ, circK, circL, circM, circN, @@ -65,11 +65,18 @@ public class GuiController { @FXML private MenuButton mBtnWalzPos1, mBtnWalzPos2, mBtnWalzPos3, mBtnNotchPos1, mBtnNotchPos2, mBtnNotchPos3, mBtnStartPos1, mBtnStartPos2, mBtnStartPos3; + //deklariert die benötigten Textfelder + @FXML + private TextField tfStecker1, tfStecker2, tfStecker3, tfStecker4, tfStecker5, tfStecker6, tfStecker7, tfStecker8, + tfStecker9, tfStecker10, tfCodiert, tfKlartext; + //deklariert benötigte panes + @FXML + private Pane port0; + //deklariert benötigtes GridPane @FXML private GridPane mainGrid; - private static final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //endregion @@ -100,26 +107,29 @@ public class GuiController { menu(mBtnStartPos1, position); menu(mBtnStartPos3, position); menu(mBtnStartPos2, position); + } + + /** * Für das Steckbrett müssen zehn CheckComboBoxen erstellt werden. * Hier wird die Funktion zum erstellen und Befüllen der Boxen, die Funktion zehn mal aufgerufen. - */ + *//* private void generateSteckbrett() { for (int i = 0; i <= 9; i++) { this.createSteckbrettPort(i); } - } + }*/ - /** + /** * Die Funktion createSteckbrettPort erstellt zehn CheckComboBoxen, holt sich die verfügbaren Buchstaben, * die bereits gesteckten Kabel und weißt sie zu. * Im Anschluss werden die CheckComboBoxen auf dem GridPane positioniert. * * @param port : int : Kabel Nummer (0-9) - */ + *//* private void createSteckbrettPort(int port) { // Item Liste anlegen @@ -136,7 +146,7 @@ public class GuiController { /** * Die Buchstaben in die CheckComboBox laden und zusätzlich in einen String um später den * Index des Buchstaben auslesen zu können - */ + *//* for (char c : verfuegbareBuchstaben) { items.add(c); sb.append(c); @@ -151,7 +161,7 @@ public class GuiController { // Die Gesteckten Buchstaben in der CheckComboBox selektieren ccb.getCheckModel().check(sb.toString().indexOf(this.codierer.fetchSteckverbindungen()[port][0])); ccb.getCheckModel().check(sb.toString().indexOf(this.codierer.fetchSteckverbindungen()[port][1])); - } + }*/ /** * init Methode zur Erstellung der Einträge und Action Listener für die einzelnen Menüs @@ -352,6 +362,17 @@ public class GuiController { this.resetDisplay = true; this.setzeTagesSchluessel(); } + if (e.getSource()==btnPort0){ }//TODO pane0 anzeigen + if (e.getSource()==btnPort1){ }//TODO pane0 anzeigen + if (e.getSource()==btnPort2){ }//TODO pane0 anzeigen + if (e.getSource()==btnPort3){ }//TODO pane0 anzeigen + if (e.getSource()==btnPort4){ }//TODO pane0 anzeigen + if (e.getSource()==btnPort5){ }//TODO pane0 anzeigen + if (e.getSource()==btnPort6){ }//TODO pane0 anzeigen + if (e.getSource()==btnPort7){ }//TODO pane0 anzeigen + if (e.getSource()==btnPort8){ }//TODO pane0 anzeigen + if (e.getSource()==btnPort9){ }//TODO pane0 anzeigen + } //endregion @@ -464,16 +485,16 @@ public class GuiController { * mit dem Werten die die Klasse Codierer zur Verfügung stellt gefüllt. */ private void setzeSteckverbindungen() { - tfStecker1.setText(codierer.fetchSteckverbindungen()[0][0] + "" + codierer.fetchSteckverbindungen()[0][1]); - tfStecker2.setText(codierer.fetchSteckverbindungen()[1][0] + "" + codierer.fetchSteckverbindungen()[1][1]); - tfStecker3.setText(codierer.fetchSteckverbindungen()[2][0] + "" + codierer.fetchSteckverbindungen()[2][1]); - tfStecker4.setText(codierer.fetchSteckverbindungen()[3][0] + "" + codierer.fetchSteckverbindungen()[3][1]); - tfStecker5.setText(codierer.fetchSteckverbindungen()[4][0] + "" + codierer.fetchSteckverbindungen()[4][1]); - tfStecker6.setText(codierer.fetchSteckverbindungen()[5][0] + "" + codierer.fetchSteckverbindungen()[5][1]); - tfStecker7.setText(codierer.fetchSteckverbindungen()[6][0] + "" + codierer.fetchSteckverbindungen()[6][1]); - tfStecker8.setText(codierer.fetchSteckverbindungen()[7][0] + "" + codierer.fetchSteckverbindungen()[7][1]); - tfStecker9.setText(codierer.fetchSteckverbindungen()[8][0] + "" + codierer.fetchSteckverbindungen()[8][1]); - tfStecker10.setText(codierer.fetchSteckverbindungen()[9][0] + "" + codierer.fetchSteckverbindungen()[9][1]); + btnPort0.setText(codierer.fetchSteckverbindungen()[0][0] + "" + codierer.fetchSteckverbindungen()[0][1]); + btnPort1.setText(codierer.fetchSteckverbindungen()[1][0] + "" + codierer.fetchSteckverbindungen()[1][1]); + btnPort2.setText(codierer.fetchSteckverbindungen()[2][0] + "" + codierer.fetchSteckverbindungen()[2][1]); + btnPort3.setText(codierer.fetchSteckverbindungen()[3][0] + "" + codierer.fetchSteckverbindungen()[3][1]); + btnPort4.setText(codierer.fetchSteckverbindungen()[4][0] + "" + codierer.fetchSteckverbindungen()[4][1]); + btnPort5.setText(codierer.fetchSteckverbindungen()[5][0] + "" + codierer.fetchSteckverbindungen()[5][1]); + btnPort6.setText(codierer.fetchSteckverbindungen()[6][0] + "" + codierer.fetchSteckverbindungen()[6][1]); + btnPort7.setText(codierer.fetchSteckverbindungen()[7][0] + "" + codierer.fetchSteckverbindungen()[7][1]); + btnPort8.setText(codierer.fetchSteckverbindungen()[8][0] + "" + codierer.fetchSteckverbindungen()[8][1]); + btnPort9.setText(codierer.fetchSteckverbindungen()[9][0] + "" + codierer.fetchSteckverbindungen()[9][1]); } /** @@ -631,7 +652,7 @@ public class GuiController { walzeNr = 2; break; case "IV": - walzeNr = 4; + walzeNr = 3; break; case "V": walzeNr = 4; @@ -769,9 +790,8 @@ public class GuiController { // Steckbrett Felder setzen // Setzt das Steckbrett - generateSteckbrett(); + //generateSteckbrett(); - /* tfStecker1.setText(codierer.fetchSteckverbindungen()[0][0] + "" + codierer.fetchSteckverbindungen()[0][1]); tfStecker2.setText(codierer.fetchSteckverbindungen()[1][0] + "" + @@ -791,7 +811,7 @@ public class GuiController { tfStecker9.setText(codierer.fetchSteckverbindungen()[8][0] + "" + codierer.fetchSteckverbindungen()[8][1]); tfStecker10.setText(codierer.fetchSteckverbindungen()[9][0] + "" + - codierer.fetchSteckverbindungen()[9][1]);*/ + codierer.fetchSteckverbindungen()[9][1]); this.textCodiert = ""; this.textEingabe = ""; this.tfKlartext.setText(""); diff --git a/src/main/java/projekt/enigma/Main.java b/src/main/java/projekt/enigma/Main.java index b5abaf5e0ca620dbe5c06670a79b78aa1ee41db4..e392797f63815a8ddc0c01a6afcd70d1a0ddd5c8 100644 --- a/src/main/java/projekt/enigma/Main.java +++ b/src/main/java/projekt/enigma/Main.java @@ -1,13 +1,17 @@ package projekt.enigma; - -import projekt.enigma.threads.ThreadApp; -import projekt.enigma.threads.ThreadFunkraum; - import java.sql.SQLException; +/** + * Startpunkt des Programms. Startet die Klasse App und damit die GUI. + */ public class Main { + /** + * Startet die App + * + * @param args : String[] : Standard-Kommandozeilen-Parameter + */ public static void main(String[] args) throws SQLException { App.main(args); } diff --git a/src/main/java/projekt/enigma/model/Codebuch.java b/src/main/java/projekt/enigma/model/Codebuch.java index d2ab4a6bec190fb04459e49a5cd2d45093ce073a..b710a0a6ec7e524cbfc9df59adec6f1ea2eb1dfd 100644 --- a/src/main/java/projekt/enigma/model/Codebuch.java +++ b/src/main/java/projekt/enigma/model/Codebuch.java @@ -25,18 +25,17 @@ public class Codebuch { //region Variablen /** - * TODO: Dokumentieren tag - * tag : int : gibt den Tag an + * tag : int : gibt den Tag eines Monats an */ private int tag; /** - * walzenlage : int[] : legt die Positionen der Walzen fest + * walzenlage : int[] : legt die Positionen der drei Walzen fest */ private int[] walzenlage; /** - * ringstellung : int[] : TODO ringstellung: char || int ? + * ringstellung : int[] : legt die Ringstellungen der drei Walzen fest */ private int[] ringstellung; diff --git a/src/main/java/projekt/enigma/model/Codierer.java b/src/main/java/projekt/enigma/model/Codierer.java index ce401e31527f9a557c8b505c0ed3cc7b8b6a67c9..8631af6186be26701d629893a62ba15d82c94ee0 100644 --- a/src/main/java/projekt/enigma/model/Codierer.java +++ b/src/main/java/projekt/enigma/model/Codierer.java @@ -46,7 +46,9 @@ public class Codierer { */ private Codebuch codebuch; - //TODO Dokumentieren + /** + * Thread mit der Abfolge an Aufgaben des Funkraums. + */ private Thread funk; //endregion @@ -344,10 +346,10 @@ public class Codierer { } /** - * TODO: Doku + * Ueberprueft welche Buchstaben noch zur Vertauschung verfügbar sind * - * @param port - * @return + * @param port: Zahl zwischen 0-9: entspricht der Kabelnummer. + * @return String: liefert einen String mit den verfuegbaren Buchstaben zurueck. */ public String fetchVerfuegbareBuchstaben(int port) { return this.hardware.getSteckbrett().fetchVerfuegbareBuchstaben(port); diff --git a/src/main/java/projekt/enigma/model/Fehler.java b/src/main/java/projekt/enigma/model/Fehler.java index 2617b700baed9a77d9b3c5a249649dd20f7aaf05..624e5e267f73d10fb512fcd8799429489bb4e39e 100644 --- a/src/main/java/projekt/enigma/model/Fehler.java +++ b/src/main/java/projekt/enigma/model/Fehler.java @@ -9,69 +9,85 @@ import projekt.enigma.App; */ public class Fehler { - private String functionPrefix = "- "; - private String messagePrefix = "--> "; + private static final String FUNCTION_PREFIX = "- "; + private static final String MESSAGE_PREFIX = "--> "; /** * Zeige Fehler Dialog * * @param type : String : Art der Meldung (warning/information/error) - * @param subject : Titel des Dialoges - * @param message : Nachricht der Meldung + * @param subject : String : Titel des Dialoges + * @param message : String : Nachricht der Meldung */ public void showErrorDialog(String type, String subject, String message) { - - new Fehler().debug(this.getClass().getName() + "." + new Throwable().getStackTrace()[0].getMethodName(), true); - Alert alert; - /* Der Titel darf auch als leerer String übergeben werden, dann wird ein Default gesetzt */ + new Fehler().debug(this.getClass().getName() + "." + + new Throwable().getStackTrace()[0].getMethodName(), true); + + /* Der Titel darf auch als leerer String uebergeben werden, dann wird ein Default gesetzt */ if (subject.equals("")) { subject = "Es ist ein Fehler aufgetreten"; } - /* Welcher Fehler Typ wurde übergeben? */ + /* Welcher Fehler Typ wurde uebergeben? */ switch (type) { case "warning": alert = new Alert(AlertType.WARNING); break; + case "info": alert = new Alert(AlertType.INFORMATION); break; + case "error": alert = new Alert(AlertType.ERROR); break; + default: alert = new Alert(AlertType.NONE); } - /* Setzt den Titel des Dialoges */ + + //Anzeige des Alerts definieren alert.setTitle(subject); - /* Setzt den Headertext des Dialoges */ alert.setHeaderText(null); - /* Setzt die Nachricht des Dialoges */ alert.setContentText(message); - /* Zeige den Dialog an */ alert.showAndWait(); } + /** + * Unter zuhilfenahme dieser Funktion koennen Debug Meldungen auf der Konsole ausgegeben werden, + * wenn in der App.java der Getter getDebug einen int > 0 zurueck gibt. + * Ueber diesen Getter kann man steuern ob Meldungen in der Konsole angezeigt werden sollen oder nicht. + * + * @param message : String : Nachricht + * @param isFunction : boolean : Gibt an ob ein Funktionsname übergeben wird oder eine Debug Meldung + */ public void debug(String message, boolean isFunction) { - if (App.getDebug() != 0) { if (isFunction) { - System.out.println(functionPrefix + message); + System.out.println(FUNCTION_PREFIX + message); } else { - System.out.println(messagePrefix + message); + System.out.println(MESSAGE_PREFIX + message); } } } + /** + * Umter zuhilfenahme dieser Funktion koennen Debug Meldungen auf der Konsole ausgegeben werden, + * wenn in der App.java der Getter getDebug einen int > 0 zurueck gibt. + * Ueber diesen Getter kann man steuern ob Meldungen in der Konsole angezeigt werden sollen oder nicht. + * + * @param message : String : Nachricht + * @param isFunction : boolean : Gibt an ob ein Funktionsname übergeben wird oder eine Debug Meldung + */ public void debug(String message, boolean isFunction, int debugLevel) { if (App.getDebug() != 0 && (App.getDebug() >= debugLevel || App.getDebug() == 3)) { if (isFunction) { - System.out.println(functionPrefix + message); + System.out.println(FUNCTION_PREFIX + message); } else { - System.out.println(messagePrefix + message); + System.out.println(MESSAGE_PREFIX + message); } } } diff --git a/src/main/java/projekt/enigma/model/Funkraum.java b/src/main/java/projekt/enigma/model/Funkraum.java index 3310b32c5a145e4adadcb6fa73314b1d7f6731f6..77131a58b194b31ed6bf6012822786dc033f07fd 100644 --- a/src/main/java/projekt/enigma/model/Funkraum.java +++ b/src/main/java/projekt/enigma/model/Funkraum.java @@ -23,7 +23,7 @@ import java.util.List; * Der Funkraum kann Funksprueche empfangen und senden. * Hierfuer wird eine Verbindung zu einem externen Service aufgebaut. * Dieser Servive erwartet die Nachrichten im JSON Format. Dazu wird ein k als Kenngruppe - * (Benutzername) uebergeben und falls eine Nachricht gesendet werden soll, zusätzlich ein m mit der Nachricht. + * (Benutzername) uebergeben und falls eine Nachricht gesendet werden soll, zusaetzlich ein m mit der Nachricht. * Beides wird als String gesendet. */ public class Funkraum { @@ -36,6 +36,9 @@ public class Funkraum { * @param kenngruppe : String : Kenngruppe dieser Enigma * @return funkspruch : String[] : String Array wobei Index 0 dem Empfangstag entspricht und Index 1 * der empfangenen Nachricht + * @throws UnsupportedEncodingException : Exception : falsche Zeichenkodierung + * @throws IOException : Exception : Fehler bei der uebergabe an den Webservice + * @throws NullPointerException : Exception : Keine Nachricht */ public String[] empfangeFunkspruch(String kenngruppe) { String[] funkspruch = new String[2]; diff --git a/src/main/java/projekt/enigma/model/Hardware.java b/src/main/java/projekt/enigma/model/Hardware.java index f188a2c935d9c0f622502e1bd92a18a99a293727..0ddd8ed605bc771ee67247e6e3a3e39bd669add3 100644 --- a/src/main/java/projekt/enigma/model/Hardware.java +++ b/src/main/java/projekt/enigma/model/Hardware.java @@ -17,10 +17,18 @@ public class Hardware { //region Variablen /** - * TODO: Dokumentieren + * walzen: Walze-Array: erzeugt ein privates Array mit der die Anzahl der Walzen festgelegt wird. */ private Walze[] walzen; + + /** + * steckbrett: Steckbrett: erzeugt ein privates Steckbrett-Objekt + */ private Steckbrett steckbrett; + + /** + * reflektor: Reflektor: erzeugt ein privates Reflektor-Objekt. + */ private Reflektor reflektor; //endregion diff --git a/src/main/java/projekt/enigma/model/Steckbrett.java b/src/main/java/projekt/enigma/model/Steckbrett.java index 426424bac13c717a37c9b7529a39d71436ea033e..aae70e4ffde4f36ac4927ccdea78e05904a31832 100644 --- a/src/main/java/projekt/enigma/model/Steckbrett.java +++ b/src/main/java/projekt/enigma/model/Steckbrett.java @@ -12,12 +12,12 @@ package projekt.enigma.model; public class Steckbrett { /** - * orginalBuchstaben: Character-Array, der jeweils den ersten zu vertauschenden Buchstaben enthält + * orginalBuchstaben: String : der jeweils den ersten zu vertauschenden Buchstaben enthaelt */ private String originalBuchstaben; /** - * getauschteBuchstaben: Character-Array, der jeweils den zweiten zu vertauschenden Buchstaben enthält + * getauschteBuchstaben: String : der jeweils den zweiten zu vertauschenden Buchstaben enthaelt */ private String getauschteBuchstaben; @@ -25,10 +25,9 @@ public class Steckbrett { /** * Konstruktor Steckbrett * <br> - * Erzeugt zwei Charakter-Arrays (orginalBuchstaben und getauschteBuchstaben) der Länge 10. + * Erzeugt zwei Strings und initialisiert diese mit einer leeren Menge. */ public Steckbrett() { - originalBuchstaben = ""; getauschteBuchstaben = ""; } @@ -36,25 +35,24 @@ public class Steckbrett { /** * 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. + * Der Funktion setzeVertauschung werden 2 Buchstaben (buchstabe1 und buchstabe2) uebergeben. + * Zuerst wird ueberprueft ob einer der beiden Buchstaben bereits enthalten ist, was unzulaessig waere. * <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. + * buchstabe1 dem String orginalBuchstaben angehaengt. + * buchstabe2 dem String getauschteBuchstaben angehaengt. * </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 + * @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 zulaessig ist, true, ansonsten false */ public boolean setzeVertauschung(char buchstabe1, char buchstabe2) { - - if (!ueberpruefeVertauschungen(buchstabe1) && !ueberpruefeVertauschungen(buchstabe2) && originalBuchstaben.length() <= 20) { + if ((!ueberpruefeVertauschungen(buchstabe1)) && (!ueberpruefeVertauschungen(buchstabe2)) + && (originalBuchstaben.length() <= 20)) { originalBuchstaben += buchstabe1; getauschteBuchstaben += buchstabe2; - return true; } else { return false; @@ -62,15 +60,15 @@ public class Steckbrett { } /** - * Funktion setzeVertauschung mit angabe eines Ports von 1 - 10 + * 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. + * Der Funktion setzeVertauschung werden 2 Buchstaben (buchstabe1 und buchstabe2) sowie der Port uebergeben. + * Zuerst wird ueberprueft ob einer der beiden Buchstaben bereits enthalten ist, was unzulaessig waere. * <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. + * buchstabe1 in den String orginalBuchstaben auf die Position (steckbrettPorts) geschrieben + * buchstabe2 in den String getauschteBuchstaben auf die Position (steckbrettPort) geschrieben. * </p> * * @param buchstabe1 : char: Gibt den ersten Buchstaben an, der getauscht werden soll. @@ -78,31 +76,27 @@ public class Steckbrett { * @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)) { originalBuchstaben.replace(originalBuchstaben.charAt(steckbrettPort), buchstabe1); getauschteBuchstaben.replace(getauschteBuchstaben.charAt(steckbrettPort), buchstabe2); - return true; } else { return false; } - } /** * Funktion ueberpruefeVertauschungen * <br> - * Die Funktion ueberpruefeVertauschungen prueft ob der übergebene Buchstabe bereits in den beiden Arrays - * (orginalBuchstaben) und (getauschteBuchstaben) vorhanden ist. + * Die Funktion ueberpruefeVertauschungen prueft ob der uebergebene Buchstabe bereits in den beiden Strings + * 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 + * @return result : boolean : Wenn false, dann darf der Buchstabe genutzt werden. Wenn er schon vorhanden ist, + * wird true zurueck gegeben */ public boolean ueberpruefeVertauschungen(Character buchstabe) { - boolean result = false; if (originalBuchstaben.contains(String.valueOf(buchstabe)) || @@ -122,7 +116,6 @@ public class Steckbrett { * @return buchstabe : Character : Codierter Buchstabe. */ public char codiere(Character buchstabe) { - if (originalBuchstaben.contains(String.valueOf(buchstabe))) { return getauschteBuchstaben.charAt(originalBuchstaben.indexOf(buchstabe)); } else if(getauschteBuchstaben.contains(String.valueOf(buchstabe))) { @@ -133,12 +126,12 @@ public class Steckbrett { } /** - * TODO: Doku - * @param port - * @return + * Tauscht die Buchstaben im Alphabet aus und gibt ein modifiziertes Alphabet zurueck + * + * @param port : int : Platz der getauschten Buchstaben + * @return alphabet : String : Alphabet mit getauschen Buchstabenpaaren */ public String fetchVerfuegbareBuchstaben(int port) { - String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; for (char c : this.originalBuchstaben.toCharArray()) { @@ -154,5 +147,4 @@ public class Steckbrett { return alphabet; } - } \ No newline at end of file diff --git a/src/main/java/projekt/enigma/view/ChkBoxPanel.java b/src/main/java/projekt/enigma/view/ChkBoxPanel.java new file mode 100644 index 0000000000000000000000000000000000000000..04b93074aa47a1b13447584a66b580b8c8a2d284 --- /dev/null +++ b/src/main/java/projekt/enigma/view/ChkBoxPanel.java @@ -0,0 +1,74 @@ +package projekt.enigma.view; + +import java.awt.*; +import javax.swing.*; + +public class ChkBoxPanel extends JPanel { + /*private static JPanel panel = new JPanel();*/ + private static JCheckBox[] checkbox; + private static Character[] alphabet;/* = {'A','B','C','D'};*/ + private static int charSize; + + public ChkBoxPanel(Character[] alphabet) { + this.charSize = alphabet.length; + this.alphabet = alphabet; + /*this.setTitle("Vertausche Buchstaben"); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);*/ + this.setSize(30, charSize * 25); + //this.setLocation(getMousePosition()/*.x, getMousePosition().y+this.getHeight()+30*/); + initializeComponents(); + } + + private void initializeComponents() { + this.checkbox = new JCheckBox[charSize]; + GridLayout panelLayout = new GridLayout(); + this.setLayout(panelLayout); + if (!(charSize % 2 == 0)) { + this.setSize(30, (charSize + 1) * 20); + panelLayout.setRows((charSize + 1) / 2); + } else { + this.setSize(30, charSize * 10); + panelLayout.setRows(charSize / 2); + } + panelLayout.setColumns(2); + //panelLayout.setVgap(5); + //panelLayout.setHgap(-5); + + + for (int i = 0; i < charSize; i++) { + checkbox[i] = new JCheckBox(alphabet[i] + ""); + checkbox[i].setSize(15, 20); + checkbox[i].setHorizontalTextPosition(SwingConstants.CENTER); + checkbox[i].setVerticalTextPosition(SwingConstants.TOP); +/* if (!(i%2==0)){ + }*/ + checkbox[i].setMargin(new Insets(0, 20, 0, 20)); + //checkbox[i].setLocation(20, (i + 1) * 30); + this.add(checkbox[i]); + } + /* this.getContentPane().add(panel);*/ + checkbox[0].setSelected(true); + //this.add(panel); + //this.setLocation(100, 100); + this.setVisible(true); + } + + + private int isChecked() { + for (int i = 0; i < charSize; i++) { + if (checkbox[i].isSelected()) { + + // do something... + + } else { + + // do something else... + + } + } + return 0; + } + + +} + diff --git a/src/main/resources/projekt/enigma/gui.fxml b/src/main/resources/projekt/enigma/gui.fxml index e1f89f7b45830201cfc80800a7eff6bcffcec0f3..880cf98c05bdb737af6ec466469a6fabffe35587 100644 --- a/src/main/resources/projekt/enigma/gui.fxml +++ b/src/main/resources/projekt/enigma/gui.fxml @@ -13,9 +13,8 @@ <?import javafx.scene.shape.Circle?> <?import javafx.scene.text.Font?> -<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="677.0" prefWidth="962.0" xmlns="http://javafx.com/javafx/8.0.999-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.GuiController"> +<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="677.0" prefWidth="962.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.GuiController"> <children> - <AnchorPane layoutX="207.0" layoutY="-111.0" prefHeight="111.0" prefWidth="487.0" AnchorPane.leftAnchor="207.0" AnchorPane.rightAnchor="274.0" /> <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" /> @@ -125,56 +124,6 @@ <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> </rowConstraints> <children> - <TextField fx:id="tfStecker1" prefHeight="25.0" prefWidth="20.0" GridPane.columnIndex="1" GridPane.rowIndex="8"> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </TextField> - <TextField fx:id="tfStecker2" prefHeight="25.0" prefWidth="20.0" GridPane.columnIndex="2" GridPane.rowIndex="8"> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </TextField> - <TextField fx:id="tfStecker3" prefHeight="25.0" prefWidth="20.0" GridPane.columnIndex="3" GridPane.rowIndex="8"> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </TextField> - <TextField fx:id="tfStecker4" prefHeight="25.0" prefWidth="20.0" GridPane.columnIndex="4" GridPane.rowIndex="8"> - <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="8"> - <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="8"> - <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="8"> - <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="8"> - <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="8"> - <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="8"> - <GridPane.margin> - <Insets left="10.0" right="10.0" /> - </GridPane.margin> - </TextField> <Button fx:id="btnA" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.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" /> @@ -670,10 +619,93 @@ <Insets left="42.0" /> </GridPane.margin> </Label> - <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="7" /> + <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="7"> + <children> + <Pane fx:id="port0" disable="true" layoutX="-3.0" layoutY="-303.0" prefHeight="346.0" prefWidth="86.0" visible="false" /> + </children> + </Pane> + <Button fx:id="btnPort0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="1" GridPane.rowIndex="8"> + <padding> + <Insets left="10.0" right="10.0" /> + </padding> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnPort9" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="10" GridPane.rowIndex="8"> + <padding> + <Insets left="10.0" right="10.0" /> + </padding> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnPort8" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="9" GridPane.rowIndex="8"> + <padding> + <Insets left="10.0" right="10.0" /> + </padding> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnPort7" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="8" GridPane.rowIndex="8"> + <padding> + <Insets left="10.0" right="10.0" /> + </padding> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnPort6" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="7" GridPane.rowIndex="8"> + <padding> + <Insets left="10.0" right="10.0" /> + </padding> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnPort5" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="6" GridPane.rowIndex="8"> + <padding> + <Insets left="10.0" right="10.0" /> + </padding> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnPort4" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="5" GridPane.rowIndex="8"> + <padding> + <Insets left="10.0" right="10.0" /> + </padding> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnPort3" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="4" GridPane.rowIndex="8"> + <padding> + <Insets left="10.0" right="10.0" /> + </padding> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnPort2" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="3" GridPane.rowIndex="8"> + <padding> + <Insets left="10.0" right="10.0" /> + </padding> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </Button> + <Button fx:id="btnPort1" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="2" GridPane.rowIndex="8"> + <padding> + <Insets left="10.0" right="10.0" /> + </padding> + <GridPane.margin> + <Insets left="10.0" right="10.0" /> + </GridPane.margin> + </Button> </children> </GridPane> - <Label layoutX="684.0" layoutY="-164.0" prefHeight="17.0" prefWidth="195.0" /> <GridPane layoutX="297.0" layoutY="64.0" prefHeight="168.0" prefWidth="585.0"> <columnConstraints> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> @@ -702,5 +734,6 @@ </Button> </children> </GridPane> + <Label fx:id="lblKenngruppe" layoutX="682.0" layoutY="34.0" prefHeight="17.0" prefWidth="177.0" style="-fx-border-color: #000000;" /> </children> </AnchorPane> diff --git a/src/test/java/projekt/enigma/model/HardwareTest.java b/src/test/java/projekt/enigma/model/HardwareTest.java index a31589d72eb89244671c0cb2877026548023be9b..cec7b3fc3e2c029f9ceda25c22e08c77f99cd912 100644 --- a/src/test/java/projekt/enigma/model/HardwareTest.java +++ b/src/test/java/projekt/enigma/model/HardwareTest.java @@ -18,7 +18,7 @@ public class HardwareTest { Steckbrett "W S L V H Y G I X A" Steckbrett "J E F B K P M Q U C" - Walze 3 "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" + Walze 3 "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" Walze 2 "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" Walze 1 "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" 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"