diff --git a/src/main/java/de/hsel/spm/baudas/analysis/ShoppingCart.java b/src/main/java/de/hsel/spm/baudas/analysis/ShoppingCart.java index 3f01c76..6e5b443 100644 --- a/src/main/java/de/hsel/spm/baudas/analysis/ShoppingCart.java +++ b/src/main/java/de/hsel/spm/baudas/analysis/ShoppingCart.java @@ -27,14 +27,12 @@ public class ShoppingCart implements Analysis, List>> { @Override public Map, List> getResult() { - if(result != null) { + if (result != null) { return result; } result = new HashMap<>(); - Apriori model = new Apriori(); - for (int i = 0; i < 11; i++) { instances.deleteAttributeAt(0); } @@ -60,6 +58,8 @@ public class ShoppingCart implements Analysis, List>> { e.printStackTrace(); } + Apriori model = new Apriori(); + model.setTreatZeroAsMissing(true); try { model.buildAssociations(instances); @@ -67,19 +67,19 @@ public class ShoppingCart implements Analysis, List>> { e.printStackTrace(); } - for(int i = 0; i < model.getAssociationRules().getRules().size();i++){ + for (int i = 0; i < model.getAssociationRules().getRules().size(); i++) { AssociationRule rule = model.getAssociationRules().getRules().get(i); List l1 = new ArrayList<>(); - for(Item item : rule.getPremise()){ + for (Item item : rule.getPremise()) { l1.add(item.getAttribute().name()); } List l2 = new ArrayList<>(); - for(Item item : rule.getConsequence()){ + for (Item item : rule.getConsequence()) { l2.add(item.getAttribute().name()); } - result.put(l1,l2); + result.put(l1, l2); } diff --git a/src/main/java/de/hsel/spm/baudas/web/ErrorCode.java b/src/main/java/de/hsel/spm/baudas/web/ErrorCode.java new file mode 100644 index 0000000..7fa1d53 --- /dev/null +++ b/src/main/java/de/hsel/spm/baudas/web/ErrorCode.java @@ -0,0 +1,35 @@ +package de.hsel.spm.baudas.web; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * all possible error codes. + * + * @author Julian Hinxlage + * @version 0.1 + */ +@Getter +@AllArgsConstructor +public enum ErrorCode { + FILE_NOT_FOUND("Die hochgeladene Datei konnte nicht gefunden werden"), + EMPTY_FILE("Die hochgeladene Datei ist leer"), + INVALID_FORMAT("Die hochgeladene Datei hat ein falsches Format"); + + private String message; + + /** + * is there a error code with this name ?. + * + * @param message string to search for + * @return error code exits ? + */ + public static boolean exists(String message) { + for (ErrorCode code : values()) { + System.out.println(message + " == " + code.name()); + if (code.name().equals(message)) + return true; + } + return false; + } +} diff --git a/src/main/java/de/hsel/spm/baudas/web/Upload.java b/src/main/java/de/hsel/spm/baudas/web/Upload.java index 28f7c9d..fb09190 100644 --- a/src/main/java/de/hsel/spm/baudas/web/Upload.java +++ b/src/main/java/de/hsel/spm/baudas/web/Upload.java @@ -1,6 +1,7 @@ package de.hsel.spm.baudas.web; import org.jetbrains.annotations.NotNull; +import weka.core.converters.CSVLoader; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; @@ -20,7 +21,7 @@ import java.nio.file.StandardCopyOption; /** * saves uploaded files. * - * @author Johannes Theiner + * @author Johannes Theiner, Julian Hinxlage * @version 0.1 * @since 0.1 **/ @@ -31,16 +32,62 @@ public class Upload extends HttpServlet { private static final long serialVersionUID = 14144111845151L; + /** + * let weka check if the format is valid. + * + * @param stream input stream + * @return format valid + */ + private boolean checkFormat(InputStream stream) { + CSVLoader loader = new CSVLoader(); + try { + loader.setSource(stream); + return loader.getDataSet() != null; + } catch (Exception e) { + return false; + } + } @Override - protected void doPost(@NotNull HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException { + protected void doPost(@NotNull HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding(StandardCharsets.UTF_8.name()); Part filePart = req.getPart("file"); + + if (filePart == null) { + resp.sendRedirect("error.jsp?code=" + ErrorCode.FILE_NOT_FOUND); + return; + } + + if (filePart.getSubmittedFileName() == null) { + resp.sendRedirect("error.jsp?code=" + ErrorCode.FILE_NOT_FOUND); + return; + } + String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); + + if (fileName == null) { + resp.sendRedirect("error.jsp?code=" + ErrorCode.FILE_NOT_FOUND); + return; + } + InputStream inputStream = filePart.getInputStream(); + if (inputStream == null) { + resp.sendRedirect("error.jsp?code=" + ErrorCode.FILE_NOT_FOUND); + return; + } + if (inputStream.available() == 0) { + resp.sendRedirect("error.jsp?code=" + ErrorCode.EMPTY_FILE); + return; + } + + if (!checkFormat(inputStream)) { + resp.sendRedirect("error.jsp?code=" + ErrorCode.INVALID_FORMAT); + return; + } else { + inputStream = filePart.getInputStream(); + } Path path = Data.add(fileName); if (!Files.exists(path)) { @@ -49,6 +96,7 @@ public class Upload extends HttpServlet { Files.copy(inputStream, path, StandardCopyOption.REPLACE_EXISTING); + resp.sendRedirect(""); } } \ No newline at end of file diff --git a/src/main/webapp/emptyHeader.jsp b/src/main/webapp/emptyHeader.jsp new file mode 100644 index 0000000..d779ff1 --- /dev/null +++ b/src/main/webapp/emptyHeader.jsp @@ -0,0 +1,13 @@ + +<%@include file="head.jsp"%> + + + +
diff --git a/src/main/webapp/error.jsp b/src/main/webapp/error.jsp new file mode 100644 index 0000000..a137dce --- /dev/null +++ b/src/main/webapp/error.jsp @@ -0,0 +1,32 @@ +<%@ page import="de.hsel.spm.baudas.web.ErrorCode" %> +<%@ page import="java.nio.charset.StandardCharsets" %> +<%@ page import="java.util.List" %> +<%@ page import="java.util.Arrays" %> +<%@ page import="java.util.ArrayList" %> +<%@ page contentType="text/html;charset=UTF-8" %> +<%@include file="emptyHeader.jsp"%> +<% response.setCharacterEncoding(StandardCharsets.UTF_8.name()); %> +<% request.setCharacterEncoding(StandardCharsets.UTF_8.name()); %> + +<% + String code = request.getParameter("code"); + + if(code != null && ErrorCode.exists(code)){ + ErrorCode errorCode = ErrorCode.valueOf(code); +%> + +
+
+
+
+ <%= errorCode.getMessage()%> +
+
+
+
+<% + } +%> + + +<%@include file="theming.jsp"%> \ No newline at end of file diff --git a/src/main/webapp/footer.jsp b/src/main/webapp/footer.jsp index fbc7a5f..13abf8f 100644 --- a/src/main/webapp/footer.jsp +++ b/src/main/webapp/footer.jsp @@ -5,14 +5,8 @@ integrity="sha256-xKeoJ50pzbUGkpQxDYHD7o7hxe0LaOGeguUidbq6vis=" crossorigin="anonymous"> - - - - +<%@include file="theming.jsp"%> diff --git a/src/main/webapp/head.jsp b/src/main/webapp/head.jsp new file mode 100644 index 0000000..fab1aeb --- /dev/null +++ b/src/main/webapp/head.jsp @@ -0,0 +1,21 @@ +<% response.setCharacterEncoding(StandardCharsets.UTF_8.name()); %> +<% request.setCharacterEncoding(StandardCharsets.UTF_8.name()); %> + + + + BauDas + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp index 0f73f27..9f25a6a 100644 --- a/src/main/webapp/index.jsp +++ b/src/main/webapp/index.jsp @@ -1,6 +1,6 @@ <%@ page import="java.nio.charset.StandardCharsets" %> <%@ page contentType="text/html;charset=UTF-8" %> -<%@include file="header.jsp"%> +<%@include file="menu.jsp"%> <% response.setCharacterEncoding(StandardCharsets.UTF_8.name()); %> <% request.setCharacterEncoding(StandardCharsets.UTF_8.name()); %> diff --git a/src/main/webapp/header.jsp b/src/main/webapp/menu.jsp similarity index 73% rename from src/main/webapp/header.jsp rename to src/main/webapp/menu.jsp index 5cd9784..7273b56 100644 --- a/src/main/webapp/header.jsp +++ b/src/main/webapp/menu.jsp @@ -1,26 +1,6 @@ -<% response.setCharacterEncoding(StandardCharsets.UTF_8.name()); %> -<% request.setCharacterEncoding(StandardCharsets.UTF_8.name()); %> - - - - BauDas - - - - - - - - - +<%@include file="head.jsp"%> - - - - \ No newline at end of file + diff --git a/src/main/webapp/theming.jsp b/src/main/webapp/theming.jsp new file mode 100644 index 0000000..4df5f5e --- /dev/null +++ b/src/main/webapp/theming.jsp @@ -0,0 +1,5 @@ + + + \ No newline at end of file