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() {