diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApi.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApi.java index 242a8cd..77860ff 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApi.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApi.java @@ -2,15 +2,15 @@ package eu.dnetlib.repo.manager.service.controllers; import eu.dnetlib.domain.data.Repository; import eu.dnetlib.domain.data.RepositoryInterface; +import eu.dnetlib.repo.manager.service.domain.RepositorySnippet; import eu.dnetlib.repo.manager.service.exception.ResourceNotFoundException; import eu.dnetlib.repo.manager.shared.*; import io.swagger.annotations.Api; import org.json.JSONException; import org.springframework.http.MediaType; -import org.springframework.security.access.prepost.PostAuthorize; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -27,7 +27,7 @@ public interface RepositoryApi { @RequestMapping(value = "/getRepositoriesByCountry/{country}/{mode}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody - List getRepositoriesByCountry(String country, String mode, Boolean managed) throws JSONException; + List getRepositoriesByCountry(String country, String mode, Boolean managed) throws JSONException, IOException; @RequestMapping(value = "/getRepositoriesOfUser/{userEmail}/{page}/{size}",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApiImpl.java index 4fcc25a..792d9d7 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApiImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApiImpl.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.SerializationFeature; import eu.dnetlib.domain.data.Repository; import eu.dnetlib.domain.data.RepositoryInterface; import eu.dnetlib.domain.enabling.Vocabulary; +import eu.dnetlib.repo.manager.service.domain.RepositorySnippet; import eu.dnetlib.repo.manager.service.domain.RequestFilter; import eu.dnetlib.repo.manager.service.exception.ResourceNotFoundException; import eu.dnetlib.repo.manager.service.utils.Converter; @@ -35,6 +36,7 @@ import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; import javax.annotation.PostConstruct; +import java.io.IOException; import java.sql.Timestamp; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -143,16 +145,16 @@ public class RepositoryApiImpl implements RepositoryApi { @Override - public List getRepositoriesByCountry(@PathVariable("country") String country, - @PathVariable("mode") String mode, - @RequestParam(value = "managed",required=false) Boolean managed) throws JSONException { + public List getRepositoriesByCountry(@PathVariable("country") String country, + @PathVariable("mode") String mode, + @RequestParam(value = "managed",required=false) Boolean managed) throws JSONException, IOException { LOGGER.debug("Getting repositories by country!"); int page = 0; int size = 100; - List resultSet = new ArrayList<>(); + List resultSet = new ArrayList<>(); + ObjectMapper mapper = new ObjectMapper(); - String countryCode = countriesMap.get(country); String filterKey = "UNKNOWN"; if (mode.equalsIgnoreCase("opendoar")) filterKey = "openaire____::opendoar"; @@ -160,30 +162,29 @@ public class RepositoryApiImpl implements RepositoryApi { filterKey = "openaire____::re3data"; - LOGGER.debug("Country code equals : " + countryCode); + LOGGER.debug("Country code equals : " + country); LOGGER.debug("Filter mode equals : " + filterKey); - UriComponents uriComponents = searchDatasource(String.valueOf(page),String.valueOf(size)); + UriComponents uriComponents = searchSnipperDatasource(String.valueOf(page),String.valueOf(size)); RequestFilter requestFilter = new RequestFilter(); - requestFilter.setCountry(countryCode); + requestFilter.setCountry(country); + requestFilter.setCollectedfrom(filterKey); try{ String rs = restTemplate.postForObject(uriComponents.toUri(),requestFilter, String.class); JSONArray jsonArray = (JSONArray) new JSONObject(rs).get("datasourceInfo"); while (jsonArray.length() > 0 ) { - resultSet.addAll(this.getRepositoriesByMode(filterKey, Converter.jsonToRepositoryList(new JSONObject(rs)))); + resultSet.addAll(mapper.readValue(String.valueOf(jsonArray), + mapper.getTypeFactory().constructCollectionType(List.class, RepositorySnippet.class))); page += 1; - uriComponents = searchDatasource(String.valueOf(page),String.valueOf(size)); + uriComponents = searchSnipperDatasource(String.valueOf(page),String.valueOf(size)); rs = restTemplate.postForObject(uriComponents.toUri(),requestFilter, String.class); jsonArray = (JSONArray) new JSONObject(rs).get("datasourceInfo"); } - for (Repository r : resultSet) - this.updateRepositoryInfo(r); - return resultSet; }catch (Exception e){ LOGGER.debug("Exception on getRepositoriesByCountry" , e); - emailUtils.reportException(e); +// emailUtils.reportException(e); throw e; } @@ -794,7 +795,17 @@ public class RepositoryApiImpl implements RepositoryApi { return UriComponentsBuilder .fromHttpUrl(baseAddress + "/ds/search/") .path("/{page}/{size}/") - .queryParam("requestSortBy","id") + .queryParam("requestSortBy","officialname") + .queryParam("order","ASCENDING") + .build().expand(page, size).encode(); + } + + private UriComponents searchSnipperDatasource(String page,String size){ + + return UriComponentsBuilder + .fromHttpUrl(baseAddress + "/ds/searchsnippet/") + .path("/{page}/{size}/") + .queryParam("requestSortBy","officialname") .queryParam("order","ASCENDING") .build().expand(page, size).encode(); } diff --git a/src/main/java/eu/dnetlib/repo/manager/service/domain/RepositorySnippet.java b/src/main/java/eu/dnetlib/repo/manager/service/domain/RepositorySnippet.java new file mode 100644 index 0000000..4d8bae7 --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/service/domain/RepositorySnippet.java @@ -0,0 +1,55 @@ +package eu.dnetlib.repo.manager.service.domain; + +import com.google.gwt.user.client.rpc.IsSerializable; + +public class RepositorySnippet implements IsSerializable { + + private String id; + private String officialname; + private String englishname; + private String websiteurl; + private String registeredby; + + + public RepositorySnippet() {} + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getOfficialname() { + return officialname; + } + + public void setOfficialname(String officialname) { + this.officialname = officialname; + } + + public String getEnglishname() { + return englishname; + } + + public void setEnglishname(String englishname) { + this.englishname = englishname; + } + + public String getWebsiteurl() { + return websiteurl; + } + + public void setWebsiteurl(String websiteurl) { + this.websiteurl = websiteurl; + } + + public String getRegisteredby() { + return registeredby; + } + + public void setRegisteredby(String registeredby) { + this.registeredby = registeredby; + } +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/domain/RequestFilter.java b/src/main/java/eu/dnetlib/repo/manager/service/domain/RequestFilter.java index e507d85..c053c52 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/domain/RequestFilter.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/domain/RequestFilter.java @@ -10,6 +10,7 @@ public class RequestFilter{ private String country = null; private String id = null; private String officialname = null; + private String collectedfrom = null; public RequestFilter() { @@ -55,4 +56,12 @@ public class RequestFilter{ public void setOfficialname(String officialname) { this.officialname = officialname; } + + public String getCollectedfrom() { + return collectedfrom; + } + + public void setCollectedfrom(String collectedfrom) { + this.collectedfrom = collectedfrom; + } } diff --git a/src/main/java/eu/dnetlib/repo/manager/service/utils/Converter.java b/src/main/java/eu/dnetlib/repo/manager/service/utils/Converter.java index d8fa789..afd8168 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/utils/Converter.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/utils/Converter.java @@ -3,6 +3,7 @@ package eu.dnetlib.repo.manager.service.utils; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.domain.data.Repository; import eu.dnetlib.domain.data.RepositoryInterface; +import eu.dnetlib.repo.manager.service.domain.RepositorySnippet; import eu.dnetlib.repo.manager.shared.AggregationDetails; import eu.dnetlib.repo.manager.shared.Timezone; import org.apache.commons.codec.digest.DigestUtils; @@ -134,6 +135,41 @@ public class Converter { return Double.valueOf(number); } + public static List jsonToRepositorySnippetList(JSONObject json) throws JSONException { + + List resultSet = new ArrayList<>(); + JSONArray rs = json.getJSONArray("datasourceInfo"); + for(int i=0;i jsonToRepositoryList(JSONObject json) throws JSONException { List resultSet = new ArrayList<>(); @@ -247,7 +283,7 @@ public class Converter { jsonObject.put("datauploadtype",repository.getDataUploadType()); jsonObject.put("missionstatementurl",repository.getMissionStatementUrl()); jsonObject.put("od_contenttypes",repository.getOdContentTypes()); - jsonObject.put("officialname",repository.getOfficialName()); + jsonObject.put("officialname",repository.getOfficialname()); jsonObject.put("pidsystems",repository.getPidSystems()); jsonObject.put("provenanceaction",repository.getProvenanceActionClass()); jsonObject.put("qualitymanagementkind",repository.getQualityManagementKind()); @@ -374,4 +410,5 @@ public class Converter { return repositoryId.split("::")[0] + "::" + DigestUtils.md5Hex(repositoryId.split("::")[1]); return null; } + } \ No newline at end of file