From 2f0c4b2a4c33de9f8cacd8ebd50a76c3f2ca9b50 Mon Sep 17 00:00:00 2001 From: Marc Beyer Date: Thu, 20 Jan 2022 13:33:49 +0100 Subject: [PATCH 1/4] Added edit-function --- .../main/java/main/CreateEventController.java | 11 ++- .../main/java/main/EditEventController.java | 25 ++++++ .../src/main/java/main/MainController.java | 22 +++++- .../src/main/resources/main/edit-event.fxml | 2 +- .../java/helper/HttpRequestException.java | 23 ++++++ .../src/main/java/res/DataController.java | 76 ++++++++++--------- 6 files changed, 117 insertions(+), 42 deletions(-) create mode 100644 client/app/src/main/java/main/EditEventController.java create mode 100644 client/data/src/main/java/helper/HttpRequestException.java diff --git a/client/app/src/main/java/main/CreateEventController.java b/client/app/src/main/java/main/CreateEventController.java index c67fdca..47f69c6 100644 --- a/client/app/src/main/java/main/CreateEventController.java +++ b/client/app/src/main/java/main/CreateEventController.java @@ -1,6 +1,7 @@ package main; import com.jfoenix.controls.*; +import helper.HttpRequestException; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.Node; @@ -74,16 +75,20 @@ public class CreateEventController { System.out.println(event.getAsUrlParam()); - DataController dataController = new DataController(); - dataController.createEvent(event); + sendHttpRequest(event); Stage stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow(); stage.close(); - } catch (RuntimeException e) { + } catch (HttpRequestException e) { labelError.setText(e.getMessage()); } } + protected void sendHttpRequest(Event event) throws HttpRequestException { + DataController dataController = new DataController(); + dataController.createEvent(event); + } + @FXML protected void abortBtnClick(ActionEvent event) { Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); diff --git a/client/app/src/main/java/main/EditEventController.java b/client/app/src/main/java/main/EditEventController.java new file mode 100644 index 0000000..3e34d04 --- /dev/null +++ b/client/app/src/main/java/main/EditEventController.java @@ -0,0 +1,25 @@ +package main; + +import helper.HttpRequestException; +import res.DataController; +import res.Event; + +public class EditEventController extends CreateEventController{ + + private Event currentEvent; + + public Event getCurrentEvent() { + return currentEvent; + } + + public void setCurrentEvent(Event currentEvent) { + this.currentEvent = currentEvent; + } + + @Override + protected void sendHttpRequest(Event event) throws HttpRequestException { + DataController dataController = new DataController(); + dataController.deleteEvent(currentEvent.getOwnerId(), currentEvent.getId(), currentEvent.getDate()); + dataController.createEvent(event); + } +} diff --git a/client/app/src/main/java/main/MainController.java b/client/app/src/main/java/main/MainController.java index dbdcce6..f16a2c0 100644 --- a/client/app/src/main/java/main/MainController.java +++ b/client/app/src/main/java/main/MainController.java @@ -1,5 +1,6 @@ package main; +import helper.HttpRequestException; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.geometry.Pos; @@ -56,11 +57,17 @@ public class MainController { } DataController dataController = new DataController(); - ArrayList eventList = dataController.getAllVisibleEvents(weekStartDateTime, weekStartDateTime.plusDays(7)); + try { + ArrayList eventList = dataController.getAllVisibleEvents(weekStartDateTime, weekStartDateTime.plusDays(7)); - for (Event event : eventList) { - addEvent(event); + for (Event event : eventList) { + addEvent(event); + } + } catch (HttpRequestException e) { + e.printStackTrace(); } + + } @FXML @@ -143,7 +150,11 @@ public class MainController { deleteBtn.setTextValue(" X "); deleteBtn.setOnAction(e -> { DataController dataController = new DataController(); - dataController.deleteEvent(event.getOwnerId(), event.getId(), event.getDate()); + try { + dataController.deleteEvent(event.getOwnerId(), event.getId(), event.getDate()); + } catch (HttpRequestException ex) { + ex.printStackTrace(); + } updateEvents(); }); Button editBtn = new Button(); @@ -160,7 +171,10 @@ public class MainController { stage.setScene(scene); stage.initModality(Modality.APPLICATION_MODAL); stage.setResizable(false); + EditEventController editEventController = fxmlLoader.getController(); + editEventController.setCurrentEvent(event); stage.showAndWait(); + updateEvents(); } catch (IOException e) { e.printStackTrace(); } diff --git a/client/app/src/main/resources/main/edit-event.fxml b/client/app/src/main/resources/main/edit-event.fxml index 9180344..939dddb 100644 --- a/client/app/src/main/resources/main/edit-event.fxml +++ b/client/app/src/main/resources/main/edit-event.fxml @@ -8,7 +8,7 @@ + fx:controller="main.EditEventController"> diff --git a/client/data/src/main/java/helper/HttpRequestException.java b/client/data/src/main/java/helper/HttpRequestException.java new file mode 100644 index 0000000..972dd3f --- /dev/null +++ b/client/data/src/main/java/helper/HttpRequestException.java @@ -0,0 +1,23 @@ +package helper; + +public class HttpRequestException extends Exception{ + private int status; + + public HttpRequestException(String message, int status) { + super(message); + this.status = status; + } + + public HttpRequestException(Tuple response) { + super(response.getValue()); + this.status = response.getKey(); + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } +} diff --git a/client/data/src/main/java/res/DataController.java b/client/data/src/main/java/res/DataController.java index 2937b9b..279688a 100644 --- a/client/data/src/main/java/res/DataController.java +++ b/client/data/src/main/java/res/DataController.java @@ -3,6 +3,7 @@ package res; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import helper.HttpRequestException; import helper.Tuple; import java.io.BufferedReader; @@ -24,6 +25,7 @@ public class DataController { private static final String DELETE_EVENT_ENDPOINT = "http://localhost:8080/event/del"; private static final String LOGIN_ENDPOINT = "http://localhost:8080/user/login"; + private static final String LOGIN_WITH_TOKEN_ENDPOINT = "http://localhost:8080/user/login-with-token"; private static final String ALL_USERS_ENDPOINT = "http://localhost:8080/user/all"; private static final String HEADER_TEST_ENDPOINT = "http://localhost:8080/vpr/header-test"; @@ -60,28 +62,52 @@ public class DataController { return USER_ID >= 0; } - public void createEvent(Event event) { + public boolean loginWIthToken(String username, String password) { try { - System.out.println(httpRequest.sendPostRequest(ADD_EVENT_ENDPOINT, event.getAsUrlParam(), true)); + Tuple response = httpRequest.sendPostRequest( + LOGIN_WITH_TOKEN_ENDPOINT, + "userId=" + USER_ID, + true + ); } catch (Exception e) { - throw new RuntimeException("Es konnte keine Verbindung mit dem Server hergestellt werden."); + e.printStackTrace(); + return false; + } + return USER_ID >= 0; + } + + public void createEvent(Event event) throws HttpRequestException { + try { + Tuple response = httpRequest.sendPostRequest(ADD_EVENT_ENDPOINT, event.getAsUrlParam(), true); + if(response.getKey() != 200){ + throw new HttpRequestException(response); + } + }catch (HttpRequestException e){ + throw e; + }catch (Exception e) { + throw new HttpRequestException("Es konnte keine Verbindung mit dem Server hergestellt werden.", 600); } } - public void deleteEvent(int userId, int eventId, LocalDateTime date) { + public void deleteEvent(int userId, int eventId, LocalDateTime date) throws HttpRequestException { try { System.out.println("DELETE: userId=" + userId + "&eventId=" + eventId + "&date=" + date.toLocalDate()); - System.out.println(httpRequest.sendPostRequest( + Tuple response = httpRequest.sendPostRequest( DELETE_EVENT_ENDPOINT, "userId=" + userId + "&eventId=" + eventId + "&date=" + date.toLocalDate(), true - )); - } catch (Exception e) { - e.printStackTrace(); + ); + if(response.getKey() != 200){ + throw new HttpRequestException(response); + } + }catch (HttpRequestException e){ + throw e; + }catch (Exception e) { + throw new HttpRequestException("Es konnte keine Verbindung mit dem Server hergestellt werden.", 600); } } - public ArrayList getAllVisibleEvents(LocalDateTime startDate, LocalDateTime endDate) { + public ArrayList getAllVisibleEvents(LocalDateTime startDate, LocalDateTime endDate) throws HttpRequestException { ArrayList eventList = new ArrayList<>(); try { Tuple response = httpRequest.sendPostRequest( @@ -89,6 +115,9 @@ public class DataController { "userId=" + USER_ID + "&startDate=" + startDate.toLocalDate() + "&endDate=" + endDate.toLocalDate(), true ); + if(response.getKey() != 200){ + throw new HttpRequestException(response); + } String jsonResponse = response.getValue(); System.out.println(jsonResponse); @@ -97,35 +126,14 @@ public class DataController { eventList = (ArrayList) objectMapper.readValue(jsonResponse, new TypeReference>(){}); - } catch (Exception e) { - e.printStackTrace(); + }catch (HttpRequestException e){ + throw e; + }catch (Exception e) { + throw new HttpRequestException("Es konnte keine Verbindung mit dem Server hergestellt werden.", 600); } return eventList; } - public Event[] getAllEvents() { - Event[] eventList = null; - try { - String jsonResponse = httpRequest.sendGetRequest("http://localhost:8080/vpr/all-events-test"); - eventList = parseJsonToEventList(jsonResponse); - for (Event e : eventList) { - System.out.println(e); - } - } catch (Exception e) { - e.printStackTrace(); - } - - return eventList; - } - - private Event[] parseJsonToEventList(String jsonString) throws JsonProcessingException { - ArrayList eventList; - - // Parse JSON - ObjectMapper objectMapper = new ObjectMapper(); - - return objectMapper.readValue(jsonString, Event[].class); - } } \ No newline at end of file From c040e54fb8a97a315df860700fa67f95daa50f51 Mon Sep 17 00:00:00 2001 From: Marc Beyer Date: Sun, 23 Jan 2022 17:40:49 +0100 Subject: [PATCH 2/4] Added Config --- .../src/main/java/main/MainApplication.java | 56 +++++++++++++------ client/data/src/main/java/config/Config.java | 41 ++++++++++++++ .../src/main/java/config/ConfigLoader.java | 38 +++++++++++++ 3 files changed, 119 insertions(+), 16 deletions(-) create mode 100644 client/data/src/main/java/config/Config.java create mode 100644 client/data/src/main/java/config/ConfigLoader.java diff --git a/client/app/src/main/java/main/MainApplication.java b/client/app/src/main/java/main/MainApplication.java index 6108243..f6987aa 100644 --- a/client/app/src/main/java/main/MainApplication.java +++ b/client/app/src/main/java/main/MainApplication.java @@ -1,10 +1,13 @@ package main; +import config.Config; +import config.ConfigLoader; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.stage.Stage; import res.DataController; +import res.HttpRequest; import java.io.IOException; import java.util.Objects; @@ -12,10 +15,46 @@ import java.util.Objects; public class MainApplication extends Application { @Override public void start(Stage stage) throws IOException { + Config config = ConfigLoader.load(); + if(config == null){ + config = new Config(false, -1, ""); + } System.out.println("Ignore 'Illegal reflective access operation'-Warning. See https://github.com/sshahine/JFoenix/issues/1170"); - // Load login-scene + if( + !config.isLoginSaved() + || new DataController().loginWithToken(config.getId(), config.getToken()) + ){ + // Load login-scene + loadLoginScene(); + } + + if (DataController.USER_ID >= 0) { + if(config.isLoginSaved()){ + config.setId(DataController.USER_ID); + config.setToken(HttpRequest.TOKEN); + } + // Load main-scene + loadMainScene(stage); + + System.out.println("Logged in..."); + } + } + + private void loadMainScene(Stage stage) throws IOException { + FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("main-view.fxml")); + + Scene scene = new Scene(fxmlLoader.load(), 1200, 700); + scene.getStylesheets().add(Objects.requireNonNull( + MainApplication.class.getResource("main-view.css")).toExternalForm() + ); + stage.setTitle("SharePlaner"); + stage.setScene(scene); + stage.show(); + } + + private void loadLoginScene() throws IOException { FXMLLoader fxmlLoaderLogin = new FXMLLoader(MainApplication.class.getResource("../users/login.fxml")); Scene sceneLogin = new Scene(fxmlLoaderLogin.load(), 650, 500); sceneLogin.getStylesheets().add(Objects.requireNonNull( @@ -25,21 +64,6 @@ public class MainApplication extends Application { stageLogin.setTitle("Anmelden"); stageLogin.setScene(sceneLogin); stageLogin.showAndWait(); - - if (DataController.USER_ID >= 0) { - // Load main-scene - FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("main-view.fxml")); - - Scene scene = new Scene(fxmlLoader.load(), 1200, 700); - scene.getStylesheets().add(Objects.requireNonNull( - MainApplication.class.getResource("main-view.css")).toExternalForm() - ); - stage.setTitle("SharePlaner"); - stage.setScene(scene); - stage.show(); - - System.out.println("Logged in..."); - } } public static void main(String[] args) { diff --git a/client/data/src/main/java/config/Config.java b/client/data/src/main/java/config/Config.java new file mode 100644 index 0000000..98401a0 --- /dev/null +++ b/client/data/src/main/java/config/Config.java @@ -0,0 +1,41 @@ +package config; + +public class Config { + private boolean saveLogin; + private long id; + private String token; + + public Config(){ + + } + + public Config(boolean saveLogin, long id, String token) { + this.saveLogin = saveLogin; + this.id = id; + this.token = token; + } + + public boolean isLoginSaved() { + return saveLogin; + } + + public void setSaveLogin(boolean saveLogin) { + this.saveLogin = saveLogin; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } +} diff --git a/client/data/src/main/java/config/ConfigLoader.java b/client/data/src/main/java/config/ConfigLoader.java new file mode 100644 index 0000000..56e195e --- /dev/null +++ b/client/data/src/main/java/config/ConfigLoader.java @@ -0,0 +1,38 @@ +package config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import res.DataController; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class ConfigLoader { + + public static Config load(){ + try { + String jsonString = Files.readString(Paths.get("config.json")); + + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.findAndRegisterModules(); + return objectMapper.readValue(jsonString, Config.class); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + public static void save(Config config){ + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.findAndRegisterModules(); + + try { + Files.writeString(Paths.get( + "config.json"), + objectMapper.writeValueAsString(config) + ); + } catch (IOException e) { + e.printStackTrace(); + } + } +} From e021809fd75fd76e616ebed66c93c35d8df5f636 Mon Sep 17 00:00:00 2001 From: Marc Beyer Date: Sun, 23 Jan 2022 17:41:40 +0100 Subject: [PATCH 3/4] use camelCase for static methods --- client/app/src/main/java/customUI/Button.java | 2 +- client/app/src/main/java/customUI/Converter.java | 2 +- client/app/src/main/java/customUI/Label.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/app/src/main/java/customUI/Button.java b/client/app/src/main/java/customUI/Button.java index 3d4d4bf..61df976 100644 --- a/client/app/src/main/java/customUI/Button.java +++ b/client/app/src/main/java/customUI/Button.java @@ -3,6 +3,6 @@ package customUI; public class Button extends javafx.scene.control.Button { public void setTextValue(String text){ - super.setText(Converter.CONVERT_STR(text)); + super.setText(Converter.convertString(text)); } } diff --git a/client/app/src/main/java/customUI/Converter.java b/client/app/src/main/java/customUI/Converter.java index bf0c895..dc737af 100644 --- a/client/app/src/main/java/customUI/Converter.java +++ b/client/app/src/main/java/customUI/Converter.java @@ -8,7 +8,7 @@ public class Converter { ß \u00df */ @SuppressWarnings("all") - public static String CONVERT_STR(String str){ + public static String convertString(String str){ return str .replace("ä", "\u00e4") .replace("Ä", "\u00c4") diff --git a/client/app/src/main/java/customUI/Label.java b/client/app/src/main/java/customUI/Label.java index 8ba0ce2..ad5321e 100644 --- a/client/app/src/main/java/customUI/Label.java +++ b/client/app/src/main/java/customUI/Label.java @@ -2,7 +2,7 @@ package customUI; public class Label extends javafx.scene.control.Label { public Label(String content){ - super(Converter.CONVERT_STR(content)); + super(Converter.convertString(content)); } public Label(){ @@ -10,6 +10,6 @@ public class Label extends javafx.scene.control.Label { } public void setTextValue(String text){ - super.setText(Converter.CONVERT_STR(text)); + super.setText(Converter.convertString(text)); } } From 2c3d646c4708dba59345dda0a9a6d5390f30ee91 Mon Sep 17 00:00:00 2001 From: Marc Beyer Date: Sun, 23 Jan 2022 21:21:16 +0100 Subject: [PATCH 4/4] Added save login --- .../src/main/java/main/MainApplication.java | 7 ++--- .../app/src/main/resources/main/main-view.css | 26 +++++++++++++++++++ client/data/src/main/java/config/Config.java | 2 +- .../src/main/java/res/DataController.java | 11 ++++++-- 4 files changed, 40 insertions(+), 6 deletions(-) diff --git a/client/app/src/main/java/main/MainApplication.java b/client/app/src/main/java/main/MainApplication.java index f6987aa..09274f4 100644 --- a/client/app/src/main/java/main/MainApplication.java +++ b/client/app/src/main/java/main/MainApplication.java @@ -23,17 +23,18 @@ public class MainApplication extends Application { System.out.println("Ignore 'Illegal reflective access operation'-Warning. See https://github.com/sshahine/JFoenix/issues/1170"); if( - !config.isLoginSaved() - || new DataController().loginWithToken(config.getId(), config.getToken()) + !config.isSaveLogin() + || !new DataController().loginWithToken(config.getId(), config.getToken()) ){ // Load login-scene loadLoginScene(); } if (DataController.USER_ID >= 0) { - if(config.isLoginSaved()){ + if(config.isSaveLogin()){ config.setId(DataController.USER_ID); config.setToken(HttpRequest.TOKEN); + ConfigLoader.save(config); } // Load main-scene loadMainScene(stage); diff --git a/client/app/src/main/resources/main/main-view.css b/client/app/src/main/resources/main/main-view.css index 684f7b7..0821874 100644 --- a/client/app/src/main/resources/main/main-view.css +++ b/client/app/src/main/resources/main/main-view.css @@ -76,3 +76,29 @@ Label{ -fx-background-color: white; } +.editEventBtn{ + -fx-background-color: transparent; + -fx-border-color: transparent; +} + +.editEventBtn .svg { + -fx-fill: -fill; +} + +.editEventBtn:hover .svg { + -fx-fill: -hover-fill; +} + +.deleteEventBtn{ + -fx-background-color: transparent; + -fx-border-color: transparent; +} + +.deleteEventBtn .svg { + -fx-fill: -fill; +} + +.deleteEventBtn:hover .svg { + -fx-fill: -hover-fill; +} + diff --git a/client/data/src/main/java/config/Config.java b/client/data/src/main/java/config/Config.java index 98401a0..07e8b2f 100644 --- a/client/data/src/main/java/config/Config.java +++ b/client/data/src/main/java/config/Config.java @@ -15,7 +15,7 @@ public class Config { this.token = token; } - public boolean isLoginSaved() { + public boolean isSaveLogin() { return saveLogin; } diff --git a/client/data/src/main/java/res/DataController.java b/client/data/src/main/java/res/DataController.java index 279688a..f920bac 100644 --- a/client/data/src/main/java/res/DataController.java +++ b/client/data/src/main/java/res/DataController.java @@ -62,17 +62,24 @@ public class DataController { return USER_ID >= 0; } - public boolean loginWIthToken(String username, String password) { + public boolean loginWithToken(long userId, String token) { try { + HttpRequest.TOKEN = token; Tuple response = httpRequest.sendPostRequest( LOGIN_WITH_TOKEN_ENDPOINT, - "userId=" + USER_ID, + "userId=" + userId, true ); + + System.out.println(response.getKey() + " " + response.getValue()); + + if(response.getKey() != 200) return false; } catch (Exception e) { e.printStackTrace(); return false; } + USER_ID = userId; + HttpRequest.TOKEN = token; return USER_ID >= 0; }