diff --git a/pom.xml b/pom.xml
index 1c9e45e..b7c613d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -80,6 +80,13 @@
TomcatServer
/bauDas
+
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
+
+
org.apache.maven.plugins
@@ -258,6 +265,12 @@
3.8.3
+
+ com.google.code.gson
+ gson
+ 2.8.2
+
+
diff --git a/src/main/java/de/hsel/spm/baudas/HelloWorld.java b/src/main/java/de/hsel/spm/baudas/HelloWorld.java
deleted file mode 100644
index 1cca1c8..0000000
--- a/src/main/java/de/hsel/spm/baudas/HelloWorld.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package de.hsel.spm.baudas;
-
-import javax.servlet.annotation.WebServlet;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-/**
- * Hello World.
- *
- * @author Johannes Theiner
- * @version 0.1
- * @since 0.1
- */
-
-@WebServlet("/")
-public class HelloWorld extends HttpServlet {
-
- private static final long serialVersionUID = 156790693L;
-
- /**
- * doGet.
- *
- * @param req Request
- * @param resp Response
- * @throws IOException failed
- */
- @Override
- protected void doGet(final HttpServletRequest req, final HttpServletResponse resp)
- throws IOException {
-
- resp.setContentType("text/html");
- final PrintWriter out = resp.getWriter();
- out.println("");
- out.println("");
- out.println("Hallo Welt!");
- out.println("");
- out.println("");
- out.println("Hallo Ostfriesland!
");
- out.println("");
- out.println("");
- }
-}
diff --git a/src/main/java/de/hsel/spm/baudas/web/Data.java b/src/main/java/de/hsel/spm/baudas/web/Data.java
new file mode 100644
index 0000000..d5f47e2
--- /dev/null
+++ b/src/main/java/de/hsel/spm/baudas/web/Data.java
@@ -0,0 +1,96 @@
+package de.hsel.spm.baudas.web;
+
+import lombok.Getter;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentLinkedQueue;
+
+/**
+ * manages data about .csv files.
+ *
+ * @author Johannes Theiner
+ * @version 0.1
+ * @since 0.1
+ **/
+public class Data {
+
+ @Getter
+ private static ConcurrentLinkedQueue files = new ConcurrentLinkedQueue<>();
+
+
+ /**
+ * adds file to list and generates a new filename.
+ *
+ * @param name File name
+ * @return path to save file to
+ */
+ @NotNull
+ static Path add(@NotNull String name) {
+ //cleanup old files
+ if (files.isEmpty()) {
+ try {
+ Files.list(Paths.get("target/")).forEach(path -> {
+ if (path.toFile().getName().endsWith(".csv")) {
+ try {
+ Files.delete(path);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ Path path;
+ UUID uuid = UUID.randomUUID();
+
+ if (files.size() >= 5) {
+ //remove last and add new one
+ SavedFile file = files.poll();
+ if (!get(file.getUuid()).delete()) {
+ System.out.println("failed to delete file...");
+ }
+ path = Paths.get(getFileName(uuid));
+ files.offer(new SavedFile(uuid, name));
+
+
+ } else {
+ files.add(new SavedFile(uuid, name));
+ path = Paths.get(getFileName(uuid));
+ }
+ return path;
+ }
+
+ /**
+ * generates File from uuid.
+ *
+ * @param uuid uuid
+ * @return file
+ */
+ @Contract
+ @NotNull
+ public static File get(@NotNull UUID uuid) {
+ return new File(getFileName(uuid));
+ }
+
+ /**
+ * generates file name from uuid.
+ *
+ * @param uuid uuid
+ * @return file name
+ */
+ @Contract(pure = true)
+ @NotNull
+ private static String getFileName(@NotNull UUID uuid) {
+ return "target/" + uuid + ".csv";
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/de/hsel/spm/baudas/web/Files.java b/src/main/java/de/hsel/spm/baudas/web/Files.java
new file mode 100644
index 0000000..defc588
--- /dev/null
+++ b/src/main/java/de/hsel/spm/baudas/web/Files.java
@@ -0,0 +1,42 @@
+package de.hsel.spm.baudas.web;
+
+import com.google.gson.Gson;
+import org.jetbrains.annotations.NotNull;
+
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * list all currently available files.
+ *
+ * @author Johannes Theiner
+ * @version 0.1
+ * @since 0.1
+ **/
+
+@WebServlet("/files")
+public class Files extends HttpServlet {
+
+ private static final long serialVersionUID = 148451844848L;
+
+ /**
+ * do get.
+ * @param req request
+ * @param resp response
+ * @throws IOException writer could not be retrieved
+ */
+ @Override
+ protected void doGet(@NotNull HttpServletRequest req, @NotNull HttpServletResponse resp)
+ throws IOException {
+ resp.setContentType("application/json");
+ resp.setCharacterEncoding(StandardCharsets.UTF_8.name());
+ PrintWriter out = resp.getWriter();
+ Gson gson = new Gson();
+ out.print(gson.toJson(Data.getFiles()));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/de/hsel/spm/baudas/web/SavedFile.java b/src/main/java/de/hsel/spm/baudas/web/SavedFile.java
new file mode 100644
index 0000000..a292925
--- /dev/null
+++ b/src/main/java/de/hsel/spm/baudas/web/SavedFile.java
@@ -0,0 +1,23 @@
+package de.hsel.spm.baudas.web;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.ToString;
+
+import java.util.UUID;
+
+/**
+ * meta data about file.
+ *
+ * @author Johannes Theiner
+ * @version 0.1
+ * @since 0.1
+ */
+@Getter
+@AllArgsConstructor
+@ToString
+public class SavedFile {
+
+ private UUID uuid;
+ private String name;
+}
\ No newline at end of file
diff --git a/src/main/java/de/hsel/spm/baudas/web/Upload.java b/src/main/java/de/hsel/spm/baudas/web/Upload.java
new file mode 100644
index 0000000..f90f673
--- /dev/null
+++ b/src/main/java/de/hsel/spm/baudas/web/Upload.java
@@ -0,0 +1,61 @@
+package de.hsel.spm.baudas.web;
+
+import org.jetbrains.annotations.NotNull;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.MultipartConfig;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.Part;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+
+/**
+ * saves uploaded files.
+ *
+ * @author Johannes Theiner
+ * @version 0.1
+ * @since 0.1
+ **/
+
+@WebServlet("/upload")
+@MultipartConfig
+public class Upload extends HttpServlet {
+
+ private static final long serialVersionUID = 14144111845151L;
+
+ /**
+ * doPost.
+ *
+ * @param req request
+ * @param resp response
+ * @throws ServletException could not get file part
+ * @throws IOException writer could not be retrieved
+ */
+ @Override
+ protected void doPost(@NotNull HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+ req.setCharacterEncoding(StandardCharsets.UTF_8.name());
+
+ Part filePart = req.getPart("file");
+ String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();
+ InputStream inputStream = filePart.getInputStream();
+
+
+ Path path = Data.add(fileName);
+ if (!Files.exists(path)) {
+ Files.createFile(path);
+ }
+
+ Files.copy(inputStream, path, StandardCopyOption.REPLACE_EXISTING);
+
+ resp.sendRedirect("index.jsf");
+ }
+}
\ No newline at end of file
diff --git a/src/main/webapp/upload-test.html b/src/main/webapp/upload-test.html
new file mode 100644
index 0000000..b57a823
--- /dev/null
+++ b/src/main/webapp/upload-test.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/version.jsp b/src/main/webapp/version.jsp
new file mode 100644
index 0000000..d47f7ea
--- /dev/null
+++ b/src/main/webapp/version.jsp
@@ -0,0 +1,7 @@
+<%@ page import="weka.core.Version" %>
+Server info: <%= application.getServerInfo() %>
+Servlet version: <%= application.getMajorVersion() %>.<%= application.getMinorVersion() %>
+JSP version: <%= JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() %>
+Java version: <%= System.getProperty("java.version") %>
+
+Weka version: <%= Version.VERSION %>
\ No newline at end of file