From 0911863c8a289e245407468a8d80ff691ab0c34b Mon Sep 17 00:00:00 2001 From: pierre-maraval Date: Mon, 5 Feb 2024 11:10:59 +0100 Subject: [PATCH] =?UTF-8?q?CDE-327=20:=20Fix=20:=20Correction=20doi2ppn=20?= =?UTF-8?q?:=20prise=20en=20compte=20du=20cas=20ou=20plusieurs=20r=C3=A9su?= =?UTF-8?q?ltats=20sont=20retourn=C3=A9s=20par=20la=20proc=C3=A9dure=20sto?= =?UTF-8?q?ck=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/abes/sudoc/service/DoiService.java | 2 +- .../java/fr/abes/sudoc/utils/Utilitaire.java | 34 +++++++++++++++---- .../fr/abes/sudoc/utils/UtilitaireTest.java | 19 +++++++++++ 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/src/main/java/fr/abes/sudoc/service/DoiService.java b/src/main/java/fr/abes/sudoc/service/DoiService.java index 9c8fa29..7fc5d47 100644 --- a/src/main/java/fr/abes/sudoc/service/DoiService.java +++ b/src/main/java/fr/abes/sudoc/service/DoiService.java @@ -27,7 +27,7 @@ public boolean checkFormat(String doi) { public List getPpnFromIdentifiant(String doi) throws IllegalPpnException, IOException { try{ - return Utilitaire.parseJson(caller.doiToPpn(doi)); + return Utilitaire.parseJsonDoi(caller.doiToPpn(doi)); } catch (UncategorizedSQLException ex){ throw new IllegalPpnException("Aucune notice ne correspond à la recherche"); } catch (JsonProcessingException ex) { diff --git a/src/main/java/fr/abes/sudoc/utils/Utilitaire.java b/src/main/java/fr/abes/sudoc/utils/Utilitaire.java index 4b5ad46..2ea2f92 100644 --- a/src/main/java/fr/abes/sudoc/utils/Utilitaire.java +++ b/src/main/java/fr/abes/sudoc/utils/Utilitaire.java @@ -45,28 +45,46 @@ private static void extractPpnFromNode(List listePpn, JsonNode sudocnode JsonNode record = elements.next(); listePpn.add(record.path("ppn").asText()); } - } - else { + } else { listePpn.add(elements.next().asText()); } } } + public static List parseJsonDoi(String json) throws JsonProcessingException { + //la correspondance pouvant retourner plusieurs fois un ppn, on crée une multimap pour récupérer le résultat + List listePpn = new ArrayList<>(); + //parse de l'input json + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode sudocnode = objectMapper.readTree(json); + JsonNode resultsNode = sudocnode.findValue("results"); + if (resultsNode != null) { + Iterator elements = resultsNode.elements(); + while (elements.hasNext()) { + JsonNode record = elements.next(); + listePpn.add(record.findValue("ppn").asText()); + } + } + return listePpn; + } + + /** * Méthode permettant de remplacer les caractères diacritiques d'une chaine par leur équivalent non diacritique + * * @param src chaine à transformer * @return chaine transformée */ public static String replaceDiacritics(String src) { StringBuffer result = new StringBuffer(); - if(src!=null && src.length()!=0) { + if (src != null && src.length() != 0) { int index = -1; char c; - String chars= "àâäéèêëîïôöùûüç"; - String replace= "aaaeeeeiioouuuc"; - for(int i=0; i ppns = Utilitaire.parseJsonDoi(json); + Assertions.assertEquals(1, ppns.size()); + Assertions.assertEquals("198471483", ppns.get(0)); + } + + @Test + @DisplayName("parseJsonDoi : 1 seul résultat") + void testParseJsonDoi2() throws JsonProcessingException { + String json = "{\"sudoc\":{\"results\":[{\"result\":{\"ppn\":\"224633333\",\"doi\":\"10.1002/9781118444726\"}},{\"result\":{\"ppn\":\"17886594X\",\"doi\":\"10.1002/9781118444726\"}}]}}"; + List ppns = Utilitaire.parseJsonDoi(json); + Assertions.assertEquals(2, ppns.size()); + Assertions.assertEquals("224633333", ppns.get(0)); + Assertions.assertEquals("17886594X", ppns.get(1)); + } + @Test @DisplayName("test replaceDiacritics") void testReplaceDiacritics() {