Compare commits

..

2 Commits

Author SHA1 Message Date
0043e7f1bd Added Post request;
Get events from DB;
Insert events into ui;
2021-11-28 15:12:43 +01:00
6d9e7c5929 Created controller for CreateEventView 2021-11-28 08:13:18 +01:00
9 changed files with 379 additions and 115 deletions

View File

@ -0,0 +1,27 @@
package client;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.stage.Stage;
public class CreateEventController {
public CreateEventController(){}
@FXML
public void initialize(){}
@FXML
protected void createBtnClick(ActionEvent event){
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

@ -2,6 +2,7 @@ package client;
import javafx.application.Application; import javafx.application.Application;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.stage.Stage; import javafx.stage.Stage;
@ -12,6 +13,7 @@ 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")); 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(MainApplication.class.getResource("main-view.css")).toExternalForm()); scene.getStylesheets().add(Objects.requireNonNull(MainApplication.class.getResource("main-view.css")).toExternalForm());
stage.setTitle("Hello!"); stage.setTitle("Hello!");

View File

@ -1,42 +1,61 @@
package client; package client;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Node; import javafx.geometry.Pos;
import javafx.scene.Scene; import javafx.scene.Scene;
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.VBox; import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Modality; import javafx.stage.Modality;
import javafx.stage.Stage; import javafx.stage.Stage;
import javafx.stage.StageStyle;
import res.Event;
import res.DataController; import res.DataController;
import res.Event;
import javafx.event.ActionEvent;
import java.io.IOException; import java.io.IOException;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Objects; import java.util.Objects;
public class MainController { public class MainController {
@FXML @FXML
private GridPane calendarGrid; private GridPane calendarGrid;
@FXML @FXML
private VBox vBoxMon; private Label LabelMonth;
@FXML
private VBox vBoxTue;
@FXML
private VBox vBoxWen;
@FXML
private VBox vBoxThu;
@FXML
private VBox vBoxFri;
@FXML
private VBox vBoxSat;
@FXML
private VBox vBoxSun;
private final String[] dayNames = {"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"};
private final Label[] dayLabel = new Label[7];
private final VBox[] dayVBoxes = new VBox[7];
private int weekOffset;
private LocalDateTime weekStartDateTime;
public MainController() {
weekOffset = 0;
}
@FXML
public void initialize(){
createWeek();
setDates();
DataController dataController = new DataController();
ArrayList<Event> eventList = dataController.getAllVisibleEvents();
for(Event event : eventList){
addEvent(event);
}
}
@FXML @FXML
protected void onAddBtnClick(){ protected void onAddBtnClick(){
@ -49,34 +68,109 @@ public class MainController {
stage.setScene(scene); stage.setScene(scene);
stage.initModality(Modality.APPLICATION_MODAL); stage.initModality(Modality.APPLICATION_MODAL);
stage.setResizable(false); stage.setResizable(false);
stage.initStyle(StageStyle.UNDECORATED); //stage.initStyle(StageStyle.UNDECORATED);
stage.showAndWait(); stage.showAndWait();
} }
catch (IOException e){ catch (IOException e){
e.printStackTrace(); e.printStackTrace();
} }
}
private void createWeek(){
DataController dataController = new DataController(); for (int i = 0; i < 7; i++) {
Event[] eventList = dataController.getAllEvents();
for(Event event : eventList){
Label label = new Label(); Label label = new Label();
label.setText(event.toString()); label.setText(dayNames[i]);
label.setTextFill(Color.WHITE); label.setMaxHeight(Double.MAX_VALUE);
vBoxWen.getChildren().add(label); label.setMaxWidth(Double.MAX_VALUE);
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);
} }
} }
@FXML private void addEvent(Event event){
protected void createBtnClick(ActionEvent event){ VBox vBox = new VBox();
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); vBox.getStyleClass().add("event");
stage.close(); vBox.setSpacing(5);
HBox btnHBox = new HBox();
btnHBox.setAlignment(Pos.BOTTOM_RIGHT);
Button deleteBtn = new Button();
deleteBtn.setText(" X ");
deleteBtn.setOnAction(e -> {
LocalDateTime eventDate = event.getDate();
int day = (int)Duration.between(weekStartDateTime.toLocalDate().atStartOfDay(), eventDate.toLocalDate().atStartOfDay()).toDays();
dayVBoxes[day].getChildren().remove(vBox);
});
Button editBtn = new Button();
editBtn.setText("edit");
btnHBox.getChildren().add(editBtn);
btnHBox.getChildren().add(deleteBtn);
vBox.getChildren().add(btnHBox);
Label nameLabel = new Label(event.getName());
vBox.getChildren().add(nameLabel);
Label timeLabel = new Label(event.getStart() + "-" + event.getEnd());
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);
} }
@FXML
protected void abortBtnClick(ActionEvent event){ LocalDateTime eventDate = event.getDate();
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
stage.close(); int day = (int)Duration.between(weekStartDateTime.toLocalDate().atStartOfDay(), eventDate.toLocalDate().atStartOfDay()).toDays();
if(day >= 0 && day < 7){
dayVBoxes[day].getChildren().add(vBox);
}
}
private void setDates(){
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("LLLL yyyy");
DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("E dd.MM");
DateTimeFormatter dayOfWeekFormatter = DateTimeFormatter.ofPattern("e");
LocalDateTime now = LocalDateTime.now();
int dayOfWeek = Integer.parseInt(dayOfWeekFormatter.format(now));
weekStartDateTime = now.minusDays(weekOffset * 7L + dayOfWeek - 1);
for (int i = 0; i < 7; i++) {
dayLabel[i].setText(dayFormatter.format(weekStartDateTime.plusDays(i)));
}
LabelMonth.setText(dateFormatter.format(weekStartDateTime));
} }
} }

