Compare commits

..

No commits in common. "master" and "0610-Timepicker" have entirely different histories.

36 changed files with 525 additions and 1925 deletions

2
.gitignore vendored
View File

@ -72,5 +72,3 @@ crashlytics-build.properties
.gradle/ .gradle/
build/ build/
/client/config.json

View File

@ -5,19 +5,15 @@ plugins {
} }
javafx { javafx {
version = "11.0.2" version = "11"
modules( modules(
"javafx.controls", "javafx.controls",
"javafx.fxml" "javafx.fxml"
) )
} }
tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
}
application { application {
mainClassName = "main.MainApplication" mainClassName = "client.MainApplication"
} }
repositories { repositories {
@ -31,7 +27,7 @@ dependencies {
val jar by tasks.getting(Jar::class) { val jar by tasks.getting(Jar::class) {
manifest { manifest {
attributes["Main-Class"] = "main.Launcher" attributes["Main-Class"] = "client.Launcher"
} }
from({ from({
configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) } configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) }

View File

@ -1,43 +0,0 @@
//Marc Beyer//
package events;
import helper.HttpRequestException;
import container.DataController;
import container.Event;
import java.time.LocalTime;
public class EditEventController extends CreateEventController{
private Event currentEvent;
public Event getCurrentEvent() {
return currentEvent;
}
public void setCurrentEvent(Event currentEvent) {
this.currentEvent = currentEvent;
textName.setText(currentEvent.getName());
datePickerDate.setValue(currentEvent.getDate().toLocalDate());
comboBoxPriority.getSelectionModel().select(currentEvent.getPriority());
try{
timeStart.setValue(LocalTime.parse(currentEvent.getStart()));
}catch (Exception e){}
try{
timeEnd.setValue(LocalTime.parse(currentEvent.getEnd()));
}catch (Exception e){}
toggleBtnIsFullDay.setSelected(currentEvent.isFullDay());
toggleBtnIsPrivate.setSelected(currentEvent.isPrivate());
}
@Override
protected void sendHttpRequest(Event event) throws HttpRequestException {
DataController dataController = new DataController();
dataController.editEvent(currentEvent, event);
}
}

View File

@ -1,7 +1,6 @@
package events; package main;
import com.jfoenix.controls.*; import com.jfoenix.controls.JFXTimePicker;
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;
@ -10,8 +9,8 @@ import javafx.scene.layout.GridPane;
import javafx.stage.Stage; import javafx.stage.Stage;
import javafx.util.StringConverter; import javafx.util.StringConverter;
import javafx.util.converter.LocalTimeStringConverter; import javafx.util.converter.LocalTimeStringConverter;
import container.DataController; import res.DataController;
import container.Event; import res.Event;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.format.FormatStyle; import java.time.format.FormatStyle;
@ -20,40 +19,51 @@ import java.util.Locale;
public class CreateEventController { public class CreateEventController {
@FXML @FXML
private GridPane mainGrid; public GridPane mainGrid;
@FXML @FXML
protected JFXDatePicker datePickerDate; public DatePicker datePickerDate;
@FXML @FXML
protected JFXTextField textName; public TextField textName;
@FXML @FXML
protected JFXComboBox<String> comboBoxPriority; public ComboBox<String> ComboBoxTyp;
@FXML @FXML
protected JFXToggleButton toggleBtnIsFullDay; public ComboBox<String> ComboBoxPriotity;
@FXML @FXML
protected JFXToggleButton toggleBtnIsPrivate; public CheckBox checkBoxIsFullDay;
@FXML @FXML
private Label labelError; public CheckBox checkBoxIsPrivate;
@FXML @FXML
protected JFXTimePicker timeStart; public Label labelError;
@FXML @FXML
protected JFXTimePicker timeEnd; public JFXTimePicker timeStart;
@FXML
public JFXTimePicker timeEnd;
public CreateEventController() { public CreateEventController() {
} }
//Marco Kühn//
@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); StringConverter<LocalTime> defaultConverter = new LocalTimeStringConverter(FormatStyle.SHORT, Locale.GERMANY);
timeEnd.setConverter(defaultConverter);
JFXTimePicker timePickerStart = new JFXTimePicker();
timeStart = timePickerStart;
timePickerStart.set24HourView(true);
timePickerStart.setConverter(defaultConverter);
timePickerStart.getStyleClass().add("timePicker");
mainGrid.add(timePickerStart, 1 , 3);
JFXTimePicker timePickerEnd = new JFXTimePicker();
timeEnd = timePickerEnd;
timePickerEnd.set24HourView(true);
timePickerEnd.setConverter(defaultConverter);
timePickerEnd.getStyleClass().add("timePicker");
mainGrid.add(timePickerEnd, 1 , 4);
} }
//Marc Beyer//
@FXML @FXML
protected void createBtnClick(ActionEvent actionEvent) { protected void createBtnClick(ActionEvent actionEvent) {
try { try {
@ -61,37 +71,29 @@ 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(),
comboBoxPriority.getSelectionModel().getSelectedIndex(), ComboBoxPriotity.getSelectionModel().getSelectedIndex(),
toggleBtnIsFullDay.isSelected(), checkBoxIsFullDay.isSelected(),
toggleBtnIsPrivate.isSelected(), checkBoxIsPrivate.isSelected(),
timeStart.getValue(), timeStart.getValue().toString(),
timeEnd.getValue(), timeEnd.getValue().toString(),
datePickerDate.getValue().atStartOfDay(), datePickerDate.getValue().atStartOfDay(),
(int) DataController.USER_ID (int) DataController.USER_ID
); );
System.out.println(event.getAsUrlParam()); System.out.println(event.getAsUrlParam());
sendHttpRequest(event); DataController dataController = new DataController();
dataController.createEvent(event);
Stage stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow(); Stage stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow();
stage.close(); stage.close();
} catch (Exception e) { } catch (RuntimeException e) {
labelError.setText(e.getMessage()); labelError.setText(e.getMessage());
} }
} }
//Marc Beyer//
protected void sendHttpRequest(Event event) throws HttpRequestException {
DataController dataController = new DataController();
dataController.createEvent(event);
}
//Marco Kühn//
@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

@ -1,116 +1,40 @@
//Marc Beyer//
package main; package main;
import config.Config;
import config.ConfigLoader;
import container.DataController;
import container.HttpRequest;
import javafx.application.Application; import javafx.application.Application;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.stage.Modality;
import javafx.stage.Stage; import javafx.stage.Stage;
import res.DataController;
import java.io.IOException; import java.io.IOException;
import java.util.Objects; import java.util.Objects;
import java.util.function.Consumer;
public class MainApplication extends Application { public class MainApplication extends Application {
@Override @Override
public void start(Stage stage) throws IOException { public void start(Stage stage) throws IOException {
Config config = ConfigLoader.load();
if(config == null){
config = new Config(false, -1, "");
}
DataController.SERVER_URL = config.toServerUrl();
System.out.println("Ignore 'Illegal reflective access operation'-Warning. See https://github.com/sshahine/JFoenix/issues/1170");
if(
!config.isSaveLogin()
|| !new DataController().loginWithToken(config.getId(), config.getToken())
){
// Load login-scene
loadLoginScene();
}
if (DataController.USER_ID >= 0) {
if(config.isSaveLogin()){
config.setId(DataController.USER_ID);
config.setToken(HttpRequest.TOKEN);
ConfigLoader.save(config);
}
// Load main-scene
loadMainScene(stage);
System.out.println("Logged in...");
}
}
private void loadMainScene(Stage stage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("main-view.fxml")); FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("main-view.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 1200, 700); Scene scene = new Scene(fxmlLoader.load(), 1200, 700);
scene.getStylesheets().add(Objects.requireNonNull( scene.getStylesheets().add(Objects.requireNonNull(
MainApplication.class.getResource("main-view.css")).toExternalForm() MainApplication.class.getResource("main-view.css")).toExternalForm());
); stage.setTitle("SharePlaner");
stage.setTitle("SharePlanner");
stage.setScene(scene); stage.setScene(scene);
stage.show();
}
private void loadLoginScene() { FXMLLoader fxmlLoaderLogin = new FXMLLoader(MainApplication.class.getResource("../users/login.fxml"));
loadScene( Scene sceneLogin = new Scene(fxmlLoaderLogin.load(), 650, 500);
"Anmelden", sceneLogin.getStylesheets().add(Objects.requireNonNull(
"../users/login.fxml", MainApplication.class.getResource("../users/login.css")).toExternalForm());
"../users/login.css", Stage stageLogin = new Stage();
650, stageLogin.setTitle("Anmelden");
500 stageLogin.setScene(sceneLogin);
); stageLogin.showAndWait();
if (DataController.USER_ID >= 0) {
stage.show();
}
} }
public static void main(String[] args) { public static void main(String[] args) {
launch(); launch();
} }
public static void loadScene(
String title,
String fxml,
String css,
int width,
int height
) {
loadScene(title, fxml, css, width, height, null);
}
public static void loadScene(
String title,
String fxml,
String css,
int width,
int height,
Consumer<FXMLLoader> method
) {
FXMLLoader fxmlLoader = new FXMLLoader(
MainApplication.class.getResource(fxml));
try {
Scene scene = new Scene(fxmlLoader.load(), width, height);
scene.getStylesheets().add(Objects.requireNonNull(
MainApplication.class.getResource(css)).toExternalForm());
Stage stage = new Stage();
stage.setTitle(title);
stage.setScene(scene);
stage.initModality(Modality.APPLICATION_MODAL);
stage.setResizable(false);
if(method != null)method.accept(fxmlLoader);
stage.showAndWait();
} catch (IOException e) {
e.printStackTrace();
}
}
} }

View File

@ -1,44 +1,34 @@
// Marco Kühn, Marc Beyer //
package main; package main;
import config.Config;
import config.ConfigLoader;
import container.DataController;
import container.Event;
import container.HttpRequest;
import events.EditEventController;
import helper.HttpRequestException;
import javafx.event.ActionEvent;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.Node; import javafx.fxml.FXMLLoader;
import javafx.scene.control.Alert; import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.GridPane; import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage; import javafx.stage.Stage;
import ui.DayPane; import res.DataController;
import ui.EventPane; import res.Event;
import ui.SvgBtnCreator;
import java.io.IOException;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Objects;
public class MainController { public class MainController {
@FXML
private VBox leftNav;
@FXML
private GridPane mainGridPane;
@FXML
private 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];
@ -56,9 +46,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() {
@ -67,14 +56,10 @@ public class MainController {
} }
DataController dataController = new DataController(); DataController dataController = new DataController();
try { ArrayList<Event> eventList = dataController.getAllVisibleEvents();
ArrayList<Event> eventList = dataController.getAllVisibleEvents(weekStartDateTime, weekStartDateTime.plusDays(7));
for (Event event : eventList) { for (Event event : eventList) {
addEvent(event); addEvent(event);
}
} catch (HttpRequestException e) {
e.printStackTrace();
} }
} }
@ -101,80 +86,135 @@ public class MainController {
@FXML @FXML
protected void onAddBtnClick() { protected void onAddBtnClick() {
MainApplication.loadScene( try {
"Termin erstellen", FXMLLoader fxmlLoader = new FXMLLoader(
"create-event.fxml", MainApplication.class.getResource("create-event.fxml"));
"create-event.css", Scene scene = new Scene(fxmlLoader.load(), 650, 650);
650, scene.getStylesheets().add(Objects.requireNonNull(
650 MainApplication.class.getResource("create-event.css")).toExternalForm());
); Stage stage = new Stage();
stage.setTitle("Termin erstellen");
stage.setScene(scene);
stage.initModality(Modality.APPLICATION_MODAL);
stage.setResizable(false);
//stage.initStyle(StageStyle.UNDECORATED);
stage.showAndWait();
} catch (IOException e) {
e.printStackTrace();
}
updateEvents(); updateEvents();
} }
protected void onSettingBtnClick(){
MainApplication.loadScene(
"Einstellungen",
"option-view.fxml",
"option-view.css",
650,
600
);
}
protected void onLogoutBtnClick(ActionEvent event){
ConfigLoader.save(new Config());
DataController.USER_ID = -1;
HttpRequest.TOKEN = "";
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
stage.close();
}
private void createWeek() { private void createWeek() {
for (int i = 0; i < 7; i++) { for (int i = 0; i < 7; i++) {
DayPane dayPane = new DayPane(); Label label = new Label();
this.dayLabel[i] = dayPane.getDayLabel(); label.setText(dayNames[i]);
calendarGrid.add(dayPane.getDayLabel(), i, 0); label.setMaxHeight(Double.MAX_VALUE);
dayVBoxes[i] = dayPane.getDayVBox(); label.setMaxWidth(Double.MAX_VALUE);
calendarGrid.add(dayPane, i, 1); label.getStyleClass().add("labelDays");
dayLabel[i] = label;
calendarGrid.add(label, i, 0);
ScrollPane scrollPane = new ScrollPane();
VBox vBox = new VBox();
vBox.getStyleClass().add("vBoxDays");
vBox.setSpacing(10);
dayVBoxes[i] = vBox;
scrollPane.setContent(vBox);
scrollPane.setFitToWidth(true);
scrollPane.setFitToHeight(true);
scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);
scrollPane.getStyleClass().add("scrollDays");
calendarGrid.add(scrollPane, i, 1);
} }
} }
private void addEvent(Event event) { private void addEvent(Event event) {
EventPane eventPane = new EventPane(event); VBox vBox = new VBox();
eventPane.getEditBtn().setOnAction(event1 -> { vBox.getStyleClass().add("event");
MainApplication.loadScene( vBox.setSpacing(5);
"Termin bearbeiten",
"edit-event.fxml",
"create-event.css",
650,
650,
fxmlLoader -> {
EditEventController editEventController = fxmlLoader.getController();
editEventController.setCurrentEvent(event);
}
);
updateEvents();
});
eventPane.getDeleteBtn().setOnAction(e -> { HBox btnHBox = new HBox();
btnHBox.setAlignment(Pos.BOTTOM_RIGHT);
Button deleteBtn = new Button();
deleteBtn.setText(" X ");
deleteBtn.setOnAction(e -> {
DataController dataController = new DataController(); DataController dataController = new DataController();
try { dataController.deleteEvent(event.getId());
dataController.deleteEvent(event.getOwnerId(), event.getId(), event.getDate());
} catch (HttpRequestException ex) {
new Alert(Alert.AlertType.ERROR, ex.getMessage()).showAndWait();
}
updateEvents(); updateEvents();
}); });
Button editBtn = new Button();
editBtn.setText("edit");
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(deleteBtn);
vBox.getChildren().add(btnHBox);
Label nameLabel = new Label(event.getName());
vBox.getChildren().add(nameLabel);
if (event.getStart() != null || event.getEnd() != null) {
String timeStr = (event.getStart() != null ? formatTime(event.getStart()) : "")
+ (event.getEnd() != null ? " - " + formatTime(event.getEnd()) : "");
Label timeLabel = new Label(timeStr);
vBox.getChildren().add(timeLabel);
}
Label typeLabel = new Label("Wer: " + event.getOwnerName());
vBox.getChildren().add(typeLabel);
/*
Ä, ä \u00c4, \u00e4
Ö, ö \u00d6, \u00f6
Ü, ü \u00dc, \u00fc
ß \u00df
*/
Label prioLabel = new Label("Priorit\u00e4t: " + event.getPriority());
vBox.getChildren().add(prioLabel);
if (event.isFullDay()) {
Label fullDayLabel = new Label("Dieser Termin bockiert den ganzen Tag!");
vBox.getChildren().add(fullDayLabel);
}
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(eventPane); dayVBoxes[day].getChildren().add(vBox);
} }
} }
private String formatTime(String time) {
String[] timeArr = time.split(":");
if (timeArr.length > 2) {
return timeArr[0] + ":" + timeArr[1];
}
return time;
}
private void setDates() { private void setDates() {
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("LLLL yyyy"); DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("LLLL yyyy");
DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("E dd.MM"); DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("E dd.MM");
@ -192,39 +232,4 @@ public class MainController {
LabelMonth.setText(dateFormatter.format(weekStartDateTime)); LabelMonth.setText(dateFormatter.format(weekStartDateTime));
} }
private void createBtns(){
Button addBtn = SvgBtnCreator.createAddBtn();
addBtn.setOnAction(e -> onAddBtnClick());
addBtn.getStyleClass().add("main-btn");
leftNav.getChildren().add(addBtn);
Button settingsBtn = SvgBtnCreator.createSettingBtn();
settingsBtn.setOnAction(e -> onSettingBtnClick());
settingsBtn.getStyleClass().add("main-btn");
leftNav.getChildren().add(settingsBtn);
Button logoutBtn = SvgBtnCreator.createLogoutBtn();
logoutBtn.setOnAction(this::onLogoutBtnClick);
logoutBtn.getStyleClass().add("main-btn");
leftNav.getChildren().add(logoutBtn);
Button backBtn = SvgBtnCreator.createBackBtn();
backBtn.setOnAction(e -> onBackClick());
backBtn.getStyleClass().add("navBtn");
GridPane.setColumnIndex(backBtn, 1);
buttonBox.getChildren().add(backBtn);
Button todayBtn = SvgBtnCreator.createTodayBtn();
todayBtn.setOnAction(e -> onTodayClick());
todayBtn.getStyleClass().add("navBtn");
GridPane.setColumnIndex(todayBtn, 2);
buttonBox.getChildren().add(todayBtn);
Button nextBtn = SvgBtnCreator.createNextBtn();
nextBtn.setOnAction(e -> onNextClick());
nextBtn.getStyleClass().add("navBtn");
GridPane.setColumnIndex(nextBtn, 3);
buttonBox.getChildren().add(nextBtn);
}
} }

