Compare commits

...

6 Commits

Author SHA1 Message Date
2269f05f52 Fixed event/add endpoint 2022-01-19 00:30:13 +01:00
78505097db Fixed event/all and event/del endpoints 2022-01-19 00:16:23 +01:00
7a119a8aed Merge branch 'merge' into 2410-develop 2022-01-18 22:30:08 +01:00
947f31f20e Fixed login token 2022-01-14 19:37:06 +01:00
b12de1cd2e Use Tuple as response 2022-01-13 23:14:36 +01:00
097cce14e8 Save toke on login 2022-01-13 17:35:16 +01:00
8 changed files with 156 additions and 62 deletions

View File

@ -12,6 +12,7 @@ import javafx.util.converter.LocalTimeStringConverter;
import res.DataController;
import res.Event;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.FormatStyle;
import java.util.Locale;
@ -65,8 +66,8 @@ public class CreateEventController {
ComboBoxPriotity.getSelectionModel().getSelectedIndex(),
toggleBtnIsFullDay.isSelected(),
toggleBtnIsPrivate.isSelected(),
timeStart.getValue().toString(),
timeEnd.getValue().toString(),
timeStart.getValue(),
timeEnd.getValue(),
datePickerDate.getValue().atStartOfDay(),
(int) DataController.USER_ID
);

View File

@ -13,26 +13,32 @@ public class MainApplication extends Application {
@Override
public void start(Stage stage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("main-view.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 1200, 700);
scene.getStylesheets().add(Objects.requireNonNull(
MainApplication.class.getResource("main-view.css")).toExternalForm());
stage.setTitle("SharePlaner");
stage.setScene(scene);
System.out.println("Ignore 'Illegal reflective access operation'-Warning. See https://github.com/sshahine/JFoenix/issues/1170");
// Load login-scene
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());
MainApplication.class.getResource("../users/login.css")).toExternalForm()
);
Stage stageLogin = new Stage();
stageLogin.setTitle("Anmelden");
stageLogin.setScene(sceneLogin);
stageLogin.showAndWait();
if (DataController.USER_ID >= 0) {
// Load main-scene
FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("main-view.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 1200, 700);
scene.getStylesheets().add(Objects.requireNonNull(
MainApplication.class.getResource("main-view.css")).toExternalForm()
);
stage.setTitle("SharePlaner");
stage.setScene(scene);
stage.show();
System.out.println("Logged in...");
}
}

View File

