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