Compare commits
	
		
			116 Commits
		
	
	
		
			d574849407
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 44a4ca7967 | |||
| f23a596f47 | |||
| 0522908001 | |||
| 59be5048d8 | |||
| 34e51cb72f | |||
| 88c8a30ad0 | |||
| 111d5758e0 | |||
| af441656de | |||
| a190d91e7a | |||
| 1050455a4a | |||
| 8c46670148 | |||
| 136ead454d | |||
| 0f4ad96dc0 | |||
| 33f8c326d1 | |||
| de4811ee12 | |||
| f3a7ce21cc | |||
| a29f6d204f | |||
| ede28ae4a7 | |||
| 4c94cadf11 | |||
| 351bcd524d | |||
| dc78d69a00 | |||
| 30e0afb86c | |||
| d980edeaad | |||
| 31dbeec55a | |||
| 47739a3783 | |||
| b460a77e8c | |||
| 8c3925ea1a | |||
| 2fbf3895c5 | |||
| d41abdbad9 | |||
| db339eeada | |||
| 245314a887 | |||
| 72fdce471b | |||
| 780ecbee0f | |||
| 4e07b01b6a | |||
| 2f70515407 | |||
| a4ce8940ab | |||
| 91daf95990 | |||
| 596343fe47 | |||
| f133257194 | |||
| 4aafae9896 | |||
| cb5982ef2d | |||
| 2147ca1ad8 | |||
| c4e24549d5 | |||
| 5e9a09fc7d | |||
| f0e431bf6c | |||
| f1f07a3515 | |||
| 898054bb63 | |||
| 3848baddb6 | |||
| b963a53d85 | |||
| 057c4504d4 | |||
| 4f6d9670d0 | |||
| 8260c3f732 | |||
| c79e9a4581 | |||
| 4ce4445d50 | |||
| 7aa615ce54 | |||
| 2c3d646c47 | |||
| e021809fd7 | |||
| c040e54fb8 | |||
| 4020d59284 | |||
| 0840ee1d12 | |||
| ea3288a345 | |||
| 1439a67e7c | |||
| 14910083f4 | |||
| 9345dbc868 | |||
| 45c58ea37f | |||
| 83c1ae6814 | |||
| 0d626bb6dc | |||
| 2f0c4b2a4c | |||
| 141d294b79 | |||
| 2269f05f52 | |||
| 78505097db | |||
| 7a119a8aed | |||
| 22e7d30678 | |||
| 3c0ebd24d7 | |||
| f649b618cf | |||
| 6e6183bf38 | |||
| 0132077c62 | |||
| 5dafdf08b4 | |||
| cf960ff6d6 | |||
| 521b1cb2f7 | |||
| a24addf6ec | |||
| 051000169e | |||
| 0893c4661e | |||
| 53b631678a | |||
| 07c27e84d8 | |||
| 0924625a0e | |||
| 947f31f20e | |||
| 3fe16186e2 | |||
| 7c8b1fefb7 | |||
| 654f34e30e | |||
| baeed584ab | |||
| b12de1cd2e | |||
| 097cce14e8 | |||
| ce309581ed | |||
| f0405b5d86 | |||
| 0d105be15c | |||
| 646da71e8a | |||
| 46606a5afc | |||
| b205c96f85 | |||
| 0ef383aa7f | |||
| ea6420e234 | |||
| eb55d5c650 | |||
| f933690ba0 | |||
| 12fce27d04 | |||
| d34d09aa2b | |||
| 226255f75a | |||
| c754b77c81 | |||
| 66edff8ed5 | |||
| ded0b9042f | |||
| e7b376e722 | |||
| cb6c55a639 | |||
| 60be6933be | |||
| 50896a26ca | |||
| d081a88dcd | |||
| 3f7fa449d5 | |||
| 7e3bd66571 | 
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -72,3 +72,5 @@ crashlytics-build.properties | |||||||
|  |  | ||||||
| .gradle/ | .gradle/ | ||||||
| build/ | build/ | ||||||
|  |  | ||||||
|  | /client/config.json | ||||||
| @@ -5,24 +5,33 @@ plugins { | |||||||
| } | } | ||||||
|  |  | ||||||
| javafx { | javafx { | ||||||
|     version = "11" |     version = "11.0.2" | ||||||
|     modules( |     modules( | ||||||
|             "javafx.controls", |             "javafx.controls", | ||||||
|             "javafx.fxml" |             "javafx.fxml" | ||||||
|     ) |     ) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | tasks.withType<JavaCompile> { | ||||||
|  |     options.encoding = "UTF-8" | ||||||
|  | } | ||||||
|  |  | ||||||
| application { | application { | ||||||
|     mainClassName = "client.MainApplication" |     mainClassName = "main.MainApplication" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | repositories { | ||||||
|  |     mavenCentral() | ||||||
| } | } | ||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|  |     implementation("com.jfoenix:jfoenix:9.0.10") | ||||||
|     implementation(project(":data")) |     implementation(project(":data")) | ||||||
| } | } | ||||||
|  |  | ||||||
| val jar by tasks.getting(Jar::class) { | val jar by tasks.getting(Jar::class) { | ||||||
|     manifest { |     manifest { | ||||||
|         attributes["Main-Class"] = "client.Launcher" |         attributes["Main-Class"] = "main.Launcher" | ||||||
|     } |     } | ||||||
|     from({ |     from({ | ||||||
|         configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) } |         configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) } | ||||||
|   | |||||||
							
								
								
									
										100
									
								
								client/app/src/main/java/events/CreateEventController.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								client/app/src/main/java/events/CreateEventController.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | |||||||
|  | package events; | ||||||
|  |  | ||||||
|  | import com.jfoenix.controls.*; | ||||||
|  | import helper.HttpRequestException; | ||||||
|  | import javafx.event.ActionEvent; | ||||||
|  | import javafx.fxml.FXML; | ||||||
|  | import javafx.scene.Node; | ||||||
|  | import javafx.scene.control.*; | ||||||
|  | import javafx.scene.layout.GridPane; | ||||||
|  | import javafx.stage.Stage; | ||||||
|  | import javafx.util.StringConverter; | ||||||
|  | import javafx.util.converter.LocalTimeStringConverter; | ||||||
|  | import container.DataController; | ||||||
|  | import container.Event; | ||||||
|  |  | ||||||
|  | import java.time.LocalTime; | ||||||
|  | import java.time.format.FormatStyle; | ||||||
|  | import java.util.Locale; | ||||||
|  |  | ||||||
|  | public class CreateEventController { | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     private GridPane mainGrid; | ||||||
|  |     @FXML | ||||||
|  |     protected JFXDatePicker datePickerDate; | ||||||
|  |     @FXML | ||||||
|  |     protected JFXTextField textName; | ||||||
|  |     @FXML | ||||||
|  |     protected JFXComboBox<String> comboBoxPriority; | ||||||
|  |     @FXML | ||||||
|  |     protected JFXToggleButton toggleBtnIsFullDay; | ||||||
|  |     @FXML | ||||||
|  |     protected JFXToggleButton toggleBtnIsPrivate; | ||||||
|  |     @FXML | ||||||
|  |     private Label labelError; | ||||||
|  |     @FXML | ||||||
|  |     protected JFXTimePicker timeStart; | ||||||
|  |     @FXML | ||||||
|  |     protected JFXTimePicker timeEnd; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     public CreateEventController() { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     //Marco Kühn// | ||||||
|  |     @FXML | ||||||
|  |     public void initialize() { | ||||||
|  |         StringConverter<LocalTime> defaultConverter = new LocalTimeStringConverter(FormatStyle.SHORT, Locale.GERMANY); | ||||||
|  |         timeStart.set24HourView(true); | ||||||
|  |         timeStart.setConverter(defaultConverter); | ||||||
|  |  | ||||||
|  |         timeEnd.set24HourView(true); | ||||||
|  |         timeEnd.setConverter(defaultConverter); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     //Marc Beyer// | ||||||
|  |     @FXML | ||||||
|  |     protected void createBtnClick(ActionEvent actionEvent) { | ||||||
|  |         try { | ||||||
|  |             if (datePickerDate.getValue() == null) { | ||||||
|  |                 throw new IllegalArgumentException("Bitte w\u00e4hle ein Datum aus"); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             System.out.println(datePickerDate.getValue()); | ||||||
|  |  | ||||||
|  |             Event event = new Event( | ||||||
|  |                     textName.getText(), | ||||||
|  |                     comboBoxPriority.getSelectionModel().getSelectedIndex(), | ||||||
|  |                     toggleBtnIsFullDay.isSelected(), | ||||||
|  |                     toggleBtnIsPrivate.isSelected(), | ||||||
|  |                     timeStart.getValue(), | ||||||
|  |                     timeEnd.getValue(), | ||||||
|  |                     datePickerDate.getValue().atStartOfDay(), | ||||||
|  |                     (int) DataController.USER_ID | ||||||
|  |             ); | ||||||
|  |  | ||||||
|  |             System.out.println(event.getAsUrlParam()); | ||||||
|  |  | ||||||
|  |             sendHttpRequest(event); | ||||||
|  |  | ||||||
|  |             Stage stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow(); | ||||||
|  |             stage.close(); | ||||||
|  |         } catch (Exception e) { | ||||||
|  |             labelError.setText(e.getMessage()); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     //Marc Beyer// | ||||||
|  |     protected void sendHttpRequest(Event event) throws HttpRequestException { | ||||||
|  |         DataController dataController = new DataController(); | ||||||
|  |         dataController.createEvent(event); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     //Marco Kühn// | ||||||
|  |     @FXML | ||||||
|  |     protected void abortBtnClick(ActionEvent event) { | ||||||
|  |         Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); | ||||||
|  |         stage.close(); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										43
									
								
								client/app/src/main/java/events/EditEventController.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								client/app/src/main/java/events/EditEventController.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | |||||||
|  | //Marc Beyer// | ||||||
|  | package events; | ||||||
|  |  | ||||||
|  | import helper.HttpRequestException; | ||||||
|  | import container.DataController; | ||||||
|  | import container.Event; | ||||||
|  |  | ||||||
|  | import java.time.LocalTime; | ||||||
|  |  | ||||||
|  | public class EditEventController extends CreateEventController{ | ||||||
|  |  | ||||||
|  |     private Event currentEvent; | ||||||
|  |  | ||||||
|  |     public Event getCurrentEvent() { | ||||||
|  |         return currentEvent; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setCurrentEvent(Event currentEvent) { | ||||||
|  |         this.currentEvent = currentEvent; | ||||||
|  |  | ||||||
|  |         textName.setText(currentEvent.getName()); | ||||||
|  |         datePickerDate.setValue(currentEvent.getDate().toLocalDate()); | ||||||
|  |         comboBoxPriority.getSelectionModel().select(currentEvent.getPriority()); | ||||||
|  |  | ||||||
|  |         try{ | ||||||
|  |             timeStart.setValue(LocalTime.parse(currentEvent.getStart())); | ||||||
|  |         }catch (Exception e){} | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         try{ | ||||||
|  |             timeEnd.setValue(LocalTime.parse(currentEvent.getEnd())); | ||||||
|  |         }catch (Exception e){} | ||||||
|  |  | ||||||
|  |         toggleBtnIsFullDay.setSelected(currentEvent.isFullDay()); | ||||||
|  |         toggleBtnIsPrivate.setSelected(currentEvent.isPrivate()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void sendHttpRequest(Event event) throws HttpRequestException { | ||||||
|  |         DataController dataController = new DataController(); | ||||||
|  |         dataController.editEvent(currentEvent, event); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,68 +0,0 @@ | |||||||
| package main; |  | ||||||
|  |  | ||||||
| import javafx.event.ActionEvent; |  | ||||||
| import javafx.fxml.FXML; |  | ||||||
| import javafx.scene.Node; |  | ||||||
| import javafx.scene.control.CheckBox; |  | ||||||
| import javafx.scene.control.ComboBox; |  | ||||||
| import javafx.scene.control.DatePicker; |  | ||||||
| import javafx.scene.control.TextField; |  | ||||||
| import javafx.stage.Stage; |  | ||||||
| import res.DataController; |  | ||||||
| import res.Event; |  | ||||||
|  |  | ||||||
| public class CreateEventController { |  | ||||||
|  |  | ||||||
|     @FXML |  | ||||||
|     public DatePicker datePickerDate; |  | ||||||
|     @FXML |  | ||||||
|     public TextField textName; |  | ||||||
|     @FXML |  | ||||||
|     public TextField textStart; |  | ||||||
|     @FXML |  | ||||||
|     public TextField textEnd; |  | ||||||
|     @FXML |  | ||||||
|     public ComboBox<String> ComboBoxTyp; |  | ||||||
|     @FXML |  | ||||||
|     public ComboBox<String> ComboBoxPriotity; |  | ||||||
|     @FXML |  | ||||||
|     public CheckBox checkBoxIsFullDay; |  | ||||||
|     @FXML |  | ||||||
|     public CheckBox checkBoxIsPrivate; |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     public CreateEventController(){} |  | ||||||
|  |  | ||||||
|     @FXML |  | ||||||
|     public void initialize(){} |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     @FXML |  | ||||||
|     protected void createBtnClick(ActionEvent actionEvent){ |  | ||||||
|  |  | ||||||
|         Event event = new Event( |  | ||||||
|                 textName.getText(), |  | ||||||
|                 ComboBoxPriotity.getSelectionModel().getSelectedIndex(), |  | ||||||
|                 checkBoxIsFullDay.isSelected(), |  | ||||||
|                 checkBoxIsPrivate.isSelected(), |  | ||||||
|                 textStart.getText(), |  | ||||||
|                 textEnd.getText(), |  | ||||||
|                 datePickerDate.getValue().atStartOfDay(), |  | ||||||
|                 1 |  | ||||||
|         ); |  | ||||||
|  |  | ||||||
|         System.out.println(event.getAsUrlParam()); |  | ||||||
|  |  | ||||||
|         DataController dataController = new DataController(); |  | ||||||
|         dataController.createEvent(event); |  | ||||||
|  |  | ||||||
|         Stage stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow(); |  | ||||||
|         stage.close(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @FXML |  | ||||||
|     protected void abortBtnClick(ActionEvent event){ |  | ||||||
|         Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); |  | ||||||
|         stage.close(); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,35 +1,116 @@ | |||||||
|  | //Marc Beyer// | ||||||
| package main; | package main; | ||||||
|  |  | ||||||
|  | import config.Config; | ||||||
|  | import config.ConfigLoader; | ||||||
|  | import container.DataController; | ||||||
|  | import container.HttpRequest; | ||||||
| import javafx.application.Application; | import javafx.application.Application; | ||||||
| import javafx.fxml.FXMLLoader; | import javafx.fxml.FXMLLoader; | ||||||
| import javafx.scene.Scene; | import javafx.scene.Scene; | ||||||
|  | import javafx.stage.Modality; | ||||||
| import javafx.stage.Stage; | import javafx.stage.Stage; | ||||||
|  |  | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
| import java.util.Objects; | import java.util.Objects; | ||||||
|  | import java.util.function.Consumer; | ||||||
|  |  | ||||||
|  |  | ||||||
| public class MainApplication extends Application { | public class MainApplication extends Application { | ||||||
|     @Override |     @Override | ||||||
|     public void start(Stage stage) throws IOException { |     public void start(Stage stage) throws IOException { | ||||||
|  |         Config config = ConfigLoader.load(); | ||||||
|  |         if(config == null){ | ||||||
|  |             config = new Config(false, -1, ""); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         DataController.SERVER_URL = config.toServerUrl(); | ||||||
|  |  | ||||||
|  |         System.out.println("Ignore 'Illegal reflective access operation'-Warning. See https://github.com/sshahine/JFoenix/issues/1170"); | ||||||
|  |  | ||||||
|  |         if( | ||||||
|  |             !config.isSaveLogin() | ||||||
|  |             || !new DataController().loginWithToken(config.getId(), config.getToken()) | ||||||
|  |         ){ | ||||||
|  |             // Load login-scene | ||||||
|  |             loadLoginScene(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (DataController.USER_ID >= 0) { | ||||||
|  |             if(config.isSaveLogin()){ | ||||||
|  |                 config.setId(DataController.USER_ID); | ||||||
|  |                 config.setToken(HttpRequest.TOKEN); | ||||||
|  |                 ConfigLoader.save(config); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // 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")); |         FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("main-view.fxml")); | ||||||
|  |  | ||||||
|         Scene scene = new Scene(fxmlLoader.load(), 1200, 700); |         Scene scene = new Scene(fxmlLoader.load(), 1200, 700); | ||||||
|         scene.getStylesheets().add(Objects.requireNonNull(MainApplication.class.getResource("main-view.css")).toExternalForm()); |         scene.getStylesheets().add(Objects.requireNonNull( | ||||||
|         stage.setTitle("SharePlaner"); |                 MainApplication.class.getResource("main-view.css")).toExternalForm() | ||||||
|  |         ); | ||||||
|  |         stage.setTitle("SharePlanner"); | ||||||
|         stage.setScene(scene); |         stage.setScene(scene); | ||||||
|         stage.show(); |         stage.show(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|         FXMLLoader fxmlLoaderLogin = new FXMLLoader(MainApplication.class.getResource("../users/login.fxml")); |     private void loadLoginScene() { | ||||||
|         Scene sceneLogin = new Scene(fxmlLoaderLogin.load(), 650, 500); |         loadScene( | ||||||
|         sceneLogin.getStylesheets().add(Objects.requireNonNull(MainApplication.class.getResource("../users/login.css")).toExternalForm()); |                 "Anmelden", | ||||||
|         Stage stageLogin = new Stage(); |                 "../users/login.fxml", | ||||||
|         stageLogin.setTitle("Anmelden"); |                 "../users/login.css", | ||||||
|         stageLogin.setScene(sceneLogin); |                 650, | ||||||
|         stageLogin.show(); |                 500 | ||||||
|  |         ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static void main(String[] args) { |     public static void main(String[] args) { | ||||||
|         launch(); |         launch(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public static void loadScene( | ||||||
|  |             String title, | ||||||
|  |             String fxml, | ||||||
|  |             String css, | ||||||
|  |             int width, | ||||||
|  |             int height | ||||||
|  |     ) { | ||||||
|  |         loadScene(title, fxml, css, width, height, null); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static void loadScene( | ||||||
|  |             String title, | ||||||
|  |             String fxml, | ||||||
|  |             String css, | ||||||
|  |             int width, | ||||||
|  |             int height, | ||||||
|  |             Consumer<FXMLLoader> method | ||||||
|  |     ) { | ||||||
|  |         FXMLLoader fxmlLoader = new FXMLLoader( | ||||||
|  |                 MainApplication.class.getResource(fxml)); | ||||||
|  |         try { | ||||||
|  |             Scene scene = new Scene(fxmlLoader.load(), width, height); | ||||||
|  |             scene.getStylesheets().add(Objects.requireNonNull( | ||||||
|  |                     MainApplication.class.getResource(css)).toExternalForm()); | ||||||
|  |             Stage stage = new Stage(); | ||||||
|  |             stage.setTitle(title); | ||||||
|  |             stage.setScene(scene); | ||||||
|  |             stage.initModality(Modality.APPLICATION_MODAL); | ||||||
|  |             stage.setResizable(false); | ||||||
|  |  | ||||||
|  |             if(method != null)method.accept(fxmlLoader); | ||||||
|  |  | ||||||
|  |             stage.showAndWait(); | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
| @@ -1,36 +1,44 @@ | |||||||
|  | // Marco Kühn, Marc Beyer // | ||||||
| package main; | package main; | ||||||
|  |  | ||||||
|  | import config.Config; | ||||||
|  | import config.ConfigLoader; | ||||||
|  | import container.DataController; | ||||||
|  | import container.Event; | ||||||
|  | import container.HttpRequest; | ||||||
|  | import events.EditEventController; | ||||||
|  | import helper.HttpRequestException; | ||||||
| import javafx.event.ActionEvent; | import javafx.event.ActionEvent; | ||||||
| import javafx.event.EventHandler; |  | ||||||
| import javafx.fxml.FXML; | import javafx.fxml.FXML; | ||||||
| import javafx.fxml.FXMLLoader; | import javafx.scene.Node; | ||||||
| import javafx.geometry.Pos; | import javafx.scene.control.Alert; | ||||||
| import javafx.scene.Scene; |  | ||||||
| import javafx.scene.control.Button; | import javafx.scene.control.Button; | ||||||
| import javafx.scene.control.Label; | import javafx.scene.control.Label; | ||||||
| import javafx.scene.control.ScrollPane; |  | ||||||
| import javafx.scene.layout.GridPane; | import javafx.scene.layout.GridPane; | ||||||
| import javafx.scene.layout.HBox; | import javafx.scene.layout.HBox; | ||||||
| import javafx.scene.layout.VBox; | import javafx.scene.layout.VBox; | ||||||
| import javafx.stage.Modality; |  | ||||||
| import javafx.stage.Stage; | import javafx.stage.Stage; | ||||||
| import res.DataController; | import ui.DayPane; | ||||||
| import res.Event; | import ui.EventPane; | ||||||
|  | import ui.SvgBtnCreator; | ||||||
|  |  | ||||||
| import java.io.IOException; |  | ||||||
| import java.time.Duration; | import java.time.Duration; | ||||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||||
| import java.time.format.DateTimeFormatter; | import java.time.format.DateTimeFormatter; | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| import java.util.Objects; |  | ||||||
|  |  | ||||||
| public class MainController { | public class MainController { | ||||||
|  |  | ||||||
|     @FXML |     @FXML | ||||||
|     private GridPane calendarGrid; |     private VBox leftNav; | ||||||
|  |  | ||||||
|     @FXML |     @FXML | ||||||
|     private Label LabelMonth; |     private GridPane mainGridPane; | ||||||
|  |     @FXML | ||||||
|  |     private HBox buttonBox; | ||||||
|  |     @FXML | ||||||
|  |     private GridPane calendarGrid; | ||||||
|  |     @FXML | ||||||
|  |     private javafx.scene.control.Label LabelMonth; | ||||||
|  |  | ||||||
|     private final String[] dayNames = {"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"}; |     private final String[] dayNames = {"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"}; | ||||||
|     private final Label[] dayLabel = new Label[7]; |     private final Label[] dayLabel = new Label[7]; | ||||||
| @@ -48,8 +56,9 @@ public class MainController { | |||||||
|     public void initialize() { |     public void initialize() { | ||||||
|         createWeek(); |         createWeek(); | ||||||
|         setDates(); |         setDates(); | ||||||
|  |  | ||||||
|         updateEvents(); |         updateEvents(); | ||||||
|  |         createBtns(); | ||||||
|  |         leftNav.setSpacing(40); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void updateEvents() { |     private void updateEvents() { | ||||||
| @@ -58,124 +67,114 @@ public class MainController { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         DataController dataController = new DataController(); |         DataController dataController = new DataController(); | ||||||
|         ArrayList<Event> eventList = dataController.getAllVisibleEvents(); |         try { | ||||||
|  |             ArrayList<Event> eventList = dataController.getAllVisibleEvents(weekStartDateTime, weekStartDateTime.plusDays(7)); | ||||||
|  |  | ||||||
|         for (Event event : eventList) { |             for (Event event : eventList) { | ||||||
|             addEvent(event); |                 addEvent(event); | ||||||
|  |             } | ||||||
|  |         } catch (HttpRequestException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @FXML |     @FXML | ||||||
|     protected void onAddBtnClick() { |     protected void onBackClick() { | ||||||
|         try { |         weekOffset--; | ||||||
|             FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("create-event.fxml")); |         setDates(); | ||||||
|             Scene scene = new Scene(fxmlLoader.load(), 650, 500); |  | ||||||
|             scene.getStylesheets().add(Objects.requireNonNull(MainApplication.class.getResource("create-event.css")).toExternalForm()); |  | ||||||
|             Stage stage = new Stage(); |  | ||||||
|             stage.setTitle("Termin erstellen"); |  | ||||||
|             stage.setScene(scene); |  | ||||||
|             stage.initModality(Modality.APPLICATION_MODAL); |  | ||||||
|             stage.setResizable(false); |  | ||||||
|             //stage.initStyle(StageStyle.UNDECORATED); |  | ||||||
|             stage.showAndWait(); |  | ||||||
|         } catch (IOException e) { |  | ||||||
|             e.printStackTrace(); |  | ||||||
|         } |  | ||||||
|         updateEvents(); |         updateEvents(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     protected void onTodayClick() { | ||||||
|  |         weekOffset = 0; | ||||||
|  |         setDates(); | ||||||
|  |         updateEvents(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     protected void onNextClick() { | ||||||
|  |         weekOffset++; | ||||||
|  |         setDates(); | ||||||
|  |         updateEvents(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     protected void onAddBtnClick() { | ||||||
|  |         MainApplication.loadScene( | ||||||
|  |                 "Termin erstellen", | ||||||
|  |                 "create-event.fxml", | ||||||
|  |                 "create-event.css", | ||||||
|  |                 650, | ||||||
|  |                 650 | ||||||
|  |         ); | ||||||
|  |         updateEvents(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected void onSettingBtnClick(){ | ||||||
|  |         MainApplication.loadScene( | ||||||
|  |                 "Einstellungen", | ||||||
|  |                 "option-view.fxml", | ||||||
|  |                 "option-view.css", | ||||||
|  |                 650, | ||||||
|  |                 600 | ||||||
|  |                 ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected void onLogoutBtnClick(ActionEvent event){ | ||||||
|  |         ConfigLoader.save(new Config()); | ||||||
|  |         DataController.USER_ID = -1; | ||||||
|  |         HttpRequest.TOKEN = ""; | ||||||
|  |         Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); | ||||||
|  |         stage.close(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     private void createWeek() { |     private void createWeek() { | ||||||
|         for (int i = 0; i < 7; i++) { |         for (int i = 0; i < 7; i++) { | ||||||
|             Label label = new Label(); |             DayPane dayPane = new DayPane(); | ||||||
|             label.setText(dayNames[i]); |             this.dayLabel[i] = dayPane.getDayLabel(); | ||||||
|             label.setMaxHeight(Double.MAX_VALUE); |             calendarGrid.add(dayPane.getDayLabel(), i, 0); | ||||||
|             label.setMaxWidth(Double.MAX_VALUE); |             dayVBoxes[i] = dayPane.getDayVBox(); | ||||||
|             label.getStyleClass().add("labelDays"); |             calendarGrid.add(dayPane, i, 1); | ||||||
|             dayLabel[i] = label; |  | ||||||
|             calendarGrid.add(label, i, 0); |  | ||||||
|  |  | ||||||
|             ScrollPane scrollPane = new ScrollPane(); |  | ||||||
|  |  | ||||||
|             VBox vBox = new VBox(); |  | ||||||
|             vBox.getStyleClass().add("vBoxDays"); |  | ||||||
|             vBox.setSpacing(10); |  | ||||||
|             dayVBoxes[i] = vBox; |  | ||||||
|             scrollPane.setContent(vBox); |  | ||||||
|  |  | ||||||
|             scrollPane.setFitToWidth(true); |  | ||||||
|             scrollPane.setFitToHeight(true); |  | ||||||
|             scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); |  | ||||||
|             scrollPane.getStyleClass().add("scrollDays"); |  | ||||||
|  |  | ||||||
|             calendarGrid.add(scrollPane, i, 1); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void addEvent(Event event) { |     private void addEvent(Event event) { | ||||||
|         VBox vBox = new VBox(); |         EventPane eventPane = new EventPane(event); | ||||||
|         vBox.getStyleClass().add("event"); |         eventPane.getEditBtn().setOnAction(event1 -> { | ||||||
|         vBox.setSpacing(5); |             MainApplication.loadScene( | ||||||
|  |                     "Termin bearbeiten", | ||||||
|         HBox btnHBox = new HBox(); |                     "edit-event.fxml", | ||||||
|         btnHBox.setAlignment(Pos.BOTTOM_RIGHT); |                     "create-event.css", | ||||||
|         Button deleteBtn = new Button(); |                     650, | ||||||
|         deleteBtn.setText(" X "); |                     650, | ||||||
|         deleteBtn.setOnAction(e -> { |                     fxmlLoader -> { | ||||||
|             DataController dataController = new DataController(); |                         EditEventController editEventController = fxmlLoader.getController(); | ||||||
|             dataController.deleteEvent(event.getId()); |                         editEventController.setCurrentEvent(event); | ||||||
|  |                     } | ||||||
|  |             ); | ||||||
|             updateEvents(); |             updateEvents(); | ||||||
|         }); |         }); | ||||||
|         Button editBtn = new Button(); |  | ||||||
|         editBtn.setText("edit"); |  | ||||||
|         btnHBox.getChildren().add(editBtn); |  | ||||||
|         btnHBox.getChildren().add(deleteBtn); |  | ||||||
|         vBox.getChildren().add(btnHBox); |  | ||||||
|  |  | ||||||
|         Label nameLabel = new Label(event.getName()); |  | ||||||
|         vBox.getChildren().add(nameLabel); |  | ||||||
|  |  | ||||||
|         if (event.getStart() != null || event.getEnd() != null) { |  | ||||||
|             String timeStr = (event.getStart() != null ? formatTime(event.getStart()) : "") |  | ||||||
|                     + (event.getEnd() != null ? " - " + formatTime(event.getEnd()) : ""); |  | ||||||
|             Label timeLabel = new Label(timeStr); |  | ||||||
|             vBox.getChildren().add(timeLabel); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         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); |  | ||||||
|  |  | ||||||
|         if (event.isFullDay()) { |  | ||||||
|             Label fullDayLabel = new Label("Dieser Termin bockiert den ganzen Tag!"); |  | ||||||
|             vBox.getChildren().add(fullDayLabel); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|  |         eventPane.getDeleteBtn().setOnAction(e -> { | ||||||
|  |             DataController dataController = new DataController(); | ||||||
|  |             try { | ||||||
|  |                 dataController.deleteEvent(event.getOwnerId(), event.getId(), event.getDate()); | ||||||
|  |             } catch (HttpRequestException ex) { | ||||||
|  |                 new Alert(Alert.AlertType.ERROR, ex.getMessage()).showAndWait(); | ||||||
|  |             } | ||||||
|  |             updateEvents(); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|         LocalDateTime eventDate = event.getDate(); |         LocalDateTime eventDate = event.getDate(); | ||||||
|  |         int day = (int) Duration.between( | ||||||
|         int day = (int) Duration.between(weekStartDateTime.toLocalDate().atStartOfDay(), eventDate.toLocalDate().atStartOfDay()).toDays(); |                 weekStartDateTime.toLocalDate().atStartOfDay(), eventDate.toLocalDate().atStartOfDay()).toDays(); | ||||||
|  |  | ||||||
|         if (day >= 0 && day < 7) { |         if (day >= 0 && day < 7) { | ||||||
|             dayVBoxes[day].getChildren().add(vBox); |             dayVBoxes[day].getChildren().add(eventPane); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private String formatTime(String time) { |  | ||||||
|         String[] timeArr = time.split(":"); |  | ||||||
|         if (timeArr.length > 2) { |  | ||||||
|             return timeArr[0] + ":" + timeArr[1]; |  | ||||||
|         } |  | ||||||
|         return time; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private void setDates() { |     private void setDates() { | ||||||
|         DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("LLLL yyyy"); |         DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("LLLL yyyy"); | ||||||
|         DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("E dd.MM"); |         DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("E dd.MM"); | ||||||
| @@ -193,4 +192,39 @@ public class MainController { | |||||||
|         LabelMonth.setText(dateFormatter.format(weekStartDateTime)); |         LabelMonth.setText(dateFormatter.format(weekStartDateTime)); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private void createBtns(){ | ||||||
|  |         Button addBtn = SvgBtnCreator.createAddBtn(); | ||||||
|  |         addBtn.setOnAction(e -> onAddBtnClick()); | ||||||
|  |         addBtn.getStyleClass().add("main-btn"); | ||||||
|  |         leftNav.getChildren().add(addBtn); | ||||||
|  |  | ||||||
|  |         Button settingsBtn = SvgBtnCreator.createSettingBtn(); | ||||||
|  |         settingsBtn.setOnAction(e -> onSettingBtnClick()); | ||||||
|  |         settingsBtn.getStyleClass().add("main-btn"); | ||||||
|  |         leftNav.getChildren().add(settingsBtn); | ||||||
|  |  | ||||||
|  |         Button logoutBtn = SvgBtnCreator.createLogoutBtn(); | ||||||
|  |         logoutBtn.setOnAction(this::onLogoutBtnClick); | ||||||
|  |         logoutBtn.getStyleClass().add("main-btn"); | ||||||
|  |         leftNav.getChildren().add(logoutBtn); | ||||||
|  |  | ||||||
|  |         Button backBtn = SvgBtnCreator.createBackBtn(); | ||||||
|  |         backBtn.setOnAction(e -> onBackClick()); | ||||||
|  |         backBtn.getStyleClass().add("navBtn"); | ||||||
|  |         GridPane.setColumnIndex(backBtn, 1); | ||||||
|  |         buttonBox.getChildren().add(backBtn); | ||||||
|  |  | ||||||
|  |         Button todayBtn = SvgBtnCreator.createTodayBtn(); | ||||||
|  |         todayBtn.setOnAction(e -> onTodayClick()); | ||||||
|  |         todayBtn.getStyleClass().add("navBtn"); | ||||||
|  |         GridPane.setColumnIndex(todayBtn, 2); | ||||||
|  |         buttonBox.getChildren().add(todayBtn); | ||||||
|  |  | ||||||
|  |         Button nextBtn = SvgBtnCreator.createNextBtn(); | ||||||
|  |         nextBtn.setOnAction(e -> onNextClick()); | ||||||
|  |         nextBtn.getStyleClass().add("navBtn"); | ||||||
|  |         GridPane.setColumnIndex(nextBtn, 3); | ||||||
|  |         buttonBox.getChildren().add(nextBtn); | ||||||
|  |     } | ||||||
| } | } | ||||||
							
								
								
									
										139
									
								
								client/app/src/main/java/main/OptionController.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								client/app/src/main/java/main/OptionController.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,139 @@ | |||||||
|  | // Marco Kühn // | ||||||
|  | package main; | ||||||
|  |  | ||||||
|  | import com.jfoenix.controls.*; | ||||||
|  | import config.Config; | ||||||
|  | import config.ConfigLoader; | ||||||
|  | import container.HttpRequest; | ||||||
|  | import helper.HttpRequestException; | ||||||
|  | import javafx.collections.FXCollections; | ||||||
|  | import javafx.collections.ObservableList; | ||||||
|  | import javafx.event.ActionEvent; | ||||||
|  | import javafx.fxml.FXML; | ||||||
|  | import javafx.fxml.FXMLLoader; | ||||||
|  | import javafx.scene.Node; | ||||||
|  | import javafx.scene.control.Alert; | ||||||
|  | import javafx.scene.control.ButtonType; | ||||||
|  | import javafx.scene.control.Label; | ||||||
|  | import javafx.scene.layout.GridPane; | ||||||
|  | import javafx.stage.Stage; | ||||||
|  | import container.DataController; | ||||||
|  | import container.User; | ||||||
|  | import users.EditUserController; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Optional; | ||||||
|  |  | ||||||
|  | public class OptionController { | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     private JFXButton updateUserBtn; | ||||||
|  |     @FXML | ||||||
|  |     private JFXButton deleteUserBtn; | ||||||
|  |     @FXML | ||||||
|  |     private JFXButton createUserBtn; | ||||||
|  |     @FXML | ||||||
|  |     private JFXToggleButton saveLoginTBtn; | ||||||
|  |     @FXML | ||||||
|  |     private Label labelError; | ||||||
|  |     @FXML | ||||||
|  |     private GridPane mainGrid; | ||||||
|  |  | ||||||
|  |     private JFXComboBox<String> comboBox; | ||||||
|  |     private DataController dataController; | ||||||
|  |     private List<User> users; | ||||||
|  |     private Config config; | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     public void initialize(){ | ||||||
|  |         dataController = new DataController(); | ||||||
|  |         try{ | ||||||
|  |            users = dataController.getAllUser(); | ||||||
|  |         } catch (HttpRequestException e){ | ||||||
|  |            users = new ArrayList<>(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         ObservableList<String> observableUserList = FXCollections.observableArrayList(); | ||||||
|  |         for (User user: users) { | ||||||
|  |             observableUserList.add(user.getLogin()); | ||||||
|  |         } | ||||||
|  |         comboBox = new JFXComboBox<>(observableUserList); | ||||||
|  |         comboBox.getStyleClass().add("comboBox"); | ||||||
|  |         mainGrid.add(comboBox, 2,2); | ||||||
|  |  | ||||||
|  |         config = ConfigLoader.load(); | ||||||
|  |         if(config == null){ | ||||||
|  |             config = new Config(false, -1, ""); | ||||||
|  |         } | ||||||
|  |         saveLoginTBtn.setSelected(config.isSaveLogin()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void onBackBtnClick(ActionEvent actionEvent) { | ||||||
|  |         Stage stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow(); | ||||||
|  |         stage.close(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void onCreateBtnClick(ActionEvent actionEvent) { | ||||||
|  |         MainApplication.loadScene( | ||||||
|  |                 "User erstellen", | ||||||
|  |                 "../users/create-user.fxml", | ||||||
|  |                 "../users/create-user.css", | ||||||
|  |                 800, | ||||||
|  |                 650 | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void onUpdateBtnClick(ActionEvent actionEvent) { | ||||||
|  |         int editIndex = comboBox.getSelectionModel().getSelectedIndex(); | ||||||
|  |  | ||||||
|  |         if(editIndex < 0 || editIndex >= users.size()) return; | ||||||
|  |  | ||||||
|  |         MainApplication.loadScene( | ||||||
|  |                 "User bearbeiten", | ||||||
|  |                 "../users/edit-user.fxml", | ||||||
|  |                 "../users/create-user.css", | ||||||
|  |                 800, | ||||||
|  |                 650, | ||||||
|  |                 fxmlLoader -> { | ||||||
|  |                     EditUserController editUserController = fxmlLoader.getController(); | ||||||
|  |                     editUserController.setCurrentUser(users.get(editIndex)); | ||||||
|  |                 } | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void onDeleteBtnClick(ActionEvent actionEvent) { | ||||||
|  |         Alert alert = new Alert(Alert.AlertType.CONFIRMATION, "Wirklich löschen?"); | ||||||
|  |         Optional<ButtonType> result = alert.showAndWait(); | ||||||
|  |         if(result.isPresent() && result.get() == ButtonType.OK){ | ||||||
|  |             int removeIndex = comboBox.getSelectionModel().getSelectedIndex(); | ||||||
|  |             try { | ||||||
|  |                 dataController.deleteUser(users.get(removeIndex)); | ||||||
|  |             } catch (HttpRequestException e) { | ||||||
|  |                 Alert alert1 = new Alert(Alert.AlertType.ERROR, e.getMessage()); | ||||||
|  |                 alert1.showAndWait(); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             comboBox.getItems().remove(removeIndex); | ||||||
|  |             users.remove(removeIndex); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void setUserAtController(FXMLLoader fxmlLoader){ | ||||||
|  |         int editIndex = comboBox.getSelectionModel().getSelectedIndex(); | ||||||
|  |         EditUserController editUserController = fxmlLoader.getController(); | ||||||
|  |         editUserController.setCurrentUser(users.get(editIndex)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void toggledBtn(ActionEvent actionEvent) { | ||||||
|  |         config.setSaveLogin(saveLoginTBtn.isSelected()); | ||||||
|  |         if(config.isSaveLogin()){ | ||||||
|  |             config.setId(DataController.USER_ID); | ||||||
|  |             config.setToken(HttpRequest.TOKEN); | ||||||
|  |         } else { | ||||||
|  |             config.setId(-1); | ||||||
|  |             config.setToken(""); | ||||||
|  |         } | ||||||
|  |         ConfigLoader.save(config); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										39
									
								
								client/app/src/main/java/ui/DayPane.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								client/app/src/main/java/ui/DayPane.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | |||||||
|  | //Marc Beyer// | ||||||
|  | package ui; | ||||||
|  |  | ||||||
|  | import javafx.scene.control.Label; | ||||||
|  | import javafx.scene.control.ScrollPane; | ||||||
|  | import javafx.scene.layout.VBox; | ||||||
|  |  | ||||||
|  | public class DayPane extends ScrollPane { | ||||||
|  |  | ||||||
|  |     private final Label dayLabel; | ||||||
|  |     private final VBox dayVBox; | ||||||
|  |  | ||||||
|  |     public DayPane() { | ||||||
|  |         dayLabel = new Label(); | ||||||
|  |         dayLabel.setMaxHeight(Double.MAX_VALUE); | ||||||
|  |         dayLabel.setMaxWidth(Double.MAX_VALUE); | ||||||
|  |         dayLabel.getStyleClass().add("labelDays"); | ||||||
|  |  | ||||||
|  |         dayVBox = new VBox(); | ||||||
|  |  | ||||||
|  |         dayVBox.getStyleClass().add("vBoxDays"); | ||||||
|  |         dayVBox.setSpacing(10); | ||||||
|  |  | ||||||
|  |         setContent(dayVBox); | ||||||
|  |         setFitToWidth(true); | ||||||
|  |         setFitToHeight(true); | ||||||
|  |         setHbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); | ||||||
|  |         getStyleClass().add("scrollDays"); | ||||||
|  |         getStyleClass().add("scrollDays"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Label getDayLabel() { | ||||||
|  |         return dayLabel; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public VBox getDayVBox() { | ||||||
|  |         return dayVBox; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										84
									
								
								client/app/src/main/java/ui/EventPane.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								client/app/src/main/java/ui/EventPane.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | |||||||
|  | //Marc Beyer, Marco Kühn// | ||||||
|  | package ui; | ||||||
|  |  | ||||||
|  | import container.Event; | ||||||
|  | import javafx.geometry.Pos; | ||||||
|  | import javafx.scene.Group; | ||||||
|  | import javafx.scene.control.Button; | ||||||
|  | import javafx.scene.control.Label; | ||||||
|  | import javafx.scene.layout.HBox; | ||||||
|  | import javafx.scene.layout.VBox; | ||||||
|  |  | ||||||
|  | public class EventPane extends VBox { | ||||||
|  |  | ||||||
|  |     private Button deleteBtn; | ||||||
|  |     private Button editBtn; | ||||||
|  |  | ||||||
|  |     public EventPane(Event event) { | ||||||
|  |         this.getStyleClass().add("event"); | ||||||
|  |         this.setSpacing(5); | ||||||
|  |  | ||||||
|  |         HBox btnHBox = new HBox(); | ||||||
|  |         btnHBox.setAlignment(Pos.BOTTOM_RIGHT); | ||||||
|  |  | ||||||
|  |         Group svgDel = new Group( | ||||||
|  |                 SvgBtnCreator.createPath("M0 0h24v24H0z", "transparent", "transparent"), | ||||||
|  |                 SvgBtnCreator.createPath("M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z", | ||||||
|  |                         "white", "gray") | ||||||
|  |         ); | ||||||
|  |         deleteBtn = SvgBtnCreator.createBtn(svgDel, 24, "", "Löschen des Termins"); | ||||||
|  |         deleteBtn.getStyleClass().add("deleteEventBtn"); | ||||||
|  |  | ||||||
|  |         Group svgEdit = new Group( | ||||||
|  |                 SvgBtnCreator.createPath("M0 0h24v24H0z", "transparent", "transparent"), | ||||||
|  |                 SvgBtnCreator.createPath("M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z", | ||||||
|  |                         "white", "gray") | ||||||
|  |         ); | ||||||
|  |         editBtn = SvgBtnCreator.createBtn(svgEdit, 24, "", "Bearbeiten des Termins"); | ||||||
|  |         editBtn.getStyleClass().add("editEventBtn"); | ||||||
|  |  | ||||||
|  |         btnHBox.getChildren().add(editBtn); | ||||||
|  |         btnHBox.getChildren().add(deleteBtn); | ||||||
|  |         this.getChildren().add(btnHBox); | ||||||
|  |  | ||||||
|  |         Label nameLabel = new Label(event.getName()); | ||||||
|  |         nameLabel.setWrapText(true); | ||||||
|  |         this.getChildren().add(nameLabel); | ||||||
|  |  | ||||||
|  |         if (event.getStart() != null || event.getEnd() != null) { | ||||||
|  |             String timeStr = (event.getStart() != null ? formatTime(event.getStart()) : "") | ||||||
|  |                     + (event.getEnd() != null ? " - " + formatTime(event.getEnd()) : ""); | ||||||
|  |             Label timeLabel = new Label(timeStr); | ||||||
|  |             this.getChildren().add(timeLabel); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         Label typeLabel = new Label("Wer: " + event.getOwnerName()); | ||||||
|  |         this.getChildren().add(typeLabel); | ||||||
|  |  | ||||||
|  |         Label prioLabel = new Label("Priorität: " + event.getPriority()); | ||||||
|  |         this.getChildren().add(prioLabel); | ||||||
|  |  | ||||||
|  |         if (event.isFullDay()) { | ||||||
|  |             Label fullDayLabel = new Label("Dieser Termin bockiert den ganzen Tag!"); | ||||||
|  |             fullDayLabel.setWrapText(true); | ||||||
|  |             this.getChildren().add(fullDayLabel); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Button getDeleteBtn() { | ||||||
|  |         return deleteBtn; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Button getEditBtn() { | ||||||
|  |         return editBtn; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     private String formatTime(String time) { | ||||||
|  |         String[] timeArr = time.split(":"); | ||||||
|  |         if (timeArr.length > 2) { | ||||||
|  |             return timeArr[0] + ":" + timeArr[1]; | ||||||
|  |         } | ||||||
|  |         return time; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										92
									
								
								client/app/src/main/java/ui/SvgBtnCreator.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								client/app/src/main/java/ui/SvgBtnCreator.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,92 @@ | |||||||
|  | //Marco Kühn// | ||||||
|  | package ui; | ||||||
|  |  | ||||||
|  | import javafx.geometry.Bounds; | ||||||
|  | import javafx.scene.Group; | ||||||
|  | import javafx.scene.control.*; | ||||||
|  | import javafx.scene.shape.SVGPath; | ||||||
|  |  | ||||||
|  | public class SvgBtnCreator { | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     public static Button createBtn(Group group, int svgSize, String styleClass, String toolTip) { | ||||||
|  |         Button btn = new Button(); | ||||||
|  |  | ||||||
|  |         Bounds boundsDel = group.getBoundsInParent(); | ||||||
|  |         double scaleDel = Math.min(svgSize / boundsDel.getWidth(), svgSize / boundsDel.getHeight()); | ||||||
|  |         group.setScaleX(scaleDel); | ||||||
|  |         group.setScaleY(scaleDel); | ||||||
|  |         btn.setGraphic(group); | ||||||
|  |         btn.setMaxSize(svgSize, svgSize); | ||||||
|  |         btn.setMinSize(svgSize, svgSize); | ||||||
|  |         btn.setContentDisplay(ContentDisplay.GRAPHIC_ONLY); | ||||||
|  |         btn.getStyleClass().add(styleClass); | ||||||
|  |         Tooltip tooltip = new Tooltip(toolTip); | ||||||
|  |         btn.setTooltip(tooltip); | ||||||
|  |  | ||||||
|  |         return btn; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static SVGPath createPath(String d, String fill, String hoverFill) { | ||||||
|  |         SVGPath path = new SVGPath(); | ||||||
|  |         path.getStyleClass().add("svg"); | ||||||
|  |         path.setContent(d); | ||||||
|  |         path.setStyle("-fill:" + fill + ";-hover-fill:"+hoverFill+';'); | ||||||
|  |         return path; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static Button createAddBtn(){ | ||||||
|  |         Group svgAdd = new Group( | ||||||
|  |                 createPath("M0 0h24v24H0z", "transparent", "transparent"), | ||||||
|  |                 createPath("M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z", | ||||||
|  |                         "white", "gray") | ||||||
|  |         ); | ||||||
|  |         return createBtn(svgAdd, 40, "main-btn", "Erstellt einen neuen Termin"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static Button createSettingBtn(){ | ||||||
|  |         Group svgSettings = new Group( | ||||||
|  |                 createPath("M0 0h24v24H0V0z", "transparent", "transparent"), | ||||||
|  |                 createPath("M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z", | ||||||
|  |                         "white", "gray") | ||||||
|  |         ); | ||||||
|  |         return createBtn(svgSettings, 40, "main-btn", "Öffnet die Einstellungen"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static Button createLogoutBtn(){ | ||||||
|  |         Group svgLogout = new Group( | ||||||
|  |                 createPath("M0 0h24v24H0z", "transparent", "transparent"), | ||||||
|  |                 createPath("M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z", | ||||||
|  |                         "white", "gray") | ||||||
|  |         ); | ||||||
|  |         return createBtn(svgLogout, 40, "main-btn", "Abmelden"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static Button createBackBtn(){ | ||||||
|  |         Group svgBack = new Group( | ||||||
|  |                 createPath("M0 0h24v24H0z", "transparent", "transparent"), | ||||||
|  |                 createPath("M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z", | ||||||
|  |                         "white", "lightgray") | ||||||
|  |         ); | ||||||
|  |         return createBtn(svgBack, 40, "navBtn", "Zeigt die vorherige Woche"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static Button createTodayBtn(){ | ||||||
|  |         Group svgToday = new Group( | ||||||
|  |                 createPath("M0 0h24v24H0z", "transparent", "transparent"), | ||||||
|  |                 createPath("M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z", | ||||||
|  |                         "white", "lightgray") | ||||||
|  |         ); | ||||||
|  |         return createBtn(svgToday, 40, "navBtn", "Zeigt die aktuelle Woche"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static Button createNextBtn(){ | ||||||
|  |         Group svgNext = new Group( | ||||||
|  |                 createPath("M0 0h24v24H0z", "transparent", "transparent"), | ||||||
|  |                 createPath("M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z", | ||||||
|  |                         "white", "lightgray") | ||||||
|  |         ); | ||||||
|  |         return createBtn(svgNext, 40, "navBtn", "Zeigt die nächste Woche"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -1,12 +1,99 @@ | |||||||
|  | //Alex Rechtin// | ||||||
| package users; | package users; | ||||||
|  |  | ||||||
| import javafx.scene.control.CheckBox; | import com.jfoenix.controls.JFXPasswordField; | ||||||
| import javafx.scene.control.TextField; | import com.jfoenix.controls.JFXTextField; | ||||||
|  | import com.jfoenix.controls.JFXToggleButton; | ||||||
|  | import helper.HttpRequestException; | ||||||
|  | import javafx.event.ActionEvent; | ||||||
|  | import javafx.fxml.FXML; | ||||||
|  | import javafx.scene.Node; | ||||||
|  | import javafx.scene.control.Label; | ||||||
|  | import javafx.stage.Stage; | ||||||
|  | import container.DataController; | ||||||
|  | import container.User; | ||||||
|  |  | ||||||
|  | import java.util.Objects; | ||||||
|  |  | ||||||
| public class CreateUserController { | public class CreateUserController { | ||||||
|  |  | ||||||
|     public TextField textName; |     @FXML | ||||||
|     public TextField textPassword; |     protected JFXTextField textName; | ||||||
|     public TextField textPasswordSecond; |     @FXML | ||||||
|     public CheckBox checkBoxIsAdmin; |     protected JFXPasswordField textPassword; | ||||||
|  |     @FXML | ||||||
|  |     protected JFXPasswordField textPasswordSecond; | ||||||
|  |     @FXML | ||||||
|  |     protected JFXToggleButton checkButtonIsAdmin; | ||||||
|  |     @FXML | ||||||
|  |     protected JFXTextField textLogin; | ||||||
|  |     @FXML | ||||||
|  |     protected JFXTextField textForename; | ||||||
|  |     @FXML | ||||||
|  |     protected Label labelError; | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     protected void createUser(ActionEvent event) { | ||||||
|  |         if (validateNameAndLogin() || validatePassword()) return; | ||||||
|  |  | ||||||
|  |         User user = new User(); | ||||||
|  |         user.setLogin(textLogin.getText().trim()); | ||||||
|  |         user.setForename(textForename.getText().trim()); | ||||||
|  |         user.setName(textName.getText().trim()); | ||||||
|  |         user.setPassword(textPassword.getText().trim()); | ||||||
|  |         user.setAdmin(checkButtonIsAdmin.isSelected()); | ||||||
|  |  | ||||||
|  |         try { | ||||||
|  |             sendHttpRequest(user); | ||||||
|  |         } catch (HttpRequestException e) { | ||||||
|  |             labelError.setText(e.getMessage()); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); | ||||||
|  |         stage.close(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected boolean validatePassword() { | ||||||
|  |         if (textPassword.getText().trim().isEmpty()) { | ||||||
|  |             labelError.setText("Bitte Passwort eingeben!"); | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |         if (textPassword.getText().trim().length() < 8) { | ||||||
|  |             labelError.setText("Das Passwort muss mindestens 8 Zeichen lang sein!"); | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |         if (!Objects.equals(textPassword.getText(), textPasswordSecond.getText())){ | ||||||
|  |             labelError.setText("Passwörter stimmen nicht überein!"); | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected boolean validateNameAndLogin() { | ||||||
|  |         if (textLogin.getText().trim().isEmpty()){ | ||||||
|  |             labelError.setText("Bitte Login Namen angeben"); | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |         if (textForename.getText().trim().isEmpty()) { | ||||||
|  |             labelError.setText("Bitte Vornamen eingeben!"); | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |         if (textName.getText().trim().isEmpty()) { | ||||||
|  |             labelError.setText("Bitte Nachnamen eingeben!"); | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected void sendHttpRequest(User user) throws HttpRequestException { | ||||||
|  |         DataController dataController = new DataController(); | ||||||
|  |         dataController.createUser(user); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     protected void abortBtnClick(ActionEvent event) { | ||||||
|  |         Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); | ||||||
|  |         stage.close(); | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										69
									
								
								client/app/src/main/java/users/EditUserController.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								client/app/src/main/java/users/EditUserController.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | |||||||
|  | // Marc Beyer // | ||||||
|  | package users; | ||||||
|  |  | ||||||
|  | import container.DataController; | ||||||
|  | import container.User; | ||||||
|  | import helper.HttpRequestException; | ||||||
|  | import javafx.event.ActionEvent; | ||||||
|  | import javafx.scene.Node; | ||||||
|  | import javafx.scene.control.Alert; | ||||||
|  | import javafx.stage.Stage; | ||||||
|  |  | ||||||
|  | public class EditUserController extends CreateUserController{ | ||||||
|  |     private User currentUser; | ||||||
|  |  | ||||||
|  |     public User getCurrentUser() { | ||||||
|  |         return currentUser; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setCurrentUser(User currentUser) { | ||||||
|  |         this.currentUser = currentUser; | ||||||
|  |  | ||||||
|  |         textForename.setText(currentUser.getForename()); | ||||||
|  |         textName.setText(currentUser.getName()); | ||||||
|  |         textLogin.setText(currentUser.getLogin()); | ||||||
|  |         checkButtonIsAdmin.setSelected(currentUser.isAdmin()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void createUser(ActionEvent event){ | ||||||
|  |         if (validateNameAndLogin()) return; | ||||||
|  |  | ||||||
|  |         User user = new User(); | ||||||
|  |  | ||||||
|  |         if(!textPassword.getText().trim().isEmpty() || !textPasswordSecond.getText().trim().isEmpty()){ | ||||||
|  |             if (validatePassword()) return; | ||||||
|  |             user.setPassword(textPassword.getText().trim()); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         user.setUserId(currentUser.getUserId()); | ||||||
|  |         user.setLogin(textLogin.getText().trim()); | ||||||
|  |         user.setForename(textForename.getText().trim()); | ||||||
|  |         user.setName(textName.getText().trim()); | ||||||
|  |         user.setAdmin(checkButtonIsAdmin.isSelected()); | ||||||
|  |  | ||||||
|  |         try { | ||||||
|  |             sendHttpRequest(user); | ||||||
|  |         } catch (HttpRequestException e) { | ||||||
|  |             labelError.setText(e.getMessage()); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if(currentUser.getUserId() == DataController.USER_ID){ | ||||||
|  |             Alert alert = new Alert( | ||||||
|  |                     Alert.AlertType.WARNING, | ||||||
|  |                     "Bitte starte das Programm neu um die Änderungen anzuwenden." | ||||||
|  |             ); | ||||||
|  |             alert.showAndWait(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); | ||||||
|  |         stage.close(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void sendHttpRequest(User user) throws HttpRequestException { | ||||||
|  |         DataController dataController = new DataController(); | ||||||
|  |         dataController.editUser(user); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,4 +0,0 @@ | |||||||
| package users; |  | ||||||
|  |  | ||||||
| public class LoginControler { |  | ||||||
| } |  | ||||||
							
								
								
									
										51
									
								
								client/app/src/main/java/users/LoginController.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								client/app/src/main/java/users/LoginController.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | //Alex Rechtin// | ||||||
|  | package users; | ||||||
|  |  | ||||||
|  | import com.jfoenix.controls.*; | ||||||
|  | import javafx.event.ActionEvent; | ||||||
|  | import javafx.fxml.FXML; | ||||||
|  | import javafx.scene.Node; | ||||||
|  | import javafx.scene.control.Label; | ||||||
|  | import javafx.stage.Stage; | ||||||
|  | import container.DataController; | ||||||
|  |  | ||||||
|  | public class LoginController { | ||||||
|  |     @FXML | ||||||
|  |     private JFXTextField userField; | ||||||
|  |     @FXML | ||||||
|  |     private JFXPasswordField passField; | ||||||
|  |     @FXML | ||||||
|  |     private Label userErrLabel; | ||||||
|  |     @FXML | ||||||
|  |     private Label passErrLabel; | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     protected void login(ActionEvent event) { | ||||||
|  |         if (userField.getText().trim().isEmpty()) { | ||||||
|  |             userErrLabel.setText("Bitte Usernamen eingeben!"); | ||||||
|  |             passErrLabel.setText(""); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         if (passField.getText().trim().isEmpty()) { | ||||||
|  |             userErrLabel.setText(""); | ||||||
|  |             passErrLabel.setText("Bitte Passwort eingeben!"); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         DataController dataController = new DataController(); | ||||||
|  |         if (!dataController.login(userField.getText(), passField.getText())) { | ||||||
|  |             userErrLabel.setText("Name und Passwort passen nicht zueinander!"); | ||||||
|  |             passErrLabel.setText("Name und Passwort passen nicht zueinander!"); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); | ||||||
|  |         stage.close(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     protected void abortBtnClick(ActionEvent event) { | ||||||
|  |         Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); | ||||||
|  |         stage.close(); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,24 +1,38 @@ | |||||||
|  | /*Marco Kühn*/ | ||||||
|  | * { | ||||||
|  |    -fx-dark-background-color: #3E415F; | ||||||
|  |  | ||||||
|  |    -fx-darkest-background-color: #2B2D42; | ||||||
|  |  | ||||||
|  |    -fx-bright-background-color: #8D99AE; | ||||||
|  |    -fx-brighter-background-color: #ff5555; | ||||||
|  |    -fx-brightest-background-color: #ffffff; | ||||||
|  |  | ||||||
|  |    -fx-bright-border-color: #B0B0B0; | ||||||
|  |    -fx-brighter-text-color: #ffffff; | ||||||
|  | } | ||||||
|  |  | ||||||
| GridPane{ | GridPane{ | ||||||
|     -fx-background-color: #3E415F; |     -fx-background-color: -fx-dark-background-color; | ||||||
|     -fx-padding: 20px; |     -fx-padding: 20px; | ||||||
|     -fx-font-size: 20px; |     -fx-font-size: 20px; | ||||||
|     -fx-font-family: Segoe UI; |     -fx-font-family: Segoe UI; | ||||||
|  |  | ||||||
|     -fx-border-insets: 1; |     -fx-border-insets: 1; | ||||||
|     -fx-border-color: #B0B0B0; |     -fx-border-color: -fx-bright-border-color; | ||||||
|     -fx-border-style: solid; |     -fx-border-style: solid; | ||||||
|     -fx-border-width: 2; |     -fx-border-width: 2; | ||||||
|     -fx-effect: dropshadow(three-pass-box, rgba(100, 100, 100, 1), 24, 0.5, 0, 0); |     -fx-effect: dropshadow(three-pass-box, rgba(100, 100, 100, 1), 24, 0.5, 0, 0); | ||||||
| } | } | ||||||
|  |  | ||||||
| Label{ | Label{ | ||||||
|     -fx-text-fill: white; |     -fx-text-fill: -fx-brighter-text-color; | ||||||
|     -fx-max-width: 150px; |     -fx-max-width: 150px; | ||||||
|     -fx-min-width: 150px; |     -fx-min-width: 150px; | ||||||
| } | } | ||||||
|  |  | ||||||
| .mainLabel{ | .mainLabel{ | ||||||
|     -fx-background-color: #8D99AE; |     -fx-background-color: -fx-bright-background-color; | ||||||
|     -fx-padding: 10px; |     -fx-padding: 10px; | ||||||
|     -fx-max-width: 200px; |     -fx-max-width: 200px; | ||||||
|     -fx-min-width: 200px; |     -fx-min-width: 200px; | ||||||
| @@ -28,8 +42,52 @@ Label{ | |||||||
|  |  | ||||||
| .inputField{ | .inputField{ | ||||||
|     -fx-padding: 10px; |     -fx-padding: 10px; | ||||||
|  |     -fx-background-color: -fx-brightest-background-color; | ||||||
| } | } | ||||||
|  |  | ||||||
| .mainButton{ | .mainButton{ | ||||||
|     -fx-font-weight: bold; |     -fx-font-weight: bold; | ||||||
|  |     -fx-background-color: -fx-brightest-background-color; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | JFXButton{ | ||||||
|  |     -fx-background-color: -fx-brightest-background-color; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #labelError{ | ||||||
|  |     -fx-font-weight: bold; | ||||||
|  |     -fx-max-width: 1000px; | ||||||
|  |     -fx-text-fill: -fx-brighter-background-color; | ||||||
|  |     -fx-padding: 16px; | ||||||
|  |     -fx-min-height: 140px; | ||||||
|  |     -fx-max-height: 400px; | ||||||
|  |     -fx-wrap-text: true; | ||||||
|  |     -fx-font-size: 16px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .inputDate{ | ||||||
|  |     -fx-background-color: -fx-brightest-background-color; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .comboBox{ | ||||||
|  |     -fx-background-color: -fx-brightest-background-color; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .timePicker{ | ||||||
|  |     -fx-background-color: -fx-brightest-background-color; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .jfx-time-picker .date-picker-popup{ | ||||||
|  |     -fx-max-width: 230px; | ||||||
|  |     -fx-min-width: 230px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .jfx-time-picker .date-picker-popup > * > .spinner > .label { | ||||||
|  |     -fx-max-width: 55px; | ||||||
|  |     -fx-min-width: 55px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .jfx-date-picker .date-picker-popup > * > .spinner > .label { | ||||||
|  |      -fx-max-width: 300px; | ||||||
|  |      -fx-min-width: 300px; | ||||||
|  |  } | ||||||
| @@ -1,11 +1,16 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  |  | ||||||
|  | <!-- Marco Kühn --> | ||||||
|  |  | ||||||
| <?import javafx.scene.control.*?> | <?import javafx.scene.control.*?> | ||||||
| <?import javafx.scene.layout.*?> | <?import javafx.scene.layout.*?> | ||||||
|  |  | ||||||
| <?import javafx.collections.FXCollections?> | <?import javafx.collections.FXCollections?> | ||||||
| <?import java.lang.String?> | <?import java.lang.String?> | ||||||
| <GridPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.CreateEventController"> | <?import com.jfoenix.controls.*?> | ||||||
|  |  | ||||||
|  | <GridPane fx:id="mainGrid" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" | ||||||
|  |           fx:controller="events.CreateEventController"> | ||||||
|  |  | ||||||
|     <columnConstraints> |     <columnConstraints> | ||||||
|         <ColumnConstraints/> |         <ColumnConstraints/> | ||||||
| @@ -13,48 +18,49 @@ | |||||||
|         <ColumnConstraints/> |         <ColumnConstraints/> | ||||||
|     </columnConstraints> |     </columnConstraints> | ||||||
|     <rowConstraints> |     <rowConstraints> | ||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|     </rowConstraints> |     </rowConstraints> | ||||||
|  |  | ||||||
|     <Label styleClass="mainLabel">Termin anlegen</Label> |     <Label styleClass="mainLabel">Termin anlegen</Label> | ||||||
|  |  | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="1">Datum:</Label> |     <Label styleClass="inputLabel" GridPane.rowIndex="1">Titel:</Label> | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="2">Titel:</Label> |     <Label styleClass="inputLabel" GridPane.rowIndex="2">Datum:</Label> | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="3">Von:</Label> |     <Label styleClass="inputLabel" GridPane.rowIndex="3">Von:</Label> | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="4">Bis:</Label> |     <Label styleClass="inputLabel" GridPane.rowIndex="4">Bis:</Label> | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="5">Typ:</Label> |  | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="6">Priorität:</Label> |  | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="7">Ganztägig:</Label> |  | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="8">Privat:</Label> |  | ||||||
|  |  | ||||||
|     <DatePicker fx:id="datePickerDate" GridPane.columnIndex="1" GridPane.rowIndex="1" maxWidth="400" minWidth="400"/> |     <Label styleClass="inputLabel" GridPane.rowIndex="5">Priorität:</Label> | ||||||
|     <TextField fx:id="textName" GridPane.columnIndex="1" GridPane.rowIndex="2" maxWidth="400" minWidth="400"/> |     <Label styleClass="inputLabel" GridPane.rowIndex="6">Ganztägig:</Label> | ||||||
|     <TextField fx:id="textStart" GridPane.columnIndex="1" GridPane.rowIndex="3" maxWidth="400" minWidth="400"/> |     <Label styleClass="inputLabel" GridPane.rowIndex="7">Privat:</Label> | ||||||
|     <TextField fx:id="textEnd" GridPane.columnIndex="1" GridPane.rowIndex="4" maxWidth="400" minWidth="400"/> |  | ||||||
|     <ComboBox fx:id="ComboBoxTyp" GridPane.columnIndex="1" GridPane.rowIndex="5" maxWidth="400" minWidth="400"/> |     <JFXTextField styleClass="inputField" fx:id="textName" GridPane.columnIndex="1" GridPane.rowIndex="1" maxWidth="400" minWidth="400"/> | ||||||
|     <ComboBox fx:id="ComboBoxPriotity" GridPane.columnIndex="1" GridPane.rowIndex="6" maxWidth="200" minWidth="200"> |     <JFXDatePicker styleClass="inputDate" fx:id="datePickerDate" GridPane.columnIndex="1" GridPane.rowIndex="2" maxWidth="200" minWidth="200"/> | ||||||
|  |     <JFXTimePicker styleClass="timePicker" fx:id="timeStart" GridPane.columnIndex="1" GridPane.rowIndex="3" maxWidth="200" minWidth="200"/> | ||||||
|  |     <JFXTimePicker styleClass="timePicker" fx:id="timeEnd" GridPane.columnIndex="1" GridPane.rowIndex="4" maxWidth="200" minWidth="200"/> | ||||||
|  |  | ||||||
|  |     <JFXComboBox fx:id="comboBoxPriority" styleClass="comboBox" GridPane.columnIndex="1" GridPane.rowIndex="5" maxWidth="200" minWidth="200"> | ||||||
|         <items> |         <items> | ||||||
|             <FXCollections fx:factory="observableArrayList"> |             <FXCollections fx:factory="observableArrayList"> | ||||||
|                 <String fx:value="gering" /> |                 <String fx:value="gering"/> | ||||||
|                 <String fx:value="mittel" /> |                 <String fx:value="mittel"/> | ||||||
|                 <String fx:value="hoch" /> |                 <String fx:value="hoch"/> | ||||||
|             </FXCollections> |             </FXCollections> | ||||||
|         </items> |         </items> | ||||||
|     </ComboBox> |     </JFXComboBox> | ||||||
|     <CheckBox fx:id="checkBoxIsFullDay" GridPane.columnIndex="1" GridPane.rowIndex="7"/> |     <JFXToggleButton styleClass="checkbox" fx:id="toggleBtnIsFullDay" GridPane.columnIndex="1" GridPane.rowIndex="6"/> | ||||||
|     <CheckBox fx:id="checkBoxIsPrivate" GridPane.columnIndex="1" GridPane.rowIndex="8"/> |     <JFXToggleButton styleClass="checkbox"  fx:id="toggleBtnIsPrivate" GridPane.columnIndex="1" GridPane.rowIndex="7"/> | ||||||
|  |     <Label fx:id="labelError" GridPane.columnIndex="1" GridPane.rowIndex="8"/> | ||||||
|  |  | ||||||
|     <HBox GridPane.columnIndex="1" GridPane.rowIndex="9" GridPane.columnSpan="2"  alignment="CENTER_RIGHT"> |     <HBox GridPane.columnIndex="1" GridPane.rowIndex="9" GridPane.columnSpan="2" alignment="CENTER_RIGHT"> | ||||||
|         <Button onAction="#abortBtnClick" maxWidth="150" minWidth="150" >Abbrechen</Button> |         <JFXButton onAction="#abortBtnClick" maxWidth="150" minWidth="150">Abbrechen</JFXButton> | ||||||
|         <Button styleClass="mainButton" onAction="#createBtnClick" maxWidth="150" minWidth="150">Anlegen</Button> |         <JFXButton styleClass="mainButton" onAction="#createBtnClick" maxWidth="150" minWidth="150">Anlegen</JFXButton> | ||||||
|     </HBox> |     </HBox> | ||||||
|  |  | ||||||
| </GridPane> | </GridPane> | ||||||
|   | |||||||
							
								
								
									
										66
									
								
								client/app/src/main/resources/main/edit-event.fxml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								client/app/src/main/resources/main/edit-event.fxml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  |  | ||||||
|  | <!-- Marco Kühn --> | ||||||
|  |  | ||||||
|  | <?import javafx.scene.control.*?> | ||||||
|  | <?import javafx.scene.layout.*?> | ||||||
|  |  | ||||||
|  | <?import javafx.collections.FXCollections?> | ||||||
|  | <?import java.lang.String?> | ||||||
|  | <?import com.jfoenix.controls.*?> | ||||||
|  |  | ||||||
|  | <GridPane fx:id="mainGrid" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" | ||||||
|  |           fx:controller="events.EditEventController"> | ||||||
|  |  | ||||||
|  |     <columnConstraints> | ||||||
|  |         <ColumnConstraints/> | ||||||
|  |         <ColumnConstraints/> | ||||||
|  |         <ColumnConstraints/> | ||||||
|  |     </columnConstraints> | ||||||
|  |     <rowConstraints> | ||||||
|  |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|  |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|  |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|  |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|  |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|  |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|  |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|  |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|  |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|  |     </rowConstraints> | ||||||
|  |  | ||||||
|  |     <Label styleClass="mainLabel">Termin bearbeiten</Label> | ||||||
|  |  | ||||||
|  |     <Label styleClass="inputLabel" GridPane.rowIndex="1">Titel:</Label> | ||||||
|  |     <Label styleClass="inputLabel" GridPane.rowIndex="2">Datum:</Label> | ||||||
|  |     <Label styleClass="inputLabel" GridPane.rowIndex="3">Von:</Label> | ||||||
|  |     <Label styleClass="inputLabel" GridPane.rowIndex="4">Bis:</Label> | ||||||
|  |  | ||||||
|  |     <Label styleClass="inputLabel" GridPane.rowIndex="5">Priorität:</Label> | ||||||
|  |     <Label styleClass="inputLabel" GridPane.rowIndex="6">Ganztägig:</Label> | ||||||
|  |     <Label styleClass="inputLabel" GridPane.rowIndex="7">Privat:</Label> | ||||||
|  |  | ||||||
|  |     <JFXTextField styleClass="inputField" fx:id="textName" GridPane.columnIndex="1" GridPane.rowIndex="1" maxWidth="400" minWidth="400"/> | ||||||
|  |     <JFXDatePicker styleClass="inputDate" fx:id="datePickerDate" GridPane.columnIndex="1" GridPane.rowIndex="2" maxWidth="200" minWidth="200"/> | ||||||
|  |     <JFXTimePicker styleClass="timePicker" fx:id="timeStart" GridPane.columnIndex="1" GridPane.rowIndex="3" maxWidth="200" minWidth="200"/> | ||||||
|  |     <JFXTimePicker styleClass="timePicker" fx:id="timeEnd" GridPane.columnIndex="1" GridPane.rowIndex="4" maxWidth="200" minWidth="200"/> | ||||||
|  |  | ||||||
|  |     <JFXComboBox fx:id="comboBoxPriority" styleClass="comboBox" GridPane.columnIndex="1" GridPane.rowIndex="5" maxWidth="200" minWidth="200"> | ||||||
|  |         <items> | ||||||
|  |             <FXCollections fx:factory="observableArrayList"> | ||||||
|  |                 <String fx:value="gering"/> | ||||||
|  |                 <String fx:value="mittel"/> | ||||||
|  |                 <String fx:value="hoch"/> | ||||||
|  |             </FXCollections> | ||||||
|  |         </items> | ||||||
|  |     </JFXComboBox> | ||||||
|  |     <JFXToggleButton styleClass="checkbox" fx:id="toggleBtnIsFullDay" GridPane.columnIndex="1" GridPane.rowIndex="6"/> | ||||||
|  |     <JFXToggleButton styleClass="checkbox"  fx:id="toggleBtnIsPrivate" GridPane.columnIndex="1" GridPane.rowIndex="7"/> | ||||||
|  |     <Label fx:id="labelError" GridPane.columnIndex="1" GridPane.rowIndex="8"/> | ||||||
|  |  | ||||||
|  |     <HBox GridPane.columnIndex="1" GridPane.rowIndex="9" GridPane.columnSpan="2" alignment="CENTER_RIGHT"> | ||||||
|  |         <JFXButton onAction="#abortBtnClick" maxWidth="150" minWidth="150">Abbrechen</JFXButton> | ||||||
|  |         <JFXButton styleClass="mainButton" onAction="#createBtnClick" maxWidth="150" minWidth="150">Speichern</JFXButton> | ||||||
|  |     </HBox> | ||||||
|  |  | ||||||
|  | </GridPane> | ||||||
| @@ -1,74 +1,125 @@ | |||||||
|  | /*Alex Rechtin, Marco Kühn*/ | ||||||
| * { | * { | ||||||
|    -fx-base-background-color: #2B2D42; |     -fx-dark-background-color: #525E74; | ||||||
|    -fx-base1-background-color: #525E74; |     -fx-darkest-background-color: #2B2D42; | ||||||
|  |  | ||||||
|    -fx-main-border-color: #B0B0B0; |     -fx-bright-background-color: #77859E; | ||||||
|    -fx-main-text-color: #ffffff; |     -fx-brighter-background-color: #282C34 ; | ||||||
|  |     -fx-brightest-background-color: #333333 ; | ||||||
|  |  | ||||||
|  |     -fx-bright-border-color: #B0B0B0; | ||||||
|  |     -fx-brighter-text-color: #ffffff; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| GridPane{ | GridPane{ | ||||||
|     -fx-background-color: -fx-base-background-color; |     -fx-background-color: -fx-darkest-background-color; | ||||||
| } | } | ||||||
|  |  | ||||||
| .main-panel{ | .main-panel{ | ||||||
|     -fx-background-color: #282C34; |     -fx-background-color: -fx-brighter-background-color; | ||||||
| } | } | ||||||
|  |  | ||||||
| .vbox-main{ | .vbox-main{ | ||||||
|     -fx-background-color: #333333; |     -fx-background-color: -fx-brightest-background-color; | ||||||
|     -fx-alignment: top-center; |     -fx-alignment: top-center; | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| .gridCalendar Line{ | .gridCalendar Line{ | ||||||
|     -fx-stroke: -fx-main-border-color; |     -fx-stroke: -fx-bright-border-color; | ||||||
| } | } | ||||||
|  |  | ||||||
| .gridCalender{ | .gridCalender{ | ||||||
|         -fx-background-color: -fx-base-background-color; |         -fx-background-color: -fx-darkest-background-color; | ||||||
|         -fx-min-height: 80px; |         -fx-min-height: 80px; | ||||||
|         -fx-max-height: 80px; |         -fx-max-height: 80px; | ||||||
| } | } | ||||||
|  |  | ||||||
| .labelMonth{ | .labelMonth{ | ||||||
|     -fx-padding: 0 0 0 20; |     -fx-padding: 0 0 0 20; | ||||||
|     -fx-background-color: #77859E; |     -fx-background-color: -fx-bright-background-color; | ||||||
|     -fx-font-size: 35px; |     -fx-font-size: 35px; | ||||||
|     -fx-font-weight: bold; |     -fx-font-weight: bold; | ||||||
| } | } | ||||||
|  |  | ||||||
| .scrollDays{ | .scrollDays{ | ||||||
|     -fx-background-color: -fx-base-background-color; |     -fx-background-color: -fx-darkest-background-color; | ||||||
|     -fx-border-color: -fx-main-border-color; |     -fx-border-color: -fx-bright-border-color; | ||||||
| } | } | ||||||
|  |  | ||||||
| .vBoxDays{ | .vBoxDays{ | ||||||
|     -fx-background-color: -fx-base-background-color; |     -fx-background-color: -fx-darkest-background-color; | ||||||
| } | } | ||||||
|  |  | ||||||
| .labelDays{ | .labelDays{ | ||||||
|     -fx-alignment: center; |     -fx-alignment: center; | ||||||
|     -fx-background-color: -fx-base1-background-color; |     -fx-background-color: -fx-dark-background-color; | ||||||
|     -fx-font-size: 25px; |     -fx-font-size: 25px; | ||||||
|     -fx-border-color: -fx-main-border-color; |     -fx-border-color: -fx-bright-border-color; | ||||||
| } | } | ||||||
|  |  | ||||||
| Label{ | Label{ | ||||||
|     -fx-text-fill: -fx-main-text-color; |     -fx-text-fill: -fx-brighter-text-color; | ||||||
| } | } | ||||||
|  |  | ||||||
| .event{ | .event{ | ||||||
|     -fx-background-color: -fx-base1-background-color; |     -fx-background-color: -fx-dark-background-color; | ||||||
| } | } | ||||||
|  |  | ||||||
| .main-btn{ | .main-btn{ | ||||||
|     -fx-background-color: #ffffff; |     -fx-background-color: transparent; | ||||||
|     -fx-text-fill: -fx-main-text-color; |     -fx-border-color: transparent; | ||||||
|     -fx-background-radius: 5em; | } | ||||||
|     -fx-min-width: 40px; |  | ||||||
|     -fx-min-height: 40px; | .main-btn .svg { | ||||||
|     -fx-max-width: 40px; |     -fx-fill: -fill; | ||||||
|     -fx-max-height: 40px; | } | ||||||
|  |  | ||||||
|  | .main-btn:hover .svg { | ||||||
|  |     -fx-fill: -hover-fill; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .buttonBox{ | ||||||
|  |     -fx-background-color: -fx-bright-background-color; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .navBtn{ | ||||||
|  |     -fx-background-color: transparent; | ||||||
|  |     -fx-border-color: transparent; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .navBtn .svg { | ||||||
|  |     -fx-fill: -fill; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .navBtn:hover .svg { | ||||||
|  |     -fx-fill: -hover-fill; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .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; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,61 +1,64 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  |  | ||||||
|  | <!-- Alex Rechtin, Marco Kühn --> | ||||||
|  |  | ||||||
| <?import javafx.geometry.*?> | <?import javafx.geometry.*?> | ||||||
| <?import javafx.scene.control.*?> | <?import javafx.scene.control.*?> | ||||||
| <?import javafx.scene.image.*?> | <?import javafx.scene.image.*?> | ||||||
| <?import javafx.scene.layout.*?> | <?import javafx.scene.layout.*?> | ||||||
|  |  | ||||||
| <GridPane style="-fx-background-color: #424242;" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.MainController"> | <GridPane style="-fx-background-color: #424242;" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" | ||||||
|  |           fx:controller="main.MainController"> | ||||||
|     <columnConstraints> |     <columnConstraints> | ||||||
|         <ColumnConstraints hgrow="NEVER" maxWidth="60.0" minWidth="60.0" /> |         <ColumnConstraints hgrow="NEVER" maxWidth="60.0" minWidth="60.0"/> | ||||||
|         <ColumnConstraints hgrow="ALWAYS" /> |         <ColumnConstraints hgrow="ALWAYS"/> | ||||||
|     </columnConstraints> |     </columnConstraints> | ||||||
|     <rowConstraints> |     <rowConstraints> | ||||||
|         <RowConstraints vgrow="SOMETIMES" /> |         <RowConstraints vgrow="SOMETIMES"/> | ||||||
|     </rowConstraints> |     </rowConstraints> | ||||||
|     <VBox alignment="TOP_CENTER" prefHeight="200.0" prefWidth="100.0" spacing="5.0" style="-fx-background-color: #525E74;"> |     <VBox fx:id="leftNav" alignment="TOP_CENTER" prefHeight="200.0" prefWidth="100.0" spacing="5.0" | ||||||
|  |           style="-fx-background-color: #525E74;"> | ||||||
|         <ImageView fitHeight="50.0" fitWidth="50.0" pickOnBounds="true" preserveRatio="true"> |         <ImageView fitHeight="50.0" fitWidth="50.0" pickOnBounds="true" preserveRatio="true"> | ||||||
|  |  | ||||||
|         </ImageView> |         </ImageView> | ||||||
|         <Button onAction="#onAddBtnClick" styleClass="main-btn"> |  | ||||||
|             ADD |  | ||||||
|         </Button> |  | ||||||
|         <Button onAction="#onAddBtnClick" styleClass="main-btn"> |  | ||||||
|             ADD |  | ||||||
|         </Button> |  | ||||||
|         <Button onAction="#onAddBtnClick" styleClass="main-btn"> |  | ||||||
|             ADD |  | ||||||
|         </Button> |  | ||||||
|     </VBox> |     </VBox> | ||||||
|     <GridPane prefHeight="200.0" prefWidth="222.0" GridPane.columnIndex="1" GridPane.rowIndex="0"> |     <GridPane fx:id="mainGridPane" prefHeight="200.0" prefWidth="222.0" GridPane.columnIndex="1" GridPane.rowIndex="0"> | ||||||
|         <columnConstraints> |         <columnConstraints> | ||||||
|         <ColumnConstraints hgrow="ALWAYS" /> |             <ColumnConstraints hgrow="ALWAYS"/> | ||||||
|          <ColumnConstraints /> |             <ColumnConstraints/> | ||||||
|  |             <ColumnConstraints/> | ||||||
|  |             <ColumnConstraints/> | ||||||
|  |             <ColumnConstraints/> | ||||||
|         </columnConstraints> |         </columnConstraints> | ||||||
|         <rowConstraints> |         <rowConstraints> | ||||||
|             <RowConstraints /> |             <RowConstraints/> | ||||||
|             <RowConstraints vgrow="ALWAYS" /> |             <RowConstraints vgrow="ALWAYS"/> | ||||||
|         </rowConstraints> |         </rowConstraints> | ||||||
|         <Label fx:id="LabelMonth" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="labelMonth" textFill="WHITE" GridPane.columnIndex="0" GridPane.rowIndex="0"> |         <Label fx:id="LabelMonth" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" | ||||||
|  |                styleClass="labelMonth" textFill="WHITE" GridPane.columnIndex="0" GridPane.rowIndex="0"> | ||||||
|             Monat |             Monat | ||||||
|             <padding> |             <padding> | ||||||
|                 <Insets left="5" /> |                 <Insets left="5"/> | ||||||
|             </padding> |             </padding> | ||||||
|         </Label> |         </Label> | ||||||
|  |  | ||||||
|         <GridPane fx:id="calendarGrid" gridLinesVisible="true"  styleClass="gridCalendar" GridPane.columnIndex="0" GridPane.rowIndex="1"> |         <HBox fx:id="buttonBox" styleClass="buttonBox" GridPane.columnIndex="1" alignment="CENTER"/> | ||||||
|  |  | ||||||
|  |         <GridPane fx:id="calendarGrid" gridLinesVisible="true" styleClass="gridCalendar" GridPane.columnSpan="4" | ||||||
|  |                   GridPane.columnIndex="0" GridPane.rowIndex="1"> | ||||||
|             <columnConstraints> |             <columnConstraints> | ||||||
|                 <ColumnConstraints hgrow="ALWAYS" maxWidth="14.2857142857" minWidth="14.2857142857" percentWidth="14.2857142857" /> |                 <ColumnConstraints hgrow="ALWAYS" maxWidth="14.2857142857" minWidth="14.2857142857" | ||||||
|                 <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857" /> |                                    percentWidth="14.2857142857"/> | ||||||
|                 <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857" /> |                 <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857"/> | ||||||
|                 <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857" /> |                 <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857"/> | ||||||
|                 <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857" /> |                 <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857"/> | ||||||
|                 <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857" /> |                 <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857"/> | ||||||
|                 <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857" /> |                 <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857"/> | ||||||
|  |                 <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857"/> | ||||||
|             </columnConstraints> |             </columnConstraints> | ||||||
|             <rowConstraints> |             <rowConstraints> | ||||||
|                 <RowConstraints maxHeight="55.0" minHeight="25.0" vgrow="NEVER" /> |                 <RowConstraints maxHeight="55.0" minHeight="25.0" vgrow="NEVER"/> | ||||||
|                 <RowConstraints percentHeight="-Infinity" vgrow="ALWAYS" /> |                 <RowConstraints percentHeight="-Infinity" vgrow="ALWAYS"/> | ||||||
|             </rowConstraints> |             </rowConstraints> | ||||||
|  |  | ||||||
|         </GridPane> |         </GridPane> | ||||||
|   | |||||||
							
								
								
									
										69
									
								
								client/app/src/main/resources/main/option-view.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								client/app/src/main/resources/main/option-view.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | |||||||
|  | /* Marco Kühn */ | ||||||
|  | * { | ||||||
|  |    -fx-dark-background-color: #3E415F; | ||||||
|  |  | ||||||
|  |    -fx-bright-background-color: #ff5555; | ||||||
|  |    -fx-brighter-background-color: #8D99AE; | ||||||
|  |    -fx-brightest-background-color: #ffffff; | ||||||
|  |  | ||||||
|  |    -fx-bright-border-color: #B0B0B0; | ||||||
|  |    -fx-brighter-text-color: #ffffff; | ||||||
|  | } | ||||||
|  | GridPane{ | ||||||
|  |     -fx-background-color: -fx-dark-background-color; | ||||||
|  |     -fx-padding: 20px; | ||||||
|  |     -fx-font-size: 20px; | ||||||
|  |     -fx-font-family: Segoe UI; | ||||||
|  |  | ||||||
|  |     -fx-border-insets: 1; | ||||||
|  |     -fx-border-color: -fx-bright-border-color; | ||||||
|  |     -fx-border-style: solid; | ||||||
|  |     -fx-border-width: 2; | ||||||
|  |     -fx-effect: dropshadow(three-pass-box, rgba(100, 100, 100, 1), 24, 0.5, 0, 0); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Label{ | ||||||
|  |     -fx-text-fill: -fx-brighter-text-color; | ||||||
|  |     -fx-max-width: 200px; | ||||||
|  |     -fx-min-width: 200px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .mainLabel{ | ||||||
|  |     -fx-background-color: -fx-brighter-background-color; | ||||||
|  |     -fx-padding: 10px; | ||||||
|  |     -fx-max-width: 200px; | ||||||
|  |     -fx-min-width: 200px; | ||||||
|  |     -fx-font-weight: bold; | ||||||
|  |     -fx-alignment: center; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .mainButton{ | ||||||
|  |     -fx-font-weight: bold; | ||||||
|  |     -fx-background-color: -fx-brightest-background-color; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | JFXButton{ | ||||||
|  |     -fx-background-color: -fx-brightest-background-color; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #labelError{ | ||||||
|  |     -fx-font-weight: bold; | ||||||
|  |     -fx-max-width: 1000px; | ||||||
|  |     -fx-text-fill: -fx-bright-background-color; | ||||||
|  |     -fx-padding: 16px; | ||||||
|  |     -fx-min-height: 140px; | ||||||
|  |     -fx-max-height: 400px; | ||||||
|  |     -fx-wrap-text: true; | ||||||
|  |     -fx-font-size: 16px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .comboBox{ | ||||||
|  |     -fx-background-color: -fx-brightest-background-color; | ||||||
|  |     -fx-max-width: 200px; | ||||||
|  |     -fx-min-width: 200px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .userBtn{ | ||||||
|  |     -fx-max-width: 200px; | ||||||
|  |     -fx-min-width: 200px; | ||||||
|  | } | ||||||
							
								
								
									
										52
									
								
								client/app/src/main/resources/main/option-view.fxml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								client/app/src/main/resources/main/option-view.fxml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <!-- Marco Kühn --> | ||||||
|  |  | ||||||
|  | <?import javafx.scene.control.*?> | ||||||
|  | <?import javafx.scene.layout.*?> | ||||||
|  | <?import com.jfoenix.controls.*?> | ||||||
|  |  | ||||||
|  | <GridPane xmlns="http://javafx.com/javafx" | ||||||
|  |           xmlns:fx="http://javafx.com/fxml" | ||||||
|  |           fx:controller="main.OptionController" | ||||||
|  |           prefHeight="400.0" prefWidth="600.0" | ||||||
|  | fx:id="mainGrid"> | ||||||
|  |  | ||||||
|  |     <columnConstraints> | ||||||
|  |         <ColumnConstraints minWidth="100"/> | ||||||
|  |         <ColumnConstraints minWidth="100"/> | ||||||
|  |         <ColumnConstraints minWidth="200"/> | ||||||
|  |         <ColumnConstraints minWidth="100"/> | ||||||
|  |         <ColumnConstraints minWidth="100"/> | ||||||
|  |     </columnConstraints> | ||||||
|  |     <rowConstraints> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |     </rowConstraints> | ||||||
|  |  | ||||||
|  |     <Label styleClass="mainLabel" GridPane.columnIndex="2" GridPane.halignment="CENTER" >Einstellungen</Label> | ||||||
|  |  | ||||||
|  |     <Label GridPane.columnIndex="1" GridPane.rowIndex="2" GridPane.halignment="CENTER">User:</Label> | ||||||
|  |  | ||||||
|  |     <JFXButton styleClass="userBtn" fx:id="updateUserBtn" GridPane.columnIndex="1" GridPane.columnSpan="3" | ||||||
|  |                GridPane.rowIndex="4" GridPane.halignment="CENTER" onAction="#onUpdateBtnClick">User bearbeiten</JFXButton> | ||||||
|  |     <JFXButton styleClass="userBtn" fx:id="deleteUserBtn" GridPane.columnIndex="1" GridPane.columnSpan="3" | ||||||
|  |                GridPane.rowIndex="5" GridPane.halignment="CENTER" onAction="#onDeleteBtnClick">User löschen</JFXButton> | ||||||
|  |     <JFXButton styleClass="userBtn" fx:id="createUserBtn" GridPane.columnIndex="1" GridPane.columnSpan="3" | ||||||
|  |                GridPane.rowIndex="7" GridPane.halignment="CENTER" onAction="#onCreateBtnClick">User anlegen</JFXButton> | ||||||
|  |  | ||||||
|  |     <Label styleClass="loginLbl" GridPane.columnIndex="1" GridPane.rowIndex="8" | ||||||
|  |            GridPane.halignment="CENTER">Angemeldet bleiben:</Label> | ||||||
|  |     <JFXToggleButton fx:id="saveLoginTBtn" GridPane.columnIndex="3" GridPane.rowIndex="8" onAction="#toggledBtn"/> | ||||||
|  |  | ||||||
|  |     <Label fx:id="labelError" styleClass="errorMessage" GridPane.columnIndex="1" GridPane.rowIndex="9"/> | ||||||
|  |     <JFXButton GridPane.columnIndex="4" GridPane.rowIndex="9" onAction="#onBackBtnClick">Zurück</JFXButton> | ||||||
|  |  | ||||||
|  | </GridPane> | ||||||
| @@ -1 +1,60 @@ | |||||||
|  | /*Alex Rechtin*/ | ||||||
|  | * { | ||||||
|  |   -fx-dark-background-color: #3E415F; | ||||||
|  |   -fx-bright-background-color: #ffffff; | ||||||
|  |   -fx-bright-border-color: #B0B0B0; | ||||||
|  |   -fx-brighter-text-color: #ff5555; | ||||||
|  |   -fx-brightest-text-color: #ffffff; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | GridPane{ | ||||||
|  |     -fx-background-color: -fx-dark-background-color; | ||||||
|  |     -fx-padding: 20px; | ||||||
|  |     -fx-font-size: 20px; | ||||||
|  |     -fx-font-family: Segoe UI; | ||||||
|  |  | ||||||
|  |     -fx-border-insets: 1; | ||||||
|  |     -fx-border-color: -fx-bright-border-color; | ||||||
|  |     -fx-border-style: solid; | ||||||
|  |     -fx-border-width: 2; | ||||||
|  |     -fx-effect: dropshadow(three-pass-box, rgba(100, 100, 100, 1), 24, 0.5, 0, 0); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .mainLabel{ | ||||||
|  |     -fx-padding: 10px; | ||||||
|  |     -fx-max-width: 400px; | ||||||
|  |     -fx-min-width: 400px; | ||||||
|  |     -fx-font-weight: bold; | ||||||
|  |     -fx-alignment: top-center; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Label{ | ||||||
|  |     -fx-text-fill: -fx-brightest-text-color; | ||||||
|  |     -fx-max-width: 150px; | ||||||
|  |     -fx-min-width: 150px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .textField{ | ||||||
|  |     -fx-background-color: -fx-bright-background-color; | ||||||
|  |     -fx-max-width: 400px; | ||||||
|  |     -fx-min-width: 400px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .errorMessage{ | ||||||
|  |     -fx-max-width: 400px; | ||||||
|  |     -fx-min-width: 400px; | ||||||
|  |     -fx-text-fill: -fx-brighter-text-color; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | JFXButton{ | ||||||
|  |     -fx-background-color: -fx-bright-background-color; | ||||||
|  |     -fx-max-width: 150px; | ||||||
|  |     -fx-min-width: 150px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .btnLogin{ | ||||||
|  |     -fx-font-weight: bold; | ||||||
|  | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,14 +1,21 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  |  | ||||||
| <?import javafx.scene.control.*?> | <!-- Alex Rechtin --> | ||||||
|  |  | ||||||
|  | <?import javafx.scene.control.Label?> | ||||||
| <?import javafx.scene.layout.*?> | <?import javafx.scene.layout.*?> | ||||||
|  | <?import javafx.geometry.Insets?> | ||||||
|  | <?import com.jfoenix.controls.JFXToggleButton?> | ||||||
|  | <?import com.jfoenix.controls.JFXButton?> | ||||||
|  | <?import com.jfoenix.controls.JFXPasswordField?> | ||||||
|  | <?import com.jfoenix.controls.JFXTextField?> | ||||||
| <GridPane xmlns="http://javafx.com/javafx" | <GridPane xmlns="http://javafx.com/javafx" | ||||||
|           xmlns:fx="http://javafx.com/fxml" |           xmlns:fx="http://javafx.com/fxml" | ||||||
|           fx:controller="users.CreateUserController"> |           fx:controller="users.CreateUserController"> | ||||||
|     <columnConstraints> |     <columnConstraints> | ||||||
|         <ColumnConstraints/> |         <ColumnConstraints minWidth="100"/> | ||||||
|         <ColumnConstraints/> |         <ColumnConstraints minWidth="100"/> | ||||||
|         <ColumnConstraints/> |         <ColumnConstraints minWidth="100"/> | ||||||
|     </columnConstraints> |     </columnConstraints> | ||||||
|     <rowConstraints> |     <rowConstraints> | ||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS" /> | ||||||
| @@ -17,19 +24,39 @@ | |||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|     </rowConstraints> |     </rowConstraints> | ||||||
|  |  | ||||||
|     <Label styleClass="mainLabel">User anlegen</Label> |     <Label styleClass="mainLabel" GridPane.columnIndex="2" >User anlegen</Label> | ||||||
|  |  | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="1">Name:</Label> |     <Label styleClass="inputLabel" GridPane.rowIndex="1" GridPane.columnIndex="1">Login:</Label> | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="3">Passwort:</Label> |     <Label styleClass="inputLabel" GridPane.rowIndex="2" GridPane.columnIndex="1">Vorname:</Label> | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="4">Passwort wiederholen:</Label> |     <Label styleClass="inputLabel" GridPane.rowIndex="3" GridPane.columnIndex="1">Nachname:</Label> | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="6">Admin:</Label> |     <Label styleClass="inputLabel" GridPane.rowIndex="4" GridPane.columnIndex="1">Passwort:</Label> | ||||||
|  |     <Label styleClass="inputLabel" wrapText="true" GridPane.rowIndex="5" GridPane.columnIndex="1">Passwort wiederholen:</Label> | ||||||
|  |  | ||||||
|     <TextField fx:id="textName" GridPane.columnIndex="2" GridPane.rowIndex="1" maxWidth="400" minWidth="400"/> |     <Label styleClass="inputLabelAdmin" GridPane.rowIndex="6" GridPane.columnIndex="1">Admin:</Label> | ||||||
|     <TextField fx:id="textPassword" GridPane.columnIndex="2" GridPane.rowIndex="3" maxWidth="400" minWidth="400"/> |  | ||||||
|     <TextField fx:id="textPasswordSecond" GridPane.columnIndex="2" GridPane.rowIndex="4" maxWidth="400" minWidth="400"/> |  | ||||||
|  |  | ||||||
|     <CheckBox fx:id="checkBoxIsAdmin" GridPane.columnIndex="2" GridPane.rowIndex="6"/> |     <JFXTextField fx:id="textLogin" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="1" /> | ||||||
|  |     <JFXTextField fx:id="textForename" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="2" /> | ||||||
|  |     <JFXTextField fx:id="textName" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="3" /> | ||||||
|  |     <JFXPasswordField fx:id="textPassword" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="4" /> | ||||||
|  |     <JFXPasswordField fx:id="textPasswordSecond" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="5" /> | ||||||
|  |  | ||||||
|  |     <JFXToggleButton fx:id="checkButtonIsAdmin" GridPane.columnIndex="2" GridPane.rowIndex="6"/> | ||||||
|  |  | ||||||
|  |     <Label fx:id="labelError" wrapText="true" styleClass="errorMessage" GridPane.columnIndex="2" GridPane.rowIndex="7"/> | ||||||
|  |  | ||||||
|  |     <HBox GridPane.columnIndex="2" GridPane.rowIndex="8" alignment="CENTER_RIGHT"> | ||||||
|  |         <HBox.margin> | ||||||
|  |             <Insets right="100" left="100"/> | ||||||
|  |         </HBox.margin> | ||||||
|  |         <JFXButton onAction="#abortBtnClick">Abbrechen</JFXButton> | ||||||
|  |         <JFXButton onAction="#createUser" styleClass="btnLogin" >Anlegen</JFXButton> | ||||||
|  |  | ||||||
|  |     </HBox> | ||||||
| </GridPane> | </GridPane> | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										61
									
								
								client/app/src/main/resources/users/edit-user.fxml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								client/app/src/main/resources/users/edit-user.fxml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  |  | ||||||
|  | <!-- Alex Rechtin--> | ||||||
|  | <?import javafx.scene.layout.*?> | ||||||
|  | <?import javafx.geometry.Insets?> | ||||||
|  | <?import com.jfoenix.controls.JFXToggleButton?> | ||||||
|  | <?import com.jfoenix.controls.JFXTextField?> | ||||||
|  | <?import com.jfoenix.controls.JFXPasswordField?> | ||||||
|  | <?import com.jfoenix.controls.JFXButton?> | ||||||
|  | <?import javafx.scene.control.Label?> | ||||||
|  | <GridPane xmlns="http://javafx.com/javafx" | ||||||
|  |           xmlns:fx="http://javafx.com/fxml" | ||||||
|  |           fx:controller="users.EditUserController"> | ||||||
|  |     <columnConstraints> | ||||||
|  |         <ColumnConstraints minWidth="100"/> | ||||||
|  |         <ColumnConstraints minWidth="100"/> | ||||||
|  |         <ColumnConstraints minWidth="100"/> | ||||||
|  |     </columnConstraints> | ||||||
|  |     <rowConstraints> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |         <RowConstraints vgrow="ALWAYS" /> | ||||||
|  |     </rowConstraints> | ||||||
|  |  | ||||||
|  |     <Label styleClass="mainLabel" GridPane.columnIndex="2" >User bearbeiten</Label> | ||||||
|  |  | ||||||
|  |     <Label styleClass="inputLabel" GridPane.rowIndex="1" GridPane.columnIndex="1">Login:</Label> | ||||||
|  |     <Label styleClass="inputLabel" GridPane.rowIndex="2" GridPane.columnIndex="1">Vorname:</Label> | ||||||
|  |     <Label styleClass="inputLabel" GridPane.rowIndex="3" GridPane.columnIndex="1">Nachname:</Label> | ||||||
|  |     <Label styleClass="inputLabel" GridPane.rowIndex="4" GridPane.columnIndex="1">Passwort:</Label> | ||||||
|  |     <Label styleClass="inputLabel" wrapText="true" GridPane.rowIndex="5" GridPane.columnIndex="1">Passwort wiederholen:</Label> | ||||||
|  |  | ||||||
|  |     <Label styleClass="inputLabelAdmin" GridPane.rowIndex="6" GridPane.columnIndex="1">Admin:</Label> | ||||||
|  |  | ||||||
|  |     <JFXTextField fx:id="textLogin" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="1" /> | ||||||
|  |     <JFXTextField fx:id="textForename" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="2" /> | ||||||
|  |     <JFXTextField fx:id="textName" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="3" /> | ||||||
|  |     <JFXPasswordField fx:id="textPassword" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="4" /> | ||||||
|  |     <JFXPasswordField fx:id="textPasswordSecond" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="5" /> | ||||||
|  |  | ||||||
|  |     <JFXToggleButton fx:id="checkButtonIsAdmin" GridPane.columnIndex="2" GridPane.rowIndex="6"/> | ||||||
|  |  | ||||||
|  |     <Label fx:id="labelError" wrapText="true" styleClass="errorMessage" GridPane.columnIndex="2" GridPane.rowIndex="7"/> | ||||||
|  |  | ||||||
|  |     <HBox GridPane.columnIndex="2" GridPane.rowIndex="8" alignment="CENTER_RIGHT"> | ||||||
|  |         <HBox.margin> | ||||||
|  |             <Insets right="100" left="100"/> | ||||||
|  |         </HBox.margin> | ||||||
|  |         <JFXButton onAction="#abortBtnClick">Abbrechen</JFXButton> | ||||||
|  |         <JFXButton onAction="#createUser" styleClass="btnLogin" >Bearbeiten</JFXButton> | ||||||
|  |  | ||||||
|  |     </HBox> | ||||||
|  | </GridPane> | ||||||
|  |  | ||||||
| @@ -0,0 +1,57 @@ | |||||||
|  | /* Marco Kühn*/ | ||||||
|  | * { | ||||||
|  |       -fx-dark-background-color: #3E415F; | ||||||
|  |  | ||||||
|  |       -fx-brightest-background-color: #ffffff; | ||||||
|  |  | ||||||
|  |       -fx-bright-border-color: #B0B0B0; | ||||||
|  |  | ||||||
|  |       -fx-bright-text-color: #ff5555; | ||||||
|  |       -fx-brighter-text-color: #ffffff; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | GridPane{ | ||||||
|  |     -fx-background-color: -fx-dark-background-color; | ||||||
|  |     -fx-padding: 20px; | ||||||
|  |     -fx-font-size: 20px; | ||||||
|  |     -fx-font-family: Segoe UI; | ||||||
|  |  | ||||||
|  |     -fx-border-insets: 1; | ||||||
|  |     -fx-border-color: -fx-bright-border-color; | ||||||
|  |     -fx-border-style: solid; | ||||||
|  |     -fx-border-width: 2; | ||||||
|  |     -fx-effect: dropshadow(three-pass-box, rgba(100, 100, 100, 1), 24, 0.5, 0, 0); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Label{ | ||||||
|  |     -fx-text-fill: -fx-brighter-text-color; | ||||||
|  |     -fx-max-width: 150px; | ||||||
|  |     -fx-min-width: 150px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .errorLbl{ | ||||||
|  |     -fx-font-weight: bold; | ||||||
|  |         -fx-max-width: 200px; | ||||||
|  |         -fx-text-fill: -fx-bright-text-color; | ||||||
|  |         -fx-padding: 16px; | ||||||
|  |         -fx-min-height: 140px; | ||||||
|  |         -fx-max-height: 400px; | ||||||
|  |         -fx-wrap-text: true; | ||||||
|  |         -fx-font-size: 16px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .userField{ | ||||||
|  |     -fx-background-color: -fx-brightest-background-color; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .passField{ | ||||||
|  |     -fx-background-color: -fx-brightest-background-color; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .quitBtn{ | ||||||
|  |     -fx-background-color: -fx-brightest-background-color; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .loginBtn{ | ||||||
|  |     -fx-background-color: -fx-brightest-background-color; | ||||||
|  | } | ||||||
| @@ -1,11 +1,36 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  |  | ||||||
| <?import java.lang.*?> | <!-- Marco Kühn --> | ||||||
| <?import java.util.*?> |  | ||||||
| <?import javafx.scene.*?> |  | ||||||
| <?import javafx.scene.control.*?> | <?import javafx.scene.control.*?> | ||||||
| <?import javafx.scene.layout.*?> | <?import javafx.scene.layout.*?> | ||||||
|  | <?import com.jfoenix.controls.*?> | ||||||
|  |  | ||||||
| <GridPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"  fx:controller="users.LoginControler"> | <GridPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="users.LoginController"> | ||||||
|  |  | ||||||
|  |     <columnConstraints> | ||||||
|  |         <ColumnConstraints/> | ||||||
|  |         <ColumnConstraints/> | ||||||
|  |         <ColumnConstraints/> | ||||||
|  |     </columnConstraints> | ||||||
|  |     <rowConstraints> | ||||||
|  |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|  |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|  |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|  |         <RowConstraints vgrow="ALWAYS"/> | ||||||
|  |     </rowConstraints> | ||||||
|  |  | ||||||
|  |     <Label GridPane.columnIndex="1">Anmelden</Label> | ||||||
|  |  | ||||||
|  |     <Label GridPane.rowIndex="1">Username</Label> | ||||||
|  |     <JFXTextField styleClass="userField" GridPane.columnIndex="1" GridPane.rowIndex="1" fx:id="userField"/> | ||||||
|  |     <Label styleClass="errorLbl" GridPane.columnIndex="2" GridPane.rowIndex="1" fx:id="userErrLabel"/> | ||||||
|  |  | ||||||
|  |     <Label GridPane.rowIndex="2">Passwort</Label> | ||||||
|  |     <JFXPasswordField styleClass="passField" GridPane.columnIndex="1" GridPane.rowIndex="2" fx:id="passField"/> | ||||||
|  |     <Label styleClass="errorLbl" GridPane.columnIndex="2" GridPane.rowIndex="2" fx:id="passErrLabel"/> | ||||||
|  |  | ||||||
|  |     <JFXButton styleClass="quitBtn" onAction="#abortBtnClick" GridPane.columnIndex="1" GridPane.rowIndex="3">Beenden</JFXButton> | ||||||
|  |     <JFXButton styleClass="loginBtn" onAction="#login" GridPane.columnIndex="2" GridPane.rowIndex="3">Anmelden</JFXButton> | ||||||
|  |  | ||||||
| </GridPane> | </GridPane> | ||||||
|   | |||||||
| @@ -2,9 +2,14 @@ plugins { | |||||||
|     java |     java | ||||||
| } | } | ||||||
|  |  | ||||||
|  | tasks.withType<JavaCompile> { | ||||||
|  |     options.encoding = "UTF-8" | ||||||
|  | } | ||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|     val jacksonVersion = "2.13.0" |     val jacksonVersion = "2.13.0" | ||||||
|     implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") |     implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") | ||||||
|     implementation("com.fasterxml.jackson.core:jackson-core:$jacksonVersion") |     implementation("com.fasterxml.jackson.core:jackson-core:$jacksonVersion") | ||||||
|     implementation("com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion") |     implementation("com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion") | ||||||
|  |     implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion") | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										81
									
								
								client/data/src/main/java/config/Config.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								client/data/src/main/java/config/Config.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | |||||||
|  | //Marc Beyer// | ||||||
|  | package config; | ||||||
|  |  | ||||||
|  | public class Config { | ||||||
|  |     private boolean saveLogin; | ||||||
|  |     private long id; | ||||||
|  |     private String token; | ||||||
|  |     private String connectionMethod; | ||||||
|  |     private String hostAddress; | ||||||
|  |     private int port; | ||||||
|  |  | ||||||
|  |     public Config(){ | ||||||
|  |         saveLogin = false; | ||||||
|  |         id = -1; | ||||||
|  |         token = ""; | ||||||
|  |         connectionMethod = "http"; | ||||||
|  |         hostAddress = "localhost"; | ||||||
|  |         port = 8080; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Config(boolean saveLogin, long id, String token) { | ||||||
|  |         this.saveLogin = saveLogin; | ||||||
|  |         this.id = id; | ||||||
|  |         this.token = token; | ||||||
|  |         connectionMethod = "http"; | ||||||
|  |         hostAddress = "localhost"; | ||||||
|  |         port = 8080; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean isSaveLogin() { | ||||||
|  |         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; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String getConnectionMethod() { | ||||||
|  |         return connectionMethod; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setConnectionMethod(String connectionMethod) { | ||||||
|  |         this.connectionMethod = connectionMethod; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String getHostAddress() { | ||||||
|  |         return hostAddress; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setHostAddress(String hostAddress) { | ||||||
|  |         this.hostAddress = hostAddress; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public int getPort() { | ||||||
|  |         return port; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setPort(int port) { | ||||||
|  |         this.port = port; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String toServerUrl(){ | ||||||
|  |         return getConnectionMethod() + "://" + getHostAddress() + ":" + getPort(); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										43
									
								
								client/data/src/main/java/config/ConfigLoader.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								client/data/src/main/java/config/ConfigLoader.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | |||||||
|  | //Marc Beyer// | ||||||
|  | package config; | ||||||
|  |  | ||||||
|  | import com.fasterxml.jackson.databind.ObjectMapper; | ||||||
|  |  | ||||||
|  | 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) { | ||||||
|  |             System.out.println("config.json missing"); | ||||||
|  |             Config config = new Config(false, -1, ""); | ||||||
|  |             save(config); | ||||||
|  |             return config; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static void save(Config config){ | ||||||
|  |         ObjectMapper objectMapper = new ObjectMapper(); | ||||||
|  |         objectMapper.findAndRegisterModules(); | ||||||
|  |  | ||||||
|  |         try { | ||||||
|  |             Files.writeString( | ||||||
|  |                     Paths.get("config.json"), | ||||||
|  |                     objectMapper.writeValueAsString(config) | ||||||
|  |                             .replace(",", ",\n\t") | ||||||
|  |                             .replace("{", "{\n\t") | ||||||
|  |                             .replace("}", "\n}") | ||||||
|  |             ); | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										221
									
								
								client/data/src/main/java/container/DataController.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										221
									
								
								client/data/src/main/java/container/DataController.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,221 @@ | |||||||
|  | //Marc Beyer// | ||||||
|  | package container; | ||||||
|  |  | ||||||
|  | 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.time.LocalDateTime; | ||||||
|  | import java.util.*; | ||||||
|  |  | ||||||
|  | public class DataController { | ||||||
|  |  | ||||||
|  |     public static long USER_ID = -1; | ||||||
|  |     public static String SERVER_URL = "http://localhost:8080"; | ||||||
|  |  | ||||||
|  |     private static final String ALL_EVENTS_ENDPOINT =           "/event/all"; | ||||||
|  |     private static final String ADD_EVENT_ENDPOINT =            "/event/add"; | ||||||
|  |     private static final String DELETE_EVENT_ENDPOINT =         "/event/del"; | ||||||
|  |     private static final String EDIT_EVENT_ENDPOINT =           "/event/edit"; | ||||||
|  |  | ||||||
|  |     private static final String ALL_USER_ENDPOINT =             "/user/all"; | ||||||
|  |     private static final String ADD_USER_ENDPOINT =             "/user/add"; | ||||||
|  |     private static final String DELETE_USER_ENDPOINT =          "/user/del"; | ||||||
|  |     private static final String EDIT_USER_ENDPOINT =            "/user/edit"; | ||||||
|  |  | ||||||
|  |     private static final String LOGIN_ENDPOINT =                "/user/login"; | ||||||
|  |     private static final String LOGIN_WITH_TOKEN_ENDPOINT =     "/user/login-with-token"; | ||||||
|  |     private static final String HEADER_TEST_ENDPOINT =          "/vpr/header-test"; | ||||||
|  |  | ||||||
|  |     private final HttpRequest httpRequest; | ||||||
|  |  | ||||||
|  |     public DataController() { | ||||||
|  |         httpRequest = new HttpRequest(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean login(String username, String password) { | ||||||
|  |         try { | ||||||
|  |             Tuple<Integer, String> response = httpRequest.sendPostRequest( | ||||||
|  |                     SERVER_URL + LOGIN_ENDPOINT, | ||||||
|  |                     "login=" + username | ||||||
|  |                             + "&password=" + password, | ||||||
|  |                     false | ||||||
|  |             ); | ||||||
|  |             String[] data = response.getValue().split("\\s+"); | ||||||
|  |  | ||||||
|  |             USER_ID = Long.parseLong(data[1]); | ||||||
|  |             HttpRequest.TOKEN = data[0]; | ||||||
|  |         } catch (Exception e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return USER_ID >= 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean loginWithToken(long userId, String token) { | ||||||
|  |         try { | ||||||
|  |             HttpRequest.TOKEN = token; | ||||||
|  |             Tuple<Integer, String> response = httpRequest.sendPostRequest( | ||||||
|  |                     SERVER_URL + LOGIN_WITH_TOKEN_ENDPOINT, | ||||||
|  |                     "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; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /********* | ||||||
|  |      * Event * | ||||||
|  |      *********/ | ||||||
|  |     public void createEvent(Event event) throws HttpRequestException { | ||||||
|  |         sendBasicHttpRequest( | ||||||
|  |                 SERVER_URL + ADD_EVENT_ENDPOINT, | ||||||
|  |                 event.getAsUrlParam(), | ||||||
|  |                 true | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void deleteEvent(int userId, int eventId, LocalDateTime date) throws HttpRequestException { | ||||||
|  |         sendBasicHttpRequest( | ||||||
|  |                 SERVER_URL + DELETE_EVENT_ENDPOINT, | ||||||
|  |                 "userId=" + userId + "&eventId=" + eventId + "&date=" + date.toLocalDate(), | ||||||
|  |                 true | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void editEvent(Event oldEvent, Event event) throws HttpRequestException { | ||||||
|  |         sendBasicHttpRequest( | ||||||
|  |                 SERVER_URL + EDIT_EVENT_ENDPOINT, | ||||||
|  |                 "eventId=" + oldEvent.getId() + | ||||||
|  |                         "&userId=" + oldEvent.getOwnerId() + | ||||||
|  |                         "&date=" + oldEvent.getDate().toLocalDate() + | ||||||
|  |                         "&newDate=" + event.getDate().toLocalDate() + | ||||||
|  |                         "&newName=" + event.getName() + | ||||||
|  |                         "&newStart=" + event.getStart() + | ||||||
|  |                         "&newEnd=" + event.getEnd() + | ||||||
|  |                         "&newPriority=" + event.getPriority() + | ||||||
|  |                         "&newIsFullDay=" + event.isFullDay() + | ||||||
|  |                         "&newIsPrivate=" + event.isPrivate(), | ||||||
|  |                 true | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public ArrayList<Event> getAllVisibleEvents(LocalDateTime startDate, LocalDateTime endDate) throws HttpRequestException { | ||||||
|  |         try { | ||||||
|  |             Tuple<Integer, String> response = httpRequest.sendPostRequest( | ||||||
|  |                     SERVER_URL + ALL_EVENTS_ENDPOINT, | ||||||
|  |                     "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); | ||||||
|  |  | ||||||
|  |             ObjectMapper objectMapper = new ObjectMapper(); | ||||||
|  |             objectMapper.findAndRegisterModules(); | ||||||
|  |             return (ArrayList<Event>) objectMapper.readValue(jsonResponse, new TypeReference<List<Event>>() { | ||||||
|  |             }); | ||||||
|  |  | ||||||
|  |         } catch (HttpRequestException e) { | ||||||
|  |             throw e; | ||||||
|  |         } catch (Exception e) { | ||||||
|  |             throw new HttpRequestException("Es konnte keine Verbindung mit dem Server hergestellt werden.", 600); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /******** | ||||||
|  |      * User * | ||||||
|  |      ********/ | ||||||
|  |  | ||||||
|  |     public List<User> getAllUser() throws HttpRequestException { | ||||||
|  |         String userJSON = sendBasicHttpRequest( | ||||||
|  |                 SERVER_URL + ALL_USER_ENDPOINT, | ||||||
|  |                 "", | ||||||
|  |                 true | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         ObjectMapper objectMapper = new ObjectMapper(); | ||||||
|  |         objectMapper.findAndRegisterModules(); | ||||||
|  |         try { | ||||||
|  |             List<User> list = objectMapper.readValue(userJSON, new TypeReference<>() { | ||||||
|  |             }); | ||||||
|  |  | ||||||
|  |             for(User u : list){ | ||||||
|  |                 System.out.println(u); | ||||||
|  |             } | ||||||
|  |             return list; | ||||||
|  |         } catch (JsonProcessingException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|  |         return new ArrayList<>(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void createUser(User user) throws HttpRequestException { | ||||||
|  |         sendBasicHttpRequest( | ||||||
|  |                 SERVER_URL + ADD_USER_ENDPOINT, | ||||||
|  |                 "name=" + user.getName() + | ||||||
|  |                         "&forename=" + user.getForename() + | ||||||
|  |                         "&login=" + user.getLogin() + | ||||||
|  |                         "&password=" + user.getPassword() + | ||||||
|  |                         "&isAdmin=" + user.isAdmin(), | ||||||
|  |                 true | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void deleteUser(User user) throws HttpRequestException { | ||||||
|  |         sendBasicHttpRequest( | ||||||
|  |                 SERVER_URL + DELETE_USER_ENDPOINT, | ||||||
|  |                 "userId=" + user.getUserId(), | ||||||
|  |                 true | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void editUser(User user) throws HttpRequestException { | ||||||
|  |         String urlParam = "userId=" + user.getUserId() + | ||||||
|  |                 "&name=" + user.getName() + | ||||||
|  |                 "&forename=" + user.getForename() + | ||||||
|  |                 "&login=" + user.getLogin() + | ||||||
|  |                 "&isAdmin=" + user.isAdmin() + | ||||||
|  |                 (user.getPassword() == null ? "" : "&password=" + user.getPassword()); | ||||||
|  |  | ||||||
|  |         System.out.println(urlParam); | ||||||
|  |         sendBasicHttpRequest( | ||||||
|  |                 SERVER_URL + EDIT_USER_ENDPOINT, | ||||||
|  |                 urlParam, | ||||||
|  |                 true | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private String sendBasicHttpRequest(String urlString, String urlParameters, boolean sendAuth) throws HttpRequestException { | ||||||
|  |         try { | ||||||
|  |             Tuple<Integer, String> response = httpRequest.sendPostRequest( | ||||||
|  |                     urlString, | ||||||
|  |                     urlParameters, | ||||||
|  |                     sendAuth | ||||||
|  |             ); | ||||||
|  |             if (response.getKey() != 200) { | ||||||
|  |                 throw new HttpRequestException(response); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return response.getValue(); | ||||||
|  |         } catch (HttpRequestException e) { | ||||||
|  |             throw e; | ||||||
|  |         } catch (Exception e) { | ||||||
|  |             throw new HttpRequestException("Es konnte keine Verbindung mit dem Server hergestellt werden.", 600); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,10 +1,12 @@ | |||||||
| package res; | //Marco Kühn// | ||||||
| 
 | package container; | ||||||
| import com.sun.jdi.event.StepEvent; |  | ||||||
| 
 | 
 | ||||||
|  | import java.time.Duration; | ||||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||||
|  | import java.time.LocalTime; | ||||||
| import java.time.format.DateTimeFormatter; | import java.time.format.DateTimeFormatter; | ||||||
| import java.util.ArrayList; | import java.util.regex.Matcher; | ||||||
|  | import java.util.regex.Pattern; | ||||||
| 
 | 
 | ||||||
| public class Event { | public class Event { | ||||||
| 
 | 
 | ||||||
| @@ -21,53 +23,41 @@ public class Event { | |||||||
|     private int ownerId; |     private int ownerId; | ||||||
|     private String ownerName; |     private String ownerName; | ||||||
| 
 | 
 | ||||||
|     /* |     public Event() {} | ||||||
|     Constructor for SELECT: |  | ||||||
|     e.id AS eid, |  | ||||||
|     e.name AS ename, |  | ||||||
|     e.start, |  | ||||||
|     e.end, |  | ||||||
|     e.priority, |  | ||||||
|     e.is_full_day, |  | ||||||
| 
 |  | ||||||
|     ue.date, |  | ||||||
| 
 |  | ||||||
|     u.id AS uid, |  | ||||||
|     u.forename, |  | ||||||
|     u.name AS uname |  | ||||||
|      */ |  | ||||||
| 
 |  | ||||||
|     public Event(ArrayList<Object> arr) { |  | ||||||
|         id = (int) arr.get(0); |  | ||||||
|         name = (String) arr.get(1); |  | ||||||
|         start = (String) arr.get(2); |  | ||||||
|         end = (String) arr.get(3); |  | ||||||
|         priority = (int) arr.get(4); |  | ||||||
|         isFullDay = (Boolean) arr.get(5); //((String)arr.get(5)).equals("true"); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); |  | ||||||
|         date = LocalDateTime.parse(arr.get(6) + " 00:00", formatter); |  | ||||||
| 
 |  | ||||||
|         ownerId = (int) arr.get(7); |  | ||||||
|         ownerName = arr.get(8) + " " + arr.get(9); |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     public Event(String name, |     public Event(String name, | ||||||
|                  int priority, |                  int priority, | ||||||
|                  boolean isFullDay, |                  boolean isFullDay, | ||||||
|                  boolean isPrivate, |                  boolean isPrivate, | ||||||
|                  String start, |                  LocalTime start, | ||||||
|                  String end, |                  LocalTime end, | ||||||
|                  LocalDateTime date, |                  LocalDateTime date, | ||||||
|                  int ownerId |                  int ownerId | ||||||
|     ) { |     ) throws IllegalArgumentException { | ||||||
|  | 
 | ||||||
|  |         System.out.println("Create Event"); | ||||||
|  |         if (name.length() < 3) { | ||||||
|  |             throw new IllegalArgumentException("Der Name muss eine Länge von 3 haben."); | ||||||
|  |         } | ||||||
|  |         Pattern pattern = Pattern.compile("[A-Za-zäöüÄÖÜß0-9 =!?+*/$.:,;_<>()-]*"); | ||||||
|  |         Matcher matcher = pattern.matcher(name); | ||||||
|  |         if (!matcher.matches()) { | ||||||
|  |             throw new IllegalArgumentException("Der Name darf nur aus Zahlen, Buchstaben und folgenden Sonderzeichen bestehen: äöü ÄÖÜ ß =!?+*/$.:,;_ <>()-"); | ||||||
|  |         } | ||||||
|  |         if (priority < 0) { | ||||||
|  |             throw new IllegalArgumentException("Bitte eine Priorität wählen."); | ||||||
|  |         } | ||||||
|  |         LocalDateTime today = LocalDateTime.now().toLocalDate().atStartOfDay(); | ||||||
|  |         if (Duration.between(today, date).isNegative()) { | ||||||
|  |             throw new IllegalArgumentException("Das Datum muss in der Zukunft liegen."); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         this.name = name; |         this.name = name; | ||||||
|         this.priority = priority; |         this.priority = priority; | ||||||
|         this.isFullDay = isFullDay; |         this.isFullDay = isFullDay; | ||||||
|         this.isPrivate = isPrivate; |         this.isPrivate = isPrivate; | ||||||
|         this.start = start; |         if (start != null) this.start = start.toString(); | ||||||
|         this.end = end; |         if (end != null) this.end = end.toString(); | ||||||
|         this.date = date; |         this.date = date; | ||||||
|         this.ownerId = ownerId; |         this.ownerId = ownerId; | ||||||
|     } |     } | ||||||
| @@ -132,8 +122,9 @@ public class Event { | |||||||
|         return date; |         return date; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void setDate(LocalDateTime date) { |     public void setDate(String date) { | ||||||
|         this.date = date; |         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); | ||||||
|  |         this.date = LocalDateTime.parse(date + " 00:00", formatter); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public int getOwnerId() { |     public int getOwnerId() { | ||||||
| @@ -167,7 +158,7 @@ public class Event { | |||||||
|                 "&name=" + getName() + |                 "&name=" + getName() + | ||||||
|                 "&start=" + getStart() + |                 "&start=" + getStart() + | ||||||
|                 "&end=" + getEnd() + |                 "&end=" + getEnd() + | ||||||
|                 "&prority=" + getPriority() + |                 "&priority=" + getPriority() + | ||||||
|                 "&isFullDay=" + isFullDay() + |                 "&isFullDay=" + isFullDay() + | ||||||
|                 "&isPrivate=" + isPrivate(); |                 "&isPrivate=" + isPrivate(); | ||||||
|     } |     } | ||||||
							
								
								
									
										78
									
								
								client/data/src/main/java/container/HttpRequest.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								client/data/src/main/java/container/HttpRequest.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | |||||||
|  | //Marc Beyer// | ||||||
|  | package container; | ||||||
|  |  | ||||||
|  | import helper.Tuple; | ||||||
|  |  | ||||||
|  | import java.io.BufferedReader; | ||||||
|  | import java.io.DataOutputStream; | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.io.InputStreamReader; | ||||||
|  | import java.net.HttpURLConnection; | ||||||
|  | import java.net.URL; | ||||||
|  | import java.nio.charset.StandardCharsets; | ||||||
|  |  | ||||||
|  | public class HttpRequest { | ||||||
|  |     public static String TOKEN = ""; | ||||||
|  |  | ||||||
|  |     public Tuple<Integer, 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(urlString); | ||||||
|  |         HttpURLConnection connection = (HttpURLConnection) url.openConnection(); | ||||||
|  |  | ||||||
|  |         connection.setDoOutput(true); | ||||||
|  |         connection.setInstanceFollowRedirects(false); | ||||||
|  |         connection.setRequestMethod("POST"); | ||||||
|  |         connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); | ||||||
|  |         connection.setRequestProperty("charset", "utf-8"); | ||||||
|  |         connection.setRequestProperty("Content-Length", Integer.toString(postDataLength)); | ||||||
|  |         connection.setUseCaches(false); | ||||||
|  |  | ||||||
|  |         if(sendAuth){ | ||||||
|  |             connection.setRequestProperty("Accept", "application/json"); | ||||||
|  |             connection.setRequestProperty("Authorization", "Bearer " + TOKEN); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         try (DataOutputStream writer = new DataOutputStream(connection.getOutputStream())) { | ||||||
|  |             writer.write(postData); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return getHttpTuple(connection); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Tuple<Integer, String> sendGetRequest(String urlString) throws Exception { | ||||||
|  |         URL url = new URL(urlString); | ||||||
|  |         HttpURLConnection connection = (HttpURLConnection) url.openConnection(); | ||||||
|  |         connection.setRequestMethod("GET"); | ||||||
|  |  | ||||||
|  |         connection.setConnectTimeout(5000); | ||||||
|  |         connection.setReadTimeout(5000); | ||||||
|  |  | ||||||
|  |         int status = connection.getResponseCode(); | ||||||
|  |  | ||||||
|  |         return getHttpTuple(connection); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private Tuple<Integer, String> getHttpTuple(HttpURLConnection connection) throws IOException { | ||||||
|  |         int status = connection.getResponseCode(); | ||||||
|  |         String inputLine; | ||||||
|  |         StringBuilder content = new StringBuilder(); | ||||||
|  |         BufferedReader in; | ||||||
|  |  | ||||||
|  |         if (status == 200) { | ||||||
|  |             in = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); | ||||||
|  |         } else { | ||||||
|  |             in = new BufferedReader(new InputStreamReader(connection.getErrorStream(), StandardCharsets.UTF_8)); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         while ((inputLine = in.readLine()) != null) { | ||||||
|  |             content.append(inputLine); | ||||||
|  |         } | ||||||
|  |         in.close(); | ||||||
|  |  | ||||||
|  |         connection.disconnect(); | ||||||
|  |  | ||||||
|  |         return new Tuple<>(status, content.toString()); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										76
									
								
								client/data/src/main/java/container/User.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								client/data/src/main/java/container/User.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | |||||||
|  | //Marco Kühn// | ||||||
|  | package container; | ||||||
|  |  | ||||||
|  | public class User { | ||||||
|  |  | ||||||
|  |     private int userId; | ||||||
|  |     private String login; | ||||||
|  |     private String forename; | ||||||
|  |     private String name; | ||||||
|  |     private String password; | ||||||
|  |     private boolean isAdmin; | ||||||
|  |  | ||||||
|  |     public User(){} | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     public int getUserId() { | ||||||
|  |         return userId; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setUserId(int userId) { | ||||||
|  |         this.userId = userId; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String getLogin() { | ||||||
|  |         return login; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setLogin(String login) { | ||||||
|  |         this.login = login; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String getForename() { | ||||||
|  |         return forename; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setForename(String forename) { | ||||||
|  |         this.forename = forename; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String getName() { | ||||||
|  |         return name; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setName(String name) { | ||||||
|  |         this.name = name; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean isAdmin() { | ||||||
|  |         return isAdmin; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setAdmin(boolean admin) { | ||||||
|  |         isAdmin = admin; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String getPassword() { | ||||||
|  |         return password; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setPassword(String password) { | ||||||
|  |         this.password = password; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String toString() { | ||||||
|  |         return "User{" + | ||||||
|  |                 "userId=" + userId + | ||||||
|  |                 ", login='" + login + '\'' + | ||||||
|  |                 ", forename='" + forename + '\'' + | ||||||
|  |                 ", name='" + name + '\'' + | ||||||
|  |                 ", password='" + password + '\'' + | ||||||
|  |                 ", isAdmin=" + isAdmin + | ||||||
|  |                 '}'; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										24
									
								
								client/data/src/main/java/helper/HttpRequestException.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								client/data/src/main/java/helper/HttpRequestException.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | //Marc Beyer// | ||||||
|  | package helper; | ||||||
|  |  | ||||||
|  | public class HttpRequestException extends Exception{ | ||||||
|  |     private int status; | ||||||
|  |  | ||||||
|  |     public HttpRequestException(String message, int status) { | ||||||
|  |         super(message); | ||||||
|  |         this.status = status; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public HttpRequestException(Tuple<Integer, String> response) { | ||||||
|  |         super(response.getValue()); | ||||||
|  |         this.status = response.getKey(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public int getStatus() { | ||||||
|  |         return status; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setStatus(int status) { | ||||||
|  |         this.status = status; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										28
									
								
								client/data/src/main/java/helper/Tuple.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								client/data/src/main/java/helper/Tuple.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | //Marc Beyer// | ||||||
|  | package helper; | ||||||
|  |  | ||||||
|  | public class Tuple<X, Y> { | ||||||
|  |     public final X key; | ||||||
|  |     public final Y value; | ||||||
|  |  | ||||||
|  |     public Tuple(X key, Y value) { | ||||||
|  |         this.key = key; | ||||||
|  |         this.value = value; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public X getKey() { | ||||||
|  |         return key; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Y getValue() { | ||||||
|  |         return value; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String toString() { | ||||||
|  |         return "Tuple{" + | ||||||
|  |                 "key=" + key + | ||||||
|  |                 ", value=" + value + | ||||||
|  |                 '}'; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,96 +0,0 @@ | |||||||
| package res; |  | ||||||
|  |  | ||||||
| import com.fasterxml.jackson.core.JsonProcessingException; |  | ||||||
| import com.fasterxml.jackson.databind.ObjectMapper; |  | ||||||
|  |  | ||||||
| import java.io.BufferedReader; |  | ||||||
| import java.io.DataOutputStream; |  | ||||||
| import java.io.InputStreamReader; |  | ||||||
| import java.io.OutputStream; |  | ||||||
| import java.net.HttpURLConnection; |  | ||||||
| import java.net.URL; |  | ||||||
| import java.nio.charset.StandardCharsets; |  | ||||||
| import java.util.*; |  | ||||||
|  |  | ||||||
| public class DataController { |  | ||||||
|  |  | ||||||
|     private static final String ALL_EVENTS_ENDPOINT = "http://localhost:8080/vpr/all-events"; |  | ||||||
|     private static final String ALL_USERS_ENDPOINT = "http://localhost:8080/vpr/all-users"; |  | ||||||
|     private static final String ADD_EVENT_ENDPOINT = "http://localhost:8080/vpr/add-event"; |  | ||||||
|     private static final String DELETE_EVENT_ENDPOINT = "http://localhost:8080/vpr/del-event"; |  | ||||||
|  |  | ||||||
|     private final HttpRequest httpRequest; |  | ||||||
|  |  | ||||||
|     public DataController(){ |  | ||||||
|         httpRequest = new HttpRequest(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public void createEvent(Event event){ |  | ||||||
|         try { |  | ||||||
|             System.out.println(httpRequest.sendPostRequest(ADD_EVENT_ENDPOINT, event.getAsUrlParam())); |  | ||||||
|         } catch (Exception e) { |  | ||||||
|             e.printStackTrace(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public void deleteEvent(int eventId){ |  | ||||||
|         try { |  | ||||||
|             System.out.println(httpRequest.sendPostRequest(DELETE_EVENT_ENDPOINT, "eventId=" + eventId)); |  | ||||||
|         } catch (Exception e) { |  | ||||||
|             e.printStackTrace(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public ArrayList<Event> getAllVisibleEvents() { |  | ||||||
|         ArrayList<Event> eventList = new ArrayList<>(); |  | ||||||
|  |  | ||||||
|         try { |  | ||||||
|             String jsonResponse = httpRequest.sendPostRequest(ALL_EVENTS_ENDPOINT, "userId=1"); |  | ||||||
|             System.out.println(jsonResponse); |  | ||||||
|  |  | ||||||
|             ObjectMapper objectMapper = new ObjectMapper(); |  | ||||||
|             //String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }"; |  | ||||||
|  |  | ||||||
|             for (Object obj : objectMapper.readValue(jsonResponse, Object[].class)){ |  | ||||||
|                 ArrayList<Object> list = new ArrayList<>(); |  | ||||||
|                 if (obj.getClass().isArray()) { |  | ||||||
|                     list = (ArrayList<Object>) Arrays.asList((Object[])obj); |  | ||||||
|                 } else if (obj instanceof Collection) { |  | ||||||
|                     list = new ArrayList<>((Collection<?>) obj); |  | ||||||
|                 } |  | ||||||
|                 eventList.add(new Event(list)); |  | ||||||
|  |  | ||||||
|             } |  | ||||||
|         } catch (Exception e) { |  | ||||||
|             e.printStackTrace(); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         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<Event> eventList; |  | ||||||
|  |  | ||||||
|         // Parse JSON |  | ||||||
|         ObjectMapper objectMapper = new ObjectMapper(); |  | ||||||
|         //String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }"; |  | ||||||
|  |  | ||||||
|         return objectMapper.readValue(jsonString, Event[].class); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,76 +0,0 @@ | |||||||
| package res; |  | ||||||
|  |  | ||||||
| import java.io.BufferedReader; |  | ||||||
| import java.io.DataOutputStream; |  | ||||||
| import java.io.InputStreamReader; |  | ||||||
| import java.net.HttpURLConnection; |  | ||||||
| import java.net.URL; |  | ||||||
| import java.nio.charset.StandardCharsets; |  | ||||||
| import java.util.Arrays; |  | ||||||
|  |  | ||||||
| public class HttpRequest { |  | ||||||
|     public String sendPostRequest(String urlString, String urlParameters) throws Exception{ |  | ||||||
|         byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8); |  | ||||||
|         int postDataLength = postData.length; |  | ||||||
|  |  | ||||||
|         URL url = new URL(urlString); |  | ||||||
|         HttpURLConnection con = (HttpURLConnection) url.openConnection(); |  | ||||||
|  |  | ||||||
|         con.setDoOutput(true); |  | ||||||
|         con.setInstanceFollowRedirects(false); |  | ||||||
|         con.setRequestMethod("POST"); |  | ||||||
|         con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); |  | ||||||
|         con.setRequestProperty("charset", "utf-8"); |  | ||||||
|         con.setRequestProperty("Content-Length", Integer.toString(postDataLength)); |  | ||||||
|         con.setUseCaches(false); |  | ||||||
|         try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) { |  | ||||||
|             wr.write(postData); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         int status = con.getResponseCode(); |  | ||||||
|         if (status == 200) { |  | ||||||
|             BufferedReader in = new BufferedReader( |  | ||||||
|                     new InputStreamReader(con.getInputStream())); |  | ||||||
|             String inputLine; |  | ||||||
|             StringBuilder content = new StringBuilder(); |  | ||||||
|             while ((inputLine = in.readLine()) != null) { |  | ||||||
|                 content.append(inputLine); |  | ||||||
|             } |  | ||||||
|             in.close(); |  | ||||||
|  |  | ||||||
|             con.disconnect(); |  | ||||||
|             return content.toString(); |  | ||||||
|         } else { |  | ||||||
|             con.disconnect(); |  | ||||||
|             throw new Exception("Status: " + status); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public String sendGetRequest(String urlString) throws Exception{ |  | ||||||
|         URL url = new URL(urlString); |  | ||||||
|         HttpURLConnection con = (HttpURLConnection) url.openConnection(); |  | ||||||
|         con.setRequestMethod("GET"); |  | ||||||
|  |  | ||||||
|         con.setConnectTimeout(5000); |  | ||||||
|         con.setReadTimeout(5000); |  | ||||||
|  |  | ||||||
|         int status = con.getResponseCode(); |  | ||||||
|         if (status == 200) { |  | ||||||
|             BufferedReader in = new BufferedReader( |  | ||||||
|                     new InputStreamReader(con.getInputStream())); |  | ||||||
|             String inputLine; |  | ||||||
|             StringBuilder content = new StringBuilder(); |  | ||||||
|             while ((inputLine = in.readLine()) != null) { |  | ||||||
|                 content.append(inputLine); |  | ||||||
|             } |  | ||||||
|             in.close(); |  | ||||||
|  |  | ||||||
|             con.disconnect(); |  | ||||||
|             return content.toString(); |  | ||||||
|  |  | ||||||
|         } else { |  | ||||||
|             con.disconnect(); |  | ||||||
|             throw new Exception("Status: " + status); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
		Reference in New Issue
	
	Block a user