30 Commits

Author SHA1 Message Date
4ce4445d50 Merged 2022-01-23 22:05:23 +01:00
7aa615ce54 Merge branch '2410-develop' into merge
# Conflicts:
#	client/app/src/main/java/main/MainController.java
2022-01-23 21:33:42 +01:00
2c3d646c47 Added save login 2022-01-23 21:21:16 +01:00
e021809fd7 use camelCase for static methods 2022-01-23 17:41:40 +01:00
c040e54fb8 Added Config 2022-01-23 17:40:49 +01:00
4020d59284 Added a passwordField 2022-01-23 17:33:26 +01:00
0840ee1d12 Refactored code and added tooltips to the buttons 2022-01-21 11:13:44 +01:00
ea3288a345 Fixed bg-color 2022-01-21 07:58:27 +01:00
1439a67e7c Added svgButton to calender navigation (TODO: Fix bg.color) 2022-01-20 18:27:02 +01:00
14910083f4 Added svgButtons to the left navigation 2022-01-20 15:08:58 +01:00
9345dbc868 Moved SvgBtnCreator to helper package 2022-01-20 14:40:50 +01:00
45c58ea37f Made changeable size of svg 2022-01-20 13:52:35 +01:00
83c1ae6814 Made svg size to const 2022-01-20 13:50:59 +01:00
0d626bb6dc Refactored create svg Buttons 2022-01-20 13:49:07 +01:00
2f0c4b2a4c Added edit-function 2022-01-20 13:33:49 +01:00
141d294b79 Merge branch 'Add-SVGs' into merge 2022-01-19 11:45:04 +01:00
2269f05f52 Fixed event/add endpoint 2022-01-19 00:30:13 +01:00
78505097db Fixed event/all and event/del endpoints 2022-01-19 00:16:23 +01:00
7a119a8aed Merge branch 'merge' into 2410-develop 2022-01-18 22:30:08 +01:00
22e7d30678 Fixed MainApplication the second 2022-01-18 12:56:43 +01:00
3c0ebd24d7 Fixed MainApplication 2022-01-18 12:51:53 +01:00
f649b618cf Merge remote-tracking branch 'origin/merge' into merge 2022-01-18 12:46:31 +01:00
6e6183bf38 Updated create-user, css and the controller 2022-01-18 12:45:18 +01:00
0132077c62 Added edit and delete event svgs 2022-01-18 12:37:58 +01:00
947f31f20e Fixed login token 2022-01-14 19:37:06 +01:00
7c8b1fefb7 improved the createUserController.java and the create-user.fxml 2022-01-14 10:52:20 +01:00
b12de1cd2e Use Tuple as response 2022-01-13 23:14:36 +01:00
097cce14e8 Save toke on login 2022-01-13 17:35:16 +01:00
226255f75a Merge branch 'merge' into 1720-UI-User-anlegen 2022-01-10 12:50:00 +01:00
d574849407 Created create-user.fxml,create-user.css,CreateUserController.java 2022-01-10 12:44:27 +01:00
24 changed files with 785 additions and 132 deletions

View File

@@ -3,6 +3,6 @@ package customUI;
public class Button extends javafx.scene.control.Button { public class Button extends javafx.scene.control.Button {
public void setTextValue(String text){ public void setTextValue(String text){
super.setText(Converter.CONVERT_STR(text)); super.setText(Converter.convertString(text));
} }
} }

View File