View File

@ -1,139 +0,0 @@
// Marco Kühn //
package main;
import com.jfoenix.controls.*;
import config.Config;
import config.ConfigLoader;
import container.HttpRequest;
import helper.HttpRequestException;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import container.DataController;
import container.User;
import users.EditUserController;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class OptionController {
@FXML
private JFXButton updateUserBtn;
@FXML
private JFXButton deleteUserBtn;
@FXML
private JFXButton createUserBtn;
@FXML
private JFXToggleButton saveLoginTBtn;
@FXML
private Label labelError;
@FXML
private GridPane mainGrid;
private JFXComboBox<String> comboBox;
private DataController dataController;
private List<User> users;
private Config config;
@FXML
public void initialize(){
dataController = new DataController();
try{
users = dataController.getAllUser();
} catch (HttpRequestException e){
users = new ArrayList<>();
}
ObservableList<String> observableUserList = FXCollections.observableArrayList();
for (User user: users) {
observableUserList.add(user.getLogin());
}
comboBox = new JFXComboBox<>(observableUserList);
comboBox.getStyleClass().add("comboBox");
mainGrid.add(comboBox, 2,2);
config = ConfigLoader.load();
if(config == null){
config = new Config(false, -1, "");
}
saveLoginTBtn.setSelected(config.isSaveLogin());
}
public void onBackBtnClick(ActionEvent actionEvent) {
Stage stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow();
stage.close();
}
public void onCreateBtnClick(ActionEvent actionEvent) {
MainApplication.loadScene(
"User erstellen",
"../users/create-user.fxml",
"../users/create-user.css",
800,
650
);
}
public void onUpdateBtnClick(ActionEvent actionEvent) {
int editIndex = comboBox.getSelectionModel().getSelectedIndex();
if(editIndex < 0 || editIndex >= users.size()) return;
MainApplication.loadScene(
"User bearbeiten",
"../users/edit-user.fxml",
"../users/create-user.css",
800,
650,
fxmlLoader -> {
EditUserController editUserController = fxmlLoader.getController();
editUserController.setCurrentUser(users.get(editIndex));
}
);
}
public void onDeleteBtnClick(ActionEvent actionEvent) {
Alert alert = new Alert(Alert.AlertType.CONFIRMATION, "Wirklich löschen?");
Optional<ButtonType> result = alert.showAndWait();
if(result.isPresent() && result.get() == ButtonType.OK){
int removeIndex = comboBox.getSelectionModel().getSelectedIndex();
try {
dataController.deleteUser(users.get(removeIndex));
} catch (HttpRequestException e) {
Alert alert1 = new Alert(Alert.AlertType.ERROR, e.getMessage());
alert1.showAndWait();
return;
}
comboBox.getItems().remove(removeIndex);
users.remove(removeIndex);
}
}
private void setUserAtController(FXMLLoader fxmlLoader){
int editIndex = comboBox.getSelectionModel().getSelectedIndex();
EditUserController editUserController = fxmlLoader.getController();
editUserController.setCurrentUser(users.get(editIndex));
}
public void toggledBtn(ActionEvent actionEvent) {
config.setSaveLogin(saveLoginTBtn.isSelected());
if(config.isSaveLogin()){
config.setId(DataController.USER_ID);
config.setToken(HttpRequest.TOKEN);
} else {
config.setId(-1);
config.setToken("");
}
ConfigLoader.save(config);
}
}

