From 9ca226a0b8c4b1b026d76fb8068dbdabf98ee382 Mon Sep 17 00:00:00 2001 From: Antonis Lempesis Date: Tue, 9 Jul 2019 10:12:56 +0000 Subject: [PATCH] added a method to search registered repositories --- pom.xml | 35 ++++++++ .../controllers/RepositoryController.java | 17 ++++ .../repo/manager/domain/RequestFilter.java | 11 +++ .../manager/service/DashboardServiceImpl.java | 3 + .../manager/service/RepositoryService.java | 4 + .../service/RepositoryServiceImpl.java | 89 ++++++++++++++++--- 6 files changed, 148 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 7df06b4..a1daa72 100644 --- a/pom.xml +++ b/pom.xml @@ -246,6 +246,41 @@ 1.1.5.RELEASE + + + javax.xml.ws + jaxws-api + 2.3.0 + + + + javax.jws + javax.jws-api + 1.1 + + + javax.xml.bind + jaxb-api + 2.3.0 + + + com.sun.xml.bind + jaxb-impl + 2.3.0 + + + + com.sun.xml.bind + jaxb-core + 2.3.0 + + + javax.activation + activation + 1.1-rev-1 + + + diff --git a/src/main/java/eu/dnetlib/repo/manager/controllers/RepositoryController.java b/src/main/java/eu/dnetlib/repo/manager/controllers/RepositoryController.java index 3faf169..c2a191f 100644 --- a/src/main/java/eu/dnetlib/repo/manager/controllers/RepositoryController.java +++ b/src/main/java/eu/dnetlib/repo/manager/controllers/RepositoryController.java @@ -14,6 +14,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.*; +import javax.ws.rs.Path; import java.io.IOException; import java.util.List; import java.util.Map; @@ -51,6 +52,22 @@ public class RepositoryController { return repositoryService.getRepositoriesOfUser(userEmail, page, size); } + @RequestMapping(value = "/searchRegisteredRepositories/{page}/{size}",method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_ADMIN')") + public List searchRegisteredRepositories(@RequestParam("country") String country, + @RequestParam("typology") String typology, + @RequestParam("englishName") String englishName, + @RequestParam("officialName") String officialName, + @RequestParam("requestSortBy") String requestSortBy, + @RequestParam("order") String order, + @PathVariable("page)") int page, + @PathVariable("size") int pageSize) throws Exception { + + return repositoryService.searchRegisteredRepositories(country, typology, englishName, officialName, requestSortBy, order, page, pageSize); + } + @RequestMapping(value = "/getRepositoryById/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody diff --git a/src/main/java/eu/dnetlib/repo/manager/domain/RequestFilter.java b/src/main/java/eu/dnetlib/repo/manager/domain/RequestFilter.java index 6fc4108..ebb586e 100644 --- a/src/main/java/eu/dnetlib/repo/manager/domain/RequestFilter.java +++ b/src/main/java/eu/dnetlib/repo/manager/domain/RequestFilter.java @@ -10,9 +10,12 @@ public class RequestFilter{ private String country = null; private String id = null; private String officialname = null; + private String englishname = null; private String collectedfrom = null; + + public RequestFilter() { } @@ -64,4 +67,12 @@ public class RequestFilter{ public void setCollectedfrom(String collectedfrom) { this.collectedfrom = collectedfrom; } + + public String getEnglishname() { + return englishname; + } + + public void setEnglishname(String englishname) { + this.englishname = englishname; + } } diff --git a/src/main/java/eu/dnetlib/repo/manager/service/DashboardServiceImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/DashboardServiceImpl.java index 1fc5f38..e9259b5 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/DashboardServiceImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/DashboardServiceImpl.java @@ -10,11 +10,14 @@ import eu.dnetlib.repo.manager.shared.broker.BrowseEntry; import org.apache.log4j.Logger; import org.json.JSONException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.PathVariable; +import javax.xml.ws.ServiceMode; import java.util.ArrayList; import java.util.List; +@Service("dashboardService") public class DashboardServiceImpl implements DashboardService { private static final Logger logger = Logger.getLogger(DashboardServiceImpl.class); diff --git a/src/main/java/eu/dnetlib/repo/manager/service/RepositoryService.java b/src/main/java/eu/dnetlib/repo/manager/service/RepositoryService.java index ca1813e..341e85b 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/RepositoryService.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/RepositoryService.java @@ -32,6 +32,10 @@ public interface RepositoryService { String page, String size) throws JSONException; + List searchRegisteredRepositories(String country, String typology, String englishName, + String officialName, String requestSortBy, String order, + int page, int pageSize) throws Exception; + List getRepositoryInterface(String id) throws JSONException; Repository addRepository(String datatype, Repository repository) throws Exception; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/RepositoryServiceImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/RepositoryServiceImpl.java index 010b680..cf7abe6 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/RepositoryServiceImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/RepositoryServiceImpl.java @@ -3,15 +3,18 @@ package eu.dnetlib.repo.manager.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import eu.dnetlib.api.functionality.ValidatorServiceException; import eu.dnetlib.domain.data.Repository; import eu.dnetlib.domain.data.RepositoryInterface; import eu.dnetlib.domain.enabling.Vocabulary; +import eu.dnetlib.domain.functionality.validator.JobForValidation; import eu.dnetlib.repo.manager.domain.RepositorySnippet; import eu.dnetlib.repo.manager.domain.RequestFilter; import eu.dnetlib.repo.manager.exception.ResourceNotFoundException; import eu.dnetlib.repo.manager.shared.*; import eu.dnetlib.repo.manager.utils.Converter; import gr.uoa.di.driver.enabling.vocabulary.VocabularyLoader; +import gr.uoa.di.driver.xml.repository.INTERFACE; import org.apache.commons.codec.digest.DigestUtils; import org.apache.log4j.Logger; import org.json.JSONArray; @@ -46,6 +49,9 @@ public class RepositoryServiceImpl implements RepositoryService { @Value("${api.baseAddress}") private String baseAddress; + @Value("${services.repo-manager.adminEmail}") + private String adminEmail; + @Autowired RestTemplate restTemplate; @@ -70,6 +76,9 @@ public class RepositoryServiceImpl implements RepositoryService { @Autowired private EmailUtils emailUtils; + @Autowired + ValidatorService validatorService; + private Map vocabularyMap = new ConcurrentHashMap(); @@ -186,8 +195,35 @@ public class RepositoryServiceImpl implements RepositoryService { // emailUtils.reportException(e); throw e; } + } + public List searchRegisteredRepositories(String country, String typology, String englishName, + String officialName, String requestSortBy, String order, int page, int pageSize) throws Exception { + LOGGER.debug("Searching registered repositories"); + + List resultSet = new ArrayList<>(); + ObjectMapper mapper = new ObjectMapper(); + + UriComponents uriComponents = searchRegisteredDatasource(requestSortBy, order, Integer.toString(page), Integer.toString(pageSize)); + + RequestFilter requestFilter = new RequestFilter(); + requestFilter.setCountry(country); + requestFilter.setTypology(typology); + requestFilter.setOfficialname(officialName); + requestFilter.setEnglishname(englishName); + + try { + String rs = restTemplate.postForObject(uriComponents.toUri(),requestFilter, String.class); + JSONArray jsonArray = (JSONArray) new JSONObject(rs).get("datasourceInfo"); + + resultSet.addAll(mapper.readValue(String.valueOf(jsonArray), mapper.getTypeFactory().constructCollectionType(List.class, RepositorySnippet.class))); + + return resultSet; + }catch (Exception e){ + LOGGER.error("Error searching registered datasources" , e); + throw e; + } } private Repository updateRepositoryInfo(Repository r) throws JSONException { @@ -552,6 +588,38 @@ public class RepositoryServiceImpl implements RepositoryService { } } + @Override + public RepositoryInterface updateRepositoryInterface(@RequestParam("repoId") String repoId, + @RequestParam("registeredBy") String registeredBy, + @RequestBody RepositoryInterface repositoryInterface) throws Exception { + + this.updateBaseUrl(repoId,repositoryInterface.getId(),repositoryInterface.getBaseUrl()); + this.updateCompliance(repoId,repositoryInterface.getId(),repositoryInterface.getCompliance()); + this.updateValidationSet(repoId,repositoryInterface.getId(),repositoryInterface.getAccessSet()); + return repositoryInterface; + } + + private void submitInterfaceValidation(Repository repo, String repoType, String userEmail, RepositoryInterface iFace) throws ValidatorServiceException { + JobForValidation job = new JobForValidation(); + + job.setActivationId(UUID.randomUUID().toString()); + job.setAdminEmails(Collections.singletonList(this.adminEmail)); + job.setBaseUrl(iFace.getBaseUrl()); + job.setDatasourceId(repo.getId()); + job.setDesiredCompatibilityLevel(iFace.getDesiredCompatibilityLevel()); + job.setInterfaceId(iFace.getId()); +// job.setInterfaceIdOld(null); + job.setOfficialName(repo.getOfficialName()); + job.setRepoType(repoType); + job.setUserEmail(userEmail); + job.setValidationSet(iFace.getAccessSet()); + job.setRecords(-1); + job.setRegistration(true); + job.setUpdateExisting(false); + + this.validatorService.submitJobForValidation(job); + } + private RepositoryInterface createRepositoryInterface(Repository repo, RepositoryInterface iFace, String datatype) { iFace.setContentDescription("metadata"); @@ -752,17 +820,6 @@ public class RepositoryServiceImpl implements RepositoryService { return Collections.singletonMap("lastCollectionDate", getRepositoryInterface("openaire____::"+mode).get(1).getLastCollectionDate()); } - @Override - public RepositoryInterface updateRepositoryInterface(@RequestParam("repoId") String repoId, - @RequestParam("registeredBy") String registeredBy, - @RequestBody RepositoryInterface repositoryInterface) throws Exception { - - this.updateBaseUrl(repoId,repositoryInterface.getId(),repositoryInterface.getBaseUrl()); - this.updateCompliance(repoId,repositoryInterface.getId(),repositoryInterface.getCompliance()); - this.updateValidationSet(repoId,repositoryInterface.getId(),repositoryInterface.getAccessSet()); - return repositoryInterface; - } - private void updateValidationSet(String repositoryId, String repositoryInterfaceId, String validationSet) throws Exception { UriComponents uriComponents = UriComponentsBuilder .fromHttpUrl(baseAddress + "/ds/api/oaiset") @@ -850,6 +907,16 @@ public class RepositoryServiceImpl implements RepositoryService { .build().expand(page, size).encode(); } + private UriComponents searchRegisteredDatasource(String requestSortBy, String order, String page,String size){ + + return UriComponentsBuilder + .fromHttpUrl(baseAddress + "/ds/searchregistered/") + .path("/{page}/{size}/") + .queryParam("requestSortBy",requestSortBy) + .queryParam("order",order) + .build().expand(page, size).encode(); + } + private String getRepositoryType(String typology){ return invertedDataSourceClass.get(typology); }