Compare commits
	
		
			70 Commits
		
	
	
		
			7c8b1fefb7
			...
			option-ui
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 4e07b01b6a | |||
| 2f70515407 | |||
| a4ce8940ab | |||
| 91daf95990 | |||
| 596343fe47 | |||
| f133257194 | |||
| 4aafae9896 | |||
| cb5982ef2d | |||
| 2147ca1ad8 | |||
| c4e24549d5 | |||
| 5e9a09fc7d | |||
| f0e431bf6c | |||
| f1f07a3515 | |||
| 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 | |||
| 654f34e30e | |||
| baeed584ab | |||
| b12de1cd2e | |||
| 097cce14e8 | |||
| ce309581ed | |||
| f0405b5d86 | |||
| 0d105be15c | |||
| 646da71e8a | |||
| 46606a5afc | |||
| b205c96f85 | |||
| 0ef383aa7f | |||
| ea6420e234 | |||
| eb55d5c650 | |||
| f933690ba0 | |||
| 12fce27d04 | |||
| d34d09aa2b | 
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -72,3 +72,5 @@ crashlytics-build.properties | |||||||
|  |  | ||||||
| .gradle/ | .gradle/ | ||||||
| build/ | build/ | ||||||
|  |  | ||||||
|  | /client/config.json | ||||||
| @@ -13,16 +13,21 @@ javafx { | |||||||
| } | } | ||||||
|  |  | ||||||
| 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) } | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								client/app/src/main/java/customUI/Button.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								client/app/src/main/java/customUI/Button.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | package customUI; | ||||||
|  |  | ||||||
|  | public class Button extends javafx.scene.control.Button { | ||||||
|  |  | ||||||
|  |     public void setTextValue(String text){ | ||||||
|  |         super.setText(Converter.convertString(text)); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										21
									
								
								client/app/src/main/java/customUI/Converter.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								client/app/src/main/java/customUI/Converter.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | package customUI; | ||||||
|  |  | ||||||
|  | public class Converter { | ||||||
|  |     /* | ||||||
|  |     Ä, ä 		\u00c4, \u00e4 | ||||||
|  |     Ö, ö 		\u00d6, \u00f6 | ||||||
|  |     Ü, ü 		\u00dc, \u00fc | ||||||
|  |     ß 		    \u00df | ||||||
|  |      */ | ||||||
|  |     @SuppressWarnings("all") | ||||||
|  |     public static String convertString(String str){ | ||||||
|  |         return str | ||||||
|  |                 .replace("ä", "\u00e4") | ||||||
|  |                 .replace("Ä", "\u00c4") | ||||||
|  |                 .replace("ö", "\u00f6") | ||||||
|  |                 .replace("Ö", "\u00d6") | ||||||
|  |                 .replace("ü", "\u00fc") | ||||||
|  |                 .replace("Ü", "\u00dc") | ||||||
|  |                 .replace("ß", "\u00df"); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										15
									
								
								client/app/src/main/java/customUI/Label.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								client/app/src/main/java/customUI/Label.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | package customUI; | ||||||
|  |  | ||||||
|  | public class Label extends javafx.scene.control.Label { | ||||||
|  |     public Label(String content){ | ||||||
|  |         super(Converter.convertString(content)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Label(){ | ||||||
|  |         super(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setTextValue(String text){ | ||||||
|  |         super.setText(Converter.convertString(text)); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								client/app/src/main/java/customUI/Tooltip.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								client/app/src/main/java/customUI/Tooltip.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | package customUI; | ||||||
|  |  | ||||||
|  | public class Tooltip extends javafx.scene.control.Tooltip { | ||||||
|  |  | ||||||
|  |     public Tooltip(String tollTipText){ | ||||||
|  |         super(Converter.convertString(tollTipText)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										68
									
								
								client/app/src/main/java/helper/SvgBtnCreator.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								client/app/src/main/java/helper/SvgBtnCreator.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | |||||||
|  | package helper; | ||||||
|  |  | ||||||
|  | import javafx.geometry.Bounds; | ||||||
|  | import javafx.scene.Group; | ||||||
|  | import customUI.Button; | ||||||
|  | import javafx.scene.control.ContentDisplay; | ||||||
|  | import customUI.Tooltip; | ||||||
|  | import javafx.scene.shape.SVGPath; | ||||||
|  |  | ||||||
|  | public class SvgBtnCreator { | ||||||
|  |  | ||||||
|  |     public static Button createBtn(Group group, int svgSize) { | ||||||
|  |         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); | ||||||
|  |  | ||||||
|  |         return btn; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static Button createBtn(Group group, int svgSize, String styleClass) { | ||||||
|  |         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.getStyleClass().add(styleClass); | ||||||
|  |  | ||||||
|  |         return btn; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     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; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -1,33 +1,42 @@ | |||||||
| package main; | package main; | ||||||
|  |  | ||||||
|  | import com.jfoenix.controls.*; | ||||||
|  | import helper.HttpRequestException; | ||||||
| import javafx.event.ActionEvent; | import javafx.event.ActionEvent; | ||||||
| import javafx.fxml.FXML; | import javafx.fxml.FXML; | ||||||
| import javafx.scene.Node; | import javafx.scene.Node; | ||||||
| import javafx.scene.control.*; | import javafx.scene.control.*; | ||||||
|  | import javafx.scene.layout.GridPane; | ||||||
| import javafx.stage.Stage; | import javafx.stage.Stage; | ||||||
|  | import javafx.util.StringConverter; | ||||||
|  | import javafx.util.converter.LocalTimeStringConverter; | ||||||
| import res.DataController; | import res.DataController; | ||||||
| import res.Event; | import res.Event; | ||||||
|  |  | ||||||
|  | import java.time.LocalTime; | ||||||
|  | import java.time.format.FormatStyle; | ||||||
|  | import java.util.Locale; | ||||||
|  |  | ||||||
| public class CreateEventController { | public class CreateEventController { | ||||||
|  |  | ||||||
|     @FXML |     @FXML | ||||||
|     public DatePicker datePickerDate; |     public GridPane mainGrid; | ||||||
|     @FXML |     @FXML | ||||||
|     public TextField textName; |     public JFXDatePicker datePickerDate; | ||||||
|     @FXML |     @FXML | ||||||
|     public TextField textStart; |     public JFXTextField textName; | ||||||
|     @FXML |     @FXML | ||||||
|     public TextField textEnd; |     public JFXComboBox<String> ComboBoxPriotity; | ||||||
|     @FXML |     @FXML | ||||||
|     public ComboBox<String> ComboBoxTyp; |     public JFXToggleButton toggleBtnIsFullDay; | ||||||
|     @FXML |     @FXML | ||||||
|     public ComboBox<String> ComboBoxPriotity; |     public JFXToggleButton toggleBtnIsPrivate; | ||||||
|     @FXML |  | ||||||
|     public CheckBox checkBoxIsFullDay; |  | ||||||
|     @FXML |  | ||||||
|     public CheckBox checkBoxIsPrivate; |  | ||||||
|     @FXML |     @FXML | ||||||
|     public Label labelError; |     public Label labelError; | ||||||
|  |     @FXML | ||||||
|  |     public JFXTimePicker timeStart; | ||||||
|  |     @FXML | ||||||
|  |     public JFXTimePicker timeEnd; | ||||||
|  |  | ||||||
|  |  | ||||||
|     public CreateEventController() { |     public CreateEventController() { | ||||||
| @@ -35,6 +44,12 @@ public class CreateEventController { | |||||||
|  |  | ||||||
|     @FXML |     @FXML | ||||||
|     public void initialize() { |     public void initialize() { | ||||||
|  |         StringConverter<LocalTime> defaultConverter = new LocalTimeStringConverter(FormatStyle.SHORT, Locale.GERMANY); | ||||||
|  |         timeStart.set24HourView(true); | ||||||
|  |         timeStart.setConverter(defaultConverter); | ||||||
|  |  | ||||||
|  |         timeEnd.set24HourView(true); | ||||||
|  |         timeEnd.setConverter(defaultConverter); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -45,29 +60,35 @@ public class CreateEventController { | |||||||
|                 throw new IllegalArgumentException("Bitte w\u00e4hle ein Datum aus"); |                 throw new IllegalArgumentException("Bitte w\u00e4hle ein Datum aus"); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             System.out.println(datePickerDate.getValue()); | ||||||
|  |  | ||||||
|             Event event = new Event( |             Event event = new Event( | ||||||
|                     textName.getText(), |                     textName.getText(), | ||||||
|                     ComboBoxPriotity.getSelectionModel().getSelectedIndex(), |                     ComboBoxPriotity.getSelectionModel().getSelectedIndex(), | ||||||
|                     checkBoxIsFullDay.isSelected(), |                     toggleBtnIsFullDay.isSelected(), | ||||||
|                     checkBoxIsPrivate.isSelected(), |                     toggleBtnIsPrivate.isSelected(), | ||||||
|                     textStart.getText(), |                     timeStart.getValue(), | ||||||
|                     textEnd.getText(), |                     timeEnd.getValue(), | ||||||
|                     datePickerDate.getValue().atStartOfDay(), |                     datePickerDate.getValue().atStartOfDay(), | ||||||
|                     (int) DataController.USER_ID |                     (int) DataController.USER_ID | ||||||
|             ); |             ); | ||||||
|  |  | ||||||
|             System.out.println(event.getAsUrlParam()); |             System.out.println(event.getAsUrlParam()); | ||||||
|  |  | ||||||
|             DataController dataController = new DataController(); |             sendHttpRequest(event); | ||||||
|             dataController.createEvent(event); |  | ||||||
|  |  | ||||||
|             Stage stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow(); |             Stage stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow(); | ||||||
|             stage.close(); |             stage.close(); | ||||||
|         } catch (RuntimeException e) { |         } catch (Exception e) { | ||||||
|             labelError.setText(e.getMessage()); |             labelError.setText(e.getMessage()); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     protected void sendHttpRequest(Event event) throws HttpRequestException { | ||||||
|  |         DataController dataController = new DataController(); | ||||||
|  |         dataController.createEvent(event); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @FXML |     @FXML | ||||||
|     protected void abortBtnClick(ActionEvent event) { |     protected void abortBtnClick(ActionEvent event) { | ||||||
|         Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); |         Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); | ||||||
|   | |||||||
							
								
								
									
										31
									
								
								client/app/src/main/java/main/EditEventController.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								client/app/src/main/java/main/EditEventController.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | |||||||
|  | package main; | ||||||
|  |  | ||||||
|  | import customUI.Converter; | ||||||
|  | import helper.HttpRequestException; | ||||||
|  | import res.DataController; | ||||||
|  | import res.Event; | ||||||
|  |  | ||||||
|  | public class EditEventController extends CreateEventController{ | ||||||
|  |  | ||||||
|  |     private Event currentEvent; | ||||||
|  |  | ||||||
|  |     public Event getCurrentEvent() { | ||||||
|  |         return currentEvent; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setCurrentEvent(Event currentEvent) { | ||||||
|  |         this.currentEvent = currentEvent; | ||||||
|  |  | ||||||
|  |         textName.setText(Converter.convertString(currentEvent.getName())); | ||||||
|  |         datePickerDate.setValue(currentEvent.getDate().toLocalDate()); | ||||||
|  |         ComboBoxPriotity.getSelectionModel().select(currentEvent.getPriority()); | ||||||
|  |  | ||||||
|  |         //timeEnd.setValue(currentEvent.getEnd()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void sendHttpRequest(Event event) throws HttpRequestException { | ||||||
|  |         DataController dataController = new DataController(); | ||||||
|  |         dataController.editEvent(currentEvent, event); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,10 +1,13 @@ | |||||||
| package main; | package main; | ||||||
|  |  | ||||||
|  | import config.Config; | ||||||
|  | import config.ConfigLoader; | ||||||
| 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.Stage; | import javafx.stage.Stage; | ||||||
| import res.DataController; | import res.DataController; | ||||||
|  | import res.HttpRequest; | ||||||
|  |  | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
| import java.util.Objects; | import java.util.Objects; | ||||||
| @@ -12,30 +15,56 @@ import java.util.Objects; | |||||||
| 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 { | ||||||
|                                                                                     //wieder ändern zu main-view.fxml |         Config config = ConfigLoader.load(); | ||||||
|         FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("../users/create-user.fxml")); |         if(config == null){ | ||||||
|  |             config = new Config(false, -1, ""); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         System.out.println("Ignore 'Illegal reflective access operation'-Warning. See https://github.com/sshahine/JFoenix/issues/1170"); | ||||||
|  |  | ||||||
|  |         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")); | ||||||
|  |  | ||||||
|         Scene scene = new Scene(fxmlLoader.load(), 1200, 700); |         Scene scene = new Scene(fxmlLoader.load(), 1200, 700); | ||||||
|         scene.getStylesheets().add(Objects.requireNonNull( |         scene.getStylesheets().add(Objects.requireNonNull( | ||||||
|                                                     //wieder ändern zu main-view.css |                 MainApplication.class.getResource("main-view.css")).toExternalForm() | ||||||
|                 MainApplication.class.getResource("../users/create-user.css")).toExternalForm()); |         ); | ||||||
|         stage.setTitle("SharePlaner"); |         stage.setTitle("SharePlaner"); | ||||||
|         stage.setScene(scene); |         stage.setScene(scene); | ||||||
|         //wieder löschen |  | ||||||
|         stage.show(); |         stage.show(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void loadLoginScene() throws IOException { | ||||||
|         FXMLLoader fxmlLoaderLogin = new FXMLLoader(MainApplication.class.getResource("../users/login.fxml")); |         FXMLLoader fxmlLoaderLogin = new FXMLLoader(MainApplication.class.getResource("../users/login.fxml")); | ||||||
|         Scene sceneLogin = new Scene(fxmlLoaderLogin.load(), 650, 500); |         Scene sceneLogin = new Scene(fxmlLoaderLogin.load(), 650, 500); | ||||||
|         sceneLogin.getStylesheets().add(Objects.requireNonNull( |         sceneLogin.getStylesheets().add(Objects.requireNonNull( | ||||||
|                 MainApplication.class.getResource("../users/login.css")).toExternalForm()); |                 MainApplication.class.getResource("../users/login.css")).toExternalForm() | ||||||
|  |         ); | ||||||
|         Stage stageLogin = new Stage(); |         Stage stageLogin = new Stage(); | ||||||
|         stageLogin.setTitle("Anmelden"); |         stageLogin.setTitle("Anmelden"); | ||||||
|         stageLogin.setScene(sceneLogin); |         stageLogin.setScene(sceneLogin); | ||||||
|         stageLogin.showAndWait(); |         stageLogin.showAndWait(); | ||||||
|  |  | ||||||
|         if (DataController.USER_ID >= 0) { |  | ||||||
|             stage.show(); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static void main(String[] args) { |     public static void main(String[] args) { | ||||||
|   | |||||||
| @@ -1,13 +1,17 @@ | |||||||
| package main; | package main; | ||||||
|  |  | ||||||
| import javafx.event.ActionEvent; | import config.Config; | ||||||
| import javafx.event.EventHandler; | import config.ConfigLoader; | ||||||
|  | import customUI.Button; | ||||||
|  | import customUI.Label; | ||||||
|  | import helper.SvgBtnCreator; | ||||||
|  | import helper.HttpRequestException; | ||||||
| import javafx.fxml.FXML; | import javafx.fxml.FXML; | ||||||
| import javafx.fxml.FXMLLoader; | import javafx.fxml.FXMLLoader; | ||||||
| import javafx.geometry.Pos; | import javafx.geometry.Pos; | ||||||
|  | import javafx.scene.Group; | ||||||
|  | import javafx.scene.Node; | ||||||
| import javafx.scene.Scene; | import javafx.scene.Scene; | ||||||
| import javafx.scene.control.Button; |  | ||||||
| import javafx.scene.control.Label; |  | ||||||
| import javafx.scene.control.ScrollPane; | 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; | ||||||
| @@ -17,6 +21,9 @@ import javafx.stage.Stage; | |||||||
| import res.DataController; | import res.DataController; | ||||||
| import res.Event; | import res.Event; | ||||||
|  |  | ||||||
|  | import javafx.event.ActionEvent; | ||||||
|  | import res.HttpRequest; | ||||||
|  |  | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
| import java.time.Duration; | import java.time.Duration; | ||||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||||
| @@ -26,11 +33,17 @@ import java.util.Objects; | |||||||
|  |  | ||||||
| public class MainController { | public class MainController { | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     public VBox leftNav; | ||||||
|  |     @FXML | ||||||
|  |     public GridPane mainGridPane; | ||||||
|  |     @FXML | ||||||
|  |     public HBox buttonBox; | ||||||
|     @FXML |     @FXML | ||||||
|     private GridPane calendarGrid; |     private GridPane calendarGrid; | ||||||
|  |  | ||||||
|     @FXML |     @FXML | ||||||
|     private Label LabelMonth; |     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 +61,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,11 +72,15 @@ 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 | ||||||
| @@ -107,10 +125,36 @@ public class MainController { | |||||||
|         updateEvents(); |         updateEvents(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     protected void onSettingBtnClick(){ | ||||||
|  |         try{ | ||||||
|  |             FXMLLoader fxmlLoader = new FXMLLoader( | ||||||
|  |                     MainApplication.class.getResource("option-view.fxml")); | ||||||
|  |             Scene scene = new Scene(fxmlLoader.load(), 650, 650); | ||||||
|  |             scene.getStylesheets().add(Objects.requireNonNull( | ||||||
|  |                     MainApplication.class.getResource("option-view.css")).toExternalForm()); | ||||||
|  |             Stage stage = new Stage(); | ||||||
|  |             stage.setTitle("Einstellungen"); | ||||||
|  |             stage.setScene(scene); | ||||||
|  |             stage.initModality(Modality.APPLICATION_MODAL); | ||||||
|  |             stage.setResizable(false); | ||||||
|  |             stage.showAndWait(); | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     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(); |             Label label = new Label(); | ||||||
|             label.setText(dayNames[i]); |             label.setTextValue(dayNames[i]); | ||||||
|             label.setMaxHeight(Double.MAX_VALUE); |             label.setMaxHeight(Double.MAX_VALUE); | ||||||
|             label.setMaxWidth(Double.MAX_VALUE); |             label.setMaxWidth(Double.MAX_VALUE); | ||||||
|             label.getStyleClass().add("labelDays"); |             label.getStyleClass().add("labelDays"); | ||||||
| @@ -141,15 +185,52 @@ public class MainController { | |||||||
|  |  | ||||||
|         HBox btnHBox = new HBox(); |         HBox btnHBox = new HBox(); | ||||||
|         btnHBox.setAlignment(Pos.BOTTOM_RIGHT); |         btnHBox.setAlignment(Pos.BOTTOM_RIGHT); | ||||||
|         Button deleteBtn = new Button(); |  | ||||||
|         deleteBtn.setText(" X "); |         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") | ||||||
|  |         ); | ||||||
|  |         Button deleteBtn = SvgBtnCreator.createBtn(svgDel, 24, "", "Löschen des Termins"); | ||||||
|  |  | ||||||
|  |         deleteBtn.getStyleClass().add("deleteEventBtn"); | ||||||
|         deleteBtn.setOnAction(e -> { |         deleteBtn.setOnAction(e -> { | ||||||
|             DataController dataController = new DataController(); |             DataController dataController = new DataController(); | ||||||
|             dataController.deleteEvent(event.getId()); |             try { | ||||||
|  |                 dataController.deleteEvent(event.getOwnerId(), event.getId(), event.getDate()); | ||||||
|  |             } catch (HttpRequestException ex) { | ||||||
|  |                 ex.printStackTrace(); | ||||||
|  |             } | ||||||
|             updateEvents(); |             updateEvents(); | ||||||
|         }); |         }); | ||||||
|         Button editBtn = new Button(); |  | ||||||
|         editBtn.setText("edit"); |         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") | ||||||
|  |         ); | ||||||
|  |         Button editBtn = SvgBtnCreator.createBtn(svgEdit, 24, "", "Bearbeiten des Termins"); | ||||||
|  |         editBtn.getStyleClass().add("editEventBtn"); | ||||||
|  |         editBtn.setOnAction(event1 -> { | ||||||
|  |             try { | ||||||
|  |                 FXMLLoader fxmlLoader = new FXMLLoader( | ||||||
|  |                         MainApplication.class.getResource("edit-event.fxml")); | ||||||
|  |                 Scene scene = new Scene(fxmlLoader.load(), 650, 650); | ||||||
|  |                 scene.getStylesheets().add(Objects.requireNonNull( | ||||||
|  |                         MainApplication.class.getResource("create-event.css")).toExternalForm()); | ||||||
|  |                 Stage stage = new Stage(); | ||||||
|  |                 stage.setTitle("Termin bearbeiten"); | ||||||
|  |                 stage.setScene(scene); | ||||||
|  |                 stage.initModality(Modality.APPLICATION_MODAL); | ||||||
|  |                 stage.setResizable(false); | ||||||
|  |                 EditEventController editEventController = fxmlLoader.getController(); | ||||||
|  |                 editEventController.setCurrentEvent(event); | ||||||
|  |                 stage.showAndWait(); | ||||||
|  |                 updateEvents(); | ||||||
|  |             } catch (IOException e) { | ||||||
|  |                 e.printStackTrace(); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|         btnHBox.getChildren().add(editBtn); |         btnHBox.getChildren().add(editBtn); | ||||||
|         btnHBox.getChildren().add(deleteBtn); |         btnHBox.getChildren().add(deleteBtn); | ||||||
|         vBox.getChildren().add(btnHBox); |         vBox.getChildren().add(btnHBox); | ||||||
| @@ -167,12 +248,6 @@ public class MainController { | |||||||
|         Label typeLabel = new Label("Wer: " + event.getOwnerName()); |         Label typeLabel = new Label("Wer: " + event.getOwnerName()); | ||||||
|         vBox.getChildren().add(typeLabel); |         vBox.getChildren().add(typeLabel); | ||||||
|  |  | ||||||
|         /* |  | ||||||
|         Ä, ä 		\u00c4, \u00e4 |  | ||||||
|         Ö, ö 		\u00d6, \u00f6 |  | ||||||
|         Ü, ü 		\u00dc, \u00fc |  | ||||||
|         ß 		    \u00df |  | ||||||
|          */ |  | ||||||
|         Label prioLabel = new Label("Priorit\u00e4t: " + event.getPriority()); |         Label prioLabel = new Label("Priorit\u00e4t: " + event.getPriority()); | ||||||
|         vBox.getChildren().add(prioLabel); |         vBox.getChildren().add(prioLabel); | ||||||
|  |  | ||||||
| @@ -211,10 +286,75 @@ public class MainController { | |||||||
|         weekStartDateTime = now.plusDays(weekOffset * 7L - dayOfWeek + 1); |         weekStartDateTime = now.plusDays(weekOffset * 7L - dayOfWeek + 1); | ||||||
|  |  | ||||||
|         for (int i = 0; i < 7; i++) { |         for (int i = 0; i < 7; i++) { | ||||||
|             dayLabel[i].setText(dayFormatter.format(weekStartDateTime.plusDays(i))); |             dayLabel[i].setTextValue(dayFormatter.format(weekStartDateTime.plusDays(i))); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         LabelMonth.setText(dateFormatter.format(weekStartDateTime)); |         LabelMonth.setText(dateFormatter.format(weekStartDateTime)); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private void createBtns(){ | ||||||
|  |         Group svgAdd = new Group( | ||||||
|  |                 SvgBtnCreator.createPath("M0 0h24v24H0z", "transparent", "transparent"), | ||||||
|  |                 SvgBtnCreator.createPath("M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z", | ||||||
|  |                         "white", "gray") | ||||||
|  |         ); | ||||||
|  |         Button addBtn = SvgBtnCreator.createBtn(svgAdd, 40, "main-btn", "Erstellt einen neuen Termin"); | ||||||
|  |         addBtn.setOnAction(e -> onAddBtnClick()); | ||||||
|  |         addBtn.getStyleClass().add("main-btn"); | ||||||
|  |         leftNav.getChildren().add(addBtn); | ||||||
|  |  | ||||||
|  |         Group svgSettings = new Group( | ||||||
|  |                 SvgBtnCreator.createPath("M0 0h24v24H0V0z", "transparent", "transparent"), | ||||||
|  |                 SvgBtnCreator.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") | ||||||
|  |         ); | ||||||
|  |         Button settingsBtn = SvgBtnCreator.createBtn(svgSettings, 40, "main-btn", "Öffnet die Einstellungen"); | ||||||
|  |         settingsBtn.setOnAction(e -> onSettingBtnClick()); | ||||||
|  |         settingsBtn.getStyleClass().add("main-btn"); | ||||||
|  |         leftNav.getChildren().add(settingsBtn); | ||||||
|  |  | ||||||
|  |         Group svgLogout = new Group( | ||||||
|  |                 SvgBtnCreator.createPath("M0 0h24v24H0z", "transparent", "transparent"), | ||||||
|  |                 SvgBtnCreator.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") | ||||||
|  |         ); | ||||||
|  |         Button logoutBtn = SvgBtnCreator.createBtn(svgLogout, 40, "main-btn", "Abmelden"); | ||||||
|  |         logoutBtn.setOnAction(this::onLogoutBtnClick); | ||||||
|  |         logoutBtn.getStyleClass().add("main-btn"); | ||||||
|  |         leftNav.getChildren().add(logoutBtn); | ||||||
|  |  | ||||||
|  |         Group svgBack = new Group( | ||||||
|  |                 SvgBtnCreator.createPath("M0 0h24v24H0z", "transparent", "transparent"), | ||||||
|  |                 SvgBtnCreator.createPath("M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z", | ||||||
|  |                         "white", "lightgray") | ||||||
|  |         ); | ||||||
|  |         Button backBtn = SvgBtnCreator.createBtn(svgBack, 40, "navBtn", "Zeigt die vorherige Woche"); | ||||||
|  |         backBtn.setOnAction(e -> onBackClick()); | ||||||
|  |         backBtn.getStyleClass().add("navBtn"); | ||||||
|  |         GridPane.setColumnIndex(backBtn, 1); | ||||||
|  |         buttonBox.getChildren().add(backBtn); | ||||||
|  |  | ||||||
|  |         Group svgToday = new Group( | ||||||
|  |                 SvgBtnCreator.createPath("M0 0h24v24H0z", "transparent", "transparent"), | ||||||
|  |                 SvgBtnCreator.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") | ||||||
|  |         ); | ||||||
|  |         Button todayBtn = SvgBtnCreator.createBtn(svgToday, 40, "navBtn", "Zeigt die aktuelle Woche"); | ||||||
|  |         todayBtn.setOnAction(e -> onTodayClick()); | ||||||
|  |         todayBtn.getStyleClass().add("navBtn"); | ||||||
|  |         GridPane.setColumnIndex(todayBtn, 2); | ||||||
|  |         buttonBox.getChildren().add(todayBtn); | ||||||
|  |  | ||||||
|  |         Group svgNext = new Group( | ||||||
|  |                 SvgBtnCreator.createPath("M0 0h24v24H0z", "transparent", "transparent"), | ||||||
|  |                 SvgBtnCreator.createPath("M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z", | ||||||
|  |                         "white", "lightgray") | ||||||
|  |         ); | ||||||
|  |         Button nextBtn = SvgBtnCreator.createBtn(svgNext, 40, "navBtn", "Zeigt die nächste Woche"); | ||||||
|  |         nextBtn.setOnAction(e -> onNextClick()); | ||||||
|  |         nextBtn.getStyleClass().add("navBtn"); | ||||||
|  |         GridPane.setColumnIndex(nextBtn, 3); | ||||||
|  |         buttonBox.getChildren().add(nextBtn); | ||||||
|  |     } | ||||||
| } | } | ||||||
							
								
								
									
										89
									
								
								client/app/src/main/java/main/OptionController.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								client/app/src/main/java/main/OptionController.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | |||||||
|  | package main; | ||||||
|  |  | ||||||
|  | import com.jfoenix.controls.*; | ||||||
|  | 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.Scene; | ||||||
|  | import javafx.scene.control.Label; | ||||||
|  | import javafx.scene.layout.GridPane; | ||||||
|  | import javafx.stage.Modality; | ||||||
|  | import javafx.stage.Stage; | ||||||
|  | import res.DataController; | ||||||
|  | import res.User; | ||||||
|  |  | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Objects; | ||||||
|  |  | ||||||
|  | public class OptionController { | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     public JFXButton updateUserBtn; | ||||||
|  |     @FXML | ||||||
|  |     public JFXButton deleteUserBtn; | ||||||
|  |     @FXML | ||||||
|  |     public JFXButton createUserBtn; | ||||||
|  |     @FXML | ||||||
|  |     public JFXToggleButton saveLoginTBtn; | ||||||
|  |     @FXML | ||||||
|  |     public Label labelError; | ||||||
|  |     @FXML | ||||||
|  |     public GridPane mainGrid; | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     public void initialize(){ | ||||||
|  |         DataController dataController = new DataController(); | ||||||
|  |         List<User> users; | ||||||
|  |         try{ | ||||||
|  |            users = dataController.getAllUser(); | ||||||
|  |         } catch (HttpRequestException e){ | ||||||
|  |            users = new ArrayList<>(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         ObservableList<String> observableUserList = FXCollections.observableArrayList(); | ||||||
|  |         for (User user: users) { | ||||||
|  |             observableUserList.add(user.getLogin()); | ||||||
|  |         } | ||||||
|  |         JFXComboBox<String> comboBox = new JFXComboBox<>(observableUserList); | ||||||
|  |         comboBox.getStyleClass().add("comboBox"); | ||||||
|  |         mainGrid.add(comboBox, 2,2); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void onBackBtnClick(ActionEvent actionEvent) { | ||||||
|  |         Stage stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow(); | ||||||
|  |         stage.close(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void onCreateBtnClick(ActionEvent actionEvent) { | ||||||
|  |         try{ | ||||||
|  |             FXMLLoader fxmlLoader = new FXMLLoader( | ||||||
|  |                     MainApplication.class.getResource("../users/create-user.fxml")); | ||||||
|  |             Scene scene = new Scene(fxmlLoader.load(), 800, 650); | ||||||
|  |             scene.getStylesheets().add(Objects.requireNonNull( | ||||||
|  |                     MainApplication.class.getResource("../users/create-user.css")).toExternalForm()); | ||||||
|  |             Stage stage = new Stage(); | ||||||
|  |             stage.setTitle("User erstellen"); | ||||||
|  |             stage.setScene(scene); | ||||||
|  |             stage.initModality(Modality.APPLICATION_MODAL); | ||||||
|  |             stage.setResizable(false); | ||||||
|  |             stage.showAndWait(); | ||||||
|  |             Stage stageOld = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow(); | ||||||
|  |             stageOld.close(); | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void onUpdateBtnClick(ActionEvent actionEvent) { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void onDeleteBtnClick(ActionEvent actionEvent) { | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,10 +1,12 @@ | |||||||
| package users; | package users; | ||||||
|  |  | ||||||
| import javafx.event.ActionEvent; | import javafx.event.ActionEvent; | ||||||
|  | import javafx.fxml.FXML; | ||||||
| import javafx.scene.Node; | import javafx.scene.Node; | ||||||
| import javafx.scene.control.CheckBox; |  | ||||||
| import javafx.scene.control.Label; | import javafx.scene.control.Label; | ||||||
|  | import javafx.scene.control.PasswordField; | ||||||
| import javafx.scene.control.TextField; | import javafx.scene.control.TextField; | ||||||
|  | import javafx.scene.control.ToggleButton; | ||||||
| import javafx.stage.Stage; | import javafx.stage.Stage; | ||||||
|  |  | ||||||
| import java.util.Objects; | import java.util.Objects; | ||||||
| @@ -12,30 +14,43 @@ import java.util.Objects; | |||||||
| public class CreateUserController { | public class CreateUserController { | ||||||
|  |  | ||||||
|     public TextField textName; |     public TextField textName; | ||||||
|     public TextField textPassword; |     public PasswordField textPassword; | ||||||
|     public TextField textPasswordSecond; |     public PasswordField textPasswordSecond; | ||||||
|     public CheckBox checkBoxIsAdmin; |     public ToggleButton checkButtonIsAdmin; | ||||||
|     public Label labelErrorName; |     public TextField textLogin; | ||||||
|     public Label labelErrorPw; |     public TextField textForename; | ||||||
|  |     public Label labelError; | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|     protected void createUser(ActionEvent event) { |     protected void createUser(ActionEvent event) { | ||||||
|  |         if (textLogin.getText().trim().isEmpty()){ | ||||||
|  |             labelError.setText("Bitte Login Namen angeben"); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         if (textForename.getText().trim().isEmpty()) { | ||||||
|  |             labelError.setText("Bitte Vornamen eingeben!"); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|         if (textName.getText().trim().isEmpty()) { |         if (textName.getText().trim().isEmpty()) { | ||||||
|             labelErrorName.setText("Bitte Usernamen eingeben!"); |             labelError.setText("Bitte Nachnamen eingeben!"); | ||||||
|             labelErrorPw.setText(""); |  | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         if (textPassword.getText().trim().isEmpty()) { |         if (textPassword.getText().trim().isEmpty()) { | ||||||
|             labelErrorName.setText(""); |             labelError.setText("Bitte Passwort eingeben!"); | ||||||
|             labelErrorPw.setText("Bitte Passwort eingeben!"); |  | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         if (Objects.equals(textPassword.getText(), textPasswordSecond.getText())){ |         if (!Objects.equals(textPassword.getText(), textPasswordSecond.getText())){ | ||||||
|             labelErrorName.setText(""); |             labelError.setText("Passwörter stimmen nicht überein!"); | ||||||
|             labelErrorPw.setText("Passwörter stimmen nicht überein!"); |  | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); |         Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); | ||||||
|         stage.close(); |         stage.close(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @FXML | ||||||
|  |     protected void abortBtnClick(ActionEvent event) { | ||||||
|  |         Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); | ||||||
|  |         stage.close(); | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,18 +1,18 @@ | |||||||
| package users; | package users; | ||||||
|  |  | ||||||
|  | import com.jfoenix.controls.*; | ||||||
| import javafx.event.ActionEvent; | import javafx.event.ActionEvent; | ||||||
| import javafx.fxml.FXML; | import javafx.fxml.FXML; | ||||||
| import javafx.scene.Node; | import javafx.scene.Node; | ||||||
| import javafx.scene.control.Label; | import javafx.scene.control.Label; | ||||||
| import javafx.scene.control.TextField; |  | ||||||
| import javafx.stage.Stage; | import javafx.stage.Stage; | ||||||
| import res.DataController; | import res.DataController; | ||||||
|  |  | ||||||
| public class LoginController { | public class LoginController { | ||||||
|     @FXML |     @FXML | ||||||
|     public TextField userField; |     public JFXTextField userField; | ||||||
|     @FXML |     @FXML | ||||||
|     public TextField passField; |     public JFXPasswordField passField; | ||||||
|     @FXML |     @FXML | ||||||
|     public Label userErrLabel; |     public Label userErrLabel; | ||||||
|     @FXML |     @FXML | ||||||
|   | |||||||
| @@ -28,10 +28,16 @@ Label{ | |||||||
|  |  | ||||||
| .inputField{ | .inputField{ | ||||||
|     -fx-padding: 10px; |     -fx-padding: 10px; | ||||||
|  |     -fx-background-color: white; | ||||||
| } | } | ||||||
|  |  | ||||||
| .mainButton{ | .mainButton{ | ||||||
|     -fx-font-weight: bold; |     -fx-font-weight: bold; | ||||||
|  |     -fx-background-color: white; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | JFXButton{ | ||||||
|  |     -fx-background-color: white; | ||||||
| } | } | ||||||
|  |  | ||||||
| #labelError{ | #labelError{ | ||||||
| @@ -44,3 +50,15 @@ Label{ | |||||||
|     -fx-wrap-text: true; |     -fx-wrap-text: true; | ||||||
|     -fx-font-size: 16px; |     -fx-font-size: 16px; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .inputDate{ | ||||||
|  |     -fx-background-color: white; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .comboBox{ | ||||||
|  |     -fx-background-color: white; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .timePicker{ | ||||||
|  |     -fx-background-color: white; | ||||||
|  | } | ||||||
| @@ -5,7 +5,9 @@ | |||||||
|  |  | ||||||
| <?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" | <?import com.jfoenix.controls.*?> | ||||||
|  |  | ||||||
|  | <GridPane fx:id="mainGrid" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" | ||||||
|           fx:controller="main.CreateEventController"> |           fx:controller="main.CreateEventController"> | ||||||
|  |  | ||||||
|     <columnConstraints> |     <columnConstraints> | ||||||
| @@ -23,26 +25,25 @@ | |||||||
|         <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="ComboBoxPriotity" 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"/> | ||||||
| @@ -50,14 +51,14 @@ | |||||||
|                 <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="9"/> |     <Label fx:id="labelError" GridPane.columnIndex="1" GridPane.rowIndex="8"/> | ||||||
|  |  | ||||||
|     <HBox GridPane.columnIndex="1" GridPane.rowIndex="10" 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> | ||||||
|   | |||||||
							
								
								
									
										64
									
								
								client/app/src/main/resources/main/edit-event.fxml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								client/app/src/main/resources/main/edit-event.fxml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  |  | ||||||
|  | <?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="main.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="ComboBoxPriotity" 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> | ||||||
| @@ -63,12 +63,58 @@ Label{ | |||||||
| } | } | ||||||
|  |  | ||||||
| .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: #77859E; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .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; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -14,22 +14,13 @@ | |||||||
|     <rowConstraints> |     <rowConstraints> | ||||||
|         <RowConstraints vgrow="SOMETIMES"/> |         <RowConstraints vgrow="SOMETIMES"/> | ||||||
|     </rowConstraints> |     </rowConstraints> | ||||||
|     <VBox alignment="TOP_CENTER" prefHeight="200.0" prefWidth="100.0" spacing="5.0" |     <VBox fx:id="leftNav" alignment="TOP_CENTER" prefHeight="200.0" prefWidth="100.0" spacing="5.0" | ||||||
|           style="-fx-background-color: #525E74;"> |           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/> | ||||||
| @@ -48,9 +39,8 @@ | |||||||
|                 <Insets left="5"/> |                 <Insets left="5"/> | ||||||
|             </padding> |             </padding> | ||||||
|         </Label> |         </Label> | ||||||
|         <Button onAction="#onBackClick" GridPane.columnIndex="1" maxHeight="1.7976931348623157E308">zurück</Button> |  | ||||||
|         <Button onAction="#onTodayClick" GridPane.columnIndex="2" maxHeight="1.7976931348623157E308">heute</Button> |         <HBox fx:id="buttonBox" styleClass="buttonBox" GridPane.columnIndex="1" alignment="CENTER"/> | ||||||
|         <Button onAction="#onNextClick" GridPane.columnIndex="3" maxHeight="1.7976931348623157E308">weiter</Button> |  | ||||||
|  |  | ||||||
|         <GridPane fx:id="calendarGrid" gridLinesVisible="true" styleClass="gridCalendar" GridPane.columnSpan="4" |         <GridPane fx:id="calendarGrid" gridLinesVisible="true" styleClass="gridCalendar" GridPane.columnSpan="4" | ||||||
|                   GridPane.columnIndex="0" GridPane.rowIndex="1"> |                   GridPane.columnIndex="0" GridPane.rowIndex="1"> | ||||||
|   | |||||||
							
								
								
									
										58
									
								
								client/app/src/main/resources/main/option-view.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								client/app/src/main/resources/main/option-view.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | |||||||
|  | GridPane{ | ||||||
|  |     -fx-background-color: #3E415F; | ||||||
|  |     -fx-padding: 20px; | ||||||
|  |     -fx-font-size: 20px; | ||||||
|  |     -fx-font-family: Segoe UI; | ||||||
|  |  | ||||||
|  |     -fx-border-insets: 1; | ||||||
|  |     -fx-border-color: #B0B0B0; | ||||||
|  |     -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: white; | ||||||
|  |     -fx-max-width: 200px; | ||||||
|  |     -fx-min-width: 200px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .mainLabel{ | ||||||
|  |     -fx-background-color: #8D99AE; | ||||||
|  |     -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: white; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | JFXButton{ | ||||||
|  |     -fx-background-color: white; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #labelError{ | ||||||
|  |     -fx-font-weight: bold; | ||||||
|  |     -fx-max-width: 1000px; | ||||||
|  |     -fx-text-fill: #ff5555; | ||||||
|  |     -fx-padding: 16px; | ||||||
|  |     -fx-min-height: 140px; | ||||||
|  |     -fx-max-height: 400px; | ||||||
|  |     -fx-wrap-text: true; | ||||||
|  |     -fx-font-size: 16px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .comboBox{ | ||||||
|  |     -fx-background-color: white; | ||||||
|  |     -fx-max-width: 200px; | ||||||
|  |     -fx-min-width: 200px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .userBtn{ | ||||||
|  |     -fx-max-width: 200px; | ||||||
|  |     -fx-min-width: 200px; | ||||||
|  | } | ||||||
							
								
								
									
										51
									
								
								client/app/src/main/resources/main/option-view.fxml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								client/app/src/main/resources/main/option-view.fxml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  |  | ||||||
|  | <?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"/> | ||||||
|  |  | ||||||
|  |     <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,56 @@ | |||||||
|  | * { | ||||||
|  |    -fx-base-background-color: #2B2D42; | ||||||
|  |    -fx-base1-background-color: #525E74; | ||||||
|  |  | ||||||
|  |    -fx-main-border-color: #B0B0B0; | ||||||
|  |    -fx-main-text-color: #ffffff; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | GridPane{ | ||||||
|  |     -fx-background-color: #3E415F; | ||||||
|  |     -fx-padding: 20px; | ||||||
|  |     -fx-font-size: 20px; | ||||||
|  |     -fx-font-family: Segoe UI; | ||||||
|  |  | ||||||
|  |     -fx-border-insets: 1; | ||||||
|  |     -fx-border-color: #B0B0B0; | ||||||
|  |     -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: white; | ||||||
|  |     -fx-max-width: 150px; | ||||||
|  |     -fx-min-width: 150px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .textField{ | ||||||
|  |     -fx-max-width: 400px; | ||||||
|  |     -fx-min-width: 400px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .errorMessage{ | ||||||
|  |     -fx-max-width: 400px; | ||||||
|  |     -fx-min-width: 400px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Button{ | ||||||
|  |     -fx-max-width: 150px; | ||||||
|  |     -fx-min-width: 150px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .btnLogin{ | ||||||
|  |     -fx-font-weight: bold; | ||||||
|  | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,14 +2,14 @@ | |||||||
|  |  | ||||||
| <?import javafx.scene.control.*?> | <?import javafx.scene.control.*?> | ||||||
| <?import javafx.scene.layout.*?> | <?import javafx.scene.layout.*?> | ||||||
|  | <?import javafx.geometry.Insets?> | ||||||
| <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> |     </columnConstraints> | ||||||
|     <rowConstraints> |     <rowConstraints> | ||||||
|         <RowConstraints vgrow="ALWAYS" /> |         <RowConstraints vgrow="ALWAYS" /> | ||||||
| @@ -19,22 +19,38 @@ | |||||||
|         <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" GridPane.columnIndex="2" GridPane.columnSpan="2" >User anlegen</Label> |     <Label styleClass="mainLabel" GridPane.columnIndex="2" >User anlegen</Label> | ||||||
|  |  | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="1" GridPane.columnIndex="1">Name:</Label> |     <Label styleClass="inputLabel" GridPane.rowIndex="1" GridPane.columnIndex="1">Login:</Label> | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="3" GridPane.columnIndex="1">Passwort:</Label> |     <Label styleClass="inputLabel" GridPane.rowIndex="2" GridPane.columnIndex="1">Vorname:</Label> | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="4" GridPane.columnIndex="1">Passwort wiederholen:</Label> |     <Label styleClass="inputLabel" GridPane.rowIndex="3" GridPane.columnIndex="1">Nachname:</Label> | ||||||
|     <Label styleClass="inputLabel" GridPane.rowIndex="6" GridPane.columnIndex="1">Admin:</Label> |     <Label styleClass="inputLabel" GridPane.rowIndex="4" GridPane.columnIndex="1">Passwort:</Label> | ||||||
|  |     <Label styleClass="inputLabel" 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"/> |     <TextField fx:id="textLogin" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="1" /> | ||||||
|  |     <TextField fx:id="textForename" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="2" /> | ||||||
|  |     <TextField fx:id="textName" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="3" /> | ||||||
|  |     <PasswordField fx:id="textPassword" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="4" /> | ||||||
|  |     <PasswordField fx:id="textPasswordSecond" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="5" /> | ||||||
|  |  | ||||||
|     <Label fx:id="labelErrorName" GridPane.columnIndex="3" GridPane.rowIndex="1"/> |     <ToggleButton fx:id="checkButtonIsAdmin" GridPane.columnIndex="2" GridPane.rowIndex="6"/> | ||||||
|     <Label fx:id="labelErrorPw" GridPane.columnIndex="3" GridPane.rowIndex="3"/> |  | ||||||
|  |     <Label fx:id="labelError" 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> | ||||||
|  |         <Button onAction="#abortBtnClick">Abbrechen</Button> | ||||||
|  |         <Button onAction="#createUser" styleClass="btnLogin" >Anmelden</Button> | ||||||
|  |  | ||||||
|  |     </HBox> | ||||||
| </GridPane> | </GridPane> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -35,3 +35,19 @@ Label{ | |||||||
|         -fx-wrap-text: true; |         -fx-wrap-text: true; | ||||||
|         -fx-font-size: 16px; |         -fx-font-size: 16px; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .userField{ | ||||||
|  |     -fx-background-color: white; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .passField{ | ||||||
|  |     -fx-background-color: white; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .quitBtn{ | ||||||
|  |     -fx-background-color: white; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .loginBtn{ | ||||||
|  |     -fx-background-color: white; | ||||||
|  | } | ||||||
| @@ -2,6 +2,8 @@ | |||||||
|  |  | ||||||
| <?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.LoginController"> | <GridPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="users.LoginController"> | ||||||
|  |  | ||||||
|     <columnConstraints> |     <columnConstraints> | ||||||
| @@ -19,14 +21,14 @@ | |||||||
|     <Label GridPane.columnIndex="1">Anmelden</Label> |     <Label GridPane.columnIndex="1">Anmelden</Label> | ||||||
|  |  | ||||||
|     <Label GridPane.rowIndex="1">Username</Label> |     <Label GridPane.rowIndex="1">Username</Label> | ||||||
|     <TextField GridPane.columnIndex="1" GridPane.rowIndex="1" fx:id="userField"/> |     <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 styleClass="errorLbl" GridPane.columnIndex="2" GridPane.rowIndex="1" fx:id="userErrLabel"/> | ||||||
|  |  | ||||||
|     <Label GridPane.rowIndex="2">Paswort</Label> |     <Label GridPane.rowIndex="2">Paswort</Label> | ||||||
|     <PasswordField GridPane.columnIndex="1" GridPane.rowIndex="2" fx:id="passField"/> |     <JFXPasswordField styleClass="passField" GridPane.columnIndex="1" GridPane.rowIndex="2" fx:id="passField"/> | ||||||
|     <Label styleClass="errorLbl" GridPane.columnIndex="2" GridPane.rowIndex="2" fx:id="passErrLabel"/> |     <Label styleClass="errorLbl" GridPane.columnIndex="2" GridPane.rowIndex="2" fx:id="passErrLabel"/> | ||||||
|  |  | ||||||
|     <Button onAction="#abortBtnClick" GridPane.columnIndex="1" GridPane.rowIndex="3">Beenden</Button> |     <JFXButton styleClass="quitBtn" onAction="#abortBtnClick" GridPane.columnIndex="1" GridPane.rowIndex="3">Beenden</JFXButton> | ||||||
|     <Button onAction="#login" GridPane.columnIndex="2" GridPane.rowIndex="3">Anmelden</Button> |     <JFXButton styleClass="loginBtn" onAction="#login" GridPane.columnIndex="2" GridPane.rowIndex="3">Anmelden</JFXButton> | ||||||
|  |  | ||||||
| </GridPane> | </GridPane> | ||||||
|   | |||||||
| @@ -7,4 +7,5 @@ dependencies { | |||||||
|     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") | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										41
									
								
								client/data/src/main/java/config/Config.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								client/data/src/main/java/config/Config.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | |||||||
|  | package config; | ||||||
|  |  | ||||||
|  | public class Config { | ||||||
|  |     private boolean saveLogin; | ||||||
|  |     private long id; | ||||||
|  |     private String token; | ||||||
|  |  | ||||||
|  |     public Config(){ | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Config(boolean saveLogin, long id, String token) { | ||||||
|  |         this.saveLogin = saveLogin; | ||||||
|  |         this.id = id; | ||||||
|  |         this.token = token; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean 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; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										37
									
								
								client/data/src/main/java/config/ConfigLoader.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								client/data/src/main/java/config/ConfigLoader.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | 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"); | ||||||
|  |         } | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static void save(Config config){ | ||||||
|  |         ObjectMapper objectMapper = new ObjectMapper(); | ||||||
|  |         objectMapper.findAndRegisterModules(); | ||||||
|  |  | ||||||
|  |         try { | ||||||
|  |             Files.writeString(Paths.get( | ||||||
|  |                     "config.json"), | ||||||
|  |                     objectMapper.writeValueAsString(config) | ||||||
|  |             ); | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								client/data/src/main/java/helper/HttpRequestException.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								client/data/src/main/java/helper/HttpRequestException.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | package helper; | ||||||
|  |  | ||||||
|  | public class HttpRequestException extends Exception{ | ||||||
|  |     private int status; | ||||||
|  |  | ||||||
|  |     public HttpRequestException(String message, int status) { | ||||||
|  |         super(message); | ||||||
|  |         this.status = status; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public HttpRequestException(Tuple<Integer, String> response) { | ||||||
|  |         super(response.getValue()); | ||||||
|  |         this.status = response.getKey(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public int getStatus() { | ||||||
|  |         return status; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setStatus(int status) { | ||||||
|  |         this.status = status; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										27
									
								
								client/data/src/main/java/helper/Tuple.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								client/data/src/main/java/helper/Tuple.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | 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,26 +1,31 @@ | |||||||
| package res; | package res; | ||||||
|  |  | ||||||
| import com.fasterxml.jackson.core.JsonProcessingException; | import com.fasterxml.jackson.core.JsonProcessingException; | ||||||
|  | import com.fasterxml.jackson.core.type.TypeReference; | ||||||
| import com.fasterxml.jackson.databind.ObjectMapper; | import com.fasterxml.jackson.databind.ObjectMapper; | ||||||
|  | import helper.HttpRequestException; | ||||||
|  | import helper.Tuple; | ||||||
|  |  | ||||||
| import java.io.BufferedReader; | import java.time.LocalDateTime; | ||||||
| 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.*; | import java.util.*; | ||||||
|  |  | ||||||
| public class DataController { | public class DataController { | ||||||
|  |  | ||||||
|     public static long USER_ID = -1; |     public static long USER_ID = -1; | ||||||
|  |  | ||||||
|     private static final String ALL_EVENTS_ENDPOINT = "http://localhost:8080/vpr/all-events"; |     private static final String ALL_EVENTS_ENDPOINT = "http://localhost:8080/event/all"; | ||||||
|     private static final String ALL_USERS_ENDPOINT = "http://localhost:8080/vpr/all-users"; |     private static final String ADD_EVENT_ENDPOINT = "http://localhost:8080/event/add"; | ||||||
|     private static final String ADD_EVENT_ENDPOINT = "http://localhost:8080/vpr/add-event"; |     private static final String DELETE_EVENT_ENDPOINT = "http://localhost:8080/event/del"; | ||||||
|     private static final String DELETE_EVENT_ENDPOINT = "http://localhost:8080/vpr/del-event"; |     private static final String EDIT_EVENT_ENDPOINT = "http://localhost:8080/event/edit"; | ||||||
|     private static final String LOGIN_ENDPOINT = "http://localhost:8080/vpr/login"; |  | ||||||
|  |     private static final String ALL_USER_ENDPOINT = "http://localhost:8080/user/all"; | ||||||
|  |     private static final String ADD_USER_ENDPOINT = "http://localhost:8080/user/add"; | ||||||
|  |     private static final String DELETE_USER_ENDPOINT = "http://localhost:8080/user/del"; | ||||||
|  |     private static final String EDIT_USER_ENDPOINT = "http://localhost:8080/user/edit"; | ||||||
|  |  | ||||||
|  |     private static final String LOGIN_ENDPOINT = "http://localhost:8080/user/login"; | ||||||
|  |     private static final String LOGIN_WITH_TOKEN_ENDPOINT = "http://localhost:8080/user/login-with-token"; | ||||||
|  |     private static final String HEADER_TEST_ENDPOINT = "http://localhost:8080/vpr/header-test"; | ||||||
|  |  | ||||||
|     private final HttpRequest httpRequest; |     private final HttpRequest httpRequest; | ||||||
|  |  | ||||||
| @@ -30,84 +35,170 @@ public class DataController { | |||||||
|  |  | ||||||
|     public boolean login(String username, String password) { |     public boolean login(String username, String password) { | ||||||
|         try { |         try { | ||||||
|             USER_ID = Long.parseLong(httpRequest.sendPostRequest( |             Tuple<Integer, String> response = httpRequest.sendPostRequest( | ||||||
|                     LOGIN_ENDPOINT, |                     LOGIN_ENDPOINT, | ||||||
|                     "login=" + username |                     "login=" + username | ||||||
|                             + "&password=" + password |                             + "&password=" + password, | ||||||
|             )); |                     false | ||||||
|  |             ); | ||||||
|  |             String[] data = response.getValue().split("\\s+"); | ||||||
|  |  | ||||||
|  |             USER_ID = Long.parseLong(data[1]); | ||||||
|  |             HttpRequest.TOKEN = data[0]; | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             e.printStackTrace(); |             e.printStackTrace(); | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return USER_ID >= 0; |         return USER_ID >= 0; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void createEvent(Event event) { |     public boolean loginWithToken(long userId, String token) { | ||||||
|         try { |         try { | ||||||
|             System.out.println(httpRequest.sendPostRequest(ADD_EVENT_ENDPOINT, event.getAsUrlParam())); |             HttpRequest.TOKEN = token; | ||||||
|         } catch (Exception e) { |             Tuple<Integer, String> response = httpRequest.sendPostRequest( | ||||||
|             throw new RuntimeException("Es konnte keine Verbindung mit dem Server hergestellt werden."); |                     LOGIN_WITH_TOKEN_ENDPOINT, | ||||||
|         } |                     "userId=" + userId, | ||||||
|     } |                     true | ||||||
|  |             ); | ||||||
|  |  | ||||||
|     public void deleteEvent(int eventId) { |             System.out.println(response.getKey() + " " + response.getValue()); | ||||||
|         try { |  | ||||||
|             System.out.println(httpRequest.sendPostRequest(DELETE_EVENT_ENDPOINT, "eventId=" + eventId)); |             if (response.getKey() != 200) return false; | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             e.printStackTrace(); |             e.printStackTrace(); | ||||||
|  |             return false; | ||||||
|         } |         } | ||||||
|  |         USER_ID = userId; | ||||||
|  |         HttpRequest.TOKEN = token; | ||||||
|  |         return USER_ID >= 0; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ArrayList<Event> getAllVisibleEvents() { |     /********* | ||||||
|         ArrayList<Event> eventList = new ArrayList<>(); |      * Event * | ||||||
|  |      *********/ | ||||||
|  |     public void createEvent(Event event) throws HttpRequestException { | ||||||
|  |         sendBasicHttpRequest( | ||||||
|  |                 ADD_EVENT_ENDPOINT, | ||||||
|  |                 event.getAsUrlParam(), | ||||||
|  |                 true | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void deleteEvent(int userId, int eventId, LocalDateTime date) throws HttpRequestException { | ||||||
|  |         sendBasicHttpRequest( | ||||||
|  |                 DELETE_EVENT_ENDPOINT, | ||||||
|  |                 "userId=" + userId + "&eventId=" + eventId + "&date=" + date.toLocalDate(), | ||||||
|  |                 true | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void editEvent(Event oldEvent, Event event) throws HttpRequestException { | ||||||
|  |         sendBasicHttpRequest( | ||||||
|  |                 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 { |         try { | ||||||
|             String jsonResponse = httpRequest.sendPostRequest(ALL_EVENTS_ENDPOINT, "userId=" + USER_ID); |             Tuple<Integer, String> response = httpRequest.sendPostRequest( | ||||||
|  |                     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); |             System.out.println(jsonResponse); | ||||||
|  |  | ||||||
|             ObjectMapper objectMapper = new ObjectMapper(); |             ObjectMapper objectMapper = new ObjectMapper(); | ||||||
|             //String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }"; |             objectMapper.findAndRegisterModules(); | ||||||
|  |             return (ArrayList<Event>) objectMapper.readValue(jsonResponse, new TypeReference<List<Event>>() {}); | ||||||
|  |  | ||||||
|             for (Object obj : objectMapper.readValue(jsonResponse, Object[].class)) { |         } catch (HttpRequestException e) { | ||||||
|                 ArrayList<Object> list = new ArrayList<>(); |             throw e; | ||||||
|                 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) { |         } catch (Exception e) { | ||||||
|             e.printStackTrace(); |             throw new HttpRequestException("Es konnte keine Verbindung mit dem Server hergestellt werden.", 600); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|         return eventList; |     /******** | ||||||
|     } |      * User * | ||||||
|  |      ********/ | ||||||
|  |  | ||||||
|     public Event[] getAllEvents() { |     public List<User> getAllUser() throws HttpRequestException { | ||||||
|         Event[] eventList = null; |         String userJSON = sendBasicHttpRequest( | ||||||
|  |                 ALL_USER_ENDPOINT, | ||||||
|  |                 "", | ||||||
|  |                 true | ||||||
|  |         ); | ||||||
|  |  | ||||||
|         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(); |         ObjectMapper objectMapper = new ObjectMapper(); | ||||||
|         //String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }"; |         objectMapper.findAndRegisterModules(); | ||||||
|  |         try { | ||||||
|  |             return (List<User>)objectMapper.readValue(userJSON, new TypeReference<List<User>>() {}); | ||||||
|  |         } catch (JsonProcessingException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|  |         return new ArrayList<>(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|         return objectMapper.readValue(jsonString, Event[].class); |     public void createUser(User user) throws HttpRequestException { | ||||||
|  |         sendBasicHttpRequest( | ||||||
|  |                 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( | ||||||
|  |                 DELETE_USER_ENDPOINT, | ||||||
|  |                 "userId=" + user.getUserId(), | ||||||
|  |                 true | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void editUser(User oldUser, User user) throws HttpRequestException { | ||||||
|  |         sendBasicHttpRequest( | ||||||
|  |                 EDIT_USER_ENDPOINT, | ||||||
|  |                 "", | ||||||
|  |                 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); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -2,9 +2,13 @@ package res; | |||||||
|  |  | ||||||
| import com.sun.jdi.event.StepEvent; | import com.sun.jdi.event.StepEvent; | ||||||
|  |  | ||||||
|  | import java.io.Serializable; | ||||||
|  | import java.nio.charset.StandardCharsets; | ||||||
|  | import java.sql.SQLOutput; | ||||||
| import java.time.Duration; | import java.time.Duration; | ||||||
| import java.time.LocalDate; | import java.time.LocalDate; | ||||||
| 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.ArrayList; | ||||||
| import java.util.regex.Matcher; | import java.util.regex.Matcher; | ||||||
| @@ -26,55 +30,26 @@ 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 { |     ) throws IllegalArgumentException { | ||||||
|  |  | ||||||
|  |         System.out.println("Create Event"); | ||||||
|         if (name.length() < 3) { |         if (name.length() < 3) { | ||||||
|             throw new IllegalArgumentException("Der Name muss eine L\u00e4nge von 3 haben."); |             throw new IllegalArgumentException("Der Name muss eine L\u00e4nge von 3 haben."); | ||||||
|         } |         } | ||||||
|         Pattern pattern = Pattern.compile("[A-Za-zÄÖÜäöü0-9 =!?+*/$%€.:,;_<>()-]*"); |         Pattern pattern = Pattern.compile("[A-Za-z\u00e4\u00f6\u00fc\u00c4\u00d6\u00dc\u00df0-9 =!?+*/$.:,;_<>()-]*"); | ||||||
|         Matcher matcher = pattern.matcher(name); |         Matcher matcher = pattern.matcher(name); | ||||||
|         if (!matcher.matches()) { |         if (!matcher.matches()) { | ||||||
|             throw new IllegalArgumentException("Der Name Darf nur aus Zahlen, Buchstaben und " + |             throw new IllegalArgumentException("Der Name darf nur aus Zahlen, Buchstaben und folgenden Sonderzeichen bestehen: \u00e4\u00f6\u00fc \u00c4\u00d6\u00dc \u00df =!?+*/$.:,;_ <>()-"); | ||||||
|                     "folgenden Sonderzeichen bestehen: =!?+*/$%€.:,;_ <>()-"); |  | ||||||
|         } |         } | ||||||
|         if (priority < 0) { |         if (priority < 0) { | ||||||
|             throw new IllegalArgumentException("Bitte eine Priorit\u00e4t w\u00e4hlen."); |             throw new IllegalArgumentException("Bitte eine Priorit\u00e4t w\u00e4hlen."); | ||||||
| @@ -88,8 +63,8 @@ public class Event { | |||||||
|         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 (start != null) this.end = end.toString(); | ||||||
|         this.date = date; |         this.date = date; | ||||||
|         this.ownerId = ownerId; |         this.ownerId = ownerId; | ||||||
|     } |     } | ||||||
| @@ -107,7 +82,9 @@ public class Event { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void setName(String name) { |     public void setName(String name) { | ||||||
|  |         System.out.println(name); | ||||||
|         this.name = name; |         this.name = name; | ||||||
|  |         System.out.println(this.name); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public int getPriority() { |     public int getPriority() { | ||||||
| @@ -154,8 +131,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() { | ||||||
| @@ -189,7 +167,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(); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -1,7 +1,10 @@ | |||||||
| package res; | package res; | ||||||
|  |  | ||||||
|  | import helper.Tuple; | ||||||
|  |  | ||||||
| import java.io.BufferedReader; | import java.io.BufferedReader; | ||||||
| import java.io.DataOutputStream; | import java.io.DataOutputStream; | ||||||
|  | import java.io.IOException; | ||||||
| import java.io.InputStreamReader; | import java.io.InputStreamReader; | ||||||
| import java.net.HttpURLConnection; | import java.net.HttpURLConnection; | ||||||
| import java.net.URL; | import java.net.URL; | ||||||
| @@ -9,68 +12,67 @@ import java.nio.charset.StandardCharsets; | |||||||
| import java.util.Arrays; | import java.util.Arrays; | ||||||
|  |  | ||||||
| public class HttpRequest { | public class HttpRequest { | ||||||
|     public String sendPostRequest(String urlString, String urlParameters) throws Exception { |     public static String TOKEN = ""; | ||||||
|  |  | ||||||
|  |     public Tuple<Integer, String> sendPostRequest(String urlString, String urlParameters, boolean sendAuth) throws Exception { | ||||||
|         byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8); |         byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8); | ||||||
|         int postDataLength = postData.length; |         int postDataLength = postData.length; | ||||||
|  |  | ||||||
|         URL url = new URL(urlString); |         URL url = new URL(urlString); | ||||||
|         HttpURLConnection con = (HttpURLConnection) url.openConnection(); |         HttpURLConnection connection = (HttpURLConnection) url.openConnection(); | ||||||
|  |  | ||||||
|         con.setDoOutput(true); |         connection.setDoOutput(true); | ||||||
|         con.setInstanceFollowRedirects(false); |         connection.setInstanceFollowRedirects(false); | ||||||
|         con.setRequestMethod("POST"); |         connection.setRequestMethod("POST"); | ||||||
|         con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); |         connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); | ||||||
|         con.setRequestProperty("charset", "utf-8"); |         connection.setRequestProperty("charset", "utf-8"); | ||||||
|         con.setRequestProperty("Content-Length", Integer.toString(postDataLength)); |         connection.setRequestProperty("Content-Length", Integer.toString(postDataLength)); | ||||||
|         con.setUseCaches(false); |         connection.setUseCaches(false); | ||||||
|         try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) { |  | ||||||
|             wr.write(postData); |         if(sendAuth){ | ||||||
|  |             connection.setRequestProperty("Accept", "application/json"); | ||||||
|  |             connection.setRequestProperty("Authorization", "Bearer " + TOKEN); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         int status = con.getResponseCode(); |         try (DataOutputStream writer = new DataOutputStream(connection.getOutputStream())) { | ||||||
|         if (status == 200) { |             writer.write(postData); | ||||||
|             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 { |         return getHttpTuple(connection); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Tuple<Integer, String> sendGetRequest(String urlString) throws Exception { | ||||||
|         URL url = new URL(urlString); |         URL url = new URL(urlString); | ||||||
|         HttpURLConnection con = (HttpURLConnection) url.openConnection(); |         HttpURLConnection connection = (HttpURLConnection) url.openConnection(); | ||||||
|         con.setRequestMethod("GET"); |         connection.setRequestMethod("GET"); | ||||||
|  |  | ||||||
|         con.setConnectTimeout(5000); |         connection.setConnectTimeout(5000); | ||||||
|         con.setReadTimeout(5000); |         connection.setReadTimeout(5000); | ||||||
|  |  | ||||||
|         int status = con.getResponseCode(); |         int status = connection.getResponseCode(); | ||||||
|         if (status == 200) { |  | ||||||
|             BufferedReader in = new BufferedReader( |         return getHttpTuple(connection); | ||||||
|                     new InputStreamReader(con.getInputStream())); |     } | ||||||
|  |  | ||||||
|  |     private Tuple<Integer, String> getHttpTuple(HttpURLConnection connection) throws IOException { | ||||||
|  |         int status = connection.getResponseCode(); | ||||||
|         String inputLine; |         String inputLine; | ||||||
|         StringBuilder content = new StringBuilder(); |         StringBuilder content = new StringBuilder(); | ||||||
|  |         BufferedReader in; | ||||||
|  |  | ||||||
|  |         if (status == 200) { | ||||||
|  |             in = new BufferedReader(new InputStreamReader(connection.getInputStream())); | ||||||
|  |         } else { | ||||||
|  |             in = new BufferedReader(new InputStreamReader(connection.getErrorStream())); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         while ((inputLine = in.readLine()) != null) { |         while ((inputLine = in.readLine()) != null) { | ||||||
|             content.append(inputLine); |             content.append(inputLine); | ||||||
|         } |         } | ||||||
|         in.close(); |         in.close(); | ||||||
|  |  | ||||||
|             con.disconnect(); |         connection.disconnect(); | ||||||
|             return content.toString(); |  | ||||||
|  |  | ||||||
|         } else { |         return new Tuple<>(status, content.toString()); | ||||||
|             con.disconnect(); |  | ||||||
|             throw new Exception("Status: " + status); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										61
									
								
								client/data/src/main/java/res/User.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								client/data/src/main/java/res/User.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | |||||||
|  | package res; | ||||||
|  |  | ||||||
|  | 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; | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user