Compare commits
	
		
			44 Commits
		
	
	
		
			7c8b1fefb7
			...
			Add-SVGs
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 0840ee1d12 | |||
| ea3288a345 | |||
| 1439a67e7c | |||
| 14910083f4 | |||
| 9345dbc868 | |||
| 45c58ea37f | |||
| 83c1ae6814 | |||
| 0d626bb6dc | |||
| 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 | 
| @@ -16,7 +16,12 @@ application { | |||||||
|     mainClassName = "client.MainApplication" |     mainClassName = "client.MainApplication" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | repositories { | ||||||
|  |     mavenCentral() | ||||||
|  | } | ||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|  |     implementation("com.jfoenix:jfoenix:9.0.10") | ||||||
|     implementation(project(":data")) |     implementation(project(":data")) | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										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.CONVERT_STR(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 CONVERT_STR(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.CONVERT_STR(content)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Label(){ | ||||||
|  |         super(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setTextValue(String text){ | ||||||
|  |         super.setText(Converter.CONVERT_STR(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.CONVERT_STR(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,41 @@ | |||||||
| package main; | package main; | ||||||
|  |  | ||||||
|  | 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.*; | 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 +43,13 @@ 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); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -48,10 +63,10 @@ public class CreateEventController { | |||||||
|             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 | ||||||
|             ); |             ); | ||||||
|   | |||||||
| @@ -12,29 +12,33 @@ 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 |  | ||||||
|         FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("../users/create-user.fxml")); |  | ||||||
|  |  | ||||||
|         Scene scene = new Scene(fxmlLoader.load(), 1200, 700); |         System.out.println("Ignore 'Illegal reflective access operation'-Warning. See https://github.com/sshahine/JFoenix/issues/1170"); | ||||||
|         scene.getStylesheets().add(Objects.requireNonNull( |  | ||||||
|                                                     //wieder ändern zu main-view.css |  | ||||||
|                 MainApplication.class.getResource("../users/create-user.css")).toExternalForm()); |  | ||||||
|         stage.setTitle("SharePlaner"); |  | ||||||
|         stage.setScene(scene); |  | ||||||
|         //wieder löschen |  | ||||||
|         stage.show(); |  | ||||||
|  |  | ||||||
|  |         // Load login-scene | ||||||
|         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) { |         if (DataController.USER_ID >= 0) { | ||||||
|  |             // Load main-scene | ||||||
|  |             FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("main-view.fxml")); | ||||||
|  |  | ||||||
|  |             Scene scene = new Scene(fxmlLoader.load(), 1200, 700); | ||||||
|  |             scene.getStylesheets().add(Objects.requireNonNull( | ||||||
|  |                     MainApplication.class.getResource("main-view.css")).toExternalForm() | ||||||
|  |             ); | ||||||
|  |             stage.setTitle("SharePlaner"); | ||||||
|  |             stage.setScene(scene); | ||||||
|             stage.show(); |             stage.show(); | ||||||
|  |  | ||||||
|  |             System.out.println("Logged in..."); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,13 +1,13 @@ | |||||||
| package main; | package main; | ||||||
|  |  | ||||||
| import javafx.event.ActionEvent; | import customUI.Button; | ||||||
| import javafx.event.EventHandler; | import customUI.Label; | ||||||
|  | import helper.SvgBtnCreator; | ||||||
| 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.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; | ||||||
| @@ -26,11 +26,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 +54,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,7 +65,7 @@ public class MainController { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         DataController dataController = new DataController(); |         DataController dataController = new DataController(); | ||||||
|         ArrayList<Event> eventList = dataController.getAllVisibleEvents(); |         ArrayList<Event> eventList = dataController.getAllVisibleEvents(weekStartDateTime, weekStartDateTime.plusDays(7)); | ||||||
|  |  | ||||||
|         for (Event event : eventList) { |         for (Event event : eventList) { | ||||||
|             addEvent(event); |             addEvent(event); | ||||||
| @@ -99,7 +106,6 @@ public class MainController { | |||||||
|             stage.setScene(scene); |             stage.setScene(scene); | ||||||
|             stage.initModality(Modality.APPLICATION_MODAL); |             stage.initModality(Modality.APPLICATION_MODAL); | ||||||
|             stage.setResizable(false); |             stage.setResizable(false); | ||||||
|             //stage.initStyle(StageStyle.UNDECORATED); |  | ||||||
|             stage.showAndWait(); |             stage.showAndWait(); | ||||||
|         } catch (IOException e) { |         } catch (IOException e) { | ||||||
|             e.printStackTrace(); |             e.printStackTrace(); | ||||||
| @@ -107,10 +113,18 @@ public class MainController { | |||||||
|         updateEvents(); |         updateEvents(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     protected void onSettingBtnClick(){ | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected void onLogoutBtnClick(){ | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|     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 +155,45 @@ 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()); |             dataController.deleteEvent(event.getOwnerId(), event.getId(), event.getDate()); | ||||||
|             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); | ||||||
|  |                 stage.showAndWait(); | ||||||
|  |             } 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 +211,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 +249,77 @@ 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(e -> 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); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
| } | } | ||||||
| @@ -1,10 +1,11 @@ | |||||||
| 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.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; | ||||||
| @@ -14,28 +15,41 @@ public class CreateUserController { | |||||||
|     public TextField textName; |     public TextField textName; | ||||||
|     public TextField textPassword; |     public TextField textPassword; | ||||||
|     public TextField textPasswordSecond; |     public TextField 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.CreateEventController"> | ||||||
|  |  | ||||||
|  |     <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"> | ||||||
|   | |||||||
| @@ -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" /> | ||||||
|  |     <TextField fx:id="textPassword" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="4" /> | ||||||
|  |     <TextField 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") | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										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,7 +1,9 @@ | |||||||
| 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.Tuple; | ||||||
|  |  | ||||||
| import java.io.BufferedReader; | import java.io.BufferedReader; | ||||||
| import java.io.DataOutputStream; | import java.io.DataOutputStream; | ||||||
| @@ -10,17 +12,20 @@ import java.io.OutputStream; | |||||||
| import java.net.HttpURLConnection; | import java.net.HttpURLConnection; | ||||||
| import java.net.URL; | import java.net.URL; | ||||||
| import java.nio.charset.StandardCharsets; | import java.nio.charset.StandardCharsets; | ||||||
|  | import java.time.LocalDateTime; | ||||||
| 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 LOGIN_ENDPOINT = "http://localhost:8080/vpr/login"; |     private static final String LOGIN_ENDPOINT = "http://localhost:8080/user/login"; | ||||||
|  |     private static final String ALL_USERS_ENDPOINT = "http://localhost:8080/user/all"; | ||||||
|  |     private static final String HEADER_TEST_ENDPOINT = "http://localhost:8080/vpr/header-test"; | ||||||
|  |  | ||||||
|     private final HttpRequest httpRequest; |     private final HttpRequest httpRequest; | ||||||
|  |  | ||||||
| @@ -30,54 +35,68 @@ 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]; | ||||||
|  |  | ||||||
|  |             Tuple<Integer, String> auth = httpRequest.sendPostRequest( | ||||||
|  |                     HEADER_TEST_ENDPOINT, | ||||||
|  |                     "", | ||||||
|  |                     true | ||||||
|  |             ); | ||||||
|  |             System.out.println("auth " + auth); | ||||||
|         } 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 void createEvent(Event event) { | ||||||
|         try { |         try { | ||||||
|             System.out.println(httpRequest.sendPostRequest(ADD_EVENT_ENDPOINT, event.getAsUrlParam())); |             System.out.println(httpRequest.sendPostRequest(ADD_EVENT_ENDPOINT, event.getAsUrlParam(), true)); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             throw new RuntimeException("Es konnte keine Verbindung mit dem Server hergestellt werden."); |             throw new RuntimeException("Es konnte keine Verbindung mit dem Server hergestellt werden."); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void deleteEvent(int eventId) { |     public void deleteEvent(int userId, int eventId, LocalDateTime date) { | ||||||
|         try { |         try { | ||||||
|             System.out.println(httpRequest.sendPostRequest(DELETE_EVENT_ENDPOINT, "eventId=" + eventId)); |             System.out.println("DELETE: userId=" + userId + "&eventId=" + eventId + "&date=" + date.toLocalDate()); | ||||||
|  |             System.out.println(httpRequest.sendPostRequest( | ||||||
|  |                     DELETE_EVENT_ENDPOINT, | ||||||
|  |                     "userId=" + userId + "&eventId=" + eventId + "&date=" + date.toLocalDate(), | ||||||
|  |                     true | ||||||
|  |             )); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             e.printStackTrace(); |             e.printStackTrace(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ArrayList<Event> getAllVisibleEvents() { |     public ArrayList<Event> getAllVisibleEvents(LocalDateTime startDate, LocalDateTime endDate) { | ||||||
|         ArrayList<Event> eventList = new ArrayList<>(); |         ArrayList<Event> eventList = new ArrayList<>(); | ||||||
|  |  | ||||||
|         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 | ||||||
|  |             ); | ||||||
|  |             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(); | ||||||
|  |             eventList = (ArrayList<Event>) objectMapper.readValue(jsonResponse, new TypeReference<List<Event>>(){}); | ||||||
|  |  | ||||||
|             for (Object obj : objectMapper.readValue(jsonResponse, Object[].class)) { |  | ||||||
|                 ArrayList<Object> list = new ArrayList<>(); |  | ||||||
|                 if (obj.getClass().isArray()) { |  | ||||||
|                     list = (ArrayList<Object>) Arrays.asList((Object[]) obj); |  | ||||||
|                 } else if (obj instanceof Collection) { |  | ||||||
|                     list = new ArrayList<>((Collection<?>) obj); |  | ||||||
|                 } |  | ||||||
|                 eventList.add(new Event(list)); |  | ||||||
|  |  | ||||||
|             } |  | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             e.printStackTrace(); |             e.printStackTrace(); | ||||||
|         } |         } | ||||||
| @@ -106,7 +125,6 @@ public class DataController { | |||||||
|  |  | ||||||
|         // Parse JSON |         // Parse JSON | ||||||
|         ObjectMapper objectMapper = new ObjectMapper(); |         ObjectMapper objectMapper = new ObjectMapper(); | ||||||
|         //String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }"; |  | ||||||
|  |  | ||||||
|         return objectMapper.readValue(jsonString, Event[].class); |         return objectMapper.readValue(jsonString, Event[].class); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -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; | ||||||
| @@ -42,6 +46,10 @@ public class Event { | |||||||
|     u.name AS uname |     u.name AS uname | ||||||
|      */ |      */ | ||||||
|  |  | ||||||
|  |     public Event() { | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public Event(ArrayList<Object> arr) { |     public Event(ArrayList<Object> arr) { | ||||||
|         id = (int) arr.get(0); |         id = (int) arr.get(0); | ||||||
|         name = (String) arr.get(1); |         name = (String) arr.get(1); | ||||||
| @@ -58,23 +66,71 @@ public class Event { | |||||||
|         ownerName = arr.get(8) + " " + arr.get(9); |         ownerName = arr.get(8) + " " + arr.get(9); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public Event(String name, |     public Event( | ||||||
|  |             int id, | ||||||
|  |             String name, | ||||||
|             int priority, |             int priority, | ||||||
|             boolean isFullDay, |             boolean isFullDay, | ||||||
|             boolean isPrivate, |             boolean isPrivate, | ||||||
|             String start, |             String start, | ||||||
|             String end, |             String end, | ||||||
|  |             String date, | ||||||
|  |             int ownerId, | ||||||
|  |             String ownerName | ||||||
|  |     ) { | ||||||
|  |         this.ownerId = ownerId; | ||||||
|  |         this.ownerName = ownerName; | ||||||
|  |         this.id = id; | ||||||
|  |         this.name = name; | ||||||
|  |         this.start = start; | ||||||
|  |         this.end = end; | ||||||
|  |         this.priority = priority; | ||||||
|  |         this.isFullDay = isFullDay; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); | ||||||
|  |         this.date = LocalDateTime.parse(date + " 00:00", formatter); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Event(String name, | ||||||
|  |                  int priority, | ||||||
|  |                  boolean isFullDay, | ||||||
|  |                  boolean isPrivate, | ||||||
|  |                  LocalTime start, | ||||||
|  |                  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 " + |             System.out.println(name); | ||||||
|                     "folgenden Sonderzeichen bestehen: =!?+*/$%€.:,;_ <>()-"); |  | ||||||
|  |             byte[] bytes = name.getBytes(StandardCharsets.UTF_16); | ||||||
|  |  | ||||||
|  |             String utf8EncodedString = new String(bytes, StandardCharsets.UTF_16); | ||||||
|  |             System.out.println(utf8EncodedString); | ||||||
|  |  | ||||||
|  |             for (char c : (name).toCharArray()) { | ||||||
|  |                 System.out.print(c + " " + (int) c + ", "); | ||||||
|  |             } | ||||||
|  |             System.out.println(); | ||||||
|  |             for (char c : (name).toCharArray()) { | ||||||
|  |                 System.out.print(c + " " + (int) c + ", "); | ||||||
|  |             } | ||||||
|  |             System.out.println(); | ||||||
|  |             for (char c : ("TäöüÄÖÜ").toCharArray()) { | ||||||
|  |                 System.out.print(c + " " + (int) c + ", "); | ||||||
|  |             } | ||||||
|  |             System.out.println(); | ||||||
|  |  | ||||||
|  |             throw new IllegalArgumentException("Der Name darf nur aus Zahlen, Buchstaben und folgenden Sonderzeichen bestehen: \u00e4\u00f6\u00fc \u00c4\u00d6\u00dc \u00df =!?+*/$.:,;_ <>()-"); | ||||||
|         } |         } | ||||||
|         if (priority < 0) { |         if (priority < 0) { | ||||||
|             throw new IllegalArgumentException("Bitte eine Priorit\u00e4t w\u00e4hlen."); |             throw new IllegalArgumentException("Bitte eine Priorit\u00e4t w\u00e4hlen."); | ||||||
| @@ -88,8 +144,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 +163,7 @@ public class Event { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void setName(String name) { |     public void setName(String name) { | ||||||
|         this.name = name; |         this.name = convertToASCII(name); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public int getPriority() { |     public int getPriority() { | ||||||
| @@ -154,8 +210,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,8 +246,13 @@ 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(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private String convertToASCII(String s) { | ||||||
|  |         byte[] germanBytes = s.getBytes(); | ||||||
|  |         return new String(germanBytes, StandardCharsets.US_ASCII); | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,5 +1,7 @@ | |||||||
| 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.InputStreamReader; | import java.io.InputStreamReader; | ||||||
| @@ -9,10 +11,25 @@ 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("http://test.de:8080/event/add"); | ||||||
|  |         HttpURLConnection http = (HttpURLConnection)url.openConnection(); | ||||||
|  |         http.setRequestMethod("POST"); | ||||||
|  |         http.setDoOutput(true); | ||||||
|  |         http.setRequestProperty("Accept", "application/json"); | ||||||
|  |         http.setRequestProperty("Authorization", "Bearer {token}"); | ||||||
|  |         http.setRequestProperty("Content-Type", ""); | ||||||
|  |         http.setRequestProperty("Content-Length", "0"); | ||||||
|  |  | ||||||
|  |         System.out.println(http.getResponseCode() + " " + http.getResponseMessage()); | ||||||
|  |         http.disconnect(); | ||||||
|  |          */ | ||||||
|         URL url = new URL(urlString); |         URL url = new URL(urlString); | ||||||
|         HttpURLConnection con = (HttpURLConnection) url.openConnection(); |         HttpURLConnection con = (HttpURLConnection) url.openConnection(); | ||||||
|  |  | ||||||
| @@ -23,27 +40,35 @@ public class HttpRequest { | |||||||
|         con.setRequestProperty("charset", "utf-8"); |         con.setRequestProperty("charset", "utf-8"); | ||||||
|         con.setRequestProperty("Content-Length", Integer.toString(postDataLength)); |         con.setRequestProperty("Content-Length", Integer.toString(postDataLength)); | ||||||
|         con.setUseCaches(false); |         con.setUseCaches(false); | ||||||
|  |  | ||||||
|  |         if(sendAuth){ | ||||||
|  |             con.setRequestProperty("Accept", "application/json"); | ||||||
|  |             con.setRequestProperty("Authorization", "Bearer " + TOKEN); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) { |         try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) { | ||||||
|             wr.write(postData); |             wr.write(postData); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         int status = con.getResponseCode(); |         int status = con.getResponseCode(); | ||||||
|         if (status == 200) { |  | ||||||
|             BufferedReader in = new BufferedReader( |  | ||||||
|                     new InputStreamReader(con.getInputStream())); |  | ||||||
|         String inputLine; |         String inputLine; | ||||||
|         StringBuilder content = new StringBuilder(); |         StringBuilder content = new StringBuilder(); | ||||||
|  |         BufferedReader in; | ||||||
|  |  | ||||||
|  |         if (status == 200) { | ||||||
|  |              in = new BufferedReader(new InputStreamReader(con.getInputStream())); | ||||||
|  |         } else { | ||||||
|  |              in = new BufferedReader(new InputStreamReader(con.getErrorStream())); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         while ((inputLine = in.readLine()) != null) { |         while ((inputLine = in.readLine()) != null) { | ||||||
|             content.append(inputLine); |             content.append(inputLine); | ||||||
|         } |         } | ||||||
|         in.close(); |         in.close(); | ||||||
|  |  | ||||||
|         con.disconnect(); |         con.disconnect(); | ||||||
|             return content.toString(); |  | ||||||
|         } else { |         return new Tuple<>(status, content.toString()); | ||||||
|             con.disconnect(); |  | ||||||
|             throw new Exception("Status: " + status); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public String sendGetRequest(String urlString) throws Exception { |     public String sendGetRequest(String urlString) throws Exception { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user