diff --git a/src/main/java/org/jabref/logic/importer/fetcher/BiodiversityLibrary.java b/src/main/java/org/jabref/logic/importer/fetcher/BiodiversityLibrary.java index 89df6e50d260..adca6145ae65 100644 --- a/src/main/java/org/jabref/logic/importer/fetcher/BiodiversityLibrary.java +++ b/src/main/java/org/jabref/logic/importer/fetcher/BiodiversityLibrary.java @@ -85,41 +85,23 @@ public BibEntry getMostDetails(JSONObject item, BibEntry entry) throws IOExcepti if (item.getString("BHLType").equals("Part")) { URL url = getPartMetadataURL(item.getString("PartID")); JSONObject itemsDetails = getDetails(url); - if (itemsDetails.has("Language")) { - entry.setField(StandardField.LANGUAGE, itemsDetails.getString("Language")); - } - if (itemsDetails.has("Doi")) { - entry.setField(StandardField.DOI, itemsDetails.getString("Doi")); - } - if (itemsDetails.has("PublisherName")) { - entry.setField(StandardField.PUBLISHER, itemsDetails.getString("PublisherName")); - } - if (itemsDetails.has("Volume") && !entry.hasField(StandardField.VOLUME)) { - entry.setField(StandardField.VOLUME, itemsDetails.getString("Volume")); - } - if (itemsDetails.has("Date") && !entry.hasField(StandardField.DATE) && !entry.hasField(StandardField.YEAR)) { - entry.setField(StandardField.DATE, itemsDetails.getString("Date")); - } - if (itemsDetails.has("PartUrl")) { - entry.setField(StandardField.URL, itemsDetails.getString("PartUrl")); - } + entry.setField(StandardField.LANGUAGE, itemsDetails.optString("Language", "")); + + entry.setField(StandardField.DOI, itemsDetails.optString("Doi", "")); + + entry.setField(StandardField.PUBLISHER, itemsDetails.optString("PublisherName", "")); + entry.setField(StandardField.DATE, itemsDetails.optString("Date", "")); + entry.setField(StandardField.VOLUME, itemsDetails.optString("Volume", "")); + entry.setField(StandardField.URL, itemsDetails.optString("PartUrl", "")); } if (item.getString("BHLType").equals("Item")) { URL url = getItemMetadataURL(item.getString("ItemID")); JSONObject itemsDetails = getDetails(url); - if (itemsDetails.has("Sponsor")) { - entry.setField(StandardField.EDITOR, itemsDetails.getString("Sponsor")); - } - if (itemsDetails.has("HoldingInstitution")) { - entry.setField(StandardField.PUBLISHER, itemsDetails.getString("HoldingInstitution")); - } - if (itemsDetails.has("Language")) { - entry.setField(StandardField.LANGUAGE, itemsDetails.getString("Language")); - } - if (itemsDetails.has("ItemUrl")) { - entry.setField(StandardField.URL, itemsDetails.getString("ItemUrl")); - } + entry.setField(StandardField.EDITOR, itemsDetails.optString("Sponsor", "")); + entry.setField(StandardField.PUBLISHER, itemsDetails.optString("HoldingInstitution", "")); + entry.setField(StandardField.LANGUAGE, itemsDetails.optString("Language", "")); + entry.setField(StandardField.URL, itemsDetails.optString("ItemUrl", "")); if (itemsDetails.has("Date") && !entry.hasField(StandardField.DATE) && !entry.hasField(StandardField.YEAR)) { entry.setField(StandardField.DATE, itemsDetails.getString("Date")); } @@ -138,9 +120,7 @@ public BibEntry jsonResultToBibEntry(JSONObject item) { entry.setType(StandardEntryType.Article); } - if (item.has("Title")) { - entry.setField(StandardField.TITLE, item.optString("Title")); - } + entry.setField(StandardField.TITLE, item.optString("Title", "")); if (item.has("Authors")) { JSONArray authors = item.getJSONArray("Authors"); @@ -157,43 +137,14 @@ public BibEntry jsonResultToBibEntry(JSONObject item) { LOGGER.debug("Empty author name"); } - if (item.has("PageRange")) { - entry.setField(StandardField.PAGES, item.getString("PageRange")); - } else { - LOGGER.debug("Empty pages number"); - } + entry.setField(StandardField.PAGES, item.optString("PageRange", "")); + entry.setField(StandardField.PUBSTATE, item.optString("PublisherPlace", "")); + entry.setField(StandardField.PUBLISHER, item.optString("PublisherName", "")); - if (item.has("PublisherPlace")) { - entry.setField(StandardField.PUBSTATE, item.getString("PublisherPlace")); - } else { - LOGGER.debug("Empty Publisher Place"); - } - - if (item.has("PublisherName")) { - entry.setField(StandardField.PUBLISHER, item.getString("PublisherName")); - } else { - LOGGER.debug("Empty Publisher Name"); - } - - if (item.has("Date")) { - entry.setField(StandardField.DATE, item.getString("Date")); - } else if (item.has("PublicationDate")) { - entry.setField(StandardField.YEAR, item.getString("PublicationDate")); - } else { - LOGGER.debug("Empty date"); - } - - if (item.has("ContainerTitle")) { - entry.setField(StandardField.JOURNALTITLE, item.getString("ContainerTitle")); - } else { - LOGGER.debug("Empty journal name"); - } - - if (item.has("Volume")) { - entry.setField(StandardField.VOLUME, item.getString("Volume")); - } else { - LOGGER.debug("Empty volume number"); - } + entry.setField(StandardField.DATE, item.optString("Date", "")); + entry.setField(StandardField.YEAR, item.optString("PublicationDate", "")); + entry.setField(StandardField.JOURNALTITLE, item.optString("ContainerTitle", "")); + entry.setField(StandardField.VOLUME, item.optString("Volume", "")); return entry; } @@ -235,12 +186,7 @@ public URL getURLForQuery(QueryNode luceneQuery) throws URISyntaxException, Malf transformer.transformLuceneQuery(luceneQuery).orElse(""); // FixMe: ????? result ignored uriBuilder.addParameter("op", "PublicationSearchAdvanced"); - if (transformer.getAuthor().isPresent()) { - uriBuilder.addParameter("authorname", transformer.getAuthor().get()); - } - if (transformer.getTitle().isPresent()) { - uriBuilder.addParameter("title", transformer.getTitle().get()); uriBuilder.addParameter("titleop", "all"); } diff --git a/src/main/java/org/jabref/logic/importer/fetcher/transformers/BiodiversityLibraryTransformer.java b/src/main/java/org/jabref/logic/importer/fetcher/transformers/BiodiversityLibraryTransformer.java index 80fe80f07cfb..8ab929f838aa 100644 --- a/src/main/java/org/jabref/logic/importer/fetcher/transformers/BiodiversityLibraryTransformer.java +++ b/src/main/java/org/jabref/logic/importer/fetcher/transformers/BiodiversityLibraryTransformer.java @@ -1,17 +1,9 @@ package org.jabref.logic.importer.fetcher.transformers; -import java.util.List; -import java.util.Objects; import java.util.Optional; -import org.jabref.model.strings.StringUtil; +public class BiodiversityLibraryTransformer extends AbstractQueryTransformer { -public class BiodiversityLibraryTransformer extends YearRangeByFilteringQueryTransformer { - - private static final List STOP_WORDS = List.of("a", "and", "for", "or", "with"); - - private String journal; - private String articleNumber; private String author; private String title; @@ -32,63 +24,26 @@ protected String getLogicalNotOperator() { @Override protected String handleAuthor(String author) { - this.author = author; - return StringUtil.quoteStringIfSpaceIsContained(author); + return createKeyValuePair("authorname", author); } @Override protected String handleTitle(String title) { this.title = title; - return StringUtil.quoteStringIfSpaceIsContained(title); + return createKeyValuePair("title", title); } @Override - protected String handleJournal(String journal) { - this.journal = journal; - return StringUtil.quoteStringIfSpaceIsContained(journal); + protected String handleJournal(String journalTitle) { + return null; } @Override protected String handleYear(String year) { - startYear = Math.min(startYear, Integer.parseInt(year)); - endYear = Math.max(endYear, Integer.parseInt(year)); - return ""; - } - - @Override - protected Optional handleOtherField(String fieldAsString, String term) { - return switch (fieldAsString) { - case "article_number" -> handleArticleNumber(term); - default -> super.handleOtherField(fieldAsString, term); - }; - } - - @Override - protected Optional handleUnFieldedTerm(String term) { - if (STOP_WORDS.contains(term)) { - return Optional.empty(); - } - return super.handleUnFieldedTerm(term); - } - - private Optional handleArticleNumber(String term) { - articleNumber = term; - return Optional.empty(); - } - - public Optional getJournal() { - return Objects.isNull(journal) ? Optional.empty() : Optional.of(journal); - } - - public Optional getArticleNumber() { - return Objects.isNull(articleNumber) ? Optional.empty() : Optional.of(articleNumber); - } - - public Optional getTitle() { - return Objects.isNull(title) ? Optional.empty() : Optional.of(title); + return null; } public Optional getAuthor() { - return Objects.isNull(author) ? Optional.empty() : Optional.of(author); + return Optional.ofNullable(author); } } diff --git a/src/test/java/org/jabref/logic/importer/fetcher/BiodiversityLibraryTest.java b/src/test/java/org/jabref/logic/importer/fetcher/BiodiversityLibraryTest.java index 80851ee38142..bc6eaab0d67f 100644 --- a/src/test/java/org/jabref/logic/importer/fetcher/BiodiversityLibraryTest.java +++ b/src/test/java/org/jabref/logic/importer/fetcher/BiodiversityLibraryTest.java @@ -11,6 +11,8 @@ import kong.unirest.json.JSONObject; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; @@ -49,9 +51,10 @@ public void baseURLConstruction() throws MalformedURLException, URISyntaxExcepti } - @Test - public void getPartMetadaUrl() throws MalformedURLException, URISyntaxException { - String id = "1234"; + @ParameterizedTest + @ValueSource(strings = {"1234", "331", "121"}) + public void getPartMetadaUrl(String id) throws MalformedURLException, URISyntaxException { + String expected_base = (BASE_URL .concat("apikey=") .concat(buildInfo.biodiversityHeritageApiKey) @@ -59,17 +62,8 @@ public void getPartMetadaUrl() throws MalformedURLException, URISyntaxException .concat("&op=GetPartMetadata&pages=f&names=f") .concat("&id=") ); - String expected = expected_base.concat(id); - - assertEquals(expected, fetcher.getPartMetadataURL(id).toString()); - id = "4321"; - expected = expected_base.concat(id); - assertEquals(expected, fetcher.getPartMetadataURL(id).toString()); - - id = "331"; - expected = expected_base.concat(id); - assertEquals(expected, fetcher.getPartMetadataURL(id).toString()); + assertEquals(expected_base.concat(id), fetcher.getPartMetadataURL(id).toString()); }