View File

@ -3,8 +3,7 @@
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<?import com.sun.javafx.scene.control.DatePickerContent?> <GridPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="client.CreateEventController">
<GridPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="client.MainController">
<columnConstraints> <columnConstraints>
<ColumnConstraints/> <ColumnConstraints/>

View File

@ -1,5 +1,14 @@
* {
-fx-base-background-color: #2B2D42;
-fx-base1-background-color: #525E74;
-fx-main-border-color: #B0B0B0;
-fx-main-text-color: #ffffff;
}
GridPane{ GridPane{
-fx-background-color: #2B2D42; -fx-background-color: -fx-base-background-color;
} }
.main-panel{ .main-panel{
@ -13,11 +22,11 @@ GridPane{
} }
.gridCalendar Line{ .gridCalendar Line{
-fx-stroke: #B0B0B0; -fx-stroke: -fx-main-border-color;
} }
.gridCalender{ .gridCalender{
-fx-background-color: #2B2D42; -fx-background-color: -fx-base-background-color;
-fx-min-height: 80px; -fx-min-height: 80px;
-fx-max-height: 80px; -fx-max-height: 80px;
} }
@ -29,19 +38,33 @@ GridPane{
-fx-font-weight: bold; -fx-font-weight: bold;
} }
.scrollDays{
-fx-background-color: -fx-base-background-color;
-fx-border-color: -fx-main-border-color;
}
.vBoxDays{
-fx-background-color: -fx-base-background-color;
}
.labelDays{ .labelDays{
-fx-alignment: center; -fx-alignment: center;
-fx-background-color: #525E74; -fx-background-color: -fx-base1-background-color;
-fx-font-size: 25px; -fx-font-size: 25px;
-fx-border-color: -fx-main-border-color;
} }
Label{ Label{
-fx-text-fill: white; -fx-text-fill: -fx-main-text-color;
}
.event{
-fx-background-color: -fx-base1-background-color;
} }
.main-btn{ .main-btn{
-fx-background-color: #ffffff; -fx-background-color: #ffffff;
-fx-text-fill: white; -fx-text-fill: -fx-main-text-color;
-fx-background-radius: 5em; -fx-background-radius: 5em;
-fx-min-width: 40px; -fx-min-width: 40px;
-fx-min-height: 40px; -fx-min-height: 40px;

View File

@ -36,7 +36,7 @@
<RowConstraints /> <RowConstraints />
<RowConstraints vgrow="ALWAYS" /> <RowConstraints vgrow="ALWAYS" />
</rowConstraints> </rowConstraints>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="labelMonth" textFill="WHITE" GridPane.columnIndex="0" GridPane.rowIndex="0"> <Label fx:id="LabelMonth" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="labelMonth" textFill="WHITE" GridPane.columnIndex="0" GridPane.rowIndex="0">
Monat Monat
<padding> <padding>
<Insets left="5" /> <Insets left="5" />
@ -57,48 +57,7 @@
<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>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="labelDays" textFill="WHITE" GridPane.columnIndex="0" GridPane.rowIndex="0">
Montag
<padding>
<Insets left="5" />
</padding>
</Label>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="labelDays" textFill="WHITE" GridPane.columnIndex="1" GridPane.rowIndex="0">
Dienstag
<padding>
<Insets left="5" />
</padding>
</Label>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="labelDays" textFill="WHITE" GridPane.columnIndex="2" GridPane.rowIndex="0">
Mittwoch
<padding>
<Insets left="5" />
</padding>
</Label>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="labelDays" textFill="WHITE" GridPane.columnIndex="3" GridPane.rowIndex="0">
Donnerstag
<padding>
<Insets left="5" />
</padding>
</Label>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="labelDays" textFill="WHITE" GridPane.columnIndex="4" GridPane.rowIndex="0">
Freitag
<padding>
<Insets left="5" />
</padding>
</Label>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="labelDays" textFill="WHITE" GridPane.columnIndex="5" GridPane.rowIndex="0">
Samstag
<padding>
<Insets left="5" />
</padding>
</Label>
<Label maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="labelDays" textFill="WHITE" GridPane.columnIndex="6" GridPane.rowIndex="0">
Sonntag
<padding>
<Insets left="5" />
</padding>
</Label>
</GridPane> </GridPane>
</GridPane> </GridPane>
</GridPane> </GridPane>

View File

@ -4,46 +4,62 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.nio.charset.StandardCharsets;
import java.util.*;
public class DataController { public class DataController {
private static final String ALL_EVENTS_ENDPOINT = "http://localhost:8080/vpr/all-events"; private static final String ALL_EVENTS_ENDPOINT = "http://localhost:8080/vpr/all-events";
private static final String ALL_USERS_ENDPOINT = "http://localhost:8080/vpr/all-users"; private static final String ALL_USERS_ENDPOINT = "http://localhost:8080/vpr/all-users";
private HttpRequest httpRequest;
public DataController(){
httpRequest = new HttpRequest();
}
public ArrayList<Event> getAllVisibleEvents() {
ArrayList<Event> eventList = new ArrayList<>();
try {
String jsonResponse = httpRequest.sendPostRequest(ALL_EVENTS_ENDPOINT, "userId=1");
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() { public Event[] getAllEvents() {
Event[] eventList = null; Event[] eventList = null;
try { try {
URL url = new URL(ALL_EVENTS_ENDPOINT); String jsonResponse = httpRequest.sendGetRequest("http://localhost:8080/vpr/all-events-test");
HttpURLConnection con = (HttpURLConnection) url.openConnection(); eventList = parseJsonToEventList(jsonResponse);
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();
eventList = parseJsonToEventList(content.toString());
for (Event e : eventList) { for (Event e : eventList) {
System.out.println(e); System.out.println(e);
} }
}else{
System.out.println("Status: " + status);
}
con.disconnect();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@ -1,5 +1,11 @@
package res; package res;
import com.sun.jdi.event.StepEvent;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
public class Event { public class Event {
private int id; private int id;
@ -9,6 +15,44 @@ public class Event {
private String start; private String start;
private String end; private String end;
private LocalDateTime date;
private int ownerId;
private String ownerName;
/*
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 int getId() { public int getId() {
return id; return id;
} }
@ -57,12 +101,36 @@ public class Event {
this.end = end; this.end = end;
} }
public LocalDateTime getDate() {
return date;
}
public void setDate(LocalDateTime date) {
this.date = date;
}
public int getOwnerId() {
return ownerId;
}
public void setOwnerId(int ownerId) {
this.ownerId = ownerId;
}
public String getOwnerName() {
return ownerName;
}
public void setOwnerName(String ownerName) {
this.ownerName = ownerName;
}
@Override @Override
public String toString() { public String toString() {
return name + return name +
"\nVon: " + start + "\nVon: " + start +
"\nBis: " + start + "\nBis: " + start +
"\nisFullDay = " + isFullDay; (isFullDay ? "\nDen ganzen Tag lang" : "");
} }
} }

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