From be31b7c90b9528412559b5e5aa6794be1d82a774 Mon Sep 17 00:00:00 2001 From: "k.triantafyllou" Date: Thu, 9 Sep 2021 14:32:59 +0300 Subject: [PATCH] Add method to create a general role. Fix merge info method --- .../controllers/CuratorController.java | 9 ++-- .../controllers/MemberController.java | 7 ++-- .../controllers/SuperAdminController.java | 41 +++++++++++++++++++ .../dnetrolemanagement/entities/User.java | 12 ++++++ .../services/RegistryService.java | 26 +++++------- .../dnetrolemanagement/utils/JsonUtils.java | 17 ++++++-- 6 files changed, 85 insertions(+), 27 deletions(-) create mode 100644 src/main/java/eu/dnetlib/dnetrolemanagement/controllers/SuperAdminController.java diff --git a/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/CuratorController.java b/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/CuratorController.java index bba703a..a5c119d 100644 --- a/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/CuratorController.java +++ b/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/CuratorController.java @@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.web.bind.annotation.*; +import org.springframework.web.client.HttpClientErrorException; import java.util.Collection; import java.util.HashSet; @@ -40,13 +41,13 @@ public class CuratorController { */ @RequestMapping(value = "/{type}/create", method = RequestMethod.POST) public ResponseEntity createRole(@PathVariable("type") String type, @RequestParam(value = "description", required = false) String description) { - if (registryService.getCouId(AuthoritiesUtils.curatorRole(type).toLowerCase()) == null) { - if (registryService.createRole(AuthoritiesUtils.curatorRole(type), description != null ? description : "") != null) { + try { + if (registryService.getCouId(AuthoritiesUtils.curatorRole(type).toLowerCase()) == null) { return ResponseEntity.ok(new Response("Role has been created successfully")); } else { - throw new UnprocessableException("Role creation failed. Try again later"); + throw new ConflictException("This role already exists"); } - } else { + } catch (HttpClientErrorException e) { throw new ConflictException("This role already exists"); } } diff --git a/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/MemberController.java b/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/MemberController.java index 2bad467..951db15 100644 --- a/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/MemberController.java +++ b/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/MemberController.java @@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.web.bind.annotation.*; +import org.springframework.web.client.HttpClientErrorException; import java.util.Collection; import java.util.HashSet; @@ -41,13 +42,13 @@ public class MemberController { @RequestMapping(value = "/{type}/{id}/create", method = RequestMethod.POST) public ResponseEntity createGroup(@PathVariable("type") String type, @PathVariable("id") String id, @RequestParam(value = "description", required = false) String description) { - if (registryService.getCouId(AuthoritiesUtils.memberRole(type, id)) == null) { + try { if (registryService.createRole(AuthoritiesUtils.memberRole(type, id), description != null ? description : "") != null) { return ResponseEntity.ok(new Response("Role has been created successfully")); } else { - throw new UnprocessableException("Role creation failed. Try again later"); + throw new ConflictException("This role already exists"); } - } else { + } catch (HttpClientErrorException e) { throw new ConflictException("This role already exists"); } } diff --git a/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/SuperAdminController.java b/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/SuperAdminController.java new file mode 100644 index 0000000..0dec944 --- /dev/null +++ b/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/SuperAdminController.java @@ -0,0 +1,41 @@ +package eu.dnetlib.dnetrolemanagement.controllers; + +import eu.dnetlib.dnetrolemanagement.entities.Response; +import eu.dnetlib.dnetrolemanagement.exception.ConflictException; +import eu.dnetlib.dnetrolemanagement.exception.UnprocessableException; +import eu.dnetlib.dnetrolemanagement.services.RegistryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.HttpClientErrorException; + +@RestController +@RequestMapping("/super") +public class SuperAdminController { + + private final RegistryService registryService; + + @Autowired + public SuperAdminController(RegistryService registryService) { + this.registryService = registryService; + } + + /** + * Create a new role (only for admins) + */ + @RequestMapping(value = "/create", method = RequestMethod.POST) + public ResponseEntity createRole(@RequestParam("name") String name, @RequestParam(value = "description", required = false) String description) { + try { + if (registryService.createRole(name, description != null ? description : "") != null) { + return ResponseEntity.ok(new Response("Role has been created successfully")); + } else { + throw new ConflictException("This role already exists"); + } + } catch (HttpClientErrorException e) { + throw new ConflictException("This role already exists"); + } + } +} diff --git a/src/main/java/eu/dnetlib/dnetrolemanagement/entities/User.java b/src/main/java/eu/dnetlib/dnetrolemanagement/entities/User.java index 8ee91f7..2a417d0 100644 --- a/src/main/java/eu/dnetlib/dnetrolemanagement/entities/User.java +++ b/src/main/java/eu/dnetlib/dnetrolemanagement/entities/User.java @@ -1,7 +1,11 @@ package eu.dnetlib.dnetrolemanagement.entities; +import com.fasterxml.jackson.annotation.JsonIgnore; + public class User { + @JsonIgnore + private String coPersonId; private String id; private String email; private String name; @@ -10,6 +14,14 @@ public class User { public User() { } + public String getCoPersonId() { + return coPersonId; + } + + public void setCoPersonId(String coPersonId) { + this.coPersonId = coPersonId; + } + public String getId() { return id; } diff --git a/src/main/java/eu/dnetlib/dnetrolemanagement/services/RegistryService.java b/src/main/java/eu/dnetlib/dnetrolemanagement/services/RegistryService.java index aa8460c..e23a77c 100644 --- a/src/main/java/eu/dnetlib/dnetrolemanagement/services/RegistryService.java +++ b/src/main/java/eu/dnetlib/dnetrolemanagement/services/RegistryService.java @@ -36,7 +36,7 @@ public class RegistryService { * 1.1 Get CoPersonId by Email */ public List getCoPersonIdsByEmail(String email) { - if(email != null) { + if (email != null) { List coPersonIds = new ArrayList<>(); Map params = new HashMap<>(); params.put("coid", coid); @@ -51,7 +51,7 @@ public class RegistryService { return coPersonIds; } else { Integer coPersonId = getCoPersonIdByIdentifier(); - return (coPersonId != null)? Collections.singletonList(coPersonId):new ArrayList<>(); + return (coPersonId != null) ? Collections.singletonList(coPersonId) : new ArrayList<>(); } } @@ -85,8 +85,8 @@ public class RegistryService { Map params = new HashMap<>(); params.put("copersonid", coPersonId.toString()); JsonElement response = httpUtils.get("identifiers.json", params); - JsonArray ids = (response != null)?response.getAsJsonObject().get("Identifiers").getAsJsonArray():new JsonArray(); - if(ids.size() > 0) { + JsonArray ids = (response != null) ? response.getAsJsonObject().get("Identifiers").getAsJsonArray() : new JsonArray(); + if (ids.size() > 0) { return ids.get(0).getAsJsonObject().get("Identifier").getAsString(); } return null; @@ -230,18 +230,10 @@ public class RegistryService { JsonArray emails = new JsonArray(); infos.forEach(info -> { JsonObject user = new JsonObject(); - boolean add = true; - String email = info.getAsJsonObject().get("Mail").getAsString(); - for (JsonElement element : emails) { - if (element.getAsJsonObject().get("email").getAsString().equals(email)) { - add = false; - } - } - if (add) { - user.addProperty("email", email); - user.addProperty("memberSince", info.getAsJsonObject().get("Created").getAsString()); - emails.add(user); - } + user.addProperty("coPersonId", info.getAsJsonObject().get("Person").getAsJsonObject().get("Id").getAsString()); + user.addProperty("email", info.getAsJsonObject().get("Mail").getAsString()); + user.addProperty("memberSince", info.getAsJsonObject().get("Created").getAsString()); + emails.add(user); }); return emails; } @@ -260,6 +252,7 @@ public class RegistryService { JsonArray names = new JsonArray(); infos.forEach(info -> { JsonObject user = new JsonObject(); + user.addProperty("coPersonId", info.getAsJsonObject().get("Person").getAsJsonObject().get("Id").getAsString()); user.addProperty("name", info.getAsJsonObject().get("Given").getAsString() + " " + info.getAsJsonObject().get("Family").getAsString()); user.addProperty("memberSince", info.getAsJsonObject().get("Created").getAsString()); names.add(user); @@ -281,6 +274,7 @@ public class RegistryService { JsonArray ids = new JsonArray(); infos.forEach(info -> { JsonObject user = new JsonObject(); + user.addProperty("coPersonId", info.getAsJsonObject().get("Person").getAsJsonObject().get("Id").getAsString()); user.addProperty("id", info.getAsJsonObject().get("Identifier").getAsString()); user.addProperty("memberSince", info.getAsJsonObject().get("Created").getAsString()); ids.add(user); diff --git a/src/main/java/eu/dnetlib/dnetrolemanagement/utils/JsonUtils.java b/src/main/java/eu/dnetlib/dnetrolemanagement/utils/JsonUtils.java index aa320d8..4e39e74 100644 --- a/src/main/java/eu/dnetlib/dnetrolemanagement/utils/JsonUtils.java +++ b/src/main/java/eu/dnetlib/dnetrolemanagement/utils/JsonUtils.java @@ -9,6 +9,10 @@ import eu.dnetlib.dnetrolemanagement.entities.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.swing.text.html.Option; +import java.util.Arrays; +import java.util.Optional; + @Component public class JsonUtils { @@ -22,11 +26,16 @@ public class JsonUtils { } public static User[] mergeUserInfo(JsonArray users, JsonArray emails, JsonArray names, Gson gson) { - for (int i = 0; i < users.size(); i++) { - users.get(i).getAsJsonObject().addProperty("email", emails.get(i).getAsJsonObject().get("email").getAsString()); - users.get(i).getAsJsonObject().addProperty("name", names.get(i).getAsJsonObject().get("name").getAsString()); + User[] usersMapped = gson.fromJson(users, User[].class); + User[] emailsMapped = gson.fromJson(emails, User[].class); + User[] namesMapped = gson.fromJson(names, User[].class); + for(User user: usersMapped) { + Optional emailUser = Arrays.stream(emailsMapped).filter(email -> user.getCoPersonId().equals(email.getCoPersonId())).findFirst(); + Optional nameUser = Arrays.stream(namesMapped).filter(name -> user.getCoPersonId().equals(name.getCoPersonId())).findFirst(); + emailUser.ifPresent(value -> user.setEmail(value.getEmail())); + nameUser.ifPresent(value -> user.setName(value.getName())); } - return gson.fromJson(users, User[].class); + return usersMapped; } public JsonObject coPersonRoles(Integer coPersonId, Integer couId, String status) {