@ -56,7 +56,7 @@ public class MainController {
}
DataController dataController = new DataController();
ArrayList<Event> eventList = dataController.getAllVisibleEvents();
ArrayList<Event> eventList = dataController.getAllVisibleEvents(weekStartDateTime, weekStartDateTime.plusDays(7));
for (Event event : eventList) {
addEvent(event);
@ -143,7 +143,7 @@ public class MainController {
deleteBtn.setTextValue(" X ");
deleteBtn.setOnAction(e -> {
DataController dataController = new DataController();
dataController.deleteEvent(event.getId());
dataController.deleteEvent(event.getOwnerId(), event.getId(), event.getDate());
updateEvents();
});
Button editBtn = new Button();

View File

@ -7,4 +7,5 @@ dependencies {
implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion")
implementation("com.fasterxml.jackson.core:jackson-core:$jacksonVersion")
implementation("com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion")
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion")
}

View File

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

View File

@ -1,7 +1,9 @@
package res;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import helper.Tuple;
import java.io.BufferedReader;
import java.io.DataOutputStream;
@ -10,6 +12,7 @@ import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.*;
public class DataController {
@ -22,6 +25,7 @@ public class DataController {
private static final String LOGIN_ENDPOINT = "http://localhost:8080/user/login";
private static final String ALL_USERS_ENDPOINT = "http://localhost:8080/user/all";
private static final String HEADER_TEST_ENDPOINT = "http://localhost:8080/vpr/header-test";
private final HttpRequest httpRequest;
@ -31,16 +35,28 @@ public class DataController {
public boolean login(String username, String password) {
try {
USER_ID = Long.parseLong(httpRequest.sendPostRequest(
Tuple<Integer, String> response = httpRequest.sendPostRequest(
LOGIN_ENDPOINT,
"login=" + username
+ "&password=" + password,
false
));
);
String[] data = response.getValue().split("\\s+");
USER_ID = Long.parseLong(data[1]);
HttpRequest.TOKEN = data[0];
Tuple<Integer, String> auth = httpRequest.sendPostRequest(
HEADER_TEST_ENDPOINT,
"",
true
);
System.out.println("auth " + auth);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return USER_ID >= 0;
}
@ -52,34 +68,35 @@ public class DataController {
}
}
public void deleteEvent(int eventId) {
public void deleteEvent(int userId, int eventId, LocalDateTime date) {
try {
System.out.println(httpRequest.sendPostRequest(DELETE_EVENT_ENDPOINT, "eventId=" + eventId, true));
System.out.println("DELETE: userId=" + userId + "&eventId=" + eventId + "&date=" + date.toLocalDate());
System.out.println(httpRequest.sendPostRequest(
DELETE_EVENT_ENDPOINT,
"userId=" + userId + "&eventId=" + eventId + "&date=" + date.toLocalDate(),
true
));
} catch (Exception e) {
e.printStackTrace();
}
}
public ArrayList<Event> getAllVisibleEvents() {
public ArrayList<Event> getAllVisibleEvents(LocalDateTime startDate, LocalDateTime endDate) {
ArrayList<Event> eventList = new ArrayList<>();
try {
String jsonResponse = httpRequest.sendPostRequest(ALL_EVENTS_ENDPOINT, "userId=" + USER_ID, true);
Tuple<Integer, String> response = httpRequest.sendPostRequest(
ALL_EVENTS_ENDPOINT,
"userId=" + USER_ID + "&startDate=" + startDate.toLocalDate() + "&endDate=" + endDate.toLocalDate(),
true
);
String jsonResponse = response.getValue();
System.out.println(jsonResponse);
ObjectMapper objectMapper = new ObjectMapper();
//String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
objectMapper.findAndRegisterModules();
eventList = (ArrayList<Event>) objectMapper.readValue(jsonResponse, new TypeReference<List<Event>>(){});
for (Object obj : objectMapper.readValue(jsonResponse, Object[].class)) {
ArrayList<Object> list = new ArrayList<>();
if (obj.getClass().isArray()) {
list = (ArrayList<Object>) Arrays.asList((Object[]) obj);
} else if (obj instanceof Collection) {
list = new ArrayList<>((Collection<?>) obj);
}
eventList.add(new Event(list));
}
} catch (Exception e) {
e.printStackTrace();
}
@ -108,7 +125,6 @@ public class DataController {
// Parse JSON
ObjectMapper objectMapper = new ObjectMapper();
//String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
return objectMapper.readValue(jsonString, Event[].class);
}

View File

@ -2,10 +2,13 @@ package res;
import com.sun.jdi.event.StepEvent;
import java.io.Serializable;
import java.nio.charset.StandardCharsets;
import java.sql.SQLOutput;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.regex.Matcher;
@ -43,6 +46,10 @@ public class Event {
u.name AS uname
*/
public Event() {
}
public Event(ArrayList<Object> arr) {
id = (int) arr.get(0);
name = (String) arr.get(1);
@ -59,21 +66,50 @@ public class Event {
ownerName = arr.get(8) + " " + arr.get(9);
}
public Event(
int id,
String name,
int priority,
boolean isFullDay,
boolean isPrivate,
String start,
String end,
String date,
int ownerId,
String ownerName
) {
this.ownerId = ownerId;
this.ownerName = ownerName;
this.id = id;
this.name = name;
this.start = start;
this.end = end;
this.priority = priority;
this.isFullDay = isFullDay;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
this.date = LocalDateTime.parse(date + " 00:00", formatter);
}
public Event(String name,
int priority,
boolean isFullDay,
boolean isPrivate,
String start,
String end,
LocalTime start,
LocalTime end,
LocalDateTime date,
int ownerId
) throws IllegalArgumentException{
if(name.length() < 3){
) throws IllegalArgumentException {
System.out.println("Create Event");
if (name.length() < 3) {
throw new IllegalArgumentException("Der Name muss eine L\u00e4nge von 3 haben.");
}
Pattern pattern = Pattern.compile("[A-Za-z\u00e4\u00f6\u00fc\u00c4\u00d6\u00dc\u00df0-9 =!?+*/$.:,;_<>()-]*");
Matcher matcher = pattern.matcher(name);
if(!matcher.matches()){
if (!matcher.matches()) {
System.out.println(name);
byte[] bytes = name.getBytes(StandardCharsets.UTF_16);
@ -82,25 +118,25 @@ public class Event {
System.out.println(utf8EncodedString);
for (char c : (name).toCharArray()) {
System.out.print(c + " " + (int)c + ", ");
System.out.print(c + " " + (int) c + ", ");
}
System.out.println();
for (char c : (name).toCharArray()) {
System.out.print(c + " " + (int)c + ", ");
System.out.print(c + " " + (int) c + ", ");
}
System.out.println();
for (char c : ("TäöüÄÖÜ").toCharArray()) {
System.out.print(c + " " + (int)c + ", ");
System.out.print(c + " " + (int) c + ", ");
}
System.out.println();
throw new IllegalArgumentException("Der Name darf nur aus Zahlen, Buchstaben und folgenden Sonderzeichen bestehen: \u00e4\u00f6\u00fc \u00c4\u00d6\u00dc \u00df =!?+*/$.:,;_ <>()-");
}
if(priority < 0){
if (priority < 0) {
throw new IllegalArgumentException("Bitte eine Priorit\u00e4t w\u00e4hlen.");
}
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.");
}
@ -108,8 +144,8 @@ public class Event {
this.priority = priority;
this.isFullDay = isFullDay;
this.isPrivate = isPrivate;
this.start = start;
this.end = end;
if (start != null) this.start = start.toString();
if (start != null) this.end = end.toString();
this.date = date;
this.ownerId = ownerId;
}
@ -174,8 +210,9 @@ public class Event {
return date;
}
public void setDate(LocalDateTime date) {
this.date = date;
public void setDate(String date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
this.date = LocalDateTime.parse(date + " 00:00", formatter);
}
public int getOwnerId() {
@ -209,12 +246,12 @@ public class Event {
"&name=" + getName() +
"&start=" + getStart() +
"&end=" + getEnd() +
"&prority=" + getPriority() +
"&priority=" + getPriority() +
"&isFullDay=" + isFullDay() +
"&isPrivate=" + isPrivate();
}
private String convertToASCII(String s){
private String convertToASCII(String s) {
byte[] germanBytes = s.getBytes();
return new String(germanBytes, StandardCharsets.US_ASCII);
}

View File

@ -1,5 +1,7 @@
package res;
import helper.Tuple;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
@ -9,7 +11,9 @@ import java.nio.charset.StandardCharsets;
import java.util.Arrays;
public class HttpRequest {
public String sendPostRequest(String urlString, String urlParameters, boolean sendAuth) throws Exception {
public static String TOKEN = "";
public Tuple<Integer, String> sendPostRequest(String urlString, String urlParameters, boolean sendAuth) throws Exception {
byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);
int postDataLength = postData.length;
@ -39,7 +43,7 @@ public class HttpRequest {
if(sendAuth){
con.setRequestProperty("Accept", "application/json");
con.setRequestProperty("Authorization", "Bearer {token}");
con.setRequestProperty("Authorization", "Bearer " + TOKEN);
}
try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) {
@ -47,22 +51,24 @@ public class HttpRequest {
}
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();
String inputLine;
StringBuilder content = new StringBuilder();
BufferedReader in;
con.disconnect();
return content.toString();
if (status == 200) {
in = new BufferedReader(new InputStreamReader(con.getInputStream()));
} else {
con.disconnect();
throw new Exception("Status: " + status);
in = new BufferedReader(new InputStreamReader(con.getErrorStream()));
}
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
con.disconnect();
return new Tuple<>(status, content.toString());
}
public String sendGetRequest(String urlString) throws Exception {