View File

@ -1,39 +0,0 @@
//Marc Beyer//
package ui;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.VBox;
public class DayPane extends ScrollPane {
private final Label dayLabel;
private final VBox dayVBox;
public DayPane() {
dayLabel = new Label();
dayLabel.setMaxHeight(Double.MAX_VALUE);
dayLabel.setMaxWidth(Double.MAX_VALUE);
dayLabel.getStyleClass().add("labelDays");
dayVBox = new VBox();
dayVBox.getStyleClass().add("vBoxDays");
dayVBox.setSpacing(10);
setContent(dayVBox);
setFitToWidth(true);
setFitToHeight(true);
setHbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);
getStyleClass().add("scrollDays");
getStyleClass().add("scrollDays");
}
public Label getDayLabel() {
return dayLabel;
}
public VBox getDayVBox() {
return dayVBox;
}
}

View File

@ -1,84 +0,0 @@
//Marc Beyer, Marco Kühn//
package ui;
import container.Event;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
public class EventPane extends VBox {
private Button deleteBtn;
private Button editBtn;
public EventPane(Event event) {
this.getStyleClass().add("event");
this.setSpacing(5);
HBox btnHBox = new HBox();
btnHBox.setAlignment(Pos.BOTTOM_RIGHT);
Group svgDel = new Group(
SvgBtnCreator.createPath("M0 0h24v24H0z", "transparent", "transparent"),
SvgBtnCreator.createPath("M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z",
"white", "gray")
);
deleteBtn = SvgBtnCreator.createBtn(svgDel, 24, "", "Löschen des Termins");
deleteBtn.getStyleClass().add("deleteEventBtn");
Group svgEdit = new Group(
SvgBtnCreator.createPath("M0 0h24v24H0z", "transparent", "transparent"),
SvgBtnCreator.createPath("M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z",
"white", "gray")
);
editBtn = SvgBtnCreator.createBtn(svgEdit, 24, "", "Bearbeiten des Termins");
editBtn.getStyleClass().add("editEventBtn");
btnHBox.getChildren().add(editBtn);
btnHBox.getChildren().add(deleteBtn);
this.getChildren().add(btnHBox);
Label nameLabel = new Label(event.getName());
nameLabel.setWrapText(true);
this.getChildren().add(nameLabel);
if (event.getStart() != null || event.getEnd() != null) {
String timeStr = (event.getStart() != null ? formatTime(event.getStart()) : "")
+ (event.getEnd() != null ? " - " + formatTime(event.getEnd()) : "");
Label timeLabel = new Label(timeStr);
this.getChildren().add(timeLabel);
}
Label typeLabel = new Label("Wer: " + event.getOwnerName());
this.getChildren().add(typeLabel);
Label prioLabel = new Label("Priorität: " + event.getPriority());
this.getChildren().add(prioLabel);
if (event.isFullDay()) {
Label fullDayLabel = new Label("Dieser Termin bockiert den ganzen Tag!");
fullDayLabel.setWrapText(true);
this.getChildren().add(fullDayLabel);
}
}
public Button getDeleteBtn() {
return deleteBtn;
}
public Button getEditBtn() {
return editBtn;
}
private String formatTime(String time) {
String[] timeArr = time.split(":");
if (timeArr.length > 2) {
return timeArr[0] + ":" + timeArr[1];
}
return time;
}
}

View File

@ -1,92 +0,0 @@
//Marco Kühn//
package ui;
import javafx.geometry.Bounds;
import javafx.scene.Group;
import javafx.scene.control.*;
import javafx.scene.shape.SVGPath;
public class SvgBtnCreator {
public static Button createBtn(Group group, int svgSize, String styleClass, String toolTip) {
Button btn = new Button();
Bounds boundsDel = group.getBoundsInParent();
double scaleDel = Math.min(svgSize / boundsDel.getWidth(), svgSize / boundsDel.getHeight());
group.setScaleX(scaleDel);
group.setScaleY(scaleDel);
btn.setGraphic(group);
btn.setMaxSize(svgSize, svgSize);
btn.setMinSize(svgSize, svgSize);
btn.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
btn.getStyleClass().add(styleClass);
Tooltip tooltip = new Tooltip(toolTip);
btn.setTooltip(tooltip);
return btn;
}
public static SVGPath createPath(String d, String fill, String hoverFill) {
SVGPath path = new SVGPath();
path.getStyleClass().add("svg");
path.setContent(d);
path.setStyle("-fill:" + fill + ";-hover-fill:"+hoverFill+';');
return path;
}
public static Button createAddBtn(){
Group svgAdd = new Group(
createPath("M0 0h24v24H0z", "transparent", "transparent"),
createPath("M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z",
"white", "gray")
);
return createBtn(svgAdd, 40, "main-btn", "Erstellt einen neuen Termin");
}
public static Button createSettingBtn(){
Group svgSettings = new Group(
createPath("M0 0h24v24H0V0z", "transparent", "transparent"),
createPath("M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z",
"white", "gray")
);
return createBtn(svgSettings, 40, "main-btn", "Öffnet die Einstellungen");
}
public static Button createLogoutBtn(){
Group svgLogout = new Group(
createPath("M0 0h24v24H0z", "transparent", "transparent"),
createPath("M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z",
"white", "gray")
);
return createBtn(svgLogout, 40, "main-btn", "Abmelden");
}
public static Button createBackBtn(){
Group svgBack = new Group(
createPath("M0 0h24v24H0z", "transparent", "transparent"),
createPath("M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z",
"white", "lightgray")
);
return createBtn(svgBack, 40, "navBtn", "Zeigt die vorherige Woche");
}
public static Button createTodayBtn(){
Group svgToday = new Group(
createPath("M0 0h24v24H0z", "transparent", "transparent"),
createPath("M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z",
"white", "lightgray")
);
return createBtn(svgToday, 40, "navBtn", "Zeigt die aktuelle Woche");
}
public static Button createNextBtn(){
Group svgNext = new Group(
createPath("M0 0h24v24H0z", "transparent", "transparent"),
createPath("M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z",
"white", "lightgray")
);
return createBtn(svgNext, 40, "navBtn", "Zeigt die nächste Woche");
}
}

View File

