From 07b00f3c30e465bb0ce6da6c704105435cf59d40 Mon Sep 17 00:00:00 2001 From: Giorgio Basile Date: Wed, 7 Jun 2017 12:34:41 +0100 Subject: [PATCH] Create and finalise JournalsService --- pom.xml | 2 +- .../uk/ac/core/oacore4j/OACoreService.java | 7 ++ .../oacore4j/journals/JournalsService.java | 39 +++++++ .../oacore4j/journals/response/Journal.java | 110 ++++++++++++++++++ .../journals/response/JournalResponse.java | 57 +++++++++ .../response/JournalSearchResponse.java | 54 +++++++++ .../java/uk/ac/core/oacore4j/BaseTest.java | 8 +- .../journals/JournalsServiceTests.java | 80 +++++++++++++ 8 files changed, 354 insertions(+), 3 deletions(-) create mode 100644 src/main/java/uk/ac/core/oacore4j/journals/JournalsService.java create mode 100755 src/main/java/uk/ac/core/oacore4j/journals/response/Journal.java create mode 100755 src/main/java/uk/ac/core/oacore4j/journals/response/JournalResponse.java create mode 100755 src/main/java/uk/ac/core/oacore4j/journals/response/JournalSearchResponse.java create mode 100644 src/test/java/uk/ac/core/oacore4j/journals/JournalsServiceTests.java diff --git a/pom.xml b/pom.xml index 4c18b90..cf84ae3 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ uk.ac.core oacore4j - 0.1 + 1.0 UTF-8 diff --git a/src/main/java/uk/ac/core/oacore4j/OACoreService.java b/src/main/java/uk/ac/core/oacore4j/OACoreService.java index c76a971..b7af399 100644 --- a/src/main/java/uk/ac/core/oacore4j/OACoreService.java +++ b/src/main/java/uk/ac/core/oacore4j/OACoreService.java @@ -6,6 +6,7 @@ import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; import uk.ac.core.oacore4j.articles.ArticlesService; +import uk.ac.core.oacore4j.journals.JournalsService; import uk.ac.core.oacore4j.repositories.RepositoriesService; import uk.ac.core.oacore4j.search.SearchAllService; @@ -25,6 +26,7 @@ public class OACoreService { private ArticlesService articlesService; private RepositoriesService repositoriesService; private SearchAllService searchAllService; + private JournalsService journalsService; public OACoreService(String apiKey){ this.apiKey = apiKey; @@ -33,6 +35,7 @@ public OACoreService(String apiKey){ this.articlesService = retrofit.create(ArticlesService.class); this.repositoriesService = retrofit.create(RepositoriesService.class); this.searchAllService = retrofit.create(SearchAllService.class); + this.journalsService = retrofit.create(JournalsService.class); } public ArticlesService getArticlesService() { @@ -47,6 +50,10 @@ public SearchAllService getSearchAllService() { return searchAllService; } + public JournalsService getJournalsService() { + return journalsService; + } + private Retrofit createRetrofit(String apiKey){ return new Retrofit.Builder() diff --git a/src/main/java/uk/ac/core/oacore4j/journals/JournalsService.java b/src/main/java/uk/ac/core/oacore4j/journals/JournalsService.java new file mode 100644 index 0000000..e7d63d6 --- /dev/null +++ b/src/main/java/uk/ac/core/oacore4j/journals/JournalsService.java @@ -0,0 +1,39 @@ +package uk.ac.core.oacore4j.journals; + +import retrofit2.Call; +import retrofit2.http.*; +import uk.ac.core.oacore4j.commons.SearchRequest; +import uk.ac.core.oacore4j.journals.response.JournalResponse; +import uk.ac.core.oacore4j.journals.response.JournalSearchResponse; + +import java.util.List; + + +/** + * @author Giorgio Basile + * @since 23/05/2017 + */ + +public interface JournalsService { + + String QUERY = "query"; + String PAGE = "page"; + String PAGE_SIZE = "pageSize"; + String ISSN = "issn"; + + + @POST("journals/get") + Call> getJournals(@Body List issnList); + + @GET("journals/get/{issn}") + Call getJournal(@Path(ISSN) String issn); + + @POST("journals/search") + Call> searchJournals(@Body List searchRequests); + + @GET("journals/search/{query}") + Call searchJournals(@Path(QUERY) String query, + @Query(PAGE) Integer page, + @Query(PAGE_SIZE) Integer pageSize); + +} diff --git a/src/main/java/uk/ac/core/oacore4j/journals/response/Journal.java b/src/main/java/uk/ac/core/oacore4j/journals/response/Journal.java new file mode 100755 index 0000000..3110cd1 --- /dev/null +++ b/src/main/java/uk/ac/core/oacore4j/journals/response/Journal.java @@ -0,0 +1,110 @@ + +package uk.ac.core.oacore4j.journals.response; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "title", + "identifiers", + "subjects", + "language", + "rights", + "publisher" +}) +public class Journal { + + @JsonProperty("title") + private String title; + @JsonProperty("identifiers") + private List identifiers = null; + @JsonProperty("subjects") + private List subjects = null; + @JsonProperty("language") + private String language; + @JsonProperty("rights") + private String rights; + @JsonProperty("publisher") + private String publisher; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("title") + public String getTitle() { + return title; + } + + @JsonProperty("title") + public void setTitle(String title) { + this.title = title; + } + + @JsonProperty("identifiers") + public List getIdentifiers() { + return identifiers; + } + + @JsonProperty("identifiers") + public void setIdentifiers(List identifiers) { + this.identifiers = identifiers; + } + + @JsonProperty("subjects") + public List getSubjects() { + return subjects; + } + + @JsonProperty("subjects") + public void setSubjects(List subjects) { + this.subjects = subjects; + } + + @JsonProperty("language") + public String getLanguage() { + return language; + } + + @JsonProperty("language") + public void setLanguage(String language) { + this.language = language; + } + + @JsonProperty("rights") + public String getRights() { + return rights; + } + + @JsonProperty("rights") + public void setRights(String rights) { + this.rights = rights; + } + + @JsonProperty("publisher") + public String getPublisher() { + return publisher; + } + + @JsonProperty("publisher") + public void setPublisher(String publisher) { + this.publisher = publisher; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + +} diff --git a/src/main/java/uk/ac/core/oacore4j/journals/response/JournalResponse.java b/src/main/java/uk/ac/core/oacore4j/journals/response/JournalResponse.java new file mode 100755 index 0000000..f784d9c --- /dev/null +++ b/src/main/java/uk/ac/core/oacore4j/journals/response/JournalResponse.java @@ -0,0 +1,57 @@ + +package uk.ac.core.oacore4j.journals.response; + +import java.util.HashMap; +import java.util.Map; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "status", + "journal" +}) +public class JournalResponse { + + @JsonProperty("status") + private String status; + @JsonProperty("data") + private Journal journal; + @JsonIgnore + private Map additionalProperties = new HashMap<>(); + + @JsonProperty("status") + public String getStatus() { + return status; + } + + @JsonProperty("status") + public void setStatus(String status) { + this.status = status; + } + + @JsonProperty("data") + public Journal getJournal() { + return journal; + } + + @JsonProperty("data") + public void setJournal(Journal journal) { + this.journal = journal; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + +} diff --git a/src/main/java/uk/ac/core/oacore4j/journals/response/JournalSearchResponse.java b/src/main/java/uk/ac/core/oacore4j/journals/response/JournalSearchResponse.java new file mode 100755 index 0000000..089d6b4 --- /dev/null +++ b/src/main/java/uk/ac/core/oacore4j/journals/response/JournalSearchResponse.java @@ -0,0 +1,54 @@ + +package uk.ac.core.oacore4j.journals.response; + +import com.fasterxml.jackson.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "status", + "journal" +}) +public class JournalSearchResponse { + + @JsonProperty("status") + private String status; + @JsonProperty("data") + private List journal; + @JsonIgnore + private Map additionalProperties = new HashMap<>(); + + @JsonProperty("status") + public String getStatus() { + return status; + } + + @JsonProperty("status") + public void setStatus(String status) { + this.status = status; + } + + @JsonProperty("data") + public List getJournal() { + return journal; + } + + @JsonProperty("data") + public void setJournal(List journal) { + this.journal = journal; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + +} diff --git a/src/test/java/uk/ac/core/oacore4j/BaseTest.java b/src/test/java/uk/ac/core/oacore4j/BaseTest.java index ee881c9..caf26d9 100644 --- a/src/test/java/uk/ac/core/oacore4j/BaseTest.java +++ b/src/test/java/uk/ac/core/oacore4j/BaseTest.java @@ -6,8 +6,12 @@ */ public class BaseTest { - protected String readApiKey(){ - return System.getProperty("apiKey"); + protected String readApiKey() throws NullPointerException{ + String apiKey = System.getProperty("apiKey"); + if(apiKey == null){ + throw new NullPointerException("Please provide a valid CORE API key"); + } + return apiKey; } } diff --git a/src/test/java/uk/ac/core/oacore4j/journals/JournalsServiceTests.java b/src/test/java/uk/ac/core/oacore4j/journals/JournalsServiceTests.java new file mode 100644 index 0000000..5936c3f --- /dev/null +++ b/src/test/java/uk/ac/core/oacore4j/journals/JournalsServiceTests.java @@ -0,0 +1,80 @@ +package uk.ac.core.oacore4j.journals; + + +import org.junit.Test; +import retrofit2.Call; +import uk.ac.core.oacore4j.BaseTest; +import uk.ac.core.oacore4j.OACoreService; +import uk.ac.core.oacore4j.commons.SearchRequest; +import uk.ac.core.oacore4j.journals.response.JournalResponse; +import uk.ac.core.oacore4j.journals.response.JournalSearchResponse; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +/** + * @author Giorgio Basile + * @since 07/06/2017 + */ +public class JournalsServiceTests extends BaseTest{ + + @Test + public void getJournalByIssn() throws IOException { + OACoreService coreService = new OACoreService(readApiKey()); + Call request = coreService.getJournalsService().getJournal("1544-9173"); + JournalResponse journalResponse = request.execute().body(); + + assert journalResponse != null; + assert journalResponse.getStatus().equals("OK"); + + } + + @Test + public void getJournalsByIssn() throws IOException { + OACoreService coreService = new OACoreService(readApiKey()); + + List issnList = Arrays.asList("1544-9173", "1210-2512"); + + Call> request = coreService.getJournalsService().getJournals(issnList); + List journalResponse = request.execute().body(); + + assert journalResponse != null; + assert journalResponse.stream().allMatch(a -> a.getStatus().equals("OK")); + } + + @Test + public void searchJournalsSingleQuery() throws IOException { + OACoreService coreService = new OACoreService(readApiKey()); + Call request = coreService.getJournalsService().searchJournals("PLoS", 1, 10); + + JournalSearchResponse journalSearchResponse = request.execute().body(); + + assert journalSearchResponse != null; + assert journalSearchResponse.getStatus().equals("OK"); + } + + @Test + public void searchJournalsMultipleQueries() throws IOException { + OACoreService coreService = new OACoreService(readApiKey()); + + SearchRequest s1 = new SearchRequest(); + s1.setQuery("PLoS"); + s1.setPage(1); + s1.setPageSize(10); + + SearchRequest s2 = new SearchRequest(); + s2.setQuery("Radioengineering"); + s2.setPage(1); + s2.setPageSize(10); + + List searchRequestList = Arrays.asList(s1, s2); + + Call> request = coreService.getJournalsService().searchJournals(searchRequestList); + List journalSearchResponse = request.execute().body(); + + assert journalSearchResponse != null; + assert journalSearchResponse.stream().allMatch(a -> a.getStatus().equals("OK")); + } + +}