Skip to content

Commit

Permalink
improve maintainability
Browse files Browse the repository at this point in the history
  • Loading branch information
Jonathan-Oliveira committed May 7, 2022
1 parent 7d44480 commit 4eee171
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 139 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
}
Expand All @@ -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");
Expand All @@ -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;
}
Expand Down Expand Up @@ -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");
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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<String> STOP_WORDS = List.of("a", "and", "for", "or", "with");

private String journal;
private String articleNumber;
private String author;
private String title;

Expand All @@ -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<String> handleOtherField(String fieldAsString, String term) {
return switch (fieldAsString) {
case "article_number" -> handleArticleNumber(term);
default -> super.handleOtherField(fieldAsString, term);
};
}

@Override
protected Optional<String> handleUnFieldedTerm(String term) {
if (STOP_WORDS.contains(term)) {
return Optional.empty();
}
return super.handleUnFieldedTerm(term);
}

private Optional<String> handleArticleNumber(String term) {
articleNumber = term;
return Optional.empty();
}

public Optional<String> getJournal() {
return Objects.isNull(journal) ? Optional.empty() : Optional.of(journal);
}

public Optional<String> getArticleNumber() {
return Objects.isNull(articleNumber) ? Optional.empty() : Optional.of(articleNumber);
}

public Optional<String> getTitle() {
return Objects.isNull(title) ? Optional.empty() : Optional.of(title);
return null;
}

public Optional<String> getAuthor() {
return Objects.isNull(author) ? Optional.empty() : Optional.of(author);
return Optional.ofNullable(author);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -49,27 +51,19 @@ 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)
.concat(RESPONSE_FORMAT)
.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());

}

Expand Down

0 comments on commit 4eee171

Please sign in to comment.