diff --git a/client/app/src/main/java/customUI/Button.java b/client/app/src/main/java/customUI/Button.java new file mode 100644 index 0000000..3d4d4bf --- /dev/null +++ b/client/app/src/main/java/customUI/Button.java @@ -0,0 +1,8 @@ +package customUI; + +public class Button extends javafx.scene.control.Button { + + public void setTextValue(String text){ + super.setText(Converter.CONVERT_STR(text)); + } +} diff --git a/client/app/src/main/java/customUI/Converter.java b/client/app/src/main/java/customUI/Converter.java new file mode 100644 index 0000000..bf0c895 --- /dev/null +++ b/client/app/src/main/java/customUI/Converter.java @@ -0,0 +1,21 @@ +package customUI; + +public class Converter { + /* + Ä, ä \u00c4, \u00e4 + Ö, ö \u00d6, \u00f6 + Ü, ü \u00dc, \u00fc + ß \u00df + */ + @SuppressWarnings("all") + public static String CONVERT_STR(String str){ + return str + .replace("ä", "\u00e4") + .replace("Ä", "\u00c4") + .replace("ö", "\u00f6") + .replace("Ö", "\u00d6") + .replace("ü", "\u00fc") + .replace("Ü", "\u00dc") + .replace("ß", "\u00df"); + } +} diff --git a/client/app/src/main/java/customUI/Label.java b/client/app/src/main/java/customUI/Label.java new file mode 100644 index 0000000..8ba0ce2 --- /dev/null +++ b/client/app/src/main/java/customUI/Label.java @@ -0,0 +1,15 @@ +package customUI; + +public class Label extends javafx.scene.control.Label { + public Label(String content){ + super(Converter.CONVERT_STR(content)); + } + + public Label(){ + super(); + } + + public void setTextValue(String text){ + super.setText(Converter.CONVERT_STR(text)); + } +} diff --git a/client/app/src/main/java/main/MainController.java b/client/app/src/main/java/main/MainController.java index b2d8d80..f9b9a51 100644 --- a/client/app/src/main/java/main/MainController.java +++ b/client/app/src/main/java/main/MainController.java @@ -1,13 +1,11 @@ package main; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.geometry.Pos; import javafx.scene.Scene; -import javafx.scene.control.Button; -import javafx.scene.control.Label; +import customUI.Button; +import customUI.Label; import javafx.scene.control.ScrollPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.HBox; @@ -30,7 +28,7 @@ public class MainController { private GridPane calendarGrid; @FXML - private Label LabelMonth; + private javafx.scene.control.Label LabelMonth; private final String[] dayNames = {"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"}; private final Label[] dayLabel = new Label[7]; @@ -110,7 +108,7 @@ public class MainController { private void createWeek() { for (int i = 0; i < 7; i++) { Label label = new Label(); - label.setText(dayNames[i]); + label.setTextValue(dayNames[i]); label.setMaxHeight(Double.MAX_VALUE); label.setMaxWidth(Double.MAX_VALUE); label.getStyleClass().add("labelDays"); @@ -142,31 +140,14 @@ public class MainController { HBox btnHBox = new HBox(); btnHBox.setAlignment(Pos.BOTTOM_RIGHT); Button deleteBtn = new Button(); - deleteBtn.setText(" X "); + deleteBtn.setTextValue(" X "); deleteBtn.setOnAction(e -> { DataController dataController = new DataController(); dataController.deleteEvent(event.getId()); updateEvents(); }); Button editBtn = new Button(); - editBtn.setText("edit"); - editBtn.setOnAction(event1 -> { - try { - FXMLLoader fxmlLoader = new FXMLLoader( - MainApplication.class.getResource("edit-event.fxml")); - Scene scene = new Scene(fxmlLoader.load(), 650, 650); - scene.getStylesheets().add(Objects.requireNonNull( - MainApplication.class.getResource("edit-event.css")).toExternalForm()); - Stage stage = new Stage(); - stage.setTitle("Termin bearbeiten"); - stage.setScene(scene); - stage.initModality(Modality.APPLICATION_MODAL); - stage.setResizable(false); - stage.showAndWait(); - } catch (IOException e) { - e.printStackTrace(); - } - }); + editBtn.setTextValue("edit"); btnHBox.getChildren().add(editBtn); btnHBox.getChildren().add(deleteBtn); vBox.getChildren().add(btnHBox); @@ -184,12 +165,6 @@ public class MainController { Label typeLabel = new Label("Wer: " + event.getOwnerName()); vBox.getChildren().add(typeLabel); - /* - Ä, ä \u00c4, \u00e4 - Ö, ö \u00d6, \u00f6 - Ü, ü \u00dc, \u00fc - ß \u00df - */ Label prioLabel = new Label("Priorit\u00e4t: " + event.getPriority()); vBox.getChildren().add(prioLabel); @@ -228,7 +203,7 @@ public class MainController { weekStartDateTime = now.plusDays(weekOffset * 7L - dayOfWeek + 1); for (int i = 0; i < 7; i++) { - dayLabel[i].setText(dayFormatter.format(weekStartDateTime.plusDays(i))); + dayLabel[i].setTextValue(dayFormatter.format(weekStartDateTime.plusDays(i))); } LabelMonth.setText(dateFormatter.format(weekStartDateTime)); diff --git a/client/data/src/main/java/res/DataController.java b/client/data/src/main/java/res/DataController.java index bd00842..1ac15b5 100644 --- a/client/data/src/main/java/res/DataController.java +++ b/client/data/src/main/java/res/DataController.java @@ -34,7 +34,8 @@ public class DataController { USER_ID = Long.parseLong(httpRequest.sendPostRequest( LOGIN_ENDPOINT, "login=" + username - + "&password=" + password + + "&password=" + password, + false )); } catch (Exception e) { e.printStackTrace(); @@ -45,7 +46,7 @@ public class DataController { public void createEvent(Event event) { try { - System.out.println(httpRequest.sendPostRequest(ADD_EVENT_ENDPOINT, event.getAsUrlParam())); + System.out.println(httpRequest.sendPostRequest(ADD_EVENT_ENDPOINT, event.getAsUrlParam(), true)); } catch (Exception e) { throw new RuntimeException("Es konnte keine Verbindung mit dem Server hergestellt werden."); } @@ -53,7 +54,7 @@ public class DataController { public void deleteEvent(int eventId) { try { - System.out.println(httpRequest.sendPostRequest(DELETE_EVENT_ENDPOINT, "eventId=" + eventId)); + System.out.println(httpRequest.sendPostRequest(DELETE_EVENT_ENDPOINT, "eventId=" + eventId, true)); } catch (Exception e) { e.printStackTrace(); } @@ -63,7 +64,7 @@ public class DataController { ArrayList eventList = new ArrayList<>(); try { - String jsonResponse = httpRequest.sendPostRequest(ALL_EVENTS_ENDPOINT, "userId=" + USER_ID); + String jsonResponse = httpRequest.sendPostRequest(ALL_EVENTS_ENDPOINT, "userId=" + USER_ID, true); System.out.println(jsonResponse); ObjectMapper objectMapper = new ObjectMapper(); diff --git a/client/data/src/main/java/res/Event.java b/client/data/src/main/java/res/Event.java index 5a6e585..90e9d41 100644 --- a/client/data/src/main/java/res/Event.java +++ b/client/data/src/main/java/res/Event.java @@ -2,6 +2,7 @@ package res; import com.sun.jdi.event.StepEvent; +import java.nio.charset.StandardCharsets; import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; @@ -70,10 +71,30 @@ public class Event { if(name.length() < 3){ throw new IllegalArgumentException("Der Name muss eine L\u00e4nge von 3 haben."); } - Pattern pattern = Pattern.compile("[A-Za-zÄÖÜäöü0-9 =!?+*/$%€.:,;_<>()-]*"); + Pattern pattern = Pattern.compile("[A-Za-z\u00e4\u00f6\u00fc\u00c4\u00d6\u00dc\u00df0-9 =!?+*/$.:,;_<>()-]*"); Matcher matcher = pattern.matcher(name); if(!matcher.matches()){ - throw new IllegalArgumentException("Der Name darf nur aus Zahlen, Buchstaben und folgenden Sonderzeichen bestehen: =!?+*/$%€.:,;_ <>()-"); + System.out.println(name); + + byte[] bytes = name.getBytes(StandardCharsets.UTF_16); + + String utf8EncodedString = new String(bytes, StandardCharsets.UTF_16); + System.out.println(utf8EncodedString); + + for (char c : (name).toCharArray()) { + System.out.print(c + " " + (int)c + ", "); + } + System.out.println(); + for (char c : (name).toCharArray()) { + System.out.print(c + " " + (int)c + ", "); + } + System.out.println(); + for (char c : ("TäöüÄÖÜ").toCharArray()) { + System.out.print(c + " " + (int)c + ", "); + } + System.out.println(); + + throw new IllegalArgumentException("Der Name darf nur aus Zahlen, Buchstaben und folgenden Sonderzeichen bestehen: \u00e4\u00f6\u00fc \u00c4\u00d6\u00dc \u00df =!?+*/$.:,;_ <>()-"); } if(priority < 0){ throw new IllegalArgumentException("Bitte eine Priorit\u00e4t w\u00e4hlen."); @@ -106,7 +127,7 @@ public class Event { } public void setName(String name) { - this.name = name; + this.name = convertToASCII(name); } public int getPriority() { @@ -192,4 +213,9 @@ public class Event { "&isFullDay=" + isFullDay() + "&isPrivate=" + isPrivate(); } + + private String convertToASCII(String s){ + byte[] germanBytes = s.getBytes(); + return new String(germanBytes, StandardCharsets.US_ASCII); + } } diff --git a/client/data/src/main/java/res/HttpRequest.java b/client/data/src/main/java/res/HttpRequest.java index c565e31..398f157 100644 --- a/client/data/src/main/java/res/HttpRequest.java +++ b/client/data/src/main/java/res/HttpRequest.java @@ -9,10 +9,23 @@ import java.nio.charset.StandardCharsets; import java.util.Arrays; public class HttpRequest { - public String sendPostRequest(String urlString, String urlParameters) throws Exception { + public String sendPostRequest(String urlString, String urlParameters, boolean sendAuth) throws Exception { byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8); int postDataLength = postData.length; + /* + URL url = new URL("http://test.de:8080/event/add"); + HttpURLConnection http = (HttpURLConnection)url.openConnection(); + http.setRequestMethod("POST"); + http.setDoOutput(true); + http.setRequestProperty("Accept", "application/json"); + http.setRequestProperty("Authorization", "Bearer {token}"); + http.setRequestProperty("Content-Type", ""); + http.setRequestProperty("Content-Length", "0"); + + System.out.println(http.getResponseCode() + " " + http.getResponseMessage()); + http.disconnect(); + */ URL url = new URL(urlString); HttpURLConnection con = (HttpURLConnection) url.openConnection(); @@ -23,6 +36,12 @@ public class HttpRequest { con.setRequestProperty("charset", "utf-8"); con.setRequestProperty("Content-Length", Integer.toString(postDataLength)); con.setUseCaches(false); + + if(sendAuth){ + con.setRequestProperty("Accept", "application/json"); + con.setRequestProperty("Authorization", "Bearer {token}"); + } + try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) { wr.write(postData); }