8 Commits

24 changed files with 283 additions and 113 deletions

View File

@@ -0,0 +1,68 @@
package main;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import res.DataController;
import res.Event;
public class CreateEventController {
@FXML
public DatePicker datePickerDate;
@FXML
public TextField textName;
@FXML
public TextField textStart;
@FXML
public TextField textEnd;
@FXML
public ComboBox<String> ComboBoxTyp;
@FXML
public ComboBox<String> ComboBoxPriotity;
@FXML
public CheckBox checkBoxIsFullDay;
@FXML
public CheckBox checkBoxIsPrivate;
public CreateEventController(){}
@FXML
public void initialize(){}
@FXML
protected void createBtnClick(ActionEvent actionEvent){
Event event = new Event(
textName.getText(),
ComboBoxPriotity.getSelectionModel().getSelectedIndex(),
checkBoxIsFullDay.isSelected(),
checkBoxIsPrivate.isSelected(),
textStart.getText(),
textEnd.getText(),
datePickerDate.getValue().atStartOfDay(),
1
);
System.out.println(event.getAsUrlParam());
DataController dataController = new DataController();
dataController.createEvent(event);
Stage stage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow();
stage.close();
}
@FXML
protected void abortBtnClick(ActionEvent event){
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
stage.close();
}
}

View File

