Compare commits

..

No commits in common. "0840ee1d12776cf4e52fe377c6aee35da95d9e12" and "66edff8ed5291df547663c8cdd6693ca5fb551e2" have entirely different histories.

26 changed files with 201 additions and 903 deletions

View File

@ -16,12 +16,7 @@ application {
mainClassName = "client.MainApplication" mainClassName = "client.MainApplication"
} }
repositories {
mavenCentral()
}
dependencies { dependencies {
implementation("com.jfoenix:jfoenix:9.0.10")
implementation(project(":data")) implementation(project(":data"))
} }

View File

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

View File

@ -1,21 +0,0 @@
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");
}
}

View File

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

View File

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

View File

@ -1,68 +0,0 @@
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,41 +1,34 @@
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 GridPane mainGrid; public DatePicker datePickerDate;
@FXML @FXML
public JFXDatePicker datePickerDate; public TextField textName;
@FXML @FXML
public JFXTextField textName; public TextField textStart;
@FXML @FXML
public JFXComboBox<String> ComboBoxPriotity; public TextField textEnd;
@FXML @FXML
public JFXToggleButton toggleBtnIsFullDay; public ComboBox<String> ComboBoxTyp;
@FXML @FXML
public JFXToggleButton toggleBtnIsPrivate; public ComboBox<String> ComboBoxPriotity;
@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() {
@ -43,32 +36,25 @@ 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);
} }
@FXML @FXML
protected void createBtnClick(ActionEvent actionEvent) { protected void createBtnClick(ActionEvent actionEvent) {
try { try {
if (datePickerDate.getValue() == null) { if(datePickerDate.getValue() == null){
throw new IllegalArgumentException("Bitte w\u00e4hle ein Datum aus"); throw new IllegalArgumentException("Bitte w\u00e4hle ein Datum aus");
} }
Event event = new Event( Event event = new Event(
textName.getText(), textName.getText(),
ComboBoxPriotity.getSelectionModel().getSelectedIndex(), ComboBoxPriotity.getSelectionModel().getSelectedIndex(),
toggleBtnIsFullDay.isSelected(), checkBoxIsFullDay.isSelected(),
toggleBtnIsPrivate.isSelected(), checkBoxIsPrivate.isSelected(),
timeStart.getValue(), textStart.getText(),
timeEnd.getValue(), textEnd.getText(),
datePickerDate.getValue().atStartOfDay(), datePickerDate.getValue().atStartOfDay(),
(int) DataController.USER_ID (int)DataController.USER_ID
); );
System.out.println(event.getAsUrlParam()); System.out.println(event.getAsUrlParam());

View File

@ -1,7 +1,7 @@
package main; package main;
public class Launcher { public class Launcher {
public static void main(String[] args) { public static void main(String[] args) {
MainApplication.main(args); MainApplication.main(args);
} }

View File

@ -12,33 +12,23 @@ 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 {
FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("main-view.fxml"));
System.out.println("Ignore 'Illegal reflective access operation'-Warning. See https://github.com/sshahine/JFoenix/issues/1170"); 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);
// 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...");
} }
} }

View File

@ -1,13 +1,13 @@
package main; package main;
import customUI.Button; import javafx.event.ActionEvent;
import customUI.Label; import javafx.event.EventHandler;
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,17 +26,11 @@ 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 javafx.scene.control.Label LabelMonth; private 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];
@ -54,9 +48,8 @@ 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() {
@ -65,7 +58,7 @@ public class MainController {
} }
DataController dataController = new DataController(); DataController dataController = new DataController();
ArrayList<Event> eventList = dataController.getAllVisibleEvents(weekStartDateTime, weekStartDateTime.plusDays(7)); ArrayList<Event> eventList = dataController.getAllVisibleEvents();
for (Event event : eventList) { for (Event event : eventList) {
addEvent(event); addEvent(event);
@ -80,7 +73,7 @@ public class MainController {
} }
@FXML @FXML
protected void onTodayClick() { protected void onTodayClick(){
weekOffset = 0; weekOffset = 0;
setDates(); setDates();
updateEvents(); updateEvents();
@ -96,16 +89,15 @@ public class MainController {
@FXML @FXML
protected void onAddBtnClick() { protected void onAddBtnClick() {
try { try {
FXMLLoader fxmlLoader = new FXMLLoader( FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("create-event.fxml"));
MainApplication.class.getResource("create-event.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 650, 650); Scene scene = new Scene(fxmlLoader.load(), 650, 650);
scene.getStylesheets().add(Objects.requireNonNull( scene.getStylesheets().add(Objects.requireNonNull(MainApplication.class.getResource("create-event.css")).toExternalForm());
MainApplication.class.getResource("create-event.css")).toExternalForm());
Stage stage = new Stage(); Stage stage = new Stage();
stage.setTitle("Termin erstellen"); stage.setTitle("Termin erstellen");
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();
@ -113,18 +105,10 @@ 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.setTextValue(dayNames[i]); label.setText(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");
@ -155,45 +139,15 @@ 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();
Group svgDel = new Group( deleteBtn.setText(" X ");
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.getOwnerId(), event.getId(), event.getDate()); dataController.deleteEvent(event.getId());
updateEvents(); updateEvents();
}); });
Button editBtn = new Button();
Group svgEdit = new Group( editBtn.setText("edit");
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);
@ -211,6 +165,12 @@ 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);
@ -222,8 +182,7 @@ public class MainController {
LocalDateTime eventDate = event.getDate(); LocalDateTime eventDate = event.getDate();
int day = (int) Duration.between( int day = (int) Duration.between(weekStartDateTime.toLocalDate().atStartOfDay(), eventDate.toLocalDate().atStartOfDay()).toDays();
weekStartDateTime.toLocalDate().atStartOfDay(), eventDate.toLocalDate().atStartOfDay()).toDays();
if (day >= 0 && day < 7) { if (day >= 0 && day < 7) {
dayVBoxes[day].getChildren().add(vBox); dayVBoxes[day].getChildren().add(vBox);
@ -249,77 +208,10 @@ 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].setTextValue(dayFormatter.format(weekStartDateTime.plusDays(i))); dayLabel[i].setText(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);
}
} }

View File

@ -1,55 +0,0 @@
package users;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.Label;
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 TextField textPassword;
public TextField 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

@ -1,38 +1,38 @@
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 JFXTextField userField; public TextField userField;
@FXML @FXML
public JFXPasswordField passField; public TextField passField;
@FXML @FXML
public Label userErrLabel; public Label userErrLabel;
@FXML @FXML
public Label passErrLabel; public Label passErrLabel;
@FXML @FXML
protected void login(ActionEvent event) { protected void login(ActionEvent event){
if (userField.getText().trim().isEmpty()) { if(userField.getText().trim().isEmpty()){
userErrLabel.setText("Bitte Usernamen eingeben!"); userErrLabel.setText("Bitte Usernamen eingeben!");
passErrLabel.setText(""); passErrLabel.setText("");
return; return;
} }
if (passField.getText().trim().isEmpty()) { if(passField.getText().trim().isEmpty()){
userErrLabel.setText(""); userErrLabel.setText("");
passErrLabel.setText("Bitte Passwort eingeben!"); passErrLabel.setText("Bitte Passwort eingeben!");
return; return;
} }
DataController dataController = new DataController(); DataController dataController = new DataController();
if (!dataController.login(userField.getText(), passField.getText())) { if(!dataController.login(userField.getText(), passField.getText())){
userErrLabel.setText("Name und Passwort passen nicht zueinander!"); userErrLabel.setText("Name und Passwort passen nicht zueinander!");
passErrLabel.setText("Name und Passwort passen nicht zueinander!"); passErrLabel.setText("Name und Passwort passen nicht zueinander!");
return; return;

View File

@ -28,16 +28,10 @@ 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{
@ -49,16 +43,4 @@ JFXButton{
-fx-max-height: 400px; -fx-max-height: 400px;
-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;
} }

View File

@ -5,10 +5,7 @@
<?import javafx.collections.FXCollections?> <?import javafx.collections.FXCollections?>
<?import java.lang.String?> <?import java.lang.String?>
<?import com.jfoenix.controls.*?> <GridPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.CreateEventController">
<GridPane fx:id="mainGrid" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="main.CreateEventController">
<columnConstraints> <columnConstraints>
<ColumnConstraints/> <ColumnConstraints/>
@ -16,49 +13,50 @@
<ColumnConstraints/> <ColumnConstraints/>
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
</rowConstraints> </rowConstraints>
<Label styleClass="mainLabel">Termin anlegen</Label> <Label styleClass="mainLabel">Termin anlegen</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="1">Titel:</Label> <Label styleClass="inputLabel" GridPane.rowIndex="1">Datum:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="2">Datum:</Label> <Label styleClass="inputLabel" GridPane.rowIndex="2">Titel:</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>
<Label styleClass="inputLabel" GridPane.rowIndex="5">Priorität:</Label> <DatePicker fx:id="datePickerDate" GridPane.columnIndex="1" GridPane.rowIndex="1" maxWidth="400" minWidth="400"/>
<Label styleClass="inputLabel" GridPane.rowIndex="6">Ganztägig:</Label> <TextField fx:id="textName" GridPane.columnIndex="1" GridPane.rowIndex="2" maxWidth="400" minWidth="400"/>
<Label styleClass="inputLabel" GridPane.rowIndex="7">Privat:</Label> <TextField fx:id="textStart" GridPane.columnIndex="1" GridPane.rowIndex="3" maxWidth="400" minWidth="400"/>
<TextField fx:id="textEnd" GridPane.columnIndex="1" GridPane.rowIndex="4" maxWidth="400" minWidth="400"/>
<JFXTextField styleClass="inputField" fx:id="textName" GridPane.columnIndex="1" GridPane.rowIndex="1" maxWidth="400" minWidth="400"/> <ComboBox fx:id="ComboBoxTyp" GridPane.columnIndex="1" GridPane.rowIndex="5" maxWidth="400" minWidth="400"/>
<JFXDatePicker styleClass="inputDate" fx:id="datePickerDate" GridPane.columnIndex="1" GridPane.rowIndex="2" maxWidth="200" minWidth="200"/> <ComboBox fx:id="ComboBoxPriotity" GridPane.columnIndex="1" GridPane.rowIndex="6" 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" />
<String fx:value="mittel"/> <String fx:value="mittel" />
<String fx:value="hoch"/> <String fx:value="hoch" />
</FXCollections> </FXCollections>
</items> </items>
</JFXComboBox> </ComboBox>
<JFXToggleButton styleClass="checkbox" fx:id="toggleBtnIsFullDay" GridPane.columnIndex="1" GridPane.rowIndex="6"/> <CheckBox fx:id="checkBoxIsFullDay" GridPane.columnIndex="1" GridPane.rowIndex="7"/>
<JFXToggleButton styleClass="checkbox" fx:id="toggleBtnIsPrivate" GridPane.columnIndex="1" GridPane.rowIndex="7"/> <CheckBox fx:id="checkBoxIsPrivate" GridPane.columnIndex="1" GridPane.rowIndex="8"/>
<Label fx:id="labelError" GridPane.columnIndex="1" GridPane.rowIndex="8"/> <Label fx:id="labelError" GridPane.columnIndex="1" GridPane.rowIndex="9"/>
<HBox GridPane.columnIndex="1" GridPane.rowIndex="9" GridPane.columnSpan="2" alignment="CENTER_RIGHT"> <HBox GridPane.columnIndex="1" GridPane.rowIndex="10" GridPane.columnSpan="2" alignment="CENTER_RIGHT">
<JFXButton onAction="#abortBtnClick" maxWidth="150" minWidth="150">Abbrechen</JFXButton> <Button onAction="#abortBtnClick" maxWidth="150" minWidth="150" >Abbrechen</Button>
<JFXButton styleClass="mainButton" onAction="#createBtnClick" maxWidth="150" minWidth="150">Anlegen</JFXButton> <Button styleClass="mainButton" onAction="#createBtnClick" maxWidth="150" minWidth="150">Anlegen</Button>
</HBox> </HBox>
</GridPane> </GridPane>

View File

@ -1,64 +0,0 @@
<?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>

View File

@ -63,58 +63,12 @@ Label{
} }
.main-btn{ .main-btn{
-fx-background-color: transparent; -fx-background-color: #ffffff;
-fx-border-color: transparent; -fx-text-fill: -fx-main-text-color;
} -fx-background-radius: 5em;
-fx-min-width: 40px;
.main-btn .svg { -fx-min-height: 40px;
-fx-fill: -fill; -fx-max-width: 40px;
} -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;
} }

View File

@ -5,58 +5,63 @@
<?import javafx.scene.image.*?> <?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<GridPane style="-fx-background-color: #424242;" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" <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">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="NEVER" maxWidth="60.0" minWidth="60.0"/> <ColumnConstraints hgrow="NEVER" maxWidth="60.0" minWidth="60.0" />
<ColumnConstraints hgrow="ALWAYS"/> <ColumnConstraints hgrow="ALWAYS" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints vgrow="SOMETIMES"/> <RowConstraints vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<VBox fx:id="leftNav" alignment="TOP_CENTER" prefHeight="200.0" prefWidth="100.0" spacing="5.0" <VBox 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 fx:id="mainGridPane" prefHeight="200.0" prefWidth="222.0" GridPane.columnIndex="1" GridPane.rowIndex="0"> <GridPane prefHeight="200.0" prefWidth="222.0" GridPane.columnIndex="1" GridPane.rowIndex="0">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="ALWAYS"/> <ColumnConstraints hgrow="ALWAYS" />
<ColumnConstraints/> <ColumnConstraints />
<ColumnConstraints/> <ColumnConstraints />
<ColumnConstraints/> <ColumnConstraints />
<ColumnConstraints/> <ColumnConstraints />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints/> <RowConstraints />
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
</rowConstraints> </rowConstraints>
<Label fx:id="LabelMonth" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" <Label fx:id="LabelMonth" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="labelMonth" textFill="WHITE" GridPane.columnIndex="0" GridPane.rowIndex="0">
styleClass="labelMonth" textFill="WHITE" GridPane.columnIndex="0" GridPane.rowIndex="0">
Monat Monat
<padding> <padding>
<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>
<Button onAction="#onNextClick" GridPane.columnIndex="3" maxHeight="1.7976931348623157E308">weiter</Button>
<HBox fx:id="buttonBox" styleClass="buttonBox" GridPane.columnIndex="1" alignment="CENTER"/> <GridPane fx:id="calendarGrid" gridLinesVisible="true" styleClass="gridCalendar" GridPane.columnSpan="4" GridPane.columnIndex="0" GridPane.rowIndex="1">
<GridPane fx:id="calendarGrid" gridLinesVisible="true" styleClass="gridCalendar" GridPane.columnSpan="4"
GridPane.columnIndex="0" GridPane.rowIndex="1">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="ALWAYS" maxWidth="14.2857142857" minWidth="14.2857142857" <ColumnConstraints hgrow="ALWAYS" maxWidth="14.2857142857" minWidth="14.2857142857" percentWidth="14.2857142857" />
percentWidth="14.2857142857"/> <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857" />
<ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857"/> <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857" />
<ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857"/> <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857" />
<ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857"/> <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857" />
<ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857"/> <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857" />
<ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857"/> <ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857" />
<ColumnConstraints hgrow="ALWAYS" percentWidth="14.2857142857"/>
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="55.0" minHeight="25.0" vgrow="NEVER"/> <RowConstraints maxHeight="55.0" minHeight="25.0" vgrow="NEVER" />
<RowConstraints percentHeight="-Infinity" vgrow="ALWAYS"/> <RowConstraints percentHeight="-Infinity" vgrow="ALWAYS" />
</rowConstraints> </rowConstraints>
</GridPane> </GridPane>

View File

@ -1,56 +0,0 @@
* {
-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

@ -1,56 +0,0 @@
<?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" />
<TextField fx:id="textPassword" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="4" />
<TextField 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>

View File

@ -34,20 +34,4 @@ Label{
-fx-max-height: 400px; -fx-max-height: 400px;
-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;
} }

View File

@ -2,8 +2,6 @@
<?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>
@ -12,23 +10,23 @@
<ColumnConstraints/> <ColumnConstraints/>
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS"/> <RowConstraints vgrow="ALWAYS" />
</rowConstraints> </rowConstraints>
<Label GridPane.columnIndex="1">Anmelden</Label> <Label GridPane.columnIndex="1">Anmelden</Label>
<Label GridPane.rowIndex="1">Username</Label> <Label GridPane.rowIndex="1">Username</Label>
<JFXTextField styleClass="userField" GridPane.columnIndex="1" GridPane.rowIndex="1" fx:id="userField"/> <TextField 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>
<JFXPasswordField styleClass="passField" GridPane.columnIndex="1" GridPane.rowIndex="2" fx:id="passField"/> <PasswordField 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"/>
<JFXButton styleClass="quitBtn" onAction="#abortBtnClick" GridPane.columnIndex="1" GridPane.rowIndex="3">Beenden</JFXButton> <Button onAction="#abortBtnClick" GridPane.columnIndex="1" GridPane.rowIndex="3">Beenden</Button>
<JFXButton styleClass="loginBtn" onAction="#login" GridPane.columnIndex="2" GridPane.rowIndex="3">Anmelden</JFXButton> <Button onAction="#login" GridPane.columnIndex="2" GridPane.rowIndex="3">Anmelden</Button>
</GridPane> </GridPane>

View File

@ -7,5 +7,4 @@ 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

@ -1,27 +0,0 @@
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,9 +1,7 @@
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;
@ -12,91 +10,74 @@ 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/event/all"; private static final String ALL_EVENTS_ENDPOINT = "http://localhost:8080/vpr/all-events";
private static final String ADD_EVENT_ENDPOINT = "http://localhost:8080/event/add"; private static final String ALL_USERS_ENDPOINT = "http://localhost:8080/vpr/all-users";
private static final String DELETE_EVENT_ENDPOINT = "http://localhost:8080/event/del"; private static final String ADD_EVENT_ENDPOINT = "http://localhost:8080/vpr/add-event";
private static final String DELETE_EVENT_ENDPOINT = "http://localhost:8080/vpr/del-event";
private static final String LOGIN_ENDPOINT = "http://localhost:8080/user/login"; private static final String LOGIN_ENDPOINT = "http://localhost:8080/vpr/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;
public DataController() { public DataController(){
httpRequest = new HttpRequest(); httpRequest = new HttpRequest();
} }
public boolean login(String username, String password) { public boolean login(String username, String password){
try { try {
Tuple<Integer, String> response = httpRequest.sendPostRequest( USER_ID = Long.parseLong(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(), true)); System.out.println(httpRequest.sendPostRequest(ADD_EVENT_ENDPOINT, event.getAsUrlParam()));
} 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 userId, int eventId, LocalDateTime date) { public void deleteEvent(int eventId){
try { try {
System.out.println("DELETE: userId=" + userId + "&eventId=" + eventId + "&date=" + date.toLocalDate()); System.out.println(httpRequest.sendPostRequest(DELETE_EVENT_ENDPOINT, "eventId=" + eventId));
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(LocalDateTime startDate, LocalDateTime endDate) { public ArrayList<Event> getAllVisibleEvents() {
ArrayList<Event> eventList = new ArrayList<>(); ArrayList<Event> eventList = new ArrayList<>();
try { try {
Tuple<Integer, String> response = httpRequest.sendPostRequest( String jsonResponse = httpRequest.sendPostRequest(ALL_EVENTS_ENDPOINT, "userId=" + USER_ID);
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();
objectMapper.findAndRegisterModules(); //String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
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();
} }
@ -125,7 +106,8 @@ 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);
} }
} }

View File

@ -2,13 +2,9 @@ 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;
@ -46,10 +42,6 @@ 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);
@ -66,77 +58,28 @@ 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,
LocalTime start, String start,
LocalTime end, String 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ÄÖÜäöü0-9 =!?+*/$%€.:,;_<>()-]*");
Matcher matcher = pattern.matcher(name); Matcher matcher = pattern.matcher(name);
if (!matcher.matches()) { if(!matcher.matches()){
System.out.println(name); throw new IllegalArgumentException("Der Name Darf nur aus Zahlen, Buchstaben und 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.");
} }
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.");
} }
@ -144,8 +87,8 @@ public class Event {
this.priority = priority; this.priority = priority;
this.isFullDay = isFullDay; this.isFullDay = isFullDay;
this.isPrivate = isPrivate; this.isPrivate = isPrivate;
if (start != null) this.start = start.toString(); this.start = start;
if (start != null) this.end = end.toString(); this.end = end;
this.date = date; this.date = date;
this.ownerId = ownerId; this.ownerId = ownerId;
} }
@ -163,7 +106,7 @@ public class Event {
} }
public void setName(String name) { public void setName(String name) {
this.name = convertToASCII(name); this.name = name;
} }
public int getPriority() { public int getPriority() {
@ -210,9 +153,8 @@ public class Event {
return date; return date;
} }
public void setDate(String date) { public void setDate(LocalDateTime date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); this.date = date;
this.date = LocalDateTime.parse(date + " 00:00", formatter);
} }
public int getOwnerId() { public int getOwnerId() {
@ -246,13 +188,8 @@ public class Event {
"&name=" + getName() + "&name=" + getName() +
"&start=" + getStart() + "&start=" + getStart() +
"&end=" + getEnd() + "&end=" + getEnd() +
"&priority=" + getPriority() + "&prority=" + 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);
}
} }

View File

@ -1,7 +1,5 @@
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;
@ -11,25 +9,10 @@ import java.nio.charset.StandardCharsets;
import java.util.Arrays; import java.util.Arrays;
public class HttpRequest { public class HttpRequest {
public static String TOKEN = ""; public String sendPostRequest(String urlString, String urlParameters) throws Exception{
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();
@ -40,38 +23,30 @@ 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();
String inputLine;
StringBuilder content = new StringBuilder();
BufferedReader in;
if (status == 200) { if (status == 200) {
in = new BufferedReader(new InputStreamReader(con.getInputStream())); BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
con.disconnect();
return content.toString();
} else { } else {
in = new BufferedReader(new InputStreamReader(con.getErrorStream())); con.disconnect();
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{
URL url = new URL(urlString); URL url = new URL(urlString);
HttpURLConnection con = (HttpURLConnection) url.openConnection(); HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET"); con.setRequestMethod("GET");