From 75784156883a7ab79a6469f55c8f9b8253ec7d8b Mon Sep 17 00:00:00 2001 From: scott-yeadon Date: Tue, 13 Aug 2024 14:41:58 +1000 Subject: [PATCH] FOLIOINT-370 apply google code formatter --- .../config/KeycloakLogoutHandler.java | 10 +- .../config/SecurityConfiguration.java | 10 +- .../pickslip/controller/HomeController.java | 64 +++++-- .../gov/nla/pickslip/domain/FolioRequest.java | 14 +- .../nla/pickslip/service/FolioService.java | 174 ++++++++++++------ 5 files changed, 182 insertions(+), 90 deletions(-) diff --git a/src/main/java/au/gov/nla/pickslip/config/KeycloakLogoutHandler.java b/src/main/java/au/gov/nla/pickslip/config/KeycloakLogoutHandler.java index ec142fa..294201d 100644 --- a/src/main/java/au/gov/nla/pickslip/config/KeycloakLogoutHandler.java +++ b/src/main/java/au/gov/nla/pickslip/config/KeycloakLogoutHandler.java @@ -16,6 +16,7 @@ public class KeycloakLogoutHandler implements LogoutHandler { private final RestClient restClient = RestClient.create(); + @Override public void logout( HttpServletRequest request, HttpServletResponse response, Authentication auth) { @@ -26,16 +27,19 @@ private void logoutFromKeycloak(OidcUser user) { String endSessionEndpoint = user.getIssuer() + "/protocol/openid-connect/logout"; UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(endSessionEndpoint) - .queryParam("id_token_hint", user.getIdToken().getTokenValue()); + .queryParam("id_token_hint", user.getIdToken() + .getTokenValue()); ResponseEntity result = restClient.get() .uri(builder.toUriString()) .retrieve() .toEntity(String.class); - if (result.getStatusCode().is2xxSuccessful()) { + if (result.getStatusCode() + .is2xxSuccessful()) { log.info("Keycloak logout successful: {}", user.getPreferredUsername()); - } else { + } + else { log.warn("Keycloak logout unsuccessful: {}", result.getBody()); } } diff --git a/src/main/java/au/gov/nla/pickslip/config/SecurityConfiguration.java b/src/main/java/au/gov/nla/pickslip/config/SecurityConfiguration.java index 0895b8f..50fc9f4 100644 --- a/src/main/java/au/gov/nla/pickslip/config/SecurityConfiguration.java +++ b/src/main/java/au/gov/nla/pickslip/config/SecurityConfiguration.java @@ -21,7 +21,8 @@ @Slf4j @RequiredArgsConstructor public class SecurityConfiguration { - static String[] ANONYMOUS_PATHS = {"/export/**", "/bulkprint/**", "/location/**", "/", "/home", "/user/**", "/webjars/**","/css/**"}; + static String[] ANONYMOUS_PATHS = {"/export/**", "/bulkprint/**", "/location/**", "/", "/home", + "/user/**", "/webjars/**", "/css/**"}; private final KeycloakLogoutHandler keycloakLogoutHandler; @@ -34,9 +35,12 @@ public SecurityFilterChain filterChain(final HttpSecurity http) throws Exception .requestMatchers(Arrays.stream(ANONYMOUS_PATHS) .map(AntPathRequestMatcher::antMatcher) .toArray(AntPathRequestMatcher[]::new)) - .permitAll().anyRequest().authenticated()) + .permitAll() + .anyRequest() + .authenticated()) .oauth2Login(Customizer.withDefaults()) - .logout(logout -> logout.addLogoutHandler(keycloakLogoutHandler).logoutSuccessUrl("/")); + .logout(logout -> logout.addLogoutHandler(keycloakLogoutHandler) + .logoutSuccessUrl("/")); return http.build(); } } diff --git a/src/main/java/au/gov/nla/pickslip/controller/HomeController.java b/src/main/java/au/gov/nla/pickslip/controller/HomeController.java index c288dde..ce5747b 100644 --- a/src/main/java/au/gov/nla/pickslip/controller/HomeController.java +++ b/src/main/java/au/gov/nla/pickslip/controller/HomeController.java @@ -10,6 +10,7 @@ import au.gov.nla.pickslip.service.ScheduledRequestRetrieverService; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; + import java.io.IOException; import java.security.Principal; import java.util.ArrayList; @@ -32,15 +33,20 @@ @Slf4j public class HomeController { - @Autowired PickslipQueues pickslipQueues; + @Autowired + PickslipQueues pickslipQueues; - @Autowired FolioService folioService; + @Autowired + FolioService folioService; - @Autowired PdfResponderService pdfResponderService; + @Autowired + PdfResponderService pdfResponderService; - @Autowired ScheduledRequestRetrieverService scheduledRequestRetrieverService; + @Autowired + ScheduledRequestRetrieverService scheduledRequestRetrieverService; - @Autowired StackLocations stackLocations; + @Autowired + StackLocations stackLocations; @Autowired RequestEditService requestEditService; @@ -117,19 +123,28 @@ public void bulkExport( stackPickslips.stream() .filter( p -> - (p.request().requestDate().isAfter(uptoPickslip.request().requestDate())) - || p.request().requestDate().isEqual(uptoPickslip.request().requestDate())) + (p.request() + .requestDate() + .isAfter(uptoPickslip.request() + .requestDate())) + || p.request() + .requestDate() + .isEqual(uptoPickslip.request() + .requestDate())) .filter( p -> p.visiting() == visitors && !p.parked() && PickslipQueues.Pickslip.Request.Status.OPEN_NOT_YET_FILLED - .getCode() - .equalsIgnoreCase(p.request().status())) + .getCode() + .equalsIgnoreCase(p.request() + .status())) .sorted( (Comparator.comparingDouble( - (PickslipQueues.Pickslip p) -> getDeweyish(p.item().callNumber())) - .thenComparing(p -> p.item().callNumber()))) + (PickslipQueues.Pickslip p) -> getDeweyish(p.item() + .callNumber())) + .thenComparing(p -> p.item() + .callNumber()))) .toList(); pdfResponderService.generate(sos, sorted); @@ -151,14 +166,16 @@ public String stack( model.addAttribute("visitors", pickslipQueues.getVisitorsForStack(stackCode)); if (principal != null) { - model.addAttribute("loggedInUser", ((OAuth2AuthenticationToken)principal).getPrincipal().getAttribute("preferred_username")); + model.addAttribute("loggedInUser", ((OAuth2AuthenticationToken) principal).getPrincipal() + .getAttribute("preferred_username")); } return "stack"; } @GetMapping({"", "/", "/home"}) - public String index(@RequestParam(required = false) String[] showOnly, Model model, final Principal principal) { + public String index(@RequestParam(required = false) String[] showOnly, Model model, + final Principal principal) { model.addAttribute("lastSuccess", scheduledRequestRetrieverService.getLastCompleted()); model.addAttribute("showOnly", showOnly); @@ -166,7 +183,8 @@ public String index(@RequestParam(required = false) String[] showOnly, Model mod model.addAttribute("queues", pickslipQueues); if (principal != null) { - model.addAttribute("loggedInUser", ((OAuth2AuthenticationToken)principal).getPrincipal().getAttribute("preferred_username")); + model.addAttribute("loggedInUser", ((OAuth2AuthenticationToken) principal).getPrincipal() + .getAttribute("preferred_username")); } return "index"; @@ -190,7 +208,8 @@ private List filterStackLocations(String[] stackCodes) } @GetMapping("/request/{requestId}/edit") - public String editRequest(@PathVariable final String requestId, final Model model, final Principal principal) { + public String editRequest(@PathVariable final String requestId, final Model model, + final Principal principal) { if (folioEditNotAllowed(principal)) { return "redirect:/"; } @@ -221,19 +240,26 @@ public String editRequest(@PathVariable final String requestId, final Model mode } @PostMapping("/request/{requestId}/edit") - public String editRequest(@PathVariable final String requestId, @ModelAttribute final RequestNoteDto requestNoteDto, Principal principal) throws IOException { + public String editRequest(@PathVariable final String requestId, + @ModelAttribute final RequestNoteDto requestNoteDto, + Principal principal) throws IOException { if (folioEditNotAllowed(principal)) { return "redirect:/"; } - log.debug("id: {}, note: {}", requestNoteDto.getRequestId(), requestNoteDto.getCancellationAdditionalInformation()); + log.debug("id: {}, note: {}", requestNoteDto.getRequestId(), + requestNoteDto.getCancellationAdditionalInformation()); - if (requestNoteDto.getRequestId() != null && !requestNoteDto.getRequestId().trim().isEmpty() && requestNoteDto.getCancellationAdditionalInformation() != null && !requestNoteDto.getCancellationAdditionalInformation().trim().isEmpty()) { + if (requestNoteDto.getRequestId() != null && !requestNoteDto.getRequestId() + .trim() + .isEmpty() && requestNoteDto.getCancellationAdditionalInformation() != null && !requestNoteDto.getCancellationAdditionalInformation() + .trim() + .isEmpty()) { folioService.updateRequest(requestNoteDto); } - return "redirect:/request/" + requestId + "/edit" ; + return "redirect:/request/" + requestId + "/edit"; } private boolean folioEditNotAllowed(final Principal principal) { diff --git a/src/main/java/au/gov/nla/pickslip/domain/FolioRequest.java b/src/main/java/au/gov/nla/pickslip/domain/FolioRequest.java index a9c49d3..86466a8 100644 --- a/src/main/java/au/gov/nla/pickslip/domain/FolioRequest.java +++ b/src/main/java/au/gov/nla/pickslip/domain/FolioRequest.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.time.ZonedDateTime; import java.util.List; @@ -34,21 +33,20 @@ public Instance getInstance() { @JsonInclude(value = JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) - public record Requester(String barcode, String patronGroupGroup) {} - ; + public record Requester(String barcode, String patronGroupGroup) { + } @JsonInclude(value = JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public record Item(String barcode, String callNumber, Location location) { @JsonInclude(value = JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) - public record Location(String name, String code) {} - ; + public record Location(String name, String code) { + } } - @JsonInclude(value = JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) - public record Instance(String title) {} - ; + public record Instance(String title) { + } } diff --git a/src/main/java/au/gov/nla/pickslip/service/FolioService.java b/src/main/java/au/gov/nla/pickslip/service/FolioService.java index bc6422d..8d37ed0 100644 --- a/src/main/java/au/gov/nla/pickslip/service/FolioService.java +++ b/src/main/java/au/gov/nla/pickslip/service/FolioService.java @@ -1,23 +1,25 @@ package au.gov.nla.pickslip.service; -import au.gov.nla.folio.api.*; +import au.gov.nla.folio.api.FOLIOLocationsRetrieverAPI; +import au.gov.nla.folio.api.FOLIOPatronPermissionsAPI; +import au.gov.nla.folio.api.FOLIOPatronRetrieverAPI; +import au.gov.nla.folio.api.FOLIOPickslipsRetrieverAPI; +import au.gov.nla.folio.api.FOLIORequestsRetrieverAPI; +import au.gov.nla.folio.api.FOLIOServicePointRetrieverAPI; import au.gov.nla.folio.api.credentials.FOLIOAPICredentials; import au.gov.nla.folio.util.FOLIOAPIUtils; -import au.gov.nla.pickslip.domain.*; +import au.gov.nla.pickslip.domain.FolioInstance; +import au.gov.nla.pickslip.domain.FolioLocation; +import au.gov.nla.pickslip.domain.FolioPickslip; +import au.gov.nla.pickslip.domain.FolioRequest; +import au.gov.nla.pickslip.domain.FolioServicePoint; +import au.gov.nla.pickslip.domain.PickslipQueues; import au.gov.nla.pickslip.dto.RequestNoteDto; import au.gov.nla.pickslip.service.async.FolioAsyncService; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import jakarta.annotation.PostConstruct; -import java.io.IOException; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.util.*; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; - import org.apache.logging.log4j.util.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,6 +27,18 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.io.IOException; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + @Service public class FolioService { @@ -38,7 +52,8 @@ public class FolioService { private Map folioOkapiCredentialsMap; // delegate all async - @Autowired FolioAsyncService folioAsyncService; + @Autowired + FolioAsyncService folioAsyncService; private FOLIOAPICredentials folioOkapiCredentials; @@ -79,10 +94,14 @@ public List getFolioServicePoints() throws IOException { r -> { FolioServicePoint sp = new FolioServicePoint( - r.at("/id").asText(null), - r.at("/code").asText(null), - r.at("/name").asText(null), - r.at("/discoveryDisplayName").asText(null)); + r.at("/id") + .asText(null), + r.at("/code") + .asText(null), + r.at("/name") + .asText(null), + r.at("/discoveryDisplayName") + .asText(null)); result.add(sp); }); @@ -106,10 +125,14 @@ public List getFolioLocations() throws IOException { r -> { FolioLocation loc = new FolioLocation( - r.at("/id").asText(null), - r.at("/code").asText(null), - r.at("/name").asText(null), - r.at("/primaryServicePoint").asText(null)); + r.at("/id") + .asText(null), + r.at("/code") + .asText(null), + r.at("/name") + .asText(null), + r.at("/primaryServicePoint") + .asText(null)); result.add(loc); }); @@ -148,23 +171,38 @@ public List getPickslipsForServicePoint(String id) throws IOExcep r -> { FolioPickslip pick = new FolioPickslip( - r.at("/requestId").asText(), + r.at("/requestId") + .asText(), new FolioPickslip.Item( - r.at("/item/title").asText(null), - r.at("/item/primaryContributor").asText(null), - r.at("/item/allContributors").asText(null), - r.at("/item/barcode").asText(null), - r.at("/item/descriptionOfPieces").asText(null), - r.at("/item/callNumber").asText(null), - r.at("/item/chronology").asText(null), - r.at("/item/enumeration").asText(null), - r.at("/item/effectiveLocationSpecific").asText(null), - r.at("/item/yearCaption").asText(null), - r.at("/item/copy").asText(null)), + r.at("/item/title") + .asText(null), + r.at("/item/primaryContributor") + .asText(null), + r.at("/item/allContributors") + .asText(null), + r.at("/item/barcode") + .asText(null), + r.at("/item/descriptionOfPieces") + .asText(null), + r.at("/item/callNumber") + .asText(null), + r.at("/item/chronology") + .asText(null), + r.at("/item/enumeration") + .asText(null), + r.at("/item/effectiveLocationSpecific") + .asText(null), + r.at("/item/yearCaption") + .asText(null), + r.at("/item/copy") + .asText(null)), new FolioPickslip.Requester( - r.at("/requester/firstName").asText(null), - r.at("/requester/lastName").asText(null), - r.at("/requester/barcode").asText(null))); + r.at("/requester/firstName") + .asText(null), + r.at("/requester/lastName") + .asText(null), + r.at("/requester/barcode") + .asText(null))); result.add(pick); }); @@ -194,33 +232,49 @@ public List getFolioRequests() throws IOException { requestDateNode.isNull() ? null : ZonedDateTime.parse( - requestDateNode.asText(), DateTimeFormatter.ISO_OFFSET_DATE_TIME); + requestDateNode.asText(), DateTimeFormatter.ISO_OFFSET_DATE_TIME); ZonedDateTime localRequestDate = requestDate.withZoneSameInstant(ZoneId.systemDefault()); FolioRequest req = new FolioRequest( - r.at("/id").asText(null), + r.at("/id") + .asText(null), localRequestDate, - r.at("/patronComments").asText(null), - r.at("/itemId").asText(null), - r.at("/instanceId").asText(null), - r.at("/requesterId").asText(null), - r.at("/status").asText(null), - r.at("/cancellationAdditionalInformation").asText(null), - r.at("/position").asText(null), - new FolioRequest.Instance(r.at("/instance/title").asText(null)), + r.at("/patronComments") + .asText(null), + r.at("/itemId") + .asText(null), + r.at("/instanceId") + .asText(null), + r.at("/requesterId") + .asText(null), + r.at("/status") + .asText(null), + r.at("/cancellationAdditionalInformation") + .asText(null), + r.at("/position") + .asText(null), + new FolioRequest.Instance(r.at("/instance/title") + .asText(null)), new FolioRequest.Item( - r.at("/item/barcode").asText(null), - r.at("/item/callNumber").asText(null), + r.at("/item/barcode") + .asText(null), + r.at("/item/callNumber") + .asText(null), new FolioRequest.Item.Location( - r.at("/item/location/name").asText(null), - r.at("/item/location/code").asText(null))), + r.at("/item/location/name") + .asText(null), + r.at("/item/location/code") + .asText(null))), new FolioRequest.Requester( - r.at("/requester/barcode").asText(null), - r.at("/requester/patronGroupGroup").asText(null)), - toList(r.at("/tagList").elements())); + r.at("/requester/barcode") + .asText(null), + r.at("/requester/patronGroupGroup") + .asText(null)), + toList(r.at("/tagList") + .elements())); result.add(req); }); @@ -283,7 +337,8 @@ public FolioRequest folioApiGetRequestById(final String requestId) throws IOExce .asText(null), folioRequestJson.at("/status") .asText(null), - folioRequestJson.at("/cancellationAdditionalInformation").asText(null), + folioRequestJson.at("/cancellationAdditionalInformation") + .asText(null), folioRequestJson.at("/position") .asText(null), new FolioRequest.Instance(folioRequestJson.at("/instance/title") @@ -313,9 +368,11 @@ public void updateRequest(final RequestNoteDto requestNoteDto) throws IOExceptio JsonNode folioRequestJson = folioRequestsRetrieverAPI.getRequestById(requestNoteDto.getRequestId()); if (folioRequestJson != null) { - ((ObjectNode) folioRequestJson).put("cancellationAdditionalInformation", requestNoteDto.getCancellationAdditionalInformation()); + ((ObjectNode) folioRequestJson).put("cancellationAdditionalInformation", + requestNoteDto.getCancellationAdditionalInformation()); folioRequestsRetrieverAPI.updateRequest(requestNoteDto.getRequestId(), folioRequestJson); - } else { + } + else { log.error("Could not retrieve request with id: {}", requestNoteDto.getRequestId()); } } @@ -328,20 +385,23 @@ public List getFolioPermissionsForUser(final String username) throws IOE return permissions; } - FOLIOPatronRetrieverAPI folioPatronRetrieverAPI = new FOLIOPatronRetrieverAPI(folioOkapiCredentials); + FOLIOPatronRetrieverAPI folioPatronRetrieverAPI = + new FOLIOPatronRetrieverAPI(folioOkapiCredentials); JsonNode userJsonNode = folioPatronRetrieverAPI.getUserByUsername(username.trim()); if (userJsonNode == null) { log.error("Folio record for user with name: {} not found", username); return permissions; } - String userId = userJsonNode.at("/id").asText(""); + String userId = userJsonNode.at("/id") + .asText(""); if (userId.isEmpty()) { log.error("Folio record for user with name: {} has no id", username); return permissions; } - FOLIOPatronPermissionsAPI folioPatronPermissionsAPI = new FOLIOPatronPermissionsAPI(folioOkapiCredentials); + FOLIOPatronPermissionsAPI folioPatronPermissionsAPI = + new FOLIOPatronPermissionsAPI(folioOkapiCredentials); JsonNode permissionsJsonNode = folioPatronPermissionsAPI.getPermissionsForUserId(userId); if (permissionsJsonNode == null) { log.error("Unable to retrieve Folio permissions for user id: {}", userId);