@ -1,99 +0,0 @@
//Alex Rechtin//
package users;
import com.jfoenix.controls.JFXPasswordField;
import com.jfoenix.controls.JFXTextField;
import com.jfoenix.controls.JFXToggleButton;
import helper.HttpRequestException;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import container.DataController;
import container.User;
import java.util.Objects;
public class CreateUserController {
@FXML
protected JFXTextField textName;
@FXML
protected JFXPasswordField textPassword;
@FXML
protected JFXPasswordField textPasswordSecond;
@FXML
protected JFXToggleButton checkButtonIsAdmin;
@FXML
protected JFXTextField textLogin;
@FXML
protected JFXTextField textForename;
@FXML
protected Label labelError;
@FXML
protected void createUser(ActionEvent event) {
if (validateNameAndLogin() || validatePassword()) return;
User user = new User();
user.setLogin(textLogin.getText().trim());
user.setForename(textForename.getText().trim());
user.setName(textName.getText().trim());
user.setPassword(textPassword.getText().trim());
user.setAdmin(checkButtonIsAdmin.isSelected());
try {
sendHttpRequest(user);
} catch (HttpRequestException e) {
labelError.setText(e.getMessage());
return;
}
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
stage.close();
}
protected boolean validatePassword() {
if (textPassword.getText().trim().isEmpty()) {
labelError.setText("Bitte Passwort eingeben!");
return true;
}
if (textPassword.getText().trim().length() < 8) {
labelError.setText("Das Passwort muss mindestens 8 Zeichen lang sein!");
return true;
}
if (!Objects.equals(textPassword.getText(), textPasswordSecond.getText())){
labelError.setText("Passwörter stimmen nicht überein!");
return true;
}
return false;
}
protected boolean validateNameAndLogin() {
if (textLogin.getText().trim().isEmpty()){
labelError.setText("Bitte Login Namen angeben");
return true;
}
if (textForename.getText().trim().isEmpty()) {
labelError.setText("Bitte Vornamen eingeben!");
return true;
}
if (textName.getText().trim().isEmpty()) {
labelError.setText("Bitte Nachnamen eingeben!");
return true;
}
return false;
}
protected void sendHttpRequest(User user) throws HttpRequestException {
DataController dataController = new DataController();
dataController.createUser(user);
}
@FXML
protected void abortBtnClick(ActionEvent event) {
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
stage.close();
}
}

View File

@ -1,69 +0,0 @@
// Marc Beyer //
package users;
import container.DataController;
import container.User;
import helper.HttpRequestException;
import javafx.event.ActionEvent;
import javafx.scene.Node;
import javafx.scene.control.Alert;
import javafx.stage.Stage;
public class EditUserController extends CreateUserController{
private User currentUser;
public User getCurrentUser() {
return currentUser;
}
public void setCurrentUser(User currentUser) {
this.currentUser = currentUser;
textForename.setText(currentUser.getForename());
textName.setText(currentUser.getName());
textLogin.setText(currentUser.getLogin());
checkButtonIsAdmin.setSelected(currentUser.isAdmin());
}
@Override
protected void createUser(ActionEvent event){
if (validateNameAndLogin()) return;
User user = new User();
if(!textPassword.getText().trim().isEmpty() || !textPasswordSecond.getText().trim().isEmpty()){
if (validatePassword()) return;
user.setPassword(textPassword.getText().trim());
}
user.setUserId(currentUser.getUserId());
user.setLogin(textLogin.getText().trim());
user.setForename(textForename.getText().trim());
user.setName(textName.getText().trim());
user.setAdmin(checkButtonIsAdmin.isSelected());
try {
sendHttpRequest(user);
} catch (HttpRequestException e) {
labelError.setText(e.getMessage());
return;
}
if(currentUser.getUserId() == DataController.USER_ID){
Alert alert = new Alert(
Alert.AlertType.WARNING,
"Bitte starte das Programm neu um die Änderungen anzuwenden."
);
alert.showAndWait();
}
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
stage.close();
}
@Override
protected void sendHttpRequest(User user) throws HttpRequestException {
DataController dataController = new DataController();
dataController.editUser(user);
}
}

View File