@@ -1,4 +1,4 @@
package client; package main;
public class Launcher { public class Launcher {

View File

@@ -1,8 +1,7 @@
package client; package main;
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;
@@ -16,10 +15,18 @@ public class MainApplication extends Application {
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("SharePlaner");
stage.setScene(scene); stage.setScene(scene);
stage.show(); stage.show();
FXMLLoader fxmlLoaderLogin = new FXMLLoader(MainApplication.class.getResource("../users/login.fxml"));
Scene sceneLogin = new Scene(fxmlLoaderLogin.load(), 650, 500);
sceneLogin.getStylesheets().add(Objects.requireNonNull(MainApplication.class.getResource("../users/login.css")).toExternalForm());
Stage stageLogin = new Stage();
stageLogin.setTitle("Anmelden");
stageLogin.setScene(sceneLogin);
stageLogin.show();
} }
public static void main(String[] args) { public static void main(String[] args) {

View File

@@ -1,4 +1,4 @@
package client; package main;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.event.EventHandler; import javafx.event.EventHandler;
@@ -45,21 +45,29 @@ public class MainController {
} }
@FXML @FXML
public void initialize(){ public void initialize() {
createWeek(); createWeek();
setDates(); setDates();
updateEvents();
}
private void updateEvents() {
for (VBox vBox : dayVBoxes) {
vBox.getChildren().clear();
}
DataController dataController = new DataController(); DataController dataController = new DataController();
ArrayList<Event> eventList = dataController.getAllVisibleEvents(); ArrayList<Event> eventList = dataController.getAllVisibleEvents();
for(Event event : eventList){ for (Event event : eventList) {
addEvent(event); addEvent(event);
} }
} }
@FXML @FXML
protected void onAddBtnClick(){ protected void onAddBtnClick() {
try{ try {
FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("create-event.fxml")); FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("create-event.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 650, 500); Scene scene = new Scene(fxmlLoader.load(), 650, 500);
scene.getStylesheets().add(Objects.requireNonNull(MainApplication.class.getResource("create-event.css")).toExternalForm()); scene.getStylesheets().add(Objects.requireNonNull(MainApplication.class.getResource("create-event.css")).toExternalForm());
@@ -70,13 +78,13 @@ public class MainController {
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();
} }
updateEvents();
} }
private void createWeek(){ private void createWeek() {
for (int i = 0; i < 7; i++) { for (int i = 0; i < 7; i++) {
Label label = new Label(); Label label = new Label();
label.setText(dayNames[i]); label.setText(dayNames[i]);
@@ -103,7 +111,7 @@ public class MainController {
} }
} }
private void addEvent(Event event){ private void addEvent(Event event) {
VBox vBox = new VBox(); VBox vBox = new VBox();
vBox.getStyleClass().add("event"); vBox.getStyleClass().add("event");
vBox.setSpacing(5); vBox.setSpacing(5);
@@ -113,9 +121,9 @@ public class MainController {
Button deleteBtn = new Button(); Button deleteBtn = new Button();
deleteBtn.setText(" X "); deleteBtn.setText(" X ");
deleteBtn.setOnAction(e -> { deleteBtn.setOnAction(e -> {
LocalDateTime eventDate = event.getDate(); DataController dataController = new DataController();
int day = (int)Duration.between(weekStartDateTime.toLocalDate().atStartOfDay(), eventDate.toLocalDate().atStartOfDay()).toDays(); dataController.deleteEvent(event.getId());
dayVBoxes[day].getChildren().remove(vBox); updateEvents();
}); });
Button editBtn = new Button(); Button editBtn = new Button();
editBtn.setText("edit"); editBtn.setText("edit");
@@ -126,8 +134,12 @@ public class MainController {
Label nameLabel = new Label(event.getName()); Label nameLabel = new Label(event.getName());
vBox.getChildren().add(nameLabel); vBox.getChildren().add(nameLabel);
Label timeLabel = new Label(event.getStart() + "-" + event.getEnd()); if (event.getStart() != null || event.getEnd() != null) {
vBox.getChildren().add(timeLabel); 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()); Label typeLabel = new Label("Wer: " + event.getOwnerName());
vBox.getChildren().add(typeLabel); vBox.getChildren().add(typeLabel);
@@ -141,22 +153,30 @@ public class MainController {
Label prioLabel = new Label("Priorit\u00e4t: " + event.getPriority()); Label prioLabel = new Label("Priorit\u00e4t: " + event.getPriority());
vBox.getChildren().add(prioLabel); vBox.getChildren().add(prioLabel);
if(event.isFullDay()){ if (event.isFullDay()) {
Label fullDayLabel = new Label("Dieser Termin bockiert den ganzen Tag!"); Label fullDayLabel = new Label("Dieser Termin bockiert den ganzen Tag!");
vBox.getChildren().add(fullDayLabel); vBox.getChildren().add(fullDayLabel);
} }
LocalDateTime eventDate = event.getDate(); LocalDateTime eventDate = event.getDate();
int day = (int)Duration.between(weekStartDateTime.toLocalDate().atStartOfDay(), eventDate.toLocalDate().atStartOfDay()).toDays(); int day = (int) Duration.between(weekStartDateTime.toLocalDate().atStartOfDay(), eventDate.toLocalDate().atStartOfDay()).toDays();
if(day >= 0 && day < 7){ if (day >= 0 && day < 7) {
dayVBoxes[day].getChildren().add(vBox); dayVBoxes[day].getChildren().add(vBox);
} }
} }
private void setDates(){ private String formatTime(String time) {
String[] timeArr = time.split(":");
if (timeArr.length > 2) {
return timeArr[0] + ":" + timeArr[1];
}
return time;
}
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");
DateTimeFormatter dayOfWeekFormatter = DateTimeFormatter.ofPattern("e"); DateTimeFormatter dayOfWeekFormatter = DateTimeFormatter.ofPattern("e");
@@ -164,7 +184,7 @@ public class MainController {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
int dayOfWeek = Integer.parseInt(dayOfWeekFormatter.format(now)); int dayOfWeek = Integer.parseInt(dayOfWeekFormatter.format(now));
weekStartDateTime = now.minusDays(weekOffset * 7L + dayOfWeek - 1); weekStartDateTime = now.plusDays(weekOffset * 7L - dayOfWeek + 1);
for (int i = 0; i < 7; i++) { for (int i = 0; i < 7; i++) {
dayLabel[i].setText(dayFormatter.format(weekStartDateTime.plusDays(i))); dayLabel[i].setText(dayFormatter.format(weekStartDateTime.plusDays(i)));

View File

@@ -0,0 +1,4 @@
package users;
public class LoginControler {
}

View File

@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.collections.FXCollections?>
<?import java.lang.String?>
<GridPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.CreateEventController">
<columnConstraints>
<ColumnConstraints/>
<ColumnConstraints/>
<ColumnConstraints/>
</columnConstraints>
<rowConstraints>
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
</rowConstraints>
<Label styleClass="mainLabel">Termin anlegen</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="1">Datum:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="2">Titel:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="3">Von:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="4">Bis:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="5">Typ:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="6">Priorität:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="7">Ganztägig:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="8">Privat:</Label>
<DatePicker fx:id="datePickerDate" GridPane.columnIndex="1" GridPane.rowIndex="1" maxWidth="400" minWidth="400"/>
<TextField fx:id="textName" GridPane.columnIndex="1" GridPane.rowIndex="2" maxWidth="400" minWidth="400"/>
<TextField fx:id="textStart" GridPane.columnIndex="1" GridPane.rowIndex="3" maxWidth="400" minWidth="400"/>
<TextField fx:id="textEnd" GridPane.columnIndex="1" GridPane.rowIndex="4" maxWidth="400" minWidth="400"/>
<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">
<items>
<FXCollections fx:factory="observableArrayList">
<String fx:value="gering" />
<String fx:value="mittel" />
<String fx:value="hoch" />
</FXCollections>
</items>
</ComboBox>
<CheckBox fx:id="checkBoxIsFullDay" GridPane.columnIndex="1" GridPane.rowIndex="7"/>
<CheckBox fx:id="checkBoxIsPrivate" GridPane.columnIndex="1" GridPane.rowIndex="8"/>
<HBox GridPane.columnIndex="1" GridPane.rowIndex="9" GridPane.columnSpan="2" alignment="CENTER_RIGHT">
<Button onAction="#abortBtnClick" maxWidth="150" minWidth="150" >Abbrechen</Button>
<Button styleClass="mainButton" onAction="#createBtnClick" maxWidth="150" minWidth="150">Anlegen</Button>
</HBox>
</GridPane>

View File

@@ -5,7 +5,7 @@
<?import javafx.scene.image.*?> <?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<GridPane style="-fx-background-color: #424242;" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="client.MainController"> <GridPane style="-fx-background-color: #424242;" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.MainController">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="NEVER" maxWidth="60.0" minWidth="60.0" /> <ColumnConstraints hgrow="NEVER" maxWidth="60.0" minWidth="60.0" />
<ColumnConstraints hgrow="ALWAYS" /> <ColumnConstraints hgrow="ALWAYS" />

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<GridPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="users.LoginControler">
<columnConstraints>
<ColumnConstraints/>
<ColumnConstraints/>
<ColumnConstraints/>
</columnConstraints>
<rowConstraints>
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
</rowConstraints>
<Label GridPane.columnIndex="1">Anmelden</Label>
<Label GridPane.rowIndex="1">Username</Label>
<TextField GridPane.columnIndex="1" GridPane.rowIndex="1" fx:id="userField"></TextField>
<Label GridPane.columnIndex="2" GridPane.rowIndex="1" fx:id="userErrLabel">Error</Label>
<Label GridPane.rowIndex="2">Paswort</Label>
<PasswordField GridPane.columnIndex="1" GridPane.rowIndex="2" fx:id="passField"></PasswordField>
<Label GridPane.columnIndex="2" GridPane.rowIndex="2" fx:id="passErrLabel">Error</Label>
<Button GridPane.columnIndex="1" GridPane.rowIndex="3">Beenden</Button>
<Button GridPane.columnIndex="2" GridPane.rowIndex="3">Anmelden</Button>
</GridPane>

View File

@@ -16,13 +16,30 @@ 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 static final String ADD_EVENT_ENDPOINT = "http://localhost:8080/vpr/add-event";
private static final String DELETE_EVENT_ENDPOINT = "http://localhost:8080/vpr/del-event";
private HttpRequest httpRequest; private final HttpRequest httpRequest;
public DataController(){ public DataController(){
httpRequest = new HttpRequest(); httpRequest = new HttpRequest();
} }
public void createEvent(Event event){
try {
System.out.println(httpRequest.sendPostRequest(ADD_EVENT_ENDPOINT, event.getAsUrlParam()));
} catch (Exception e) {
e.printStackTrace();
}
}
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() { public ArrayList<Event> getAllVisibleEvents() {
ArrayList<Event> eventList = new ArrayList<>(); ArrayList<Event> eventList = new ArrayList<>();

View File

@@ -12,6 +12,7 @@ public class Event {
private String name; private String name;
private int priority; private int priority;
private boolean isFullDay; private boolean isFullDay;
private boolean isPrivate;
private String start; private String start;
private String end; private String end;
@@ -37,21 +38,39 @@ public class Event {
*/ */
public Event(ArrayList<Object> arr) { public Event(ArrayList<Object> arr) {
id = (int)arr.get(0); id = (int) arr.get(0);
name = (String)arr.get(1); name = (String) arr.get(1);
start = (String)arr.get(2); start = (String) arr.get(2);
end = (String)arr.get(3); end = (String) arr.get(3);
priority = (int)arr.get(4); priority = (int) arr.get(4);
isFullDay = (Boolean)arr.get(5); //((String)arr.get(5)).equals("true"); isFullDay = (Boolean) arr.get(5); //((String)arr.get(5)).equals("true");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
date = LocalDateTime.parse(arr.get(6) + " 00:00", formatter); date = LocalDateTime.parse(arr.get(6) + " 00:00", formatter);
ownerId = (int)arr.get(7); ownerId = (int) arr.get(7);
ownerName = arr.get(8) + " " + arr.get(9); ownerName = arr.get(8) + " " + arr.get(9);
} }
public Event(String name,
int priority,
boolean isFullDay,
boolean isPrivate,
String start,
String end,
LocalDateTime date,
int ownerId
) {
this.name = name;
this.priority = priority;
this.isFullDay = isFullDay;
this.isPrivate = isPrivate;
this.start = start;
this.end = end;
this.date = date;
this.ownerId = ownerId;
}
public int getId() { public int getId() {
return id; return id;
@@ -85,6 +104,14 @@ public class Event {
isFullDay = fullDay; isFullDay = fullDay;
} }
public boolean isPrivate() {
return isPrivate;
}
public void setPrivate(boolean aPrivate) {
isPrivate = aPrivate;
}
public String getStart() { public String getStart() {
return start; return start;
} }
@@ -133,4 +160,15 @@ public class Event {
(isFullDay ? "\nDen ganzen Tag lang" : ""); (isFullDay ? "\nDen ganzen Tag lang" : "");
} }
public String getAsUrlParam() {
return "userId=" + getOwnerId() +
"&date=" + getDate().toLocalDate() +
"&name=" + getName() +
"&start=" + getStart() +
"&end=" + getEnd() +
"&prority=" + getPriority() +
"&isFullDay=" + isFullDay() +
"&isPrivate=" + isPrivate();
}
} }

View File

View File

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

@@ -1,45 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<GridPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1" fx:controller="client.CreateEventController">
<columnConstraints>
<ColumnConstraints/>
<ColumnConstraints/>
<ColumnConstraints/>
</columnConstraints>
<rowConstraints>
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
<RowConstraints vgrow="ALWAYS" />
</rowConstraints>
<Label styleClass="mainLabel">Termin anlegen</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="1">Datum:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="2">Titel:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="3">Zeit:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="4">Typ:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="5">Priorität:</Label>
<Label styleClass="inputLabel" GridPane.rowIndex="6">Ganztägig:</Label>
<DatePicker GridPane.columnIndex="1" GridPane.rowIndex="1" maxWidth="400" minWidth="400"/>
<TextField GridPane.columnIndex="1" GridPane.rowIndex="2" maxWidth="400" minWidth="400"/>
<DatePicker GridPane.columnIndex="1" GridPane.rowIndex="3" maxWidth="400" minWidth="400"/>
<ComboBox GridPane.columnIndex="1" GridPane.rowIndex="4" maxWidth="400" minWidth="400"/>
<ComboBox GridPane.columnIndex="1" GridPane.rowIndex="5" maxWidth="200" minWidth="200"/>
<CheckBox GridPane.columnIndex="1" GridPane.rowIndex="6"/>
<HBox GridPane.columnIndex="1" GridPane.rowIndex="7" GridPane.columnSpan="2" alignment="CENTER_RIGHT">
<Button onAction="#abortBtnClick" maxWidth="150" minWidth="150" >Abbrechen</Button>
<Button styleClass="mainButton" onAction="#createBtnClick" maxWidth="150" minWidth="150">Anlegen</Button>
</HBox>
</GridPane>

View File

@@ -1,8 +0,0 @@
package kaka;
public class Dings {
public static int a() {
return 5;
}
}