diff --git a/db_junit.txt b/db_junit.txt
deleted file mode 100644
index 59b11ad..0000000
--- a/db_junit.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-A1:Relativitätstheorie:Einstein:15
-B2:Quantenmechanik:Heisenberg:17
-C2:Quantenphysik:Planck:5
-T4:Thermodynamik:Kelvin:78
-C2:Theoretische Physik:Kelvin:54
-B2:Thermodynamik:Planck:44
-T4:Quantenphysik:Planck:45
-B2:Elektrodynamik:Kelvin:34
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 71835cf..c038e26 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,6 +54,11 @@
4.12.1
test
+
+ org.testifyproject.mock
+ mockito
+ 1.0.4
+
\ No newline at end of file
diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/KlausurenServer.java b/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/KlausurenServer.java
new file mode 100644
index 0000000..5da57ab
--- /dev/null
+++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/KlausurenServer.java
@@ -0,0 +1,32 @@
+package de.joethei.hs.java2.praktikum.praktikum4;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+public class KlausurenServer {
+
+ private int port;
+ private Map data = new HashMap<>();
+ private ExecutorService executorService = Executors.newCachedThreadPool();
+
+ public KlausurenServer(int port) {
+ this.port = port;
+
+ try (ServerSocket serverSocket = new ServerSocket(port)) {
+ Socket socket = serverSocket.accept();
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ System.exit(-1);
+ }
+ }
+
+ public static void main(String[] args) {
+
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/aufgabe.txt b/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/aufgabe.txt
index c7f446c..22fe623 100644
--- a/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/aufgabe.txt
+++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/aufgabe.txt
@@ -1,28 +1,53 @@
-Entwickeln Sie eine Klasse KlausurenServer, mit der verwaltetet werden kann, welche Klausuren ein(e) Student/-in mitschreiben möchte. Zu einer Mail-Adresse werden dabei die IDs der Klausuren gespeichert, z.B.
+Entwickeln Sie eine Klasse KlausurenServer, mit der verwaltetet werden kann,
+welche Klausuren ein(e) Student/-in mitschreiben möchte.
+Zu einer Mail-Adresse werden dabei die IDs der Klausuren gespeichert, z.B.
max.mueller@stud.hs-emden-leer.de: 34, 45, 56
peter.meier@stud.hs-emden-leer.de: 1, 8, 34, 67
axel.maier@stud.hs-emden-leer.de: 34, 56
...
-Intern werden diese Daten als (key,value)-Paare in einer Map gespeichert, wobei als key die Mail-Adresse verwendet wird. Der Konstruktor der Klasse KlausurenServer erhält als Parameter den Port, auf dem Anfragen entgegengenommen werden. Jede Anfrage besteht aus einer Textzeile, die eines der nachfolgend beschriebenen Kommandos enthalten darf, wobei die Kommandos groß oder klein geschrieben werden können. Als Antwort wird eine Textzeile zurückgeschickt, die immer mit 0 (Misserfolg) oder 1 (Erfolg) beginnt. Die (key,value)-Paare sollen auch nach einem Stoppen und Starten des Servers erhalten bleiben und müssen somit in einer Datei gespeichert werden.
+Intern werden diese Daten als (key,value)-Paare in einer Map gespeichert, wobei als key die Mail-Adresse verwendet wird.
+Der Konstruktor der Klasse KlausurenServer erhält als Parameter den Port, auf dem Anfragen entgegengenommen werden.
+Jede Anfrage besteht aus einer Textzeile, die eines der nachfolgend beschriebenen Kommandos enthalten darf,
+wobei die Kommandos groß oder klein geschrieben werden können.
+Als Antwort wird eine Textzeile zurückgeschickt, die immer mit 0 (Misserfolg) oder 1 (Erfolg) beginnt.
+Die (key,value)-Paare sollen auch nach einem Stoppen und Starten des Servers erhalten bleiben
+und müssen somit in einer Datei gespeichert werden.
PUT key newvalue -> 1 oldvalue
- Trägt unter dem Schlüssel key den Wert newvalue ein. Die Antwort besteht aus einer 1 und dem alten Wert des Schlüssels. Beim ersten Eintrag ist oldvalue ein leerer String. Falls newvalue Leerzeichen enthält, sollen diese entfernt werden.
+ Trägt unter dem Schlüssel key den Wert newvalue ein. Die Antwort besteht aus einer 1 und dem alten Wert des Schlüssels.
+ Beim ersten Eintrag ist oldvalue ein leerer String. Falls newvalue Leerzeichen enthält, sollen diese entfernt werden.
GET key -> 1 value oder 0
- Liefert den Wert, der unter dem Schlüssel key eingetragen ist. Die IDs der Klausuren werden dabei immer aufsteigend sortiert zurückgegeben. Wenn der Schlüssel nicht bekannt ist, ist die Antwort 0.
+ Liefert den Wert, der unter dem Schlüssel key eingetragen ist.
+ Die IDs der Klausuren werden dabei immer aufsteigend sortiert zurückgegeben.
+ Wenn der Schlüssel nicht bekannt ist, ist die Antwort 0.
DEL key -> 1 oldvalue oder 0
- Löscht Schlüssel und Wert und liefert den gelöschten Wert zurück. Wenn der Schlüssel nicht bekannt war, wird 0 zurückgeliefert.
+ Löscht Schlüssel und Wert und liefert den gelöschten Wert zurück.
+ Wenn der Schlüssel nicht bekannt war, wird 0 zurückgeliefert.
GETALL -> 1 value oder 0
- Liefert eine Auflistung aller Klausurenwahlen. Wenn die Wahl eines/einer Studierenden in der Wahl eines/einer anderen Studierenden enthalten ist, fällt diese für diese Anfrage weg. Beim obigen Beispiel würde die Wahl von Axel Maier entfallen, da diese Klausuren auch von Max Mueller gewählt wurden. value soll in folgender Form zurückgegeben werden:
+ Liefert eine Auflistung aller Klausurenwahlen.
+ Wenn die Wahl eines/einer Studierenden in der Wahl eines/einer anderen Studierenden enthalten ist,
+ fällt diese für diese Anfrage weg.
+ Beim obigen Beispiel würde die Wahl von Axel Maier entfallen,
+ da diese Klausuren auch von Max Mueller gewählt wurden. value soll in folgender Form zurückgegeben werden:
[34,45,56],[1,8,34,67]
Falls (noch) keine Klausurenwahlen vorhanden sind, wird 0 zurückgegeben.
STOP -> 1
Beendet den Dienst und somit den Server.
Eine main-Methode liest von der Kommandozeile einen Port ein, legt ein KlausurenServer-Objekt an und startet den Server.
-Der KlausurenServer arbeitet ähnlich wie ein Webserver. Er verarbeitet jede Anfrage einzeln in einem eigenen Thread(!) und unabhängig von anderen Anfragen. Die Verbindung zum Client wird nach jeder Antwort wieder geschlossen. Ein Client, der mehrere Anfragen abwickeln möchte, muss für jede Anfrage eine neue Verbindung zum Server aufnehmen. Ein solches Protokoll wird als "zustandslos" bezeichnet, weil mit jeder Anfrage eine neue Kommunikationssequenz beginnt, die keine Informationen aus früheren Anfragen voraussetzt.
-Praktisch alle Betriebssysteme enthalten einen Telnet-Client, mit dem der Klausurenserver getestet werden kann. Dieser muss bei Windows-Systemen aber ggfls. nachinstalliert werden. Das folgende Beispiel zeigt den Dialog auf einem Unix-System. Der KlausurenServer wurde in einem anderen Terminal gestartet und läuft bereits. Zur Vereinfachung sind die Protokollausgaben des Telnet-Clients ausgeblendet:
+Der KlausurenServer arbeitet ähnlich wie ein Webserver.
+Er verarbeitet jede Anfrage einzeln in einem eigenen Thread(!) und unabhängig von anderen Anfragen.
+Die Verbindung zum Client wird nach jeder Antwort wieder geschlossen.
+Ein Client, der mehrere Anfragen abwickeln möchte, muss für jede Anfrage eine neue Verbindung zum Server aufnehmen.
+Ein solches Protokoll wird als "zustandslos" bezeichnet, weil mit jeder Anfrage eine neue Kommunikationssequenz beginnt,
+die keine Informationen aus früheren Anfragen voraussetzt.
+Praktisch alle Betriebssysteme enthalten einen Telnet-Client, mit dem der Klausurenserver getestet werden kann.
+Dieser muss bei Windows-Systemen aber ggfls. nachinstalliert werden.
+Das folgende Beispiel zeigt den Dialog auf einem Unix-System.
+Der KlausurenServer wurde in einem anderen Terminal gestartet und läuft bereits.
+Zur Vereinfachung sind die Protokollausgaben des Telnet-Clients ausgeblendet:
$ telnet localhost 2000
put max.mueller@stud.hs-emden-leer.de 34,45,56
diff --git a/src/test/java/de/joethei/hs/java2/tests/KlausurenServerTest.java b/src/test/java/de/joethei/hs/java2/tests/KlausurenServerTest.java
new file mode 100644
index 0000000..b28132d
--- /dev/null
+++ b/src/test/java/de/joethei/hs/java2/tests/KlausurenServerTest.java
@@ -0,0 +1,4 @@
+package de.joethei.hs.java2.tests;
+
+public class KlausurenServerTest {
+}
\ No newline at end of file
diff --git a/src/test/java/de/joethei/hs/java2/tests/VorlesungsTest.java b/src/test/java/de/joethei/hs/java2/tests/VorlesungsTest.java
index 7d227c7..e2a159b 100644
--- a/src/test/java/de/joethei/hs/java2/tests/VorlesungsTest.java
+++ b/src/test/java/de/joethei/hs/java2/tests/VorlesungsTest.java
@@ -22,8 +22,6 @@ public class VorlesungsTest {
@Test
public void binaryTree() {
-
-
Tree tree = new Tree<>(new Node<>(45, new Node<>(14), new Node<>(16)));
Node node = new Node<>(45, new Node<>(14), new Node<>(16));
assertEquals(Integer.valueOf(45), tree.getRoot().getValue());
diff --git a/src/test/java/de/joethei/hs/java2/tests/VorlesungsverzeichnisTest2.java b/src/test/java/de/joethei/hs/java2/tests/VorlesungsverzeichnisTest2.java
index af7d9ef..0a5c003 100644
--- a/src/test/java/de/joethei/hs/java2/tests/VorlesungsverzeichnisTest2.java
+++ b/src/test/java/de/joethei/hs/java2/tests/VorlesungsverzeichnisTest2.java
@@ -14,7 +14,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class VorlesungsverzeichnisTest2 {
- String filename = "db_junit.txt";
+ String filename = "src/main/resources/praktikum3/vorlesungen-db.txt";
PrintWriter pw;
Class c = Vorlesung.class; // Klasse Vorlesung vorhanden?