@ -1,23 +1,22 @@
//Alex Rechtin//
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 container.DataController; import res.DataController;
public class LoginController { public class LoginController {
@FXML @FXML
private JFXTextField userField; public TextField userField;
@FXML @FXML
private JFXPasswordField passField; public TextField passField;
@FXML @FXML
private Label userErrLabel; public Label userErrLabel;
@FXML @FXML
private Label passErrLabel; public Label passErrLabel;
@FXML @FXML
protected void login(ActionEvent event) { protected void login(ActionEvent event) {

View File

@ -1,38 +1,24 @@
/*Marco Kühn*/
* {
-fx-dark-background-color: #3E415F;
-fx-darkest-background-color: #2B2D42;
-fx-bright-background-color: #8D99AE;
-fx-brighter-background-color: #ff5555;
-fx-brightest-background-color: #ffffff;
-fx-bright-border-color: #B0B0B0;
-fx-brighter-text-color: #ffffff;
}
GridPane{ GridPane{
-fx-background-color: -fx-dark-background-color; -fx-background-color: #3E415F;
-fx-padding: 20px; -fx-padding: 20px;
-fx-font-size: 20px; -fx-font-size: 20px;
-fx-font-family: Segoe UI; -fx-font-family: Segoe UI;
-fx-border-insets: 1; -fx-border-insets: 1;
-fx-border-color: -fx-bright-border-color; -fx-border-color: #B0B0B0;
-fx-border-style: solid; -fx-border-style: solid;
-fx-border-width: 2; -fx-border-width: 2;
-fx-effect: dropshadow(three-pass-box, rgba(100, 100, 100, 1), 24, 0.5, 0, 0); -fx-effect: dropshadow(three-pass-box, rgba(100, 100, 100, 1), 24, 0.5, 0, 0);
} }
Label{ Label{
-fx-text-fill: -fx-brighter-text-color; -fx-text-fill: white;
-fx-max-width: 150px; -fx-max-width: 150px;
-fx-min-width: 150px; -fx-min-width: 150px;
} }
.mainLabel{ .mainLabel{
-fx-background-color: -fx-bright-background-color; -fx-background-color: #8D99AE;
-fx-padding: 10px; -fx-padding: 10px;
-fx-max-width: 200px; -fx-max-width: 200px;
-fx-min-width: 200px; -fx-min-width: 200px;
@ -42,22 +28,16 @@ Label{
.inputField{ .inputField{
-fx-padding: 10px; -fx-padding: 10px;
-fx-background-color: -fx-brightest-background-color;
} }
.mainButton{ .mainButton{
-fx-font-weight: bold; -fx-font-weight: bold;
-fx-background-color: -fx-brightest-background-color;
}
JFXButton{
-fx-background-color: -fx-brightest-background-color;
} }
#labelError{ #labelError{
-fx-font-weight: bold; -fx-font-weight: bold;
-fx-max-width: 1000px; -fx-max-width: 1000px;
-fx-text-fill: -fx-brighter-background-color; -fx-text-fill: #ff5555;
-fx-padding: 16px; -fx-padding: 16px;
-fx-min-height: 140px; -fx-min-height: 140px;
-fx-max-height: 400px; -fx-max-height: 400px;
@ -65,29 +45,7 @@ JFXButton{
-fx-font-size: 16px; -fx-font-size: 16px;
} }
.inputDate{
-fx-background-color: -fx-brightest-background-color;
}
.comboBox{
-fx-background-color: -fx-brightest-background-color;
}
.timePicker{ .timePicker{
-fx-background-color: -fx-brightest-background-color; -fx-background-color: white;
} -fx-max-width: 150px;
}
.jfx-time-picker .date-picker-popup{
-fx-max-width: 230px;
-fx-min-width: 230px;
}
.jfx-time-picker .date-picker-popup > * > .spinner > .label {
-fx-max-width: 55px;
-fx-min-width: 55px;
}
.jfx-date-picker .date-picker-popup > * > .spinner > .label {
-fx-max-width: 300px;
-fx-min-width: 300px;
}

View File

@ -1,16 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Marco Kühn -->
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<?import javafx.collections.FXCollections?> <?import javafx.collections.FXCollections?>
<?import java.lang.String?> <?import java.lang.String?>
<?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="events.CreateEventController"> fx:controller="main.CreateEventController">
<columnConstraints> <columnConstraints>
<ColumnConstraints/> <ColumnConstraints/>
@ -27,25 +23,24 @@
<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> <ComboBox fx:id="ComboBoxTyp" GridPane.columnIndex="1" GridPane.rowIndex="5" maxWidth="400" minWidth="400"/>
<ComboBox fx:id="ComboBoxPriotity" GridPane.columnIndex="1" GridPane.rowIndex="6" maxWidth="200" minWidth="200">
<JFXTextField styleClass="inputField" fx:id="textName" GridPane.columnIndex="1" GridPane.rowIndex="1" maxWidth="400" minWidth="400"/>
<JFXDatePicker styleClass="inputDate" fx:id="datePickerDate" GridPane.columnIndex="1" GridPane.rowIndex="2" maxWidth="200" minWidth="200"/>
<JFXTimePicker styleClass="timePicker" fx:id="timeStart" GridPane.columnIndex="1" GridPane.rowIndex="3" maxWidth="200" minWidth="200"/>
<JFXTimePicker styleClass="timePicker" fx:id="timeEnd" GridPane.columnIndex="1" GridPane.rowIndex="4" maxWidth="200" minWidth="200"/>
<JFXComboBox fx:id="comboBoxPriority" styleClass="comboBox" GridPane.columnIndex="1" GridPane.rowIndex="5" maxWidth="200" minWidth="200">
<items> <items>
<FXCollections fx:factory="observableArrayList"> <FXCollections fx:factory="observableArrayList">
<String fx:value="gering"/> <String fx:value="gering"/>
@ -53,14 +48,14 @@
<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,16 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Marco Kühn -->
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<?import javafx.collections.FXCollections?> <?import javafx.collections.FXCollections?>
<?import java.lang.String?> <?import java.lang.String?>
<?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="events.EditEventController"> fx:controller="main.CreateEventController">
<columnConstraints> <columnConstraints>
<ColumnConstraints/> <ColumnConstraints/>
@ -27,25 +23,24 @@
<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 bearbeiten</Label> <Label styleClass="mainLabel">Termin bearbeiten</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> <ComboBox fx:id="ComboBoxTyp" GridPane.columnIndex="1" GridPane.rowIndex="5" maxWidth="400" minWidth="400"/>
<ComboBox fx:id="ComboBoxPriotity" GridPane.columnIndex="1" GridPane.rowIndex="6" maxWidth="200" minWidth="200">
<JFXTextField styleClass="inputField" fx:id="textName" GridPane.columnIndex="1" GridPane.rowIndex="1" maxWidth="400" minWidth="400"/>
<JFXDatePicker styleClass="inputDate" fx:id="datePickerDate" GridPane.columnIndex="1" GridPane.rowIndex="2" maxWidth="200" minWidth="200"/>
<JFXTimePicker styleClass="timePicker" fx:id="timeStart" GridPane.columnIndex="1" GridPane.rowIndex="3" maxWidth="200" minWidth="200"/>
<JFXTimePicker styleClass="timePicker" fx:id="timeEnd" GridPane.columnIndex="1" GridPane.rowIndex="4" maxWidth="200" minWidth="200"/>
<JFXComboBox fx:id="comboBoxPriority" styleClass="comboBox" GridPane.columnIndex="1" GridPane.rowIndex="5" maxWidth="200" minWidth="200">
<items> <items>
<FXCollections fx:factory="observableArrayList"> <FXCollections fx:factory="observableArrayList">
<String fx:value="gering"/> <String fx:value="gering"/>
@ -53,14 +48,14 @@
<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">Speichern</JFXButton> <Button styleClass="mainButton" onAction="#createBtnClick" maxWidth="150" minWidth="150">Speichern</Button>
</HBox> </HBox>
</GridPane> </GridPane>

View File

@ -1,125 +1,74 @@
/*Alex Rechtin, Marco Kühn*/
* { * {
-fx-dark-background-color: #525E74; -fx-base-background-color: #2B2D42;
-fx-darkest-background-color: #2B2D42; -fx-base1-background-color: #525E74;
-fx-bright-background-color: #77859E; -fx-main-border-color: #B0B0B0;
-fx-brighter-background-color: #282C34 ; -fx-main-text-color: #ffffff;
-fx-brightest-background-color: #333333 ;
-fx-bright-border-color: #B0B0B0;
-fx-brighter-text-color: #ffffff;
} }
GridPane{ GridPane{
-fx-background-color: -fx-darkest-background-color; -fx-background-color: -fx-base-background-color;
} }
.main-panel{ .main-panel{
-fx-background-color: -fx-brighter-background-color; -fx-background-color: #282C34;
} }
.vbox-main{ .vbox-main{
-fx-background-color: -fx-brightest-background-color; -fx-background-color: #333333;
-fx-alignment: top-center; -fx-alignment: top-center;
} }
.gridCalendar Line{ .gridCalendar Line{
-fx-stroke: -fx-bright-border-color; -fx-stroke: -fx-main-border-color;
} }
.gridCalender{ .gridCalender{
-fx-background-color: -fx-darkest-background-color; -fx-background-color: -fx-base-background-color;
-fx-min-height: 80px; -fx-min-height: 80px;
-fx-max-height: 80px; -fx-max-height: 80px;
} }
.labelMonth{ .labelMonth{
-fx-padding: 0 0 0 20; -fx-padding: 0 0 0 20;
-fx-background-color: -fx-bright-background-color; -fx-background-color: #77859E;
-fx-font-size: 35px; -fx-font-size: 35px;
-fx-font-weight: bold; -fx-font-weight: bold;
} }
.scrollDays{ .scrollDays{
-fx-background-color: -fx-darkest-background-color; -fx-background-color: -fx-base-background-color;
-fx-border-color: -fx-bright-border-color; -fx-border-color: -fx-main-border-color;
} }
.vBoxDays{ .vBoxDays{
-fx-background-color: -fx-darkest-background-color; -fx-background-color: -fx-base-background-color;
} }
.labelDays{ .labelDays{
-fx-alignment: center; -fx-alignment: center;
-fx-background-color: -fx-dark-background-color; -fx-background-color: -fx-base1-background-color;
-fx-font-size: 25px; -fx-font-size: 25px;
-fx-border-color: -fx-bright-border-color; -fx-border-color: -fx-main-border-color;
} }
Label{ Label{
-fx-text-fill: -fx-brighter-text-color; -fx-text-fill: -fx-main-text-color;
} }
.event{ .event{
-fx-background-color: -fx-dark-background-color; -fx-background-color: -fx-base1-background-color;
} }
.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: -fx-bright-background-color;
}
.navBtn{
-fx-background-color: transparent;
-fx-border-color: transparent;
}
.navBtn .svg {
-fx-fill: -fill;
}
.navBtn:hover .svg {
-fx-fill: -hover-fill;
}
.editEventBtn{
-fx-background-color: transparent;
-fx-border-color: transparent;
}
.editEventBtn .svg {
-fx-fill: -fill;
}
.editEventBtn:hover .svg {
-fx-fill: -hover-fill;
}
.deleteEventBtn{
-fx-background-color: transparent;
-fx-border-color: transparent;
}
.deleteEventBtn .svg {
-fx-fill: -fill;
}
.deleteEventBtn:hover .svg {
-fx-fill: -hover-fill;
} }

View File

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Alex Rechtin, Marco Kühn -->
<?import javafx.geometry.*?> <?import javafx.geometry.*?>
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.image.*?> <?import javafx.scene.image.*?>
@ -16,13 +14,22 @@
<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/>
@ -41,8 +48,9 @@
<Insets left="5"/> <Insets left="5"/>
</padding> </padding>
</Label> </Label>
<Button onAction="#onBackClick" GridPane.columnIndex="1" maxHeight="1.7976931348623157E308">zurück</Button>
<HBox fx:id="buttonBox" styleClass="buttonBox" GridPane.columnIndex="1" alignment="CENTER"/> <Button onAction="#onTodayClick" GridPane.columnIndex="2" maxHeight="1.7976931348623157E308">heute</Button>
<Button onAction="#onNextClick" GridPane.columnIndex="3" maxHeight="1.7976931348623157E308">weiter</Button>
<GridPane fx:id="calendarGrid" gridLinesVisible="true" styleClass="gridCalendar" GridPane.columnSpan="4" <GridPane fx:id="calendarGrid" gridLinesVisible="true" styleClass="gridCalendar" GridPane.columnSpan="4"
GridPane.columnIndex="0" GridPane.rowIndex="1"> GridPane.columnIndex="0" GridPane.rowIndex="1">

View File

@ -1,69 +0,0 @@
/* Marco Kühn */
* {
-fx-dark-background-color: #3E415F;
-fx-bright-background-color: #ff5555;
-fx-brighter-background-color: #8D99AE;
-fx-brightest-background-color: #ffffff;
-fx-bright-border-color: #B0B0B0;
-fx-brighter-text-color: #ffffff;
}
GridPane{
-fx-background-color: -fx-dark-background-color;
-fx-padding: 20px;
-fx-font-size: 20px;
-fx-font-family: Segoe UI;
-fx-border-insets: 1;
-fx-border-color: -fx-bright-border-color;
-fx-border-style: solid;
-fx-border-width: 2;
-fx-effect: dropshadow(three-pass-box, rgba(100, 100, 100, 1), 24, 0.5, 0, 0);
}
Label{
-fx-text-fill: -fx-brighter-text-color;
-fx-max-width: 200px;
-fx-min-width: 200px;
}
.mainLabel{
-fx-background-color: -fx-brighter-background-color;
-fx-padding: 10px;
-fx-max-width: 200px;
-fx-min-width: 200px;
-fx-font-weight: bold;
-fx-alignment: center;
}
.mainButton{
-fx-font-weight: bold;
-fx-background-color: -fx-brightest-background-color;
}
JFXButton{
-fx-background-color: -fx-brightest-background-color;
}
#labelError{
-fx-font-weight: bold;
-fx-max-width: 1000px;
-fx-text-fill: -fx-bright-background-color;
-fx-padding: 16px;
-fx-min-height: 140px;
-fx-max-height: 400px;
-fx-wrap-text: true;
-fx-font-size: 16px;
}
.comboBox{
-fx-background-color: -fx-brightest-background-color;
-fx-max-width: 200px;
-fx-min-width: 200px;
}
.userBtn{
-fx-max-width: 200px;
-fx-min-width: 200px;
}

View File

@ -1,52 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Marco Kühn -->
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import com.jfoenix.controls.*?>
<GridPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="main.OptionController"
prefHeight="400.0" prefWidth="600.0"
fx:id="mainGrid">
<columnConstraints>
<ColumnConstraints minWidth="100"/>
<ColumnConstraints minWidth="100"/>
<ColumnConstraints minWidth="200"/>
<ColumnConstraints minWidth="100"/>
<ColumnConstraints minWidth="100"/>
</columnConstraints>
<rowConstraints>
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
</rowConstraints>
<Label styleClass="mainLabel" GridPane.columnIndex="2" GridPane.halignment="CENTER" >Einstellungen</Label>
<Label GridPane.columnIndex="1" GridPane.rowIndex="2" GridPane.halignment="CENTER">User:</Label>
<JFXButton styleClass="userBtn" fx:id="updateUserBtn" GridPane.columnIndex="1" GridPane.columnSpan="3"
GridPane.rowIndex="4" GridPane.halignment="CENTER" onAction="#onUpdateBtnClick">User bearbeiten</JFXButton>
<JFXButton styleClass="userBtn" fx:id="deleteUserBtn" GridPane.columnIndex="1" GridPane.columnSpan="3"
GridPane.rowIndex="5" GridPane.halignment="CENTER" onAction="#onDeleteBtnClick">User löschen</JFXButton>
<JFXButton styleClass="userBtn" fx:id="createUserBtn" GridPane.columnIndex="1" GridPane.columnSpan="3"
GridPane.rowIndex="7" GridPane.halignment="CENTER" onAction="#onCreateBtnClick">User anlegen</JFXButton>
<Label styleClass="loginLbl" GridPane.columnIndex="1" GridPane.rowIndex="8"
GridPane.halignment="CENTER">Angemeldet bleiben:</Label>
<JFXToggleButton fx:id="saveLoginTBtn" GridPane.columnIndex="3" GridPane.rowIndex="8" onAction="#toggledBtn"/>
<Label fx:id="labelError" styleClass="errorMessage" GridPane.columnIndex="1" GridPane.rowIndex="9"/>
<JFXButton GridPane.columnIndex="4" GridPane.rowIndex="9" onAction="#onBackBtnClick">Zurück</JFXButton>
</GridPane>

View File

@ -1,60 +0,0 @@
/*Alex Rechtin*/
* {
-fx-dark-background-color: #3E415F;
-fx-bright-background-color: #ffffff;
-fx-bright-border-color: #B0B0B0;
-fx-brighter-text-color: #ff5555;
-fx-brightest-text-color: #ffffff;
}
GridPane{
-fx-background-color: -fx-dark-background-color;
-fx-padding: 20px;
-fx-font-size: 20px;
-fx-font-family: Segoe UI;
-fx-border-insets: 1;
-fx-border-color: -fx-bright-border-color;
-fx-border-style: solid;
-fx-border-width: 2;
-fx-effect: dropshadow(three-pass-box, rgba(100, 100, 100, 1), 24, 0.5, 0, 0);
}
.mainLabel{
-fx-padding: 10px;
-fx-max-width: 400px;
-fx-min-width: 400px;
-fx-font-weight: bold;
-fx-alignment: top-center;
}
Label{
-fx-text-fill: -fx-brightest-text-color;
-fx-max-width: 150px;
-fx-min-width: 150px;
}
.textField{
-fx-background-color: -fx-bright-background-color;
-fx-max-width: 400px;
-fx-min-width: 400px;
}
.errorMessage{
-fx-max-width: 400px;
-fx-min-width: 400px;
-fx-text-fill: -fx-brighter-text-color;
}
JFXButton{
-fx-background-color: -fx-bright-background-color;
-fx-max-width: 150px;
-fx-min-width: 150px;
}
.btnLogin{
-fx-font-weight: bold;
}

View File

@ -1,62 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Alex Rechtin -->
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.Insets?>
<?import com.jfoenix.controls.JFXToggleButton?>
<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXPasswordField?>
<?import com.jfoenix.controls.JFXTextField?>
<GridPane xmlns="http://javafx.com/javafx"
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" wrapText="true" GridPane.rowIndex="5" GridPane.columnIndex="1">Passwort wiederholen:</Label>
<Label styleClass="inputLabelAdmin" GridPane.rowIndex="6" GridPane.columnIndex="1">Admin:</Label>
<JFXTextField fx:id="textLogin" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="1" />
<JFXTextField fx:id="textForename" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="2" />
<JFXTextField fx:id="textName" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="3" />
<JFXPasswordField fx:id="textPassword" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="4" />
<JFXPasswordField fx:id="textPasswordSecond" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="5" />
<JFXToggleButton fx:id="checkButtonIsAdmin" GridPane.columnIndex="2" GridPane.rowIndex="6"/>
<Label fx:id="labelError" wrapText="true" styleClass="errorMessage" GridPane.columnIndex="2" GridPane.rowIndex="7"/>
<HBox GridPane.columnIndex="2" GridPane.rowIndex="8" alignment="CENTER_RIGHT">
<HBox.margin>
<Insets right="100" left="100"/>
</HBox.margin>
<JFXButton onAction="#abortBtnClick">Abbrechen</JFXButton>
<JFXButton onAction="#createUser" styleClass="btnLogin" >Anlegen</JFXButton>
</HBox>
</GridPane>

View File

@ -1,61 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Alex Rechtin-->
<?import javafx.scene.layout.*?>
<?import javafx.geometry.Insets?>
<?import com.jfoenix.controls.JFXToggleButton?>
<?import com.jfoenix.controls.JFXTextField?>
<?import com.jfoenix.controls.JFXPasswordField?>
<?import com.jfoenix.controls.JFXButton?>
<?import javafx.scene.control.Label?>
<GridPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="users.EditUserController">
<columnConstraints>
<ColumnConstraints minWidth="100"/>
<ColumnConstraints minWidth="100"/>
<ColumnConstraints minWidth="100"/>
</columnConstraints>
<rowConstraints>
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
</rowConstraints>
<Label styleClass="mainLabel" GridPane.columnIndex="2" >User bearbeiten</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="1" GridPane.columnIndex="1">Login:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="2" GridPane.columnIndex="1">Vorname:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="3" GridPane.columnIndex="1">Nachname:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="4" GridPane.columnIndex="1">Passwort:</Label>
<Label styleClass="inputLabel" wrapText="true" GridPane.rowIndex="5" GridPane.columnIndex="1">Passwort wiederholen:</Label>
<Label styleClass="inputLabelAdmin" GridPane.rowIndex="6" GridPane.columnIndex="1">Admin:</Label>
<JFXTextField fx:id="textLogin" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="1" />
<JFXTextField fx:id="textForename" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="2" />
<JFXTextField fx:id="textName" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="3" />
<JFXPasswordField fx:id="textPassword" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="4" />
<JFXPasswordField fx:id="textPasswordSecond" styleClass="textField" GridPane.columnIndex="2" GridPane.rowIndex="5" />
<JFXToggleButton fx:id="checkButtonIsAdmin" GridPane.columnIndex="2" GridPane.rowIndex="6"/>
<Label fx:id="labelError" wrapText="true" styleClass="errorMessage" GridPane.columnIndex="2" GridPane.rowIndex="7"/>
<HBox GridPane.columnIndex="2" GridPane.rowIndex="8" alignment="CENTER_RIGHT">
<HBox.margin>
<Insets right="100" left="100"/>
</HBox.margin>
<JFXButton onAction="#abortBtnClick">Abbrechen</JFXButton>
<JFXButton onAction="#createUser" styleClass="btnLogin" >Bearbeiten</JFXButton>
</HBox>
</GridPane>

View File

@ -1,30 +1,26 @@
/* Marco Kühn*/
* { * {
-fx-dark-background-color: #3E415F; -fx-base-background-color: #2B2D42;
-fx-base1-background-color: #525E74;
-fx-brightest-background-color: #ffffff; -fx-main-border-color: #B0B0B0;
-fx-main-text-color: #ffffff;
-fx-bright-border-color: #B0B0B0;
-fx-bright-text-color: #ff5555;
-fx-brighter-text-color: #ffffff;
} }
GridPane{ GridPane{
-fx-background-color: -fx-dark-background-color; -fx-background-color: #3E415F;
-fx-padding: 20px; -fx-padding: 20px;
-fx-font-size: 20px; -fx-font-size: 20px;
-fx-font-family: Segoe UI; -fx-font-family: Segoe UI;
-fx-border-insets: 1; -fx-border-insets: 1;
-fx-border-color: -fx-bright-border-color; -fx-border-color: #B0B0B0;
-fx-border-style: solid; -fx-border-style: solid;
-fx-border-width: 2; -fx-border-width: 2;
-fx-effect: dropshadow(three-pass-box, rgba(100, 100, 100, 1), 24, 0.5, 0, 0); -fx-effect: dropshadow(three-pass-box, rgba(100, 100, 100, 1), 24, 0.5, 0, 0);
} }
Label{ Label{
-fx-text-fill: -fx-brighter-text-color; -fx-text-fill: white;
-fx-max-width: 150px; -fx-max-width: 150px;
-fx-min-width: 150px; -fx-min-width: 150px;
} }
@ -32,26 +28,10 @@ Label{
.errorLbl{ .errorLbl{
-fx-font-weight: bold; -fx-font-weight: bold;
-fx-max-width: 200px; -fx-max-width: 200px;
-fx-text-fill: -fx-bright-text-color; -fx-text-fill: #ff5555;
-fx-padding: 16px; -fx-padding: 16px;
-fx-min-height: 140px; -fx-min-height: 140px;
-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: -fx-brightest-background-color;
}
.passField{
-fx-background-color: -fx-brightest-background-color;
}
.quitBtn{
-fx-background-color: -fx-brightest-background-color;
}
.loginBtn{
-fx-background-color: -fx-brightest-background-color;
} }

View File

@ -1,11 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Marco Kühn -->
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<?import 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>
@ -23,14 +19,14 @@
<Label GridPane.columnIndex="1">Anmelden</Label> <Label GridPane.columnIndex="1">Anmelden</Label>
<Label GridPane.rowIndex="1">Username</Label> <Label GridPane.rowIndex="1">Username</Label>
<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">Passwort</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

@ -2,14 +2,9 @@ plugins {
java java
} }
tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
}
dependencies { dependencies {
val jacksonVersion = "2.13.0" val jacksonVersion = "2.13.0"
implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion")
implementation("com.fasterxml.jackson.core:jackson-core:$jacksonVersion") implementation("com.fasterxml.jackson.core:jackson-core:$jacksonVersion")
implementation("com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion") implementation("com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion")
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion")
} }

View File

@ -1,81 +0,0 @@
//Marc Beyer//
package config;
public class Config {
private boolean saveLogin;
private long id;
private String token;
private String connectionMethod;
private String hostAddress;
private int port;
public Config(){
saveLogin = false;
id = -1;
token = "";
connectionMethod = "http";
hostAddress = "localhost";
port = 8080;
}
public Config(boolean saveLogin, long id, String token) {
this.saveLogin = saveLogin;
this.id = id;
this.token = token;
connectionMethod = "http";
hostAddress = "localhost";
port = 8080;
}
public boolean isSaveLogin() {
return saveLogin;
}
public void setSaveLogin(boolean saveLogin) {
this.saveLogin = saveLogin;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getConnectionMethod() {
return connectionMethod;
}
public void setConnectionMethod(String connectionMethod) {
this.connectionMethod = connectionMethod;
}
public String getHostAddress() {
return hostAddress;
}
public void setHostAddress(String hostAddress) {
this.hostAddress = hostAddress;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String toServerUrl(){
return getConnectionMethod() + "://" + getHostAddress() + ":" + getPort();
}
}

View File

@ -1,43 +0,0 @@
//Marc Beyer//
package config;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class ConfigLoader {
public static Config load(){
try {
String jsonString = Files.readString(Paths.get("config.json"));
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.findAndRegisterModules();
return objectMapper.readValue(jsonString, Config.class);
} catch (IOException e) {
System.out.println("config.json missing");
Config config = new Config(false, -1, "");
save(config);
return config;
}
}
public static void save(Config config){
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.findAndRegisterModules();
try {
Files.writeString(
Paths.get("config.json"),
objectMapper.writeValueAsString(config)
.replace(",", ",\n\t")
.replace("{", "{\n\t")
.replace("}", "\n}")
);
} catch (IOException e) {
e.printStackTrace();
}
}
}

View File

@ -1,221 +0,0 @@
//Marc Beyer//
package container;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import helper.HttpRequestException;
import helper.Tuple;
import java.time.LocalDateTime;
import java.util.*;
public class DataController {
public static long USER_ID = -1;
public static String SERVER_URL = "http://localhost:8080";
private static final String ALL_EVENTS_ENDPOINT = "/event/all";
private static final String ADD_EVENT_ENDPOINT = "/event/add";
private static final String DELETE_EVENT_ENDPOINT = "/event/del";
private static final String EDIT_EVENT_ENDPOINT = "/event/edit";
private static final String ALL_USER_ENDPOINT = "/user/all";
private static final String ADD_USER_ENDPOINT = "/user/add";
private static final String DELETE_USER_ENDPOINT = "/user/del";
private static final String EDIT_USER_ENDPOINT = "/user/edit";
private static final String LOGIN_ENDPOINT = "/user/login";
private static final String LOGIN_WITH_TOKEN_ENDPOINT = "/user/login-with-token";
private static final String HEADER_TEST_ENDPOINT = "/vpr/header-test";
private final HttpRequest httpRequest;
public DataController() {
httpRequest = new HttpRequest();
}
public boolean login(String username, String password) {
try {
Tuple<Integer, String> response = httpRequest.sendPostRequest(
SERVER_URL + LOGIN_ENDPOINT,
"login=" + username
+ "&password=" + password,
false
);
String[] data = response.getValue().split("\\s+");
USER_ID = Long.parseLong(data[1]);
HttpRequest.TOKEN = data[0];
} catch (Exception e) {
e.printStackTrace();
return false;
}
return USER_ID >= 0;
}
public boolean loginWithToken(long userId, String token) {
try {
HttpRequest.TOKEN = token;
Tuple<Integer, String> response = httpRequest.sendPostRequest(
SERVER_URL + LOGIN_WITH_TOKEN_ENDPOINT,
"userId=" + userId,
true
);
System.out.println(response.getKey() + " " + response.getValue());
if (response.getKey() != 200) return false;
} catch (Exception e) {
e.printStackTrace();
return false;
}
USER_ID = userId;
HttpRequest.TOKEN = token;
return USER_ID >= 0;
}
/*********
* Event *
*********/
public void createEvent(Event event) throws HttpRequestException {
sendBasicHttpRequest(
SERVER_URL + ADD_EVENT_ENDPOINT,
event.getAsUrlParam(),
true
);
}
public void deleteEvent(int userId, int eventId, LocalDateTime date) throws HttpRequestException {
sendBasicHttpRequest(
SERVER_URL + DELETE_EVENT_ENDPOINT,
"userId=" + userId + "&eventId=" + eventId + "&date=" + date.toLocalDate(),
true
);
}
public void editEvent(Event oldEvent, Event event) throws HttpRequestException {
sendBasicHttpRequest(
SERVER_URL + EDIT_EVENT_ENDPOINT,
"eventId=" + oldEvent.getId() +
"&userId=" + oldEvent.getOwnerId() +
"&date=" + oldEvent.getDate().toLocalDate() +
"&newDate=" + event.getDate().toLocalDate() +
"&newName=" + event.getName() +
"&newStart=" + event.getStart() +
"&newEnd=" + event.getEnd() +
"&newPriority=" + event.getPriority() +
"&newIsFullDay=" + event.isFullDay() +
"&newIsPrivate=" + event.isPrivate(),
true
);
}
public ArrayList<Event> getAllVisibleEvents(LocalDateTime startDate, LocalDateTime endDate) throws HttpRequestException {
try {
Tuple<Integer, String> response = httpRequest.sendPostRequest(
SERVER_URL + ALL_EVENTS_ENDPOINT,
"userId=" + USER_ID + "&startDate=" + startDate.toLocalDate() + "&endDate=" + endDate.toLocalDate(),
true
);
if (response.getKey() != 200) {
throw new HttpRequestException(response);
}
String jsonResponse = response.getValue();
System.out.println(jsonResponse);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.findAndRegisterModules();
return (ArrayList<Event>) objectMapper.readValue(jsonResponse, new TypeReference<List<Event>>() {
});
} catch (HttpRequestException e) {
throw e;
} catch (Exception e) {
throw new HttpRequestException("Es konnte keine Verbindung mit dem Server hergestellt werden.", 600);
}
}
/********
* User *
********/
public List<User> getAllUser() throws HttpRequestException {
String userJSON = sendBasicHttpRequest(
SERVER_URL + ALL_USER_ENDPOINT,
"",
true
);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.findAndRegisterModules();
try {
List<User> list = objectMapper.readValue(userJSON, new TypeReference<>() {
});
for(User u : list){
System.out.println(u);
}
return list;
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return new ArrayList<>();
}
public void createUser(User user) throws HttpRequestException {
sendBasicHttpRequest(
SERVER_URL + ADD_USER_ENDPOINT,
"name=" + user.getName() +
"&forename=" + user.getForename() +
"&login=" + user.getLogin() +
"&password=" + user.getPassword() +
"&isAdmin=" + user.isAdmin(),
true
);
}
public void deleteUser(User user) throws HttpRequestException {
sendBasicHttpRequest(
SERVER_URL + DELETE_USER_ENDPOINT,
"userId=" + user.getUserId(),
true
);
}
public void editUser(User user) throws HttpRequestException {
String urlParam = "userId=" + user.getUserId() +
"&name=" + user.getName() +
"&forename=" + user.getForename() +
"&login=" + user.getLogin() +
"&isAdmin=" + user.isAdmin() +
(user.getPassword() == null ? "" : "&password=" + user.getPassword());
System.out.println(urlParam);
sendBasicHttpRequest(
SERVER_URL + EDIT_USER_ENDPOINT,
urlParam,
true
);
}
private String sendBasicHttpRequest(String urlString, String urlParameters, boolean sendAuth) throws HttpRequestException {
try {
Tuple<Integer, String> response = httpRequest.sendPostRequest(
urlString,
urlParameters,
sendAuth
);
if (response.getKey() != 200) {
throw new HttpRequestException(response);
}
return response.getValue();
} catch (HttpRequestException e) {
throw e;
} catch (Exception e) {
throw new HttpRequestException("Es konnte keine Verbindung mit dem Server hergestellt werden.", 600);
}
}
}

View File

@ -1,78 +0,0 @@
//Marc Beyer//
package container;
import helper.Tuple;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class HttpRequest {
public static String TOKEN = "";
public Tuple<Integer, String> sendPostRequest(String urlString, String urlParameters, boolean sendAuth) throws Exception {
byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);
int postDataLength = postData.length;
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("charset", "utf-8");
connection.setRequestProperty("Content-Length", Integer.toString(postDataLength));
connection.setUseCaches(false);
if(sendAuth){
connection.setRequestProperty("Accept", "application/json");
connection.setRequestProperty("Authorization", "Bearer " + TOKEN);
}
try (DataOutputStream writer = new DataOutputStream(connection.getOutputStream())) {
writer.write(postData);
}
return getHttpTuple(connection);
}
public Tuple<Integer, String> sendGetRequest(String urlString) throws Exception {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int status = connection.getResponseCode();
return getHttpTuple(connection);
}
private Tuple<Integer, String> getHttpTuple(HttpURLConnection connection) throws IOException {
int status = connection.getResponseCode();
String inputLine;
StringBuilder content = new StringBuilder();
BufferedReader in;
if (status == 200) {
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
} else {
in = new BufferedReader(new InputStreamReader(connection.getErrorStream(), StandardCharsets.UTF_8));
}
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
connection.disconnect();
return new Tuple<>(status, content.toString());
}
}

View File

@ -1,76 +0,0 @@
//Marco Kühn//
package container;
public class User {
private int userId;
private String login;
private String forename;
private String name;
private String password;
private boolean isAdmin;
public User(){}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getForename() {
return forename;
}
public void setForename(String forename) {
this.forename = forename;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isAdmin() {
return isAdmin;
}
public void setAdmin(boolean admin) {
isAdmin = admin;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", login='" + login + '\'' +
", forename='" + forename + '\'' +
", name='" + name + '\'' +
", password='" + password + '\'' +
", isAdmin=" + isAdmin +
'}';
}
}

View File

@ -1,24 +0,0 @@
//Marc Beyer//
package helper;
public class HttpRequestException extends Exception{
private int status;
public HttpRequestException(String message, int status) {
super(message);
this.status = status;
}
public HttpRequestException(Tuple<Integer, String> response) {
super(response.getValue());
this.status = response.getKey();
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
}

View File

@ -1,28 +0,0 @@
//Marc Beyer//
package helper;
public class Tuple<X, Y> {
public final X key;
public final Y value;
public Tuple(X key, Y value) {
this.key = key;
this.value = value;
}
public X getKey() {
return key;
}
public Y getValue() {
return value;
}
@Override
public String toString() {
return "Tuple{" +
"key=" + key +
", value=" + value +
'}';
}
}

View File

@ -0,0 +1,114 @@
package res;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.*;
public class DataController {
public static long USER_ID = -1;
private static final String ALL_EVENTS_ENDPOINT = "http://localhost:8080/event/all";
private static final String ADD_EVENT_ENDPOINT = "http://localhost:8080/event/add";
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 ALL_USERS_ENDPOINT = "http://localhost:8080/user/all";
private final HttpRequest httpRequest;
public DataController() {
httpRequest = new HttpRequest();
}
public boolean login(String username, String password) {
try {
USER_ID = Long.parseLong(httpRequest.sendPostRequest(
LOGIN_ENDPOINT,
"login=" + username
+ "&password=" + password
));
} catch (Exception e) {
e.printStackTrace();
return false;
}
return USER_ID >= 0;
}
public void createEvent(Event event) {
try {
System.out.println(httpRequest.sendPostRequest(ADD_EVENT_ENDPOINT, event.getAsUrlParam()));
} catch (Exception e) {
throw new RuntimeException("Es konnte keine Verbindung mit dem Server hergestellt werden.");
}
}
public void deleteEvent(int eventId) {
try {
System.out.println(httpRequest.sendPostRequest(DELETE_EVENT_ENDPOINT, "eventId=" + eventId));
} catch (Exception e) {
e.printStackTrace();
}
}
public ArrayList<Event> getAllVisibleEvents() {
ArrayList<Event> eventList = new ArrayList<>();
try {
String jsonResponse = httpRequest.sendPostRequest(ALL_EVENTS_ENDPOINT, "userId=" + USER_ID);
System.out.println(jsonResponse);
ObjectMapper objectMapper = new ObjectMapper();
//String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
for (Object obj : objectMapper.readValue(jsonResponse, Object[].class)) {
ArrayList<Object> list = new ArrayList<>();
if (obj.getClass().isArray()) {
list = (ArrayList<Object>) Arrays.asList((Object[]) obj);
} else if (obj instanceof Collection) {
list = new ArrayList<>((Collection<?>) obj);
}
eventList.add(new Event(list));
}
} catch (Exception e) {
e.printStackTrace();
}
return eventList;
}
public Event[] getAllEvents() {
Event[] eventList = null;
try {
String jsonResponse = httpRequest.sendGetRequest("http://localhost:8080/vpr/all-events-test");
eventList = parseJsonToEventList(jsonResponse);
for (Event e : eventList) {
System.out.println(e);
}
} catch (Exception e) {
e.printStackTrace();
}
return eventList;
}
private Event[] parseJsonToEventList(String jsonString) throws JsonProcessingException {
ArrayList<Event> eventList;
// Parse JSON
ObjectMapper objectMapper = new ObjectMapper();
//String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
return objectMapper.readValue(jsonString, Event[].class);
}
}

View File

@ -1,12 +1,15 @@
//Marco Kühn// package res;
package container;
import com.sun.jdi.event.StepEvent;
import java.time.Duration; import java.time.Duration;
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.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class Event { public class Event {
@ -23,32 +26,60 @@ public class Event {
private int ownerId; private int ownerId;
private String ownerName; private String ownerName;
public Event() {} /*
Constructor for SELECT:
e.id AS eid,
e.name AS ename,
e.start,
e.end,
e.priority,
e.is_full_day,
ue.date,
u.id AS uid,
u.forename,
u.name AS uname
*/
public Event(ArrayList<Object> arr) {
id = (int) arr.get(0);
name = (String) arr.get(1);
start = (String) arr.get(2);
end = (String) arr.get(3);
priority = (int) arr.get(4);
isFullDay = (Boolean) arr.get(5); //((String)arr.get(5)).equals("true");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
date = LocalDateTime.parse(arr.get(6) + " 00:00", formatter);
ownerId = (int) arr.get(7);
ownerName = arr.get(8) + " " + arr.get(9);
}
public Event(String name, public Event(String name,
int priority, int priority,
boolean isFullDay, boolean isFullDay,
boolean isPrivate, boolean isPrivate,
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"); throw new IllegalArgumentException("Der Name muss eine L\u00e4nge von 3 haben.");
if (name.length() < 3) {
throw new IllegalArgumentException("Der Name muss eine Länge von 3 haben.");
} }
Pattern pattern = Pattern.compile("[A-Za-zäöüÄÖÜß0-9 =!?+*/$.:,;_<>()-]*"); 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()){
throw new IllegalArgumentException("Der Name darf nur aus Zahlen, Buchstaben und folgenden Sonderzeichen bestehen: äöü ÄÖÜ ß =!?+*/$.:,;_ <>()-"); throw new IllegalArgumentException("Der Name darf nur aus Zahlen, Buchstaben und folgenden Sonderzeichen bestehen: =!?+*/$%€.:,;_ <>()-");
} }
if (priority < 0) { if(priority < 0){
throw new IllegalArgumentException("Bitte eine Priorität wählen."); 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.");
} }
@ -56,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 (end != null) this.end = end.toString(); this.end = end;
this.date = date; this.date = date;
this.ownerId = ownerId; this.ownerId = ownerId;
} }
@ -122,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() {
@ -158,7 +188,7 @@ 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();
} }

View File

@ -0,0 +1,76 @@
package res;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
public class HttpRequest {
public String sendPostRequest(String urlString, String urlParameters) throws Exception {
byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);
int postDataLength = postData.length;
URL url = new URL(urlString);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
con.setInstanceFollowRedirects(false);
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
con.setRequestProperty("charset", "utf-8");
con.setRequestProperty("Content-Length", Integer.toString(postDataLength));
con.setUseCaches(false);
try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) {
wr.write(postData);
}
int status = con.getResponseCode();
if (status == 200) {
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
con.disconnect();
return content.toString();
} else {
con.disconnect();
throw new Exception("Status: " + status);
}
}
public String sendGetRequest(String urlString) throws Exception {
URL url = new URL(urlString);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setConnectTimeout(5000);
con.setReadTimeout(5000);
int status = con.getResponseCode();
if (status == 200) {
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
con.disconnect();
return content.toString();
} else {
con.disconnect();
throw new Exception("Status: " + status);
}
}
}