diff --git a/pom.xml b/pom.xml index 2f9c3e710d4477723661310f9d7d24e446d8a0e0..ccec90007b7180a0e5217dd1c67323f132d5f920 100644 --- a/pom.xml +++ b/pom.xml @@ -31,13 +31,25 @@ <artifactId>sqlite-jdbc</artifactId> <version>3.28.0</version> </dependency> - <!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client --> + <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> - <groupId>org.mariadb.jdbc</groupId> - <artifactId>mariadb-java-client</artifactId> - <version>2.5.2</version> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + <version>4.5.10</version> + </dependency> + <!-- https://mvnrepository.com/artifact/org.json/json --> + <dependency> + <groupId>org.json</groupId> + <artifactId>json</artifactId> + <version>20190722</version> + </dependency> + <!-- https://mvnrepository.com/artifact/junit/junit --> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.12</version> + <scope>test</scope> </dependency> - </dependencies> <build> <plugins> diff --git a/src/main/java/Enigma/model/Codebuch.java b/src/main/java/Enigma/model/Codebuch.java index 3ef5e25be47442b10fec91bad94bb60d3070cb43..0c6d01da135415010d27909d1a07f604de085f00 100644 --- a/src/main/java/Enigma/model/Codebuch.java +++ b/src/main/java/Enigma/model/Codebuch.java @@ -18,10 +18,15 @@ package Enigma.model; */ public class Codebuch { private int tag; - private String[] Walzenlage = new String[3]; - private String[] Ringstellung = new String[3]; - private String[] Grundstellung = new String[3]; - private String[] Steckverbindung = new String[10]; + private String[] Walzenlage; + private String[] Ringstellung; + private String[] Steckverbindung; + + Codebuch() { + this.Walzenlage = new String[3]; + this.Ringstellung = new String[3]; + this.Steckverbindung = new String[10]; + } /** * Gibt die aktuelle Instanz des Codebuches als String zurück. @@ -34,7 +39,6 @@ public class Codebuch { StringBuilder sb = new StringBuilder(); boolean wlLoop = false; boolean rsLoop = false; - boolean gsLoop = false; boolean svLoop = false; sb.append("Tag: ").append(this.getTag()).append("\n"); @@ -59,16 +63,6 @@ public class Codebuch { } sb.append("\n"); - sb.append("Grundstellung: "); - for (String gs : this.getGrundstellung()) { - sb.append(gs).append(","); - gsLoop = true; - } - if(gsLoop) { - sb.setLength(sb.length() - 1); - } - sb.append("\n"); - sb.append("Steckverbindung: "); for (String s : this.getSteckverbindung()) { if (!s.isEmpty()) { @@ -108,14 +102,6 @@ public class Codebuch { return Ringstellung; } - /** - * Gibt die Grundstellung dieser Instanz zurück - * @return String[] : Grundstellung - */ - public String[] getGrundstellung() { - return Grundstellung; - } - /** * Gibt die Steckverbindung dieser Instanz zurück * @return String[] : Steckverbindung @@ -148,14 +134,6 @@ public class Codebuch { Ringstellung = ringstellung; } - /** - * Setzt die Grundstellung dieser Instanz - * @param grundstellung : String[] - */ - public void setGrundstellung(String[] grundstellung) { - Grundstellung = grundstellung; - } - /** * Setzt die Steckverbindung dieser Instanz * @param steckverbindung : String[] diff --git a/src/main/java/Enigma/model/DatenbankSqlite.java b/src/main/java/Enigma/model/DatenbankSqlite.java index f8170f251985bb806333d72f087fe57dc2e0769e..891c011a036f01b038400dbb808d65c11a0b8f43 100644 --- a/src/main/java/Enigma/model/DatenbankSqlite.java +++ b/src/main/java/Enigma/model/DatenbankSqlite.java @@ -57,7 +57,6 @@ public class DatenbankSqlite { cb.setTag(rs.getInt("Tag")); cb.setWalzenlage(rs.getString("Walzenlage").split(",")); cb.setRingstellung(rs.getString("Ringstellung").split(",")); - cb.setGrundstellung(rs.getString("Grundstellung").split(",")); cb.setSteckverbindung(rs.getString("Steckverbindung").split(",")); } diff --git a/src/main/java/Enigma/model/Funkraum.java b/src/main/java/Enigma/model/Funkraum.java new file mode 100644 index 0000000000000000000000000000000000000000..de283e750d219646a8fbca82f81626a4b94dff0d --- /dev/null +++ b/src/main/java/Enigma/model/Funkraum.java @@ -0,0 +1,105 @@ +package Enigma.model; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpException; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.json.JSONObject; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.List; + +/** + * Hier sitzt der Funker + * Der Funkraum kann Funksprüche empfangen und senden. + * Hierfür wird eine Verbindung zu einem externen Service aufgebaut. + * Dieser Servive erwartet die Nachrichten im JSON Format. Dazu wird ein k als Kenngruppe + * (Benutzername) übergeben und falls eine Nachricht gesendet werden soll, zusätzlich ein m mit der Nachricht. + * Beides wird als String gesendet. + */ +public class Funkraum { + /** + * Zum Empfangen liefert der Server, anstatt der Kenngruppe (k) den Empfangstag der Nachricht mit damit man + * die Grundeinstellungen aus dem Codebuch, für diesen Tag, raussuchen kann. + * {'m': 'Hello world', 't': '26'} + * + * @param kenngruppe : String : Kenngruppe dieser Engiam + * @return String[] : String Array wobei Index 0 dem Empfangstag entspricht und index 1 der empfangenen Nachricht + * @throws IOException : Exception : wenn keine Verbindung zum Funker aufgebaut werden konnte. + */ + public String[] empfangeFunkspruch(String kenngruppe) throws IOException { + String[] funkspruch = new String[2]; + + HttpClient httpclient = HttpClients.createDefault(); + HttpPost httppost = new HttpPost("https://enigma.itstall.de/"); + + // Anfrage Parameter und Encoding setzen + List<NameValuePair> params = new ArrayList<>(2); + params.add(new BasicNameValuePair("k", kenngruppe)); + httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); + + // POST Request ausführen und Rückgabe verarbeiten + HttpResponse response = httpclient.execute(httppost); + HttpEntity entity = response.getEntity(); + + if (entity != null) { + BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent())); + JSONObject result = new JSONObject(reader.readLine()); + + if(!result.getString("m").isEmpty()) { + funkspruch[0] = result.getString("t"); + funkspruch[1] = result.getString("m"); + } + } + + return funkspruch; + } + + /** + * Dem Service senden wir unsere Nachricht als POST Parameter (m) und unsere Kenngruppe (k). + * Dieser nimmt die Daten entgegeb und hierlerlegt sie auf seinem Stapel (Datenbank) von dem die Nachrichten + * irgendwann, auf Anfrage, wieder abgerufen werden können. + * + * Darauf antworter der Server dann mit einem JSON Object in dem das Ergebnis der Anfrage zu sehen ist. + * {'result': 200} + * + * Die 200 heißt hier das alles erfolgreich durchgeführt werden konnte. Steht hier etwas anderes, ist ein Fehler + * aufgetreten und die Anfrage war nicht erfolgreich. + * In letzterem Fall sollte eine Meldung an den Benutzer ausgegeben werden und ggF später erneut versucht. + * + * @param funkspruch : String : Der zu sendede Funkspruch + * @param kenngruppe : String : Die Kenngruppe dieser Engima + * @throws IOException : Exception : Funkspruch konnte nicht gesendet werden + */ + public void sendeFunkspruch(String funkspruch, String kenngruppe) throws HttpException, IOException { + HttpClient httpclient = HttpClients.createDefault(); + HttpPost httppost = new HttpPost("https://enigma.itstall.de/"); + + // Anfrage Parameter und Encoding setzen + List<NameValuePair> params = new ArrayList<>(2); + params.add(new BasicNameValuePair("k", kenngruppe)); + params.add(new BasicNameValuePair("m", funkspruch)); + httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); + + // POST Request ausführen und Rückgabe verarbeiten + HttpResponse response = httpclient.execute(httppost); + HttpEntity entity = response.getEntity(); + + if (entity != null) { + BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent())); + JSONObject result = new JSONObject(reader.readLine()); + if(result.getInt("result") != 200) { + throw new HttpException("Der andere Funker mag deine Nachricht nicht. Rüge ihn wenn du ihn wieder siehst..."); + } + } + + } +} diff --git a/src/test/java/Enigma/model/CodebuchTest.java b/src/test/java/Enigma/model/CodebuchTest.java new file mode 100644 index 0000000000000000000000000000000000000000..91e265342537fdf07e92ca735f9e377b48b4e424 --- /dev/null +++ b/src/test/java/Enigma/model/CodebuchTest.java @@ -0,0 +1,33 @@ +package Enigma.model; + +import org.junit.Assert; +import org.junit.Test; +import java.sql.SQLException; + +public class CodebuchTest { + + @Test + public void testToString() { + String expected = "Tag: 1\n" + + "Walzenlage: 1,3,2\n" + + "Ringstellung: 16,11,13\n" + + "Steckverbindung: CO,DI,FR,HU,JW,LS,TX\n"; + + try { + // Codebuch abrufen + Codebuch cb = new DatenbankSqlite().getCodebuch(1); + // Ausgabe auf der Konsole + String result = new DatenbankSqlite().getCodebuch(1).toString(); + Assert.assertEquals(expected, result); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + @Test + public void getTag() { + Codebuch cb = new Codebuch(); + cb.setTag(1); + Assert.assertEquals(1, cb.getTag()); + } +} \ No newline at end of file diff --git a/src/test/java/Enigma/model/WalzeTest.java b/src/test/java/Enigma/model/WalzeTest.java new file mode 100644 index 0000000000000000000000000000000000000000..1c58136c318dbbdce13c250cbadba805805aa0ad --- /dev/null +++ b/src/test/java/Enigma/model/WalzeTest.java @@ -0,0 +1,45 @@ +package Enigma.model; + +import org.junit.Assert; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class WalzeTest { + + @Test + public void setzeNotch() { + /*Walze w = new Walze(1); + w.setzeNotch('G'); + Assert.assertEquals('G', w.wlazenPosition());*/ + } + + @Test + public void dreheWalze() { + /*Walze w = new Walze(1); + w.setzeNotch('G'); + w.dreheWalze(); + Assert.assertEquals('H', w.wlazenPosition());*/ + } + + @Test + public void walzenPoition() { + /*Walze w = new Walze(1); + w.setzeNotch('G'); + Assert.assertEquals('G', w.wlazenPosition());*/ + } + + @Test + public void codiere() { + /*Walze w = new Walze(1); + w.setzeNotch('A'); + Assert.assertEquals('E', w.codiere('A'));*/ + } + + @Test + public void codiere2() { + /*Walze w = new Walze(1); + w.setzeNotch('A'); + Assert.assertEquals('A', w.codiere('E'));*/ + } +} \ No newline at end of file