From 9f464fe8595a49ecbdf6ae9c2e2ca7583ac31090 Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 16 Mar 2020 13:56:05 +0100 Subject: [PATCH 01/10] init csv support --- build.gradle | 1 + .../gruppen2/controller/APIController.java | 12 ++++++---- .../mops/gruppen2/service/CsvService.java | 22 +++++++++++++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 src/main/java/mops/gruppen2/service/CsvService.java diff --git a/build.gradle b/build.gradle index 35f2c5d..d5bc275 100644 --- a/build.gradle +++ b/build.gradle @@ -66,6 +66,7 @@ dependencies { implementation 'io.springfox:springfox-swagger2:2.9.2' implementation 'io.springfox:springfox-swagger-ui:2.9.2' implementation 'com.github.javafaker:javafaker:1.0.2' + implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.10.2' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' diff --git a/src/main/java/mops/gruppen2/controller/APIController.java b/src/main/java/mops/gruppen2/controller/APIController.java index f4d18ef..33da9a3 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -7,12 +7,11 @@ import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.apiWrapper.UpdatedGroupRequestMapper; import mops.gruppen2.domain.event.Event; -import mops.gruppen2.service.APIFormatterService; -import mops.gruppen2.service.EventService; -import mops.gruppen2.service.GroupService; -import mops.gruppen2.service.SerializationService; +import mops.gruppen2.service.*; import org.springframework.web.bind.annotation.*; +import java.io.IOException; +import java.io.InputStream; import java.util.List; /** @@ -55,4 +54,9 @@ public class APIController { List groups = groupService.projectEventList(eventList); return groups.get(0); } + + @PostMapping(value = "/uploadcsv", consumes = "text/csv") + public void uploadCsv(@RequestBody InputStream body) throws IOException { + System.out.println(CsvService.read(body)); + } } diff --git a/src/main/java/mops/gruppen2/service/CsvService.java b/src/main/java/mops/gruppen2/service/CsvService.java new file mode 100644 index 0000000..da8293e --- /dev/null +++ b/src/main/java/mops/gruppen2/service/CsvService.java @@ -0,0 +1,22 @@ +package mops.gruppen2.service; + +import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.dataformat.csv.CsvMapper; +import com.fasterxml.jackson.dataformat.csv.CsvSchema; +import mops.gruppen2.domain.User; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +public class CsvService { + + public static List read(InputStream stream) throws IOException { + CsvMapper mapper = new CsvMapper(); + + CsvSchema schema = mapper.schemaFor(User.class).withHeader().withColumnReordering(true); + ObjectReader reader = mapper.readerFor(User.class).with(schema); + + return reader.readValues(stream).readAll(); + } +} From 2c3531657dbba47887e92319fe7bb5e41aacf3bd Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 16 Mar 2020 14:09:30 +0100 Subject: [PATCH 02/10] csv proof of concept --- src/main/java/mops/gruppen2/controller/APIController.java | 6 ++++++ src/main/java/mops/gruppen2/domain/User.java | 5 +++-- src/main/resources/templates/create.html | 6 +++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/APIController.java b/src/main/java/mops/gruppen2/controller/APIController.java index 33da9a3..d0c46ce 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -9,6 +9,7 @@ import mops.gruppen2.domain.apiWrapper.UpdatedGroupRequestMapper; import mops.gruppen2.domain.event.Event; import mops.gruppen2.service.*; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; @@ -59,4 +60,9 @@ public class APIController { public void uploadCsv(@RequestBody InputStream body) throws IOException { System.out.println(CsvService.read(body)); } + + @PostMapping(value = "/uploadcsv", consumes = "multipart/form-data") + public void uploadMultipart(@RequestParam("file") MultipartFile file) throws IOException { + System.out.println(CsvService.read(file.getInputStream())); + } } diff --git a/src/main/java/mops/gruppen2/domain/User.java b/src/main/java/mops/gruppen2/domain/User.java index c929135..5e103ae 100644 --- a/src/main/java/mops/gruppen2/domain/User.java +++ b/src/main/java/mops/gruppen2/domain/User.java @@ -3,10 +3,11 @@ package mops.gruppen2.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.Value; +import lombok.NoArgsConstructor; -@Value +@Data @AllArgsConstructor +@NoArgsConstructor @EqualsAndHashCode(exclude = {"givenname", "familyname", "email"}) public class User { String user_id; diff --git a/src/main/resources/templates/create.html b/src/main/resources/templates/create.html index 08c2b7e..627e534 100644 --- a/src/main/resources/templates/create.html +++ b/src/main/resources/templates/create.html @@ -57,7 +57,11 @@ +
+ + +
- \ No newline at end of file + From 179062eed9d01e12e791f566842ed13006a44eb1 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Tue, 17 Mar 2020 17:07:30 +0100 Subject: [PATCH 03/10] Add createLecture for orga only Co-Authored-By: andibuls Co-Authored-By: tomvahl Co-Authored-By: Lukas Ettel --- .../mops/gruppen2/controller/Gruppen2Controller.java | 8 +++++++- src/main/resources/templates/createLecture.html | 10 ++++++++++ src/main/resources/templates/index.html | 4 ++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/templates/createLecture.html diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 8ab6403..27ca179 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -57,13 +57,19 @@ public class Gruppen2Controller { public String index(KeycloakAuthenticationToken token, Model model) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); - model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); model.addAttribute("gruppen", userService.getUserGroups(user)); model.addAttribute("user",user); return "index"; } + @RolesAllowed({"ROLE_orga", "ROLE_actuator)"}) + @GetMapping("/createLecture") + public String createLecture(KeycloakAuthenticationToken token, Model model) { + model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); + return "createLecture"; + } + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @GetMapping("/createGroup") public String createGroup(KeycloakAuthenticationToken token, Model model) { diff --git a/src/main/resources/templates/createLecture.html b/src/main/resources/templates/createLecture.html new file mode 100644 index 0000000..566549b --- /dev/null +++ b/src/main/resources/templates/createLecture.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 9b9ea12..6ebad4a 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -21,6 +21,10 @@
  • Suche
  • + +
  • + Veranstaltung +
  • From eabbcc7e042dfb596a1dac62e496db91b47c9d15 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 13:35:41 +0100 Subject: [PATCH 04/10] Add jackson dependency Co-Authored-By: tomvahl Co-Authored-By: andibuls Co-Authored-By: Lukas Ettel --- build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.gradle b/build.gradle index 647ef39..d3c5650 100644 --- a/build.gradle +++ b/build.gradle @@ -78,6 +78,8 @@ dependencies { compile group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: '2.4.0.RELEASE' + compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.10.3' + testImplementation 'org.assertj:assertj-core:3.15.0' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' From af573f2353c3f04d7bb5c0eefec4ce2b95ac50a8 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 13:36:22 +0100 Subject: [PATCH 05/10] Add list entry in html Co-Authored-By: tomvahl Co-Authored-By: andibuls Co-Authored-By: Lukas Ettel --- src/main/resources/templates/create.html | 3 +++ src/main/resources/templates/detailsMember.html | 3 +++ src/main/resources/templates/detailsNoMember.html | 3 +++ src/main/resources/templates/search.html | 3 +++ 4 files changed, 12 insertions(+) diff --git a/src/main/resources/templates/create.html b/src/main/resources/templates/create.html index f8604bb..c43add0 100644 --- a/src/main/resources/templates/create.html +++ b/src/main/resources/templates/create.html @@ -22,6 +22,9 @@
  • Suche
  • +
  • + Veranstaltung +
  • diff --git a/src/main/resources/templates/detailsMember.html b/src/main/resources/templates/detailsMember.html index 6086619..935d4d1 100644 --- a/src/main/resources/templates/detailsMember.html +++ b/src/main/resources/templates/detailsMember.html @@ -21,6 +21,9 @@
  • Suche
  • +
  • + Veranstaltung +
  • diff --git a/src/main/resources/templates/detailsNoMember.html b/src/main/resources/templates/detailsNoMember.html index 44f1dfd..eb8a506 100644 --- a/src/main/resources/templates/detailsNoMember.html +++ b/src/main/resources/templates/detailsNoMember.html @@ -21,6 +21,9 @@
  • Suche
  • +
  • + Veranstaltung +
  • diff --git a/src/main/resources/templates/search.html b/src/main/resources/templates/search.html index 624e933..b06443b 100644 --- a/src/main/resources/templates/search.html +++ b/src/main/resources/templates/search.html @@ -21,6 +21,9 @@
  • Suche
  • +
  • + Veranstaltung +
  • From 051196f7668ead36a4abcde7c2d8f8b9957679ad Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 13:36:57 +0100 Subject: [PATCH 06/10] Add CSV methods and createLecture.html Co-Authored-By: tomvahl Co-Authored-By: andibuls Co-Authored-By: Lukas Ettel --- .../gruppen2/controller/APIController.java | 5 +- .../controller/Gruppen2Controller.java | 12 ++++ .../resources/templates/createLecture.html | 64 +++++++++++++++++-- 3 files changed, 73 insertions(+), 8 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/APIController.java b/src/main/java/mops/gruppen2/controller/APIController.java index 0963fbd..8024114 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -7,10 +7,7 @@ import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.apiWrapper.UpdatedGroupRequestMapper; import mops.gruppen2.domain.event.Event; -import mops.gruppen2.service.APIFormatterService; -import mops.gruppen2.service.EventService; -import mops.gruppen2.service.GroupService; -import mops.gruppen2.service.SerializationService; +import mops.gruppen2.service.*; import org.springframework.security.access.annotation.Secured; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 27ca179..f3ce681 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -5,6 +5,7 @@ import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.User; +import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.security.Account; import mops.gruppen2.service.*; @@ -70,6 +71,17 @@ public class Gruppen2Controller { return "createLecture"; } + @PostMapping("/createLecture") + public String pCreateLecture(KeycloakAuthenticationToken token, + @RequestParam(value = "title") String title, + @RequestParam(value = "beschreibung") String beschreibung) { + + Account account = keyCloakService.createAccountFromPrincipal(token); + controllerService.createGroup(account, title, beschreibung, true); + + return "redirect:/gruppen2/"; + } + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @GetMapping("/createGroup") public String createGroup(KeycloakAuthenticationToken token, Model model) { diff --git a/src/main/resources/templates/createLecture.html b/src/main/resources/templates/createLecture.html index 566549b..88ff3c9 100644 --- a/src/main/resources/templates/createLecture.html +++ b/src/main/resources/templates/createLecture.html @@ -1,10 +1,66 @@ - + - - Title + + Gruppenerstellung + + + - +
    + +
    +
    +
    +
    +
    +

    Veranstaltung erstellen

    +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file From 0db03f2ab5a484446c73add973170927cb38cf0c Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 14:13:58 +0100 Subject: [PATCH 07/10] Add createLecture feature also add private checkbox again and delete the uploadCsv methods in APIController Co-Authored-By: tomvahl Co-Authored-By: andibuls Co-Authored-By: Lukas Ettel --- .../gruppen2/controller/APIController.java | 9 ----- .../controller/Gruppen2Controller.java | 17 +++++---- .../gruppen2/service/ControllerService.java | 36 +++++++++++++++---- .../resources/templates/createLecture.html | 4 +++ 4 files changed, 44 insertions(+), 22 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/APIController.java b/src/main/java/mops/gruppen2/controller/APIController.java index 8024114..af2dbec 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -60,13 +60,4 @@ public class APIController { return groups.get(0); } - @PostMapping(value = "/uploadcsv", consumes = "text/csv") - public void uploadCsv(@RequestBody InputStream body) throws IOException { - System.out.println(CsvService.read(body)); - } - - @PostMapping(value = "/uploadcsv", consumes = "multipart/form-data") - public void uploadMultipart(@RequestParam("file") MultipartFile file) throws IOException { - System.out.println(CsvService.read(file.getInputStream())); - } } diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index f3ce681..97e6fb6 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -17,9 +17,11 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; import org.springframework.web.context.annotation.SessionScope; +import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; import javax.annotation.security.RolesAllowed; +import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -71,13 +73,18 @@ public class Gruppen2Controller { return "createLecture"; } + @RolesAllowed({"ROLE_orga", "ROLE_actuator)"}) @PostMapping("/createLecture") public String pCreateLecture(KeycloakAuthenticationToken token, @RequestParam(value = "title") String title, - @RequestParam(value = "beschreibung") String beschreibung) { + @RequestParam(value = "beschreibung") String beschreibung, + @RequestParam(value = "visibility", required = false) Boolean visibility, + @RequestParam("file") MultipartFile file) throws IOException { Account account = keyCloakService.createAccountFromPrincipal(token); - controllerService.createGroup(account, title, beschreibung, true); + List userList = CsvService.read(file.getInputStream()); + visibility = visibility == null; + controllerService.createLecture(account, title, beschreibung, visibility, userList); return "redirect:/gruppen2/"; } @@ -109,11 +116,7 @@ public class Gruppen2Controller { @RequestParam(value = "visibility", required = false) Boolean visibility) { Account account = keyCloakService.createAccountFromPrincipal(token); - if (visibility == null) { - visibility = true; - }else{ - visibility = false; - } + visibility = visibility == null; controllerService.createGroup(account, title, beschreibung, visibility); return "redirect:/gruppen2/"; diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index 126d519..2f568a1 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -1,9 +1,6 @@ package mops.gruppen2.service; -import mops.gruppen2.domain.Group; -import mops.gruppen2.domain.GroupType; -import mops.gruppen2.domain.Role; -import mops.gruppen2.domain.Visibility; +import mops.gruppen2.domain.*; import mops.gruppen2.domain.event.*; import mops.gruppen2.security.Account; import org.springframework.stereotype.Service; @@ -31,9 +28,9 @@ public class ControllerService { Visibility visibility1; Long group_id = eventService.checkGroup(); - if (visibility){ + if(visibility) { visibility1 = Visibility.PUBLIC; - }else{ + } else { visibility1 = Visibility.PRIVATE; } @@ -51,6 +48,13 @@ public class ControllerService { eventService.saveEvent(addUserEvent); } + public void addUserList(List users, Long group_id) { + for (User user : users) { + AddUserEvent addUserEvent = new AddUserEvent(group_id, user.getUser_id(), user.getGivenname(), user.getFamilyname(), user.getEmail()); + eventService.saveEvent(addUserEvent); + } + } + public void updateTitle(Account account, Long group_id, String title){ UpdateGroupTitleEvent updateGroupTitleEvent = new UpdateGroupTitleEvent(group_id,account.getName(),title); eventService.saveEvent(updateGroupTitleEvent); @@ -70,4 +74,24 @@ public class ControllerService { DeleteUserEvent deleteUserEvent = new DeleteUserEvent(group_id,account.getName()); eventService.saveEvent(deleteUserEvent); } + + public void createLecture(Account account, String title, String description, Boolean visibility, List users) { + Visibility visibility1; + Long group_id = eventService.checkGroup(); + + if (visibility) { + visibility1 = Visibility.PUBLIC; + } else { + visibility1 = Visibility.PRIVATE; + } + + CreateGroupEvent createGroupEvent = new CreateGroupEvent(group_id, account.getName(), null, GroupType.LECTURE, visibility1); + eventService.saveEvent(createGroupEvent); + + addUser(account, group_id); + updateTitle(account, group_id, title); + updateDescription(account, group_id, description); + updateRole(account, group_id); + addUserList(users, group_id); + } } diff --git a/src/main/resources/templates/createLecture.html b/src/main/resources/templates/createLecture.html index 88ff3c9..e6fb1e5 100644 --- a/src/main/resources/templates/createLecture.html +++ b/src/main/resources/templates/createLecture.html @@ -43,6 +43,10 @@ +
    + + +
    From 838bff1d9fd77acdf42807dbf3aaf7708ac88763 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 14:19:00 +0100 Subject: [PATCH 08/10] Update GroupType in createGroup Co-Authored-By: tomvahl Co-Authored-By: andibuls Co-Authored-By: Lukas Ettel --- src/main/java/mops/gruppen2/service/ControllerService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index 2f568a1..828122c 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -34,7 +34,7 @@ public class ControllerService { visibility1 = Visibility.PRIVATE; } - CreateGroupEvent createGroupEvent = new CreateGroupEvent(group_id, account.getName(), null , GroupType.LECTURE, visibility1); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(group_id, account.getName(), null , GroupType.SIMPLE, visibility1); eventService.saveEvent(createGroupEvent); addUser(account, group_id); From f408391f4c3db5e91a7c421f52bac212dc33f9fb Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 14:40:39 +0100 Subject: [PATCH 09/10] Refactor Gruppen2Controller --- src/main/java/mops/gruppen2/controller/Gruppen2Controller.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 2bde657..a6bdcca 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -66,7 +66,6 @@ public class Gruppen2Controller { return "index"; } - @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @RolesAllowed({"ROLE_orga", "ROLE_actuator)"}) @GetMapping("/createLecture") public String createLecture(KeycloakAuthenticationToken token, Model model) { From 6929b1ead4a9bdb91cdb4d820a32f55e8274ba75 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 14:43:26 +0100 Subject: [PATCH 10/10] Add Service Annotation --- src/main/java/mops/gruppen2/service/CsvService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/mops/gruppen2/service/CsvService.java b/src/main/java/mops/gruppen2/service/CsvService.java index da8293e..a876d04 100644 --- a/src/main/java/mops/gruppen2/service/CsvService.java +++ b/src/main/java/mops/gruppen2/service/CsvService.java @@ -4,11 +4,13 @@ import com.fasterxml.jackson.databind.ObjectReader; import com.fasterxml.jackson.dataformat.csv.CsvMapper; import com.fasterxml.jackson.dataformat.csv.CsvSchema; import mops.gruppen2.domain.User; +import org.springframework.stereotype.Service; import java.io.IOException; import java.io.InputStream; import java.util.List; +@Service public class CsvService { public static List read(InputStream stream) throws IOException {