@@ -8,7 +8,7 @@ public class Converter {
ß \u00df ß \u00df
*/ */
@SuppressWarnings("all") @SuppressWarnings("all")
public static String CONVERT_STR(String str){ public static String convertString(String str){
return str return str
.replace("ä", "\u00e4") .replace("ä", "\u00e4")
.replace("Ä", "\u00c4") .replace("Ä", "\u00c4")

View File

@@ -2,7 +2,7 @@ package customUI;
public class Label extends javafx.scene.control.Label { public class Label extends javafx.scene.control.Label {
public Label(String content){ public Label(String content){
super(Converter.CONVERT_STR(content)); super(Converter.convertString(content));
} }
public Label(){ public Label(){
@@ -10,6 +10,6 @@ public class Label extends javafx.scene.control.Label {
} }
public void setTextValue(String text){ public void setTextValue(String text){
super.setText(Converter.CONVERT_STR(text)); super.setText(Converter.convertString(text));
} }
} }

View File

@@ -0,0 +1,9 @@
package customUI;
public class Tooltip extends javafx.scene.control.Tooltip {
public Tooltip(String tollTipText){
super(Converter.convertString(tollTipText));
}
}

View 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;
}
}

View File

@@ -1,6 +1,7 @@
package main; package main;
import com.jfoenix.controls.*; 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;
@@ -60,29 +61,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(),
toggleBtnIsFullDay.isSelected(), toggleBtnIsFullDay.isSelected(),
toggleBtnIsPrivate.isSelected(), toggleBtnIsPrivate.isSelected(),
timeStart.getValue().toString(), timeStart.getValue(),
timeEnd.getValue().toString(), 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();

View File

@@ -0,0 +1,25 @@
package main;
import helper.HttpRequestException;
import res.DataController;
import res.Event;
public class EditEventController extends CreateEventController{
private Event currentEvent;
public Event getCurrentEvent() {
return currentEvent;
}
public void setCurrentEvent(Event currentEvent) {
this.currentEvent = currentEvent;
}
@Override
protected void sendHttpRequest(Event event) throws HttpRequestException {
DataController dataController = new DataController();
dataController.deleteEvent(currentEvent.getOwnerId(), currentEvent.getId(), currentEvent.getDate());
dataController.createEvent(event);
}
}

View File

@@ -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,26 +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 {
Config config = ConfigLoader.load();
if(config == null){
config = new Config(false, -1, "");
}
System.out.println("Ignore 'Illegal reflective access operation'-Warning. See https://github.com/sshahine/JFoenix/issues/1170");
if(
!config.isSaveLogin()
|| !new DataController().loginWithToken(config.getId(), config.getToken())
){
// Load login-scene
loadLoginScene();
}
if (DataController.USER_ID >= 0) {
if(config.isSaveLogin()){
config.setId(DataController.USER_ID);
config.setToken(HttpRequest.TOKEN);
ConfigLoader.save(config);
}
// Load main-scene
loadMainScene(stage);
System.out.println("Logged in...");
}
}
private void loadMainScene(Stage stage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("main-view.fxml")); FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("main-view.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 1200, 700); Scene scene = new Scene(fxmlLoader.load(), 1200, 700);
scene.getStylesheets().add(Objects.requireNonNull( scene.getStylesheets().add(Objects.requireNonNull(
MainApplication.class.getResource("main-view.css")).toExternalForm()); MainApplication.class.getResource("main-view.css")).toExternalForm()
);
stage.setTitle("SharePlaner"); stage.setTitle("SharePlaner");
stage.setScene(scene); stage.setScene(scene);
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) {

View File

@@ -1,11 +1,14 @@
package main; package main;
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.Scene; import javafx.scene.Scene;
import customUI.Button;
import customUI.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;
@@ -24,6 +27,12 @@ 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;
@@ -46,8 +55,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() {
@@ -56,10 +66,14 @@ 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();
} }
} }
@@ -105,6 +119,14 @@ 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();
@@ -139,15 +161,32 @@ 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.setTextValue(" 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.setTextValue("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 -> { editBtn.setOnAction(event1 -> {
try { try {
FXMLLoader fxmlLoader = new FXMLLoader( FXMLLoader fxmlLoader = new FXMLLoader(
@@ -160,7 +199,10 @@ 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);
EditEventController editEventController = fxmlLoader.getController();
editEventController.setCurrentEvent(event);
stage.showAndWait(); stage.showAndWait();
updateEvents();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -226,4 +268,69 @@ public class MainController {
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);
}
} }

View File

@@ -0,0 +1,56 @@
package users;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleButton;
import javafx.stage.Stage;
import java.util.Objects;
public class CreateUserController {
public TextField textName;
public PasswordField textPassword;
public PasswordField textPasswordSecond;
public ToggleButton checkButtonIsAdmin;
public TextField textLogin;
public TextField textForename;
public Label labelError;
@FXML
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()) {
labelError.setText("Bitte Nachnamen eingeben!");
return;
}
if (textPassword.getText().trim().isEmpty()) {
labelError.setText("Bitte Passwort eingeben!");
return;
}
if (!Objects.equals(textPassword.getText(), textPasswordSecond.getText())){
labelError.setText("Passwörter stimmen nicht überein!");
return;
}
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
stage.close();
}
@FXML
protected void abortBtnClick(ActionEvent event) {
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
stage.close();
}
}

View File

@@ -8,7 +8,7 @@
<?import com.jfoenix.controls.*?> <?import com.jfoenix.controls.*?>
<GridPane fx:id="mainGrid" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" <GridPane fx:id="mainGrid" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="main.CreateEventController"> fx:controller="main.EditEventController">
<columnConstraints> <columnConstraints>
<ColumnConstraints/> <ColumnConstraints/>

View File

@@ -63,16 +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{ .navBtn{
-fx-background-color: white; -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;
} }

View File

@@ -4,7 +4,6 @@
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.image.*?> <?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<?import com.jfoenix.controls.*?>
<GridPane style="-fx-background-color: #424242;" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" <GridPane style="-fx-background-color: #424242;" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="main.MainController"> fx:controller="main.MainController">
@@ -15,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>
<JFXButton onAction="#onAddBtnClick" styleClass="main-btn">
ADD
</JFXButton>
<JFXButton onAction="#onAddBtnClick" styleClass="main-btn">
ADD
</JFXButton>
<JFXButton onAction="#onAddBtnClick" styleClass="main-btn">
ADD
</JFXButton>
</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/>
@@ -49,9 +39,8 @@
<Insets left="5"/> <Insets left="5"/>
</padding> </padding>
</Label> </Label>
<JFXButton styleClass="navBtn" onAction="#onBackClick" GridPane.columnIndex="1" maxHeight="1.7976931348623157E308">zurück</JFXButton>
<JFXButton styleClass="navBtn" onAction="#onTodayClick" GridPane.columnIndex="2" maxHeight="1.7976931348623157E308">heute</JFXButton> <HBox fx:id="buttonBox" styleClass="buttonBox" GridPane.columnIndex="1" alignment="CENTER"/>
<JFXButton styleClass="navBtn" onAction="#onNextClick" GridPane.columnIndex="3" maxHeight="1.7976931348623157E308">weiter</JFXButton>
<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">

View File

@@ -0,0 +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;
}

View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.Insets?>
<GridPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="users.CreateUserController">
<columnConstraints>
<ColumnConstraints minWidth="100"/>
<ColumnConstraints minWidth="100"/>
<ColumnConstraints minWidth="100"/>
</columnConstraints>
<rowConstraints>
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
</rowConstraints>
<Label styleClass="mainLabel" GridPane.columnIndex="2" >User anlegen</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="1" GridPane.columnIndex="1">Login:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="2" GridPane.columnIndex="1">Vorname:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="3" GridPane.columnIndex="1">Nachname:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="4" GridPane.columnIndex="1">Passwort:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="5" GridPane.columnIndex="1">Passwort wiederholen:</Label>
<Label styleClass="inputLabelAdmin" GridPane.rowIndex="6" GridPane.columnIndex="1">Admin:</Label>
<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" />
<ToggleButton fx:id="checkButtonIsAdmin" GridPane.columnIndex="2" GridPane.rowIndex="6"/>
<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>

1
client/config.json Normal file
View File

@@ -0,0 +1 @@
{"saveLogin":true,"id":1,"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtYXJjIn0.NdOMxKKgH4ZNZ84uA81L57vJtR9OhTVyKwtNsOuZhFQ"}

View File

@@ -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")
} }

View 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;
}
}

View File

@@ -0,0 +1,38 @@
package config;
import com.fasterxml.jackson.databind.ObjectMapper;
import res.DataController;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class ConfigLoader {
public static Config load(){
try {
String jsonString = Files.readString(Paths.get("config.json"));
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.findAndRegisterModules();
return objectMapper.readValue(jsonString, Config.class);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void save(Config config){
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.findAndRegisterModules();
try {
Files.writeString(Paths.get(
"config.json"),
objectMapper.writeValueAsString(config)
);
} catch (IOException e) {
e.printStackTrace();
}
}
}

View 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;
}
}

View 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 +
'}';
}
}

View File

@@ -1,7 +1,10 @@
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.io.BufferedReader;
import java.io.DataOutputStream; import java.io.DataOutputStream;
@@ -10,6 +13,7 @@ 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 {
@@ -21,7 +25,9 @@ public class DataController {
private static final String DELETE_EVENT_ENDPOINT = "http://localhost:8080/event/del"; private static final String DELETE_EVENT_ENDPOINT = "http://localhost:8080/event/del";
private static final String LOGIN_ENDPOINT = "http://localhost:8080/user/login"; private static final String LOGIN_ENDPOINT = "http://localhost:8080/user/login";
private static final String LOGIN_WITH_TOKEN_ENDPOINT = "http://localhost:8080/user/login-with-token";
private static final String ALL_USERS_ENDPOINT = "http://localhost:8080/user/all"; private static final String 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;
@@ -31,85 +37,110 @@ 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 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 boolean loginWithToken(long userId, String token) {
try { try {
System.out.println(httpRequest.sendPostRequest(ADD_EVENT_ENDPOINT, event.getAsUrlParam(), true)); 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, true)); 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 void createEvent(Event event) throws HttpRequestException {
try {
Tuple<Integer, String> response = httpRequest.sendPostRequest(ADD_EVENT_ENDPOINT, event.getAsUrlParam(), true);
if(response.getKey() != 200){
throw new HttpRequestException(response);
}
}catch (HttpRequestException e){
throw e;
}catch (Exception e) {
throw new HttpRequestException("Es konnte keine Verbindung mit dem Server hergestellt werden.", 600);
} }
} }
public ArrayList<Event> getAllVisibleEvents() { public void deleteEvent(int userId, int eventId, LocalDateTime date) throws HttpRequestException {
ArrayList<Event> eventList = new ArrayList<>();
try { try {
String jsonResponse = httpRequest.sendPostRequest(ALL_EVENTS_ENDPOINT, "userId=" + USER_ID, true); System.out.println("DELETE: userId=" + userId + "&eventId=" + eventId + "&date=" + date.toLocalDate());
Tuple<Integer, String> response = httpRequest.sendPostRequest(
DELETE_EVENT_ENDPOINT,
"userId=" + userId + "&eventId=" + eventId + "&date=" + date.toLocalDate(),
true
);
if(response.getKey() != 200){
throw new HttpRequestException(response);
}
}catch (HttpRequestException e){
throw e;
}catch (Exception e) {
throw new HttpRequestException("Es konnte keine Verbindung mit dem Server hergestellt werden.", 600);
}
}
public ArrayList<Event> getAllVisibleEvents(LocalDateTime startDate, LocalDateTime endDate) throws HttpRequestException {
ArrayList<Event> eventList = new ArrayList<>();
try {
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();
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 (HttpRequestException e){
} catch (Exception e) { throw e;
e.printStackTrace(); }catch (Exception e) {
throw new HttpRequestException("Es konnte keine Verbindung mit dem Server hergestellt werden.", 600);
} }
return eventList; return eventList;
} }
public Event[] getAllEvents() {
Event[] eventList = null;
try {
String jsonResponse = httpRequest.sendGetRequest("http://localhost:8080/vpr/all-events-test");
eventList = parseJsonToEventList(jsonResponse);
for (Event e : eventList) {
System.out.println(e);
}
} catch (Exception e) {
e.printStackTrace();
}
return eventList;
}
private Event[] parseJsonToEventList(String jsonString) throws JsonProcessingException {
ArrayList<Event> eventList;
// Parse JSON
ObjectMapper objectMapper = new ObjectMapper();
//String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
return objectMapper.readValue(jsonString, Event[].class);
}
} }

View File

@@ -2,10 +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.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;
@@ -43,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);
@@ -59,21 +66,50 @@ public class Event {
ownerName = arr.get(8) + " " + arr.get(9); ownerName = arr.get(8) + " " + arr.get(9);
} }
public Event(
int id,
String name,
int priority,
boolean isFullDay,
boolean isPrivate,
String start,
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, 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 {
if(name.length() < 3){
System.out.println("Create Event");
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\u00e4\u00f6\u00fc\u00c4\u00d6\u00dc\u00df0-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()) {
System.out.println(name); System.out.println(name);
byte[] bytes = name.getBytes(StandardCharsets.UTF_16); byte[] bytes = name.getBytes(StandardCharsets.UTF_16);
@@ -82,25 +118,25 @@ public class Event {
System.out.println(utf8EncodedString); System.out.println(utf8EncodedString);
for (char c : (name).toCharArray()) { for (char c : (name).toCharArray()) {
System.out.print(c + " " + (int)c + ", "); System.out.print(c + " " + (int) c + ", ");
} }
System.out.println(); System.out.println();
for (char c : (name).toCharArray()) { for (char c : (name).toCharArray()) {
System.out.print(c + " " + (int)c + ", "); System.out.print(c + " " + (int) c + ", ");
} }
System.out.println(); System.out.println();
for (char c : ("TäöüÄÖÜ").toCharArray()) { for (char c : ("TäöüÄÖÜ").toCharArray()) {
System.out.print(c + " " + (int)c + ", "); System.out.print(c + " " + (int) c + ", ");
} }
System.out.println(); System.out.println();
throw new IllegalArgumentException("Der Name darf nur aus Zahlen, Buchstaben und folgenden Sonderzeichen bestehen: \u00e4\u00f6\u00fc \u00c4\u00d6\u00dc \u00df =!?+*/$.:,;_ <>()-"); 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.");
} }
LocalDateTime today = LocalDateTime.now().toLocalDate().atStartOfDay(); LocalDateTime today = LocalDateTime.now().toLocalDate().atStartOfDay();
if(Duration.between(today, date).isNegative()){ if (Duration.between(today, date).isNegative()) {
throw new IllegalArgumentException("Das Datum muss in der Zukunft liegen."); throw new IllegalArgumentException("Das Datum muss in der Zukunft liegen.");
} }
@@ -108,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;
} }
@@ -174,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() {
@@ -209,12 +246,12 @@ 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){ private String convertToASCII(String s) {
byte[] germanBytes = s.getBytes(); byte[] germanBytes = s.getBytes();
return new String(germanBytes, StandardCharsets.US_ASCII); return new String(germanBytes, StandardCharsets.US_ASCII);
} }

View File

@@ -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,7 +11,9 @@ 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, boolean sendAuth) 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;
@@ -39,7 +43,7 @@ public class HttpRequest {
if(sendAuth){ if(sendAuth){
con.setRequestProperty("Accept", "application/json"); con.setRequestProperty("Accept", "application/json");
con.setRequestProperty("Authorization", "Bearer {token}"); con.setRequestProperty("Authorization", "Bearer " + TOKEN);
} }
try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) { try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) {
@@ -47,22 +51,24 @@ public class HttpRequest {
} }
int status = con.getResponseCode(); int status = con.getResponseCode();
if (status == 200) { String inputLine;
BufferedReader in = new BufferedReader( StringBuilder content = new StringBuilder();
new InputStreamReader(con.getInputStream())); BufferedReader in;
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
con.disconnect(); if (status == 200) {
return content.toString(); in = new BufferedReader(new InputStreamReader(con.getInputStream()));
} else { } else {
con.disconnect(); in = new BufferedReader(new InputStreamReader(con.getErrorStream()));
throw new Exception("Status: " + status);
} }
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
con.disconnect();
return new Tuple<>(status, content.toString());
} }
public String sendGetRequest(String urlString) throws Exception { public String sendGetRequest(String urlString) throws Exception {