diff --git a/src/main/java/eu/dnetlib/repo/manager/service/config/CascadingPropertyLoader.java b/src/main/java/eu/dnetlib/repo/manager/config/CascadingPropertyLoader.java similarity index 96% rename from src/main/java/eu/dnetlib/repo/manager/service/config/CascadingPropertyLoader.java rename to src/main/java/eu/dnetlib/repo/manager/config/CascadingPropertyLoader.java index 2457d41..019f42a 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/config/CascadingPropertyLoader.java +++ b/src/main/java/eu/dnetlib/repo/manager/config/CascadingPropertyLoader.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.config; +package eu.dnetlib.repo.manager.config; import org.springframework.beans.BeansException; import org.springframework.beans.factory.InitializingBean; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/config/Config.java b/src/main/java/eu/dnetlib/repo/manager/config/Config.java similarity index 94% rename from src/main/java/eu/dnetlib/repo/manager/service/config/Config.java rename to src/main/java/eu/dnetlib/repo/manager/config/Config.java index 1ff850d..529b523 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/config/Config.java +++ b/src/main/java/eu/dnetlib/repo/manager/config/Config.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.config; +package eu.dnetlib.repo.manager.config; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Value; @@ -16,7 +16,7 @@ import javax.annotation.PostConstruct; @Configuration @EnableRedisHttpSession @PropertySource(value = {"classpath:application.properties"} ) -@ComponentScan(basePackages = "eu.dnetlib.repo.manager.service.controllers") +@ComponentScan(basePackages = "eu.dnetlib.repo.manager.controllers") public class Config { diff --git a/src/main/java/eu/dnetlib/repo/manager/service/config/FrontEndLinkURIAuthenticationSuccessHandler.java b/src/main/java/eu/dnetlib/repo/manager/config/FrontEndLinkURIAuthenticationSuccessHandler.java similarity index 98% rename from src/main/java/eu/dnetlib/repo/manager/service/config/FrontEndLinkURIAuthenticationSuccessHandler.java rename to src/main/java/eu/dnetlib/repo/manager/config/FrontEndLinkURIAuthenticationSuccessHandler.java index d84fdf1..c0ab9ba 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/config/FrontEndLinkURIAuthenticationSuccessHandler.java +++ b/src/main/java/eu/dnetlib/repo/manager/config/FrontEndLinkURIAuthenticationSuccessHandler.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.config; +package eu.dnetlib.repo.manager.config; import com.google.gson.JsonObject; import org.apache.log4j.Logger; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/config/OpenAireProviderAuthoritiesMapper.java b/src/main/java/eu/dnetlib/repo/manager/config/OpenAireProviderAuthoritiesMapper.java similarity index 97% rename from src/main/java/eu/dnetlib/repo/manager/service/config/OpenAireProviderAuthoritiesMapper.java rename to src/main/java/eu/dnetlib/repo/manager/config/OpenAireProviderAuthoritiesMapper.java index 6218cdf..16c98cf 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/config/OpenAireProviderAuthoritiesMapper.java +++ b/src/main/java/eu/dnetlib/repo/manager/config/OpenAireProviderAuthoritiesMapper.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.config; +package eu.dnetlib.repo.manager.config; import com.nimbusds.jwt.JWT; import org.mitre.openid.connect.client.OIDCAuthoritiesMapper; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/config/RepoManagerContextLoaderListener.java b/src/main/java/eu/dnetlib/repo/manager/config/RepoManagerContextLoaderListener.java similarity index 98% rename from src/main/java/eu/dnetlib/repo/manager/service/config/RepoManagerContextLoaderListener.java rename to src/main/java/eu/dnetlib/repo/manager/config/RepoManagerContextLoaderListener.java index 261d474..ed14f18 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/config/RepoManagerContextLoaderListener.java +++ b/src/main/java/eu/dnetlib/repo/manager/config/RepoManagerContextLoaderListener.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.config; +package eu.dnetlib.repo.manager.config; import org.apache.commons.lang.ArrayUtils; import org.apache.log4j.Logger; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/config/SwaggerConfig.java b/src/main/java/eu/dnetlib/repo/manager/config/SwaggerConfig.java similarity index 85% rename from src/main/java/eu/dnetlib/repo/manager/service/config/SwaggerConfig.java rename to src/main/java/eu/dnetlib/repo/manager/config/SwaggerConfig.java index 445fdbe..0078c4f 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/config/SwaggerConfig.java +++ b/src/main/java/eu/dnetlib/repo/manager/config/SwaggerConfig.java @@ -1,9 +1,9 @@ -package eu.dnetlib.repo.manager.service.config; +package eu.dnetlib.repo.manager.config; -import eu.dnetlib.repo.manager.service.controllers.MonitorApi; -import eu.dnetlib.repo.manager.service.controllers.PiWikApi; -import eu.dnetlib.repo.manager.service.controllers.RepositoryApi; -import eu.dnetlib.repo.manager.service.controllers.ValidatorApi; +import eu.dnetlib.repo.manager.service.MonitorApi; +import eu.dnetlib.repo.manager.service.PiWikApi; +import eu.dnetlib.repo.manager.service.RepositoryApi; +import eu.dnetlib.repo.manager.service.ValidatorApi; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -16,6 +16,7 @@ import springfox.documentation.service.VendorExtension; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; + import java.util.ArrayList; diff --git a/src/main/java/eu/dnetlib/repo/manager/controllers/BrokerController.java b/src/main/java/eu/dnetlib/repo/manager/controllers/BrokerController.java new file mode 100644 index 0000000..a2806c3 --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/controllers/BrokerController.java @@ -0,0 +1,134 @@ +package eu.dnetlib.repo.manager.controllers; + +import eu.dnetlib.repo.manager.service.BrokerApiImpl; +import eu.dnetlib.repo.manager.shared.BrokerException; +import eu.dnetlib.repo.manager.shared.Term; +import eu.dnetlib.repo.manager.shared.broker.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiParam; +import org.json.JSONException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +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; + +@RestController +@RequestMapping(value = "/broker") +@Api(description = "Broker API", tags = {"broker"}) +public class BrokerController{ + + @Autowired + BrokerApiImpl brokerApi; + + + @RequestMapping(value = "/getDatasourcesOfUser" , method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER')") + DatasourcesBroker getDatasourcesOfUser(@RequestParam("user") + @ApiParam(value = "User email", required = true) String user, + @RequestParam("includeShared") + @ApiParam(value = "Include shared datasources", required = true , defaultValue = "false") String includeShared, + @RequestParam("includeByOthers") + @ApiParam(value = "Include datasources of other", required = true,defaultValue = "false") String includeByOthers) throws JSONException { + return brokerApi.getDatasourcesOfUser(user, includeShared, includeByOthers); + } + + @RequestMapping(value = "/getTopicsForDatasource/{datasourceName:.+}" , + method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + List getTopicsForDatasource(@PathVariable("datasourceName") String datasourceName) throws BrokerException{ + return brokerApi.getTopicsForDatasource(datasourceName); + } + + @RequestMapping(value = "/advancedShowEvents/{page}/{size}" , + method = RequestMethod.POST, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER')") + EventsPage advancedShowEvents(@PathVariable("page") String page, + @PathVariable("size") String size, + @RequestBody AdvQueryObject advQueryObject) throws BrokerException, JSONException ,IOException{ + return brokerApi.advancedShowEvents(page, size, advQueryObject); + } + + @RequestMapping(value = "/showEvents/{datasourceName:.+}/{topic}/{page}" , + method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER')") + EventsPage showEvents(@RequestParam("datasourceName") String datasourceName, + @RequestParam("topic") String topic, + @RequestParam("page") String page, + @RequestParam("size") String size) throws BrokerException, JSONException{ + return brokerApi.showEvents(datasourceName, topic, page, size); + } + + @RequestMapping(value = "/getSimpleSubscriptionsOfUser/{userEmail}" , + method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER')") + Map> getSimpleSubscriptionsOfUser(@PathVariable("userEmail") String userEmail) throws BrokerException{ + return brokerApi.getSimpleSubscriptionsOfUser(userEmail); + } + + @RequestMapping(value = "/subscribe" , method = RequestMethod.POST, + consumes = MediaType.APPLICATION_JSON_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER') ") + Subscription subscribe(@RequestBody OpenaireSubscription obj) throws BrokerException{ + return brokerApi.subscribe(obj); + } + + @RequestMapping(value = "/unsubscribe/{subscriptionId}" , method = RequestMethod.POST, + consumes = MediaType.APPLICATION_JSON_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER')") + ResponseEntity unsubscribe(@PathVariable("subscriptionId") String subscriptionId) throws BrokerException{ + return brokerApi.unsubscribe(subscriptionId); + } + + @RequestMapping(value = "/getSubscription/{subscriptionId}" , method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER')") + Subscription getSubscription(@PathVariable("subscriptionId") String subscriptionId) throws BrokerException{ + return brokerApi.getSubscription(subscriptionId); + } + + + @RequestMapping(value = "/getDnetTopics" , method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + Map getDnetTopics() throws BrokerException{ + return brokerApi.getDnetTopics(); + } + + @RequestMapping(value = "/getNotificationsBySubscriptionId/{subscriptionId}/{page}/{size}" , method = RequestMethod.GET + ,produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER')") + EventsPage getNotificationsBySubscriptionId(@PathVariable("subscriptionId") String subscriptionId, + @PathVariable("page") String page, + @PathVariable("size") String size) throws BrokerException{ + return brokerApi.getNotificationsBySubscriptionId(subscriptionId, page, size); + } + + /*@RequestMapping(value = "/getSubscriptionsOfUser/{userEmail}" , method = RequestMethod.GET + ,produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody*/ + Map> getSubscriptionsOfUser(String userEmail) throws BrokerException{ + return brokerApi.getSubscriptionsOfUser(userEmail); + } + + +} diff --git a/src/main/java/eu/dnetlib/repo/manager/controllers/GenericControllerAdvice.java b/src/main/java/eu/dnetlib/repo/manager/controllers/GenericControllerAdvice.java new file mode 100644 index 0000000..f02f0b2 --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/controllers/GenericControllerAdvice.java @@ -0,0 +1,65 @@ +package eu.dnetlib.repo.manager.controllers; + + +import eu.dnetlib.api.functionality.ValidatorServiceException; +import eu.dnetlib.repo.manager.exception.EndPointException; +import eu.dnetlib.repo.manager.exception.ResourceNotFoundException; +import eu.dnetlib.repo.manager.exception.ServerError; +import eu.dnetlib.repo.manager.shared.BrokerException; +import org.apache.log4j.LogManager; +import org.apache.log4j.Logger; +import org.json.JSONException; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpStatus; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.net.UnknownHostException; + + +@ControllerAdvice +@Order(Ordered.HIGHEST_PRECEDENCE) +public class GenericControllerAdvice { + + private Logger logger = LogManager.getLogger(GenericControllerAdvice.class); + + + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(ResourceNotFoundException.class) + @ResponseBody + ServerError securityException(HttpServletRequest req, Exception ex) { + return new ServerError(req.getRequestURL().toString(),ex); + } + + @ResponseStatus(HttpStatus.FORBIDDEN) + @ExceptionHandler(AccessDeniedException.class) + @ResponseBody + ServerError accessDeniedException(HttpServletRequest req, Exception ex) { + return new ServerError(req.getRequestURL().toString(),ex); + } + + @ResponseStatus(HttpStatus.NOT_FOUND) + @ExceptionHandler(UnknownHostException.class) + @ResponseBody + ServerError unknownHostException(HttpServletRequest req, Exception ex) { + return new ServerError(req.getRequestURL().toString(),ex); + } + + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + @ExceptionHandler({JSONException.class,BrokerException.class,ValidatorServiceException.class}) + @ResponseBody + ServerError internalException(HttpServletRequest req, Exception ex) { + return new ServerError(req.getRequestURL().toString(),ex); + } + + @ResponseStatus(HttpStatus.GATEWAY_TIMEOUT) + @ExceptionHandler(EndPointException.class) + @ResponseBody + ServerError endPointException(HttpServletRequest req, Exception ex) { + return new ServerError(req.getRequestURL().toString(),ex); + } + + +} diff --git a/src/main/java/eu/dnetlib/repo/manager/controllers/MonitorController.java b/src/main/java/eu/dnetlib/repo/manager/controllers/MonitorController.java new file mode 100644 index 0000000..1f88493 --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/controllers/MonitorController.java @@ -0,0 +1,60 @@ +package eu.dnetlib.repo.manager.controllers; + +import eu.dnetlib.api.functionality.ValidatorServiceException; +import eu.dnetlib.domain.functionality.validator.StoredJob; +import eu.dnetlib.repo.manager.service.MonitorApiImpl; +import eu.dnetlib.repo.manager.shared.JobsOfUser; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiParam; +import org.apache.log4j.Logger; +import org.json.JSONException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping(value = "/monitor") +@Api(description = "Monitor API", tags = {"monitor"}) +public class MonitorController { + + private static final Logger LOGGER = Logger + .getLogger(MonitorController.class); + + @Autowired + MonitorApiImpl monitorApi; + + @RequestMapping(value = "/getJobsOfUser" , method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER')") + public JobsOfUser getJobsOfUser(@RequestParam("user") @ApiParam(value = "User email", required = true) String user, + @RequestParam(value = "jobType", required = false) + @ApiParam(value = "Equals to filter job type on validation history page") String jobType, + @RequestParam("offset") @ApiParam(value = "Page number", required = true) String offset, + @RequestParam(value = "limit", required = false,defaultValue = "10") @ApiParam(value = "Null value") String limit, + @RequestParam(value = "dateFrom", required = false) @ApiParam(value = "Null value") String dateFrom, + @RequestParam(value = "dateTo", required = false) @ApiParam(value = "Null value") String dateTo, + @RequestParam("validationStatus") @ApiParam(value = "Equals to filter validation jobs", required = false) String validationStatus, + @RequestParam("includeJobsTotal") @ApiParam(value = "Always true", required = true) String includeJobsTotal) throws JSONException, ValidatorServiceException { + + return monitorApi.getJobsOfUser(user, jobType, offset, limit, dateFrom, dateTo, validationStatus, includeJobsTotal); + } + + @RequestMapping(value = "/getJobsOfUserPerValidationStatus" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER')") + public int getJobsOfUserPerValidationStatus(@RequestBody String user, + @RequestBody String jobType, + @RequestBody String validationStatus) throws JSONException { + return monitorApi.getJobsOfUserPerValidationStatus(user, jobType, validationStatus); + } + + @RequestMapping(value = "/getJobSummary" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public StoredJob getJobSummary(@RequestBody String jobId, + @RequestBody String groupBy) throws JSONException { + return monitorApi.getJobSummary(jobId, groupBy); + } + +} diff --git a/src/main/java/eu/dnetlib/repo/manager/controllers/PiWikController.java b/src/main/java/eu/dnetlib/repo/manager/controllers/PiWikController.java new file mode 100644 index 0000000..e2a5600 --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/controllers/PiWikController.java @@ -0,0 +1,90 @@ +package eu.dnetlib.repo.manager.controllers; + +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.domain.data.PiwikInfo; +import eu.dnetlib.repo.manager.service.PiWikApiImpl; +import eu.dnetlib.repo.manager.shared.RepositoryServiceException; +import io.swagger.annotations.Api; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.*; + +import javax.sql.DataSource; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URL; +import java.net.URLEncoder; +import java.sql.Types; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping(value = "/piwik") +@Api(description = "Piwik API", tags = {"piwik"}) +public class PiWikController { + + @Autowired + PiWikApiImpl piWikApi; + + + @RequestMapping(value = "/getPiwikSiteForRepo/{repositoryId}" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public PiwikInfo getPiwikSiteForRepo(@PathVariable("repositoryId") String repositoryId) { + return piWikApi.getPiwikSiteForRepo(repositoryId); + } + + @RequestMapping(value = "/savePiwikInfo" , method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE) + @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PORTAL_ADMIN') or (hasRole('ROLE_USER') " + + "and #piwikInfo.requestorEmail == authentication.userInfo.email)") + public PiwikInfo savePiwikInfo(@RequestBody PiwikInfo piwikInfo) { + return piWikApi.savePiwikInfo(piwikInfo); + } + + @RequestMapping(value = "/getPiwikSitesForRepos" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) + List getPiwikSitesForRepos(){ + return piWikApi.getPiwikSitesForRepos(); + } + + @RequestMapping(value = "/approvePiwikSite/{repositoryId}" , method = RequestMethod.GET) + @ResponseBody + @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PORTAL_ADMIN')") + public ResponseEntity approvePiwikSite(@PathVariable("repositoryId") String repositoryId) { + return piWikApi.approvePiwikSite(repositoryId); + } + + @RequestMapping(value = "/getOpenaireId/{repositoryId}" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + String getOpenaireId(String repositoryid){ + return piWikApi.getOpenaireId(repositoryid); + } + + @RequestMapping(value = "/markPiwikSiteAsValidated/{repositoryId}" , method = RequestMethod.POST, + consumes = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PORTAL_ADMIN')") + public ResponseEntity markPiwikSiteAsValidated(@PathVariable("repositoryId") String repositoryId) throws RepositoryServiceException { + return piWikApi.markPiwikSiteAsValidated(repositoryId); + } + + @RequestMapping(value = "/enableMetricsForRepository", method = RequestMethod.POST, + consumes = MediaType.APPLICATION_JSON_VALUE) + @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PORTAL_ADMIN') or (hasRole('ROLE_USER') and #piwikInfo.requestorEmail == authentication.userInfo.email)") + public PiwikInfo enableMetricsForRepository(@RequestParam("officialName") String officialName, + @RequestParam("repoWebsite") String repoWebsite, + @RequestBody PiwikInfo piwikInfo) throws RepositoryServiceException { + return piWikApi.enableMetricsForRepository(officialName, repoWebsite, piwikInfo); + } + + +} diff --git a/src/main/java/eu/dnetlib/repo/manager/controllers/RepositoryController.java b/src/main/java/eu/dnetlib/repo/manager/controllers/RepositoryController.java new file mode 100644 index 0000000..5fdc0f8 --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/controllers/RepositoryController.java @@ -0,0 +1,203 @@ +package eu.dnetlib.repo.manager.controllers; + +import eu.dnetlib.domain.data.Repository; +import eu.dnetlib.domain.data.RepositoryInterface; +import eu.dnetlib.repo.manager.domain.RepositorySnippet; +import eu.dnetlib.repo.manager.exception.ResourceNotFoundException; +import eu.dnetlib.repo.manager.service.RepositoryApiImpl; +import eu.dnetlib.repo.manager.shared.*; +import io.swagger.annotations.Api; +import org.json.JSONException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.Authentication; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping(value = "/repository") +@Api(description = "Repository API", tags = {"repository"}) +public class RepositoryController { + + @Autowired + RepositoryApiImpl repositoryApi; + + @RequestMapping(value = "/getCountries", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public Country[] getCountries() { + return repositoryApi.getCountries(); + } + + @RequestMapping(value = "/getRepositoriesByCountry/{country}/{mode}", method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public List getRepositoriesByCountry(@PathVariable("country") String country, + @PathVariable("mode") String mode, + @RequestParam(value = "managed",required=false) Boolean managed) throws JSONException, IOException { + return repositoryApi.getRepositoriesByCountry(country, mode, managed); + } + + @RequestMapping(value = "/getRepositoriesOfUser/{userEmail}/{page}/{size}",method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER')") + public List getRepositoriesOfUser(@PathVariable("userEmail") String userEmail, + @PathVariable("page") String page, + @PathVariable("size") String size) throws JSONException { + return repositoryApi.getRepositoriesOfUser(userEmail, page, size); + } + + @RequestMapping(value = "/getRepositoryById/{id}", method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public Repository getRepositoryById(@PathVariable("id") String id) throws JSONException,ResourceNotFoundException { + return repositoryApi.getRepositoryById(id); + } + + @RequestMapping(value = "/getRepositoryAggregations/{id}", method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public List getRepositoryAggregations(@PathVariable("id") String id) throws JSONException { + return repositoryApi.getRepositoryAggregations(id); + } + + @RequestMapping(value = "/getRepositoryAggregationsByYear/{id}", method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public Map> getRepositoryAggregationsByYear(@PathVariable("id") String id) throws JSONException { + return repositoryApi.getRepositoryAggregationsByYear(id); + } + + @RequestMapping(value = "/getRepositoriesByName/{name:.+}/{page}/{size}/", method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public List getRepositoriesByName(@PathVariable("name") String name, + @PathVariable("page") String page, + @PathVariable("size") String size) throws JSONException { + return repositoryApi.getRepositoriesByName(name, page, size); + } + + @RequestMapping(value = "/getRepositoryInterface/{id}", method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public List getRepositoryInterface(@PathVariable("id") String id) throws JSONException { + return repositoryApi.getRepositoryInterface(id); + } + + @RequestMapping(value = "/addRepository", method = RequestMethod.POST, + consumes = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER') and #repository.registeredBy == authentication.userInfo.email") + public Repository addRepository(@RequestParam("datatype") String datatype, + @RequestBody Repository repository) throws Exception { + + return repositoryApi.addRepository(datatype, repository); + } + + @RequestMapping(value = "/getDnetCountries", method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + List getDnetCountries(){ + return repositoryApi.getDnetCountries(); + } + + @RequestMapping(value = "/getTypologies", method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + List getTypologies(){ + return repositoryApi.getTypologies(); + } + + @RequestMapping(value = "/getTimezones", method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + List getTimezones(){ + return repositoryApi.getTimezones(); + } + + @RequestMapping(value = "/updateRepository", method = RequestMethod.POST, + consumes = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + //@PreAuthorize("hasRole('ROLE_USER') and #repository.registeredBy == authentication.userInfo.email") + public Repository updateRepository(@RequestBody Repository repository,Authentication authentication) throws Exception { + return repositoryApi.updateRepository(repository, authentication); + } + + @RequestMapping(value = "/deleteInterface/", method = RequestMethod.DELETE) + @PreAuthorize("hasRole('ROLE_USER') and #registeredBy == authentication.userInfo.email") + public void deleteRepositoryInterface(@RequestParam("id") String id , + @RequestParam("registeredBy") String registeredBy){ + repositoryApi.deleteRepositoryInterface(id, registeredBy); + } + + @RequestMapping(value = "/addInterface", method = RequestMethod.POST, + consumes = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER') and #registeredBy == authentication.userInfo.email") + public RepositoryInterface addRepositoryInterface(@RequestParam("datatype") String datatype, + @RequestParam("repoId") String repoId, + @RequestParam("registeredBy") String registeredBy, + @RequestBody RepositoryInterface repositoryInterface) throws JSONException,ResourceNotFoundException { + return repositoryApi.addRepositoryInterface(datatype, repoId, registeredBy, repositoryInterface); + } + + @RequestMapping(value = "/getUrlsOfUserRepos/{user_email}/{page}/{size}/",method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER')") + public List getUrlsOfUserRepos(@PathVariable("user_email") String userEmail, + @PathVariable("page") String page, + @PathVariable("size") String size) throws JSONException { + return repositoryApi.getUrlsOfUserRepos(userEmail, page, size); + } + + @RequestMapping(value = "/getDatasourceVocabularies/{mode}",method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public List getDatasourceVocabularies(@PathVariable("mode") String mode) { + return repositoryApi.getDatasourceVocabularies(mode); + } + + @RequestMapping(value = "/getCompatibilityClasses/{mode}",method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public Map getCompatibilityClasses(@PathVariable("mode") String mode) { + + return repositoryApi.getCompatibilityClasses(mode); + } + + @RequestMapping(value = "/getDatasourceClasses/{mode}",method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public Map getDatasourceClasses(@PathVariable("mode") String mode) { + return repositoryApi.getDatasourceClasses(mode); + } + + @RequestMapping(value = "/getMetricsInfoForRepository/{repoId}",method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public MetricsInfo getMetricsInfoForRepository(@PathVariable("repoId") String repoId) throws RepositoryServiceException { + return repositoryApi.getMetricsInfoForRepository(repoId); + } + + @RequestMapping(value = "/getListLatestUpdate/{mode}",method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public Map getListLatestUpdate(@PathVariable("mode") String mode) throws JSONException { + return repositoryApi.getListLatestUpdate(mode); + } + + @RequestMapping(value = "/updateRepositoryInterface", method = RequestMethod.POST, + consumes = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER') and #registeredBy == authentication.userInfo.email") + public RepositoryInterface updateRepositoryInterface(@RequestParam("repoId") String repoId, + @RequestParam("registeredBy") String registeredBy, + @RequestBody RepositoryInterface repositoryInterface) throws JSONException { + return repositoryApi.updateRepositoryInterface(repoId, registeredBy, repositoryInterface); + } +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApi.java b/src/main/java/eu/dnetlib/repo/manager/controllers/StatsController.java similarity index 64% rename from src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApi.java rename to src/main/java/eu/dnetlib/repo/manager/controllers/StatsController.java index adbea81..65da3ae 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApi.java +++ b/src/main/java/eu/dnetlib/repo/manager/controllers/StatsController.java @@ -1,7 +1,9 @@ -package eu.dnetlib.repo.manager.service.controllers; +package eu.dnetlib.repo.manager.controllers; +import eu.dnetlib.repo.manager.service.StatsApiImpl; import io.swagger.annotations.Api; import org.json.JSONException; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -13,14 +15,15 @@ import java.util.Map; @RestController @RequestMapping(value = "/stats") @Api(description = "Stats API", tags = {"statistics"}) -public interface StatsApi { +public class StatsController { + @Autowired + StatsApiImpl statsApi; @RequestMapping(value = "/getStatistics" , method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody - Map getStatistics() throws JSONException; - - - + public Map getStatistics() throws JSONException { + return statsApi.getStatistics(); + } } diff --git a/src/main/java/eu/dnetlib/repo/manager/controllers/SushiliteController.java b/src/main/java/eu/dnetlib/repo/manager/controllers/SushiliteController.java new file mode 100644 index 0000000..7450237 --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/controllers/SushiliteController.java @@ -0,0 +1,52 @@ +package eu.dnetlib.repo.manager.controllers; + +import eu.dnetlib.repo.manager.service.SushiliteApiImpl; +import eu.dnetlib.usagestats.sushilite.domain.ReportItem; +import eu.dnetlib.usagestats.sushilite.domain.ReportResponseWrapper; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import java.util.ArrayList; +import java.util.List; + +@RestController +@RequestMapping(value = "/sushilite") +@Api(description = "Sushi-Lite API", tags = {"sushilite"}) +public class SushiliteController { + + + @Autowired + SushiliteApiImpl sushiliteApi; + + @RequestMapping(value = "/getReportResults/{page}/{pageSize}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER')") + public ReportResponseWrapper getReportResults(@PathVariable("page") String page, + @PathVariable("pageSize") String pageSize, + @RequestParam(value = "Report") String Report, + @RequestParam(value = "Release",defaultValue="4") String Release, + @RequestParam(value = "RequestorID",required=false,defaultValue="anonymous") String RequestorID, + @RequestParam(value = "BeginDate",required=false,defaultValue="") String BeginDate, + @RequestParam(value = "EndDate",required=false,defaultValue="") String EndDate, + @RequestParam(value = "RepositoryIdentifier") String RepositoryIdentifier, + @RequestParam(value = "ItemIdentifier",required=false,defaultValue="") String ItemIdentifier, + @RequestParam(value = "ItemDataType",required=false,defaultValue="") String ItemDataType, + @RequestParam(value = "Granularity") String Granularity, + @RequestParam(value = "Pretty",required=false,defaultValue="") String Pretty) { + + return sushiliteApi.getReportResults(page, pageSize, Report, Release, RequestorID, BeginDate, EndDate, RepositoryIdentifier, ItemIdentifier, ItemDataType, Granularity, Pretty); + } + +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApi.java b/src/main/java/eu/dnetlib/repo/manager/controllers/UserController.java similarity index 51% rename from src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApi.java rename to src/main/java/eu/dnetlib/repo/manager/controllers/UserController.java index 475fddc..2b1b42f 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApi.java +++ b/src/main/java/eu/dnetlib/repo/manager/controllers/UserController.java @@ -1,7 +1,10 @@ -package eu.dnetlib.repo.manager.service.controllers; +package eu.dnetlib.repo.manager.controllers; +import eu.dnetlib.repo.manager.service.UserApiImpl; import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @@ -9,10 +12,14 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping(value = "/user") @Api(description = "User API", tags = {"user"}) -public interface UserApi { +public class UserController { + + @Autowired + UserApiImpl userApi; @RequestMapping(value = "/login" , method = RequestMethod.GET) - ResponseEntity login(); - - + @PreAuthorize("hasRole('ROLE_USER')") + public ResponseEntity login() { + return userApi.login(); + } } diff --git a/src/main/java/eu/dnetlib/repo/manager/controllers/ValidatorController.java b/src/main/java/eu/dnetlib/repo/manager/controllers/ValidatorController.java new file mode 100644 index 0000000..0a8c1ec --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/controllers/ValidatorController.java @@ -0,0 +1,113 @@ +package eu.dnetlib.repo.manager.controllers; + +import eu.dnetlib.api.functionality.ValidatorServiceException; +import eu.dnetlib.domain.functionality.validator.StoredJob; +import eu.dnetlib.repo.manager.service.ValidatorApiImpl; +import eu.dnetlib.repo.manager.utils.OaiTools; +import eu.dnetlib.repo.manager.shared.InterfaceInformation; +import eu.dnetlib.repo.manager.shared.ValidationServiceException; +import gr.uoa.di.driver.util.ServiceLocator; +import eu.dnetlib.domain.functionality.validator.JobForValidation; +import eu.dnetlib.domain.functionality.validator.RuleSet; +import eu.dnetlib.repo.manager.shared.Constants; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import eu.dnetlib.api.functionality.ValidatorService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiParam; +import org.apache.log4j.Logger; +import org.json.JSONException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; + + +@RestController +@RequestMapping(value = "/validator") +@Api(description = "Validator API", tags = {"validator"}) +public class ValidatorController { + + @Autowired + ValidatorApiImpl validatorApi; + + @RequestMapping(value = "/submitJobForValidation",method = RequestMethod.POST, + consumes = MediaType.APPLICATION_JSON_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER') and #jobForValidation.userEmail == authentication.userInfo.email") + public JobForValidation submitJobForValidation(@RequestBody JobForValidation jobForValidation) throws ValidatorServiceException { + return validatorApi.submitJobForValidation(jobForValidation); + } + + @RequestMapping(value = "/reSubmitJobForValidation/{email}/{jobId}",method = RequestMethod.POST, + consumes = MediaType.APPLICATION_JSON_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER') and #email == authentication.userInfo.email") + public ResponseEntity reSubmitJobForValidation(@PathVariable("email") String email, + @PathVariable("jobId") String jobId) throws JSONException, ValidatorServiceException { + return validatorApi.reSubmitJobForValidation(email, jobId); + } + + @RequestMapping(value = "/getRuleSets/{mode}" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public List getRuleSets(@PathVariable("mode") String mode) { + return validatorApi.getRuleSets(mode); + } + + @RequestMapping(value = "/getSetsOfRepository" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public List getSetsOfRepository(@RequestParam(value = "url", required = true) String url) { + return validatorApi.getSetsOfRepository(url); + } + + @RequestMapping(value = "/identifyRepository" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public boolean identifyRepo(@RequestParam(value = "url", required = true) String url) { + return validatorApi.identifyRepo(url); + } + + @RequestMapping(value = "/getRuleSet/{acronym}" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public RuleSet getRuleSet(@PathVariable("acronym") String acronym) { + return validatorApi.getRuleSet(acronym); + } + + @RequestMapping(value = "/getStoredJobsNew" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + @PreAuthorize("hasRole('ROLE_USER')") + public List getStoredJobsNew(@RequestParam("user") @ApiParam(value = "User email", required = true) String user, + @RequestParam(value = "jobType", required = false) + @ApiParam(value = "Equals to filter job type on validation history page") String jobType, + @RequestParam("offset") @ApiParam(value = "Page number", required = true) String offset, + @RequestParam(value = "limit", required = false,defaultValue = "10") @ApiParam(value = "Null value") String limit, + @RequestParam(value = "dateFrom", required = false) @ApiParam(value = "Null value") String dateFrom, + @RequestParam(value = "dateTo", required = false) @ApiParam(value = "Null value") String dateTo, + @RequestParam("validationStatus") @ApiParam(value = "Equals to filter validation jobs", required = true) String validationStatus + ) throws ValidatorServiceException { + return validatorApi.getStoredJobsNew(user, jobType, offset, limit, dateFrom, dateTo, validationStatus); + } + + @RequestMapping(value = "/getStoredJobsTotalNumberNew" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public int getStoredJobsTotalNumberNew(String user, String jobType, String validationStatus) throws ValidatorServiceException { + return validatorApi.getStoredJobsTotalNumberNew(user, jobType, validationStatus); + } + + @RequestMapping(value = "/getInterfaceInformation" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public InterfaceInformation getInterfaceInformation(@RequestParam(value = "baseUrl", required = true) String baseUrl) throws ValidationServiceException { + return validatorApi.getInterfaceInformation(baseUrl); + } + + +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/domain/RepositorySnippet.java b/src/main/java/eu/dnetlib/repo/manager/domain/RepositorySnippet.java similarity index 95% rename from src/main/java/eu/dnetlib/repo/manager/service/domain/RepositorySnippet.java rename to src/main/java/eu/dnetlib/repo/manager/domain/RepositorySnippet.java index 4d8bae7..519297d 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/domain/RepositorySnippet.java +++ b/src/main/java/eu/dnetlib/repo/manager/domain/RepositorySnippet.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.domain; +package eu.dnetlib.repo.manager.domain; import com.google.gwt.user.client.rpc.IsSerializable; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/domain/RequestFilter.java b/src/main/java/eu/dnetlib/repo/manager/domain/RequestFilter.java similarity index 96% rename from src/main/java/eu/dnetlib/repo/manager/service/domain/RequestFilter.java rename to src/main/java/eu/dnetlib/repo/manager/domain/RequestFilter.java index c053c52..6fc4108 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/domain/RequestFilter.java +++ b/src/main/java/eu/dnetlib/repo/manager/domain/RequestFilter.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.domain; +package eu.dnetlib.repo.manager.domain; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/src/main/java/eu/dnetlib/repo/manager/exception/EndPointException.java b/src/main/java/eu/dnetlib/repo/manager/exception/EndPointException.java new file mode 100644 index 0000000..a05b5d5 --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/exception/EndPointException.java @@ -0,0 +1,17 @@ +package eu.dnetlib.repo.manager.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.GATEWAY_TIMEOUT) +public class EndPointException extends Exception{ + + public EndPointException() { + super("Endpoint not responding!"); + } + + public EndPointException(String url) { + super("Endpoint with url: " + url + " not responding!"); + } + +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/exception/ResourceNotFoundException.java b/src/main/java/eu/dnetlib/repo/manager/exception/ResourceNotFoundException.java similarity index 89% rename from src/main/java/eu/dnetlib/repo/manager/service/exception/ResourceNotFoundException.java rename to src/main/java/eu/dnetlib/repo/manager/exception/ResourceNotFoundException.java index dbf6bb2..68042cf 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/exception/ResourceNotFoundException.java +++ b/src/main/java/eu/dnetlib/repo/manager/exception/ResourceNotFoundException.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.exception; +package eu.dnetlib.repo.manager.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/exception/ServerError.java b/src/main/java/eu/dnetlib/repo/manager/exception/ServerError.java similarity index 86% rename from src/main/java/eu/dnetlib/repo/manager/service/exception/ServerError.java rename to src/main/java/eu/dnetlib/repo/manager/exception/ServerError.java index 9ba5239..a9fa7fc 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/exception/ServerError.java +++ b/src/main/java/eu/dnetlib/repo/manager/exception/ServerError.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.exception; +package eu.dnetlib.repo.manager.exception; public class ServerError { diff --git a/src/main/java/eu/dnetlib/repo/manager/service/BrokerApi.java b/src/main/java/eu/dnetlib/repo/manager/service/BrokerApi.java new file mode 100644 index 0000000..65d85b7 --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/service/BrokerApi.java @@ -0,0 +1,48 @@ +package eu.dnetlib.repo.manager.service; + +import eu.dnetlib.repo.manager.shared.BrokerException; +import eu.dnetlib.repo.manager.shared.Term; +import eu.dnetlib.repo.manager.shared.broker.*; +import io.swagger.annotations.Api; +import org.json.JSONException; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + + +public interface BrokerApi { + + DatasourcesBroker getDatasourcesOfUser(String user, String includeShared, String includeByOthers) throws BrokerException, JSONException; + + List getTopicsForDatasource(String datasourceName) throws BrokerException; + + EventsPage advancedShowEvents(String page, + String size, + AdvQueryObject advQueryObject) throws BrokerException, JSONException ,IOException; + + EventsPage showEvents(String datasourceName, + String topic, + String page, + String size) throws BrokerException, JSONException; + + Map> getSimpleSubscriptionsOfUser(String userEmail) throws BrokerException; + + Subscription subscribe(OpenaireSubscription obj) throws BrokerException; + + ResponseEntity unsubscribe(String subscriptionId) throws BrokerException; + + Subscription getSubscription(String subscriptionId) throws BrokerException; + + Map getDnetTopics() throws BrokerException; + + EventsPage getNotificationsBySubscriptionId(String subscriptionId, String page, String size) throws BrokerException; + + Map> getSubscriptionsOfUser(String userEmail) throws BrokerException; +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/BrokerApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/BrokerApiImpl.java similarity index 83% rename from src/main/java/eu/dnetlib/repo/manager/service/controllers/BrokerApiImpl.java rename to src/main/java/eu/dnetlib/repo/manager/service/BrokerApiImpl.java index 22f8d43..377a7ae 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/BrokerApiImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/BrokerApiImpl.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.controllers; +package eu.dnetlib.repo.manager.service; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -16,6 +16,7 @@ import org.springframework.http.*; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.PathVariable; @@ -32,7 +33,7 @@ import java.io.InputStream; import java.net.URL; import java.util.*; -@Component +@Service("brokerService") public class BrokerApiImpl implements BrokerApi { @Autowired @@ -86,13 +87,7 @@ public class BrokerApiImpl implements BrokerApi { @Override - @PreAuthorize("hasRole('ROLE_USER')") - public DatasourcesBroker getDatasourcesOfUser(@RequestParam("user") - @ApiParam(value = "User email", required = true) String user, - @RequestParam("includeShared") - @ApiParam(value = "Include shared datasources", required = true , defaultValue = "false") String includeShared, - @RequestParam("includeByOthers") - @ApiParam(value = "Include datasources of other", required = true,defaultValue = "false") String includeByOthers) throws JSONException { + public DatasourcesBroker getDatasourcesOfUser(String user,String includeShared,String includeByOthers) throws JSONException { DatasourcesBroker ret = new DatasourcesBroker(); try { @@ -115,7 +110,7 @@ public class BrokerApiImpl implements BrokerApi { } @Override - public List getTopicsForDatasource(@PathVariable("datasourceName") String datasourceName) throws BrokerException { + public List getTopicsForDatasource(String datasourceName) throws BrokerException { final String service = "/topicsForDatasource"; UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(openairePath + service) @@ -139,10 +134,9 @@ public class BrokerApiImpl implements BrokerApi { } @Override - @PreAuthorize("hasRole('ROLE_USER')") - public EventsPage advancedShowEvents(@PathVariable("page") String page, - @PathVariable("size") String size, - @RequestBody AdvQueryObject advQueryObject) throws BrokerException, JSONException ,IOException { + public EventsPage advancedShowEvents(String page, + String size, + AdvQueryObject advQueryObject) throws BrokerException, JSONException ,IOException { final String service = "/events/{page}/{pageSize}"; @@ -200,8 +194,6 @@ public class BrokerApiImpl implements BrokerApi { return entries; } - - private List getRepositoriesOfUser(String userEmail) throws JSONException { int page = 0; @@ -223,11 +215,10 @@ public class BrokerApiImpl implements BrokerApi { } @Override - @PreAuthorize("hasRole('ROLE_USER')") - public EventsPage showEvents(@RequestParam("datasourceName") String datasourceName, - @RequestParam("topic") String topic, - @RequestParam("page") String page, - @RequestParam("size") String size) throws BrokerException, JSONException { + public EventsPage showEvents(String datasourceName, + String topic, + String page, + String size) throws BrokerException, JSONException { final String service = "/events"; @@ -253,8 +244,7 @@ public class BrokerApiImpl implements BrokerApi { } @Override - @PreAuthorize("hasRole('ROLE_USER')") - public Map> getSimpleSubscriptionsOfUser(@PathVariable("userEmail") String userEmail) + public Map> getSimpleSubscriptionsOfUser(String userEmail) throws BrokerException { final String service = "/subscriptions"; @@ -280,8 +270,7 @@ public class BrokerApiImpl implements BrokerApi { } @Override - @PreAuthorize("hasRole('ROLE_USER') ") - public Subscription subscribe(@RequestBody OpenaireSubscription obj) throws BrokerException { + public Subscription subscribe(OpenaireSubscription obj) throws BrokerException { final String service = "/subscribe"; //build the uri params @@ -311,8 +300,7 @@ public class BrokerApiImpl implements BrokerApi { } @Override - @PreAuthorize("hasRole('ROLE_USER')") - public ResponseEntity unsubscribe(@PathVariable("subscriptionId") String subscriptionId) throws BrokerException { + public ResponseEntity unsubscribe(String subscriptionId) throws BrokerException { final String service = "/subscriptions/" + subscriptionId; //build the uri params @@ -335,8 +323,7 @@ public class BrokerApiImpl implements BrokerApi { } @Override - @PreAuthorize("hasRole('ROLE_USER')") - public Subscription getSubscription(@PathVariable("subscriptionId") String subscriptionId) throws BrokerException { + public Subscription getSubscription( String subscriptionId) throws BrokerException { final String service = "/subscriptions/" + subscriptionId; //build the uri params @@ -365,11 +352,9 @@ public class BrokerApiImpl implements BrokerApi { } @Override - @PreAuthorize("hasRole('ROLE_USER')") - public EventsPage getNotificationsBySubscriptionId(@PathVariable("subscriptionId") String subscriptionId, - @PathVariable("page") String page, - @PathVariable("size") String size - ) throws BrokerException { + public EventsPage getNotificationsBySubscriptionId(String subscriptionId, + String page, + String size) throws BrokerException { UriComponents uriComponents = UriComponentsBuilder .fromHttpUrl(openairePath + "/notifications/") @@ -393,7 +378,7 @@ public class BrokerApiImpl implements BrokerApi { } //@Override - public Map> getSubscriptionsOfUser(/*@PathVariable("userEmail")*/ String userEmail) + public Map> getSubscriptionsOfUser(String userEmail) throws BrokerException { Map> simpleSubs = getSimpleSubscriptionsOfUser(userEmail); diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/EmailUtils.java b/src/main/java/eu/dnetlib/repo/manager/service/EmailUtils.java similarity index 94% rename from src/main/java/eu/dnetlib/repo/manager/service/controllers/EmailUtils.java rename to src/main/java/eu/dnetlib/repo/manager/service/EmailUtils.java index a432257..681d8d7 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/EmailUtils.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/EmailUtils.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.controllers; +package eu.dnetlib.repo.manager.service; import eu.dnetlib.domain.data.PiwikInfo; import eu.dnetlib.domain.data.Repository; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/EmailUtilsImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/EmailUtilsImpl.java similarity index 99% rename from src/main/java/eu/dnetlib/repo/manager/service/controllers/EmailUtilsImpl.java rename to src/main/java/eu/dnetlib/repo/manager/service/EmailUtilsImpl.java index 2fcd03a..370a60b 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/EmailUtilsImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/EmailUtilsImpl.java @@ -1,9 +1,9 @@ -package eu.dnetlib.repo.manager.service.controllers; +package eu.dnetlib.repo.manager.service; import eu.dnetlib.domain.data.PiwikInfo; import eu.dnetlib.domain.data.Repository; import eu.dnetlib.domain.functionality.validator.JobForValidation; -import eu.dnetlib.repo.manager.service.config.CascadingPropertyLoader; +import eu.dnetlib.repo.manager.config.CascadingPropertyLoader; import eu.dnetlib.utils.MailLibrary; import org.apache.log4j.Logger; import org.mitre.openid.connect.model.OIDCAuthenticationToken; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/GenericControllerAdvice.java b/src/main/java/eu/dnetlib/repo/manager/service/GenericControllerAdvice.java similarity index 81% rename from src/main/java/eu/dnetlib/repo/manager/service/controllers/GenericControllerAdvice.java rename to src/main/java/eu/dnetlib/repo/manager/service/GenericControllerAdvice.java index 7960366..609c675 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/GenericControllerAdvice.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/GenericControllerAdvice.java @@ -1,9 +1,9 @@ -package eu.dnetlib.repo.manager.service.controllers; +package eu.dnetlib.repo.manager.service; import eu.dnetlib.api.functionality.ValidatorServiceException; -import eu.dnetlib.repo.manager.service.exception.ResourceNotFoundException; -import eu.dnetlib.repo.manager.service.exception.ServerError; +import eu.dnetlib.repo.manager.exception.ResourceNotFoundException; +import eu.dnetlib.repo.manager.exception.ServerError; import eu.dnetlib.repo.manager.shared.BrokerException; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; @@ -12,7 +12,10 @@ import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.security.access.AccessDeniedException; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; import javax.servlet.http.HttpServletRequest; import java.net.UnknownHostException; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/MonitorApi.java b/src/main/java/eu/dnetlib/repo/manager/service/MonitorApi.java new file mode 100644 index 0000000..052aeb5 --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/service/MonitorApi.java @@ -0,0 +1,32 @@ +package eu.dnetlib.repo.manager.service; + +import eu.dnetlib.api.functionality.ValidatorServiceException; +import eu.dnetlib.domain.functionality.validator.StoredJob; +import eu.dnetlib.repo.manager.shared.JobsOfUser; +import io.swagger.annotations.Api; +import org.json.JSONException; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + + +public interface MonitorApi { + + + JobsOfUser getJobsOfUser(String user, + String jobType, + String offset, + String limit, + String dateFrom, + String dateTo, + String validationStatus, + String includeJobsTotal) throws JSONException, ValidatorServiceException; + + int getJobsOfUserPerValidationStatus(String user, + String jobType, + String validationStatus) throws JSONException; + + + StoredJob getJobSummary(String jobId, + String groupBy) throws JSONException; + +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/MonitorApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/MonitorApiImpl.java similarity index 79% rename from src/main/java/eu/dnetlib/repo/manager/service/controllers/MonitorApiImpl.java rename to src/main/java/eu/dnetlib/repo/manager/service/MonitorApiImpl.java index acc0bf5..0e1ae3e 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/MonitorApiImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/MonitorApiImpl.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.controllers; +package eu.dnetlib.repo.manager.service; import eu.dnetlib.api.functionality.ValidatorService; import eu.dnetlib.api.functionality.ValidatorServiceException; @@ -11,11 +11,12 @@ import org.apache.log4j.Logger; import org.json.JSONException; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource; -@Component +@Service("monitorService") public class MonitorApiImpl implements MonitorApi { @Resource(name = "validatorServiceLocator") @@ -38,16 +39,14 @@ public class MonitorApiImpl implements MonitorApi { .getLogger(MonitorApiImpl.class); @Override - @PreAuthorize("hasRole('ROLE_USER')") - public JobsOfUser getJobsOfUser(@RequestParam("user") @ApiParam(value = "User email", required = true) String user, - @RequestParam(value = "jobType", required = false) - @ApiParam(value = "Equals to filter job type on validation history page") String jobType, - @RequestParam("offset") @ApiParam(value = "Page number", required = true) String offset, - @RequestParam(value = "limit", required = false,defaultValue = "10") @ApiParam(value = "Null value") String limit, - @RequestParam(value = "dateFrom", required = false) @ApiParam(value = "Null value") String dateFrom, - @RequestParam(value = "dateTo", required = false) @ApiParam(value = "Null value") String dateTo, - @RequestParam("validationStatus") @ApiParam(value = "Equals to filter validation jobs", required = false) String validationStatus, - @RequestParam("includeJobsTotal") @ApiParam(value = "Always true", required = true) String includeJobsTotal) throws JSONException, ValidatorServiceException { + public JobsOfUser getJobsOfUser(String user, + String jobType, + String offset, + String limit, + String dateFrom, + String dateTo, + String validationStatus, + String includeJobsTotal) throws JSONException, ValidatorServiceException { LOGGER.debug("Getting jobs of user : " + user); LOGGER.debug(user + "/" + jobType + "/" + offset + "/" + dateFrom + "/" + dateTo + "/" + validationStatus + "/" + includeJobsTotal); @@ -89,7 +88,6 @@ public class MonitorApiImpl implements MonitorApi { } @Override - @PreAuthorize("hasRole('ROLE_USER')") public int getJobsOfUserPerValidationStatus(String user, String jobType, String validationStatus) throws JSONException { diff --git a/src/main/java/eu/dnetlib/repo/manager/service/PiWikApi.java b/src/main/java/eu/dnetlib/repo/manager/service/PiWikApi.java new file mode 100644 index 0000000..968945e --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/service/PiWikApi.java @@ -0,0 +1,26 @@ +package eu.dnetlib.repo.manager.service; + + +import eu.dnetlib.domain.data.PiwikInfo; +import eu.dnetlib.repo.manager.shared.RepositoryServiceException; +import org.springframework.http.ResponseEntity; + +import java.util.List; + + +public interface PiWikApi { + + PiwikInfo getPiwikSiteForRepo(String repositoryId); + + PiwikInfo savePiwikInfo(PiwikInfo piwikInfo); + + List getPiwikSitesForRepos(); + + ResponseEntity approvePiwikSite(String repositoryId); + + String getOpenaireId(String repositoryid); + + ResponseEntity markPiwikSiteAsValidated(String repositoryId) throws RepositoryServiceException; + + PiwikInfo enableMetricsForRepository(String officialName, String repoWebsite, PiwikInfo piwikInfo) throws RepositoryServiceException; +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/PiWikApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/PiWikApiImpl.java similarity index 97% rename from src/main/java/eu/dnetlib/repo/manager/service/controllers/PiWikApiImpl.java rename to src/main/java/eu/dnetlib/repo/manager/service/PiWikApiImpl.java index 1e4a80f..bc13828 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/PiWikApiImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/PiWikApiImpl.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.controllers; +package eu.dnetlib.repo.manager.service; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.domain.data.PiwikInfo; @@ -13,9 +13,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; -import org.springframework.security.access.prepost.PostAuthorize; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; @@ -29,8 +28,8 @@ import java.sql.Types; import java.util.List; import java.util.Map; -@Component -public class PiWikApiImpl implements PiWikApi{ +@Service("piwikService") +public class PiWikApiImpl implements PiWikApi { @Qualifier("repomanager.dataSource") @Autowired diff --git a/src/main/java/eu/dnetlib/repo/manager/service/RepositoryApi.java b/src/main/java/eu/dnetlib/repo/manager/service/RepositoryApi.java new file mode 100644 index 0000000..bc9c10c --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/service/RepositoryApi.java @@ -0,0 +1,72 @@ +package eu.dnetlib.repo.manager.service; + +import eu.dnetlib.domain.data.Repository; +import eu.dnetlib.domain.data.RepositoryInterface; +import eu.dnetlib.repo.manager.domain.RepositorySnippet; +import eu.dnetlib.repo.manager.exception.ResourceNotFoundException; +import eu.dnetlib.repo.manager.shared.*; +import org.json.JSONException; +import org.springframework.security.core.Authentication; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +public interface RepositoryApi { + + + Country[] getCountries() ; + + List getRepositoriesByCountry(String country, String mode, Boolean managed) throws JSONException, IOException; + + List getRepositoriesOfUser(String userEmail, + String page, + String size) throws JSONException; + + Repository getRepositoryById(String id) throws JSONException, ResourceNotFoundException; + + List getRepositoryAggregations(String id) throws JSONException; + + Map> getRepositoryAggregationsByYear(String id) throws JSONException; + + List getRepositoriesByName(String name, + String page, + String size) throws JSONException; + + List getRepositoryInterface(String id) throws JSONException; + + Repository addRepository(String datatype, Repository repository) throws Exception; + + void deleteRepositoryInterface(String id, String registeredBy); + + RepositoryInterface addRepositoryInterface(String datatype, + String repoId, + String registeredBy, + RepositoryInterface iFace) throws JSONException,ResourceNotFoundException; + + List getDnetCountries(); + + List getTypologies(); + + List getTimezones(); + + Repository updateRepository(Repository repository, Authentication authentication) throws Exception; + + List getUrlsOfUserRepos(String user_email, + String page, + String size) throws JSONException; + + List getDatasourceVocabularies(String mode); + + Map getCompatibilityClasses(String mode); + + Map getDatasourceClasses(String mode); + + String getCountryName(String countryCode); + + MetricsInfo getMetricsInfoForRepository(String repoId) throws RepositoryServiceException; + + Map getListLatestUpdate(String mode) throws RepositoryServiceException, JSONException; + + RepositoryInterface updateRepositoryInterface(String repositoryId, String registeredBy, RepositoryInterface repositoryInterface) throws JSONException; + +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/RepositoryApiImpl.java similarity index 98% rename from src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApiImpl.java rename to src/main/java/eu/dnetlib/repo/manager/service/RepositoryApiImpl.java index 492e546..9a7f2e4 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApiImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/RepositoryApiImpl.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.controllers; +package eu.dnetlib.repo.manager.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -6,10 +6,10 @@ 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; +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.utils.Converter; import eu.dnetlib.repo.manager.shared.*; import gr.uoa.di.driver.enabling.vocabulary.VocabularyLoader; import org.apache.commons.codec.digest.DigestUtils; @@ -25,7 +25,7 @@ import org.springframework.http.converter.json.MappingJackson2HttpMessageConvert import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; @@ -35,14 +35,13 @@ import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; import javax.annotation.PostConstruct; -import javax.xml.ws.Response; import java.io.IOException; import java.sql.Timestamp; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; -@Component +@Service("repositoryService") public class RepositoryApiImpl implements RepositoryApi { @Value("${api.baseAddress}") diff --git a/src/main/java/eu/dnetlib/repo/manager/service/StatsApi.java b/src/main/java/eu/dnetlib/repo/manager/service/StatsApi.java new file mode 100644 index 0000000..5aeb50e --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/service/StatsApi.java @@ -0,0 +1,12 @@ +package eu.dnetlib.repo.manager.service; + +import eu.dnetlib.repo.manager.exception.EndPointException; +import org.json.JSONException; + +import java.util.Map; + + +public interface StatsApi { + + Map getStatistics() throws JSONException, EndPointException; +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/StatsApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/StatsApiImpl.java new file mode 100644 index 0000000..d9a4d6a --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/service/StatsApiImpl.java @@ -0,0 +1,208 @@ +package eu.dnetlib.repo.manager.service; + +import eu.dnetlib.repo.manager.exception.EndPointException; +import org.apache.log4j.Logger; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponents; +import org.springframework.web.util.UriComponentsBuilder; + +import javax.annotation.PostConstruct; +import java.rmi.ServerError; +import java.util.HashMap; +import java.util.Map; + +@Service("statsService") +public class StatsApiImpl implements StatsApi { + + private RestTemplate restTemplate = null; + + private HttpHeaders httpHeaders; + + private static final Logger LOGGER = Logger.getLogger(RepositoryApiImpl.class); + + @Value("${search.api.baseAddress}") + private String baseAddress; + + @Value("${search.api.usagestats}") + private String usagestatsBaseAddress; + + @Value("${search.api.usageEvents}") + private String usagestatsEvents; + + @PostConstruct + private void init() { + LOGGER.debug("Initialization method of statistics api!"); + + restTemplate = new RestTemplate(); + restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); + + httpHeaders = new HttpHeaders(); + httpHeaders.set("Content-Type", "application/json"); + } + + + @Override + public Map getStatistics() throws JSONException { + + String aggregators = null; + try { + aggregators = getTotalByType("datasource",baseAddress+"/resources", + "?query= " + + " oaftype exact datasource and " + + " ( datasourcetypename exact Institutional Repository Aggregator " + + " or datasourcetypename exact Publication Repository Aggregator )"); + } catch (EndPointException e) { + LOGGER.debug(e); + aggregators = "N/A"; + } + + String dataRepositories = null; + try { + dataRepositories = getTotalByType("datasource",baseAddress+"/resources", + "?query= " + + " oaftype exact datasource and " + + " datasourcetypename exact Data Repository " ); + } catch (EndPointException e) { + LOGGER.debug(e); + dataRepositories = "N/A"; + } + + String literature = null; + try { + literature = getTotalByType("datasource",baseAddress+"/resources", + "?query= " + + " oaftype exact datasource and " + + " ( datasourcetypename exact Institutional Repository " + + " or datasourcetypename exact Publication Repository )"); + } catch (EndPointException e) { + LOGGER.debug(e); + literature = "N/A"; + } + + String journal = null; + try { + journal = getTotalByType("datasource",baseAddress+"/resources", + "?query= " + + " oaftype exact datasource and " + + " datasourcetypename exact Journal"); + } catch (EndPointException e) { + LOGGER.debug(e); + journal = "N/A"; + } + + String publications = null; + try { + publications = getTotalByType("other",baseAddress,"/publications/count"); + } catch (EndPointException e) { + LOGGER.debug(e); + publications = "N/A"; + } + + String datasets = null; + try { + datasets = getTotalByType("other",baseAddress,"/datasets/count"); + } catch (EndPointException e) { + LOGGER.debug(e); + datasets = "N/A"; + } + + String software = null; + try { + software = getTotalByType("other",baseAddress,"/software/count"); + } catch (EndPointException e) { + LOGGER.debug(e); + software = "N/A"; + } + + JSONObject lastYearUsagestats = null; + try { + lastYearUsagestats = getLastYearUsageStatsTotal(); + } catch (EndPointException e) { + LOGGER.debug(e); + lastYearUsagestats = null; + } + + Integer usagestats = getUsageStatsTotal(); + HashMap stats = new HashMap<>(); + stats.put("aggregators",aggregators); + stats.put("dataRepositories",dataRepositories); + stats.put("literature",literature); + stats.put("journal",journal); + stats.put("publications",publications); + stats.put("datasets",datasets); + stats.put("software",software); + stats.put("lastYearUsagestats", lastYearUsagestats != null ? lastYearUsagestats.toString() : null); + stats.put("usagestats",usagestats.toString()); + return stats; + } + + + private String getTotalByType(String type,String url,String query) throws JSONException, EndPointException { + UriComponents uriComponents = UriComponentsBuilder + .fromHttpUrl(url + query) + .queryParam("page",0) + .queryParam("size",0) + .queryParam("format","json") + .build().encode(); + + ResponseEntity rs = restTemplate.getForObject(uriComponents.toUri(), ResponseEntity.class); + + if(rs.getStatusCode().equals(HttpStatus.OK)){ + if(type.equalsIgnoreCase("datasource")){ + JSONObject metadata = (JSONObject) new JSONObject(rs.getBody()).get("meta"); + return String.valueOf(metadata.get("total")); + }else + return String.valueOf(new JSONObject(rs.getBody()).get("total")); + }else + throw new EndPointException(uriComponents.toUri().toString()); + } + + private JSONObject getLastYearUsageStatsTotal() throws JSONException, EndPointException { + + UriComponents uriComponents = UriComponentsBuilder + .fromHttpUrl(usagestatsBaseAddress + "/totals") + .build().encode(); + + ResponseEntity rs = restTemplate.getForObject(uriComponents.toUri(), ResponseEntity.class); + + if(rs.getStatusCode().equals(HttpStatus.OK)){ + JSONArray resultSet = (JSONArray) new JSONObject(rs.getBody()).getJSONArray("yearly_stats"); + JSONObject lastYear = resultSet.getJSONObject(resultSet.length()-1); + + Integer downloads = lastYear.getInt("downloads"); + Integer views = lastYear.getInt("views"); + String year = lastYear.getString("year"); + + JSONObject usagestats = new JSONObject(); + usagestats.put("number",String.valueOf(downloads+views)); + usagestats.put("year",year); + + return usagestats; + }else + throw new EndPointException(uriComponents.toUri().toString()); + + + + } + + private Integer getUsageStatsTotal() throws JSONException { + UriComponents uriComponents = UriComponentsBuilder + .fromHttpUrl(usagestatsEvents) + .build().encode(); + + String rs = restTemplate.getForObject(uriComponents.toUri(), String.class); + JSONObject resultSet = new JSONObject(rs); + JSONObject totals = resultSet.getJSONObject("totals"); + return Integer.valueOf(totals.getString("events")); + } +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApi.java b/src/main/java/eu/dnetlib/repo/manager/service/SushiliteApi.java similarity index 55% rename from src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApi.java rename to src/main/java/eu/dnetlib/repo/manager/service/SushiliteApi.java index cd0df0e..e8dd136 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApi.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/SushiliteApi.java @@ -1,22 +1,12 @@ -package eu.dnetlib.repo.manager.service.controllers; +package eu.dnetlib.repo.manager.service; -import eu.dnetlib.usagestats.sushilite.domain.ReportResponse; import eu.dnetlib.usagestats.sushilite.domain.ReportResponseWrapper; -import io.swagger.annotations.Api; import org.json.JSONException; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; -@RestController -@RequestMapping(value = "/sushilite") -@Api(description = "Sushi-Lite API", tags = {"sushilite"}) + public interface SushiliteApi { - @RequestMapping(value = "/getReportResults/{page}/{pageSize}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody + ReportResponseWrapper getReportResults(String page, String pageSize, String Report, diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/SushiliteApiImpl.java similarity index 98% rename from src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApiImpl.java rename to src/main/java/eu/dnetlib/repo/manager/service/SushiliteApiImpl.java index e488371..ffb1e91 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApiImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/SushiliteApiImpl.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.controllers; +package eu.dnetlib.repo.manager.service; import eu.dnetlib.usagestats.sushilite.domain.ReportItem; import eu.dnetlib.usagestats.sushilite.domain.ReportResponseWrapper; @@ -9,7 +9,7 @@ import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.client.RestClientException; @@ -19,7 +19,7 @@ import org.springframework.web.util.UriComponentsBuilder; import java.util.ArrayList; import java.util.List; -@Component +@Service("sushiliteService") public class SushiliteApiImpl implements SushiliteApi { diff --git a/src/main/java/eu/dnetlib/repo/manager/service/UserApi.java b/src/main/java/eu/dnetlib/repo/manager/service/UserApi.java new file mode 100644 index 0000000..386eadc --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/service/UserApi.java @@ -0,0 +1,9 @@ +package eu.dnetlib.repo.manager.service; + +import org.springframework.http.ResponseEntity; + + +public interface UserApi { + + ResponseEntity login(); +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/UserApiImpl.java similarity index 94% rename from src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApiImpl.java rename to src/main/java/eu/dnetlib/repo/manager/service/UserApiImpl.java index 52461ad..e4ae18c 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApiImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/UserApiImpl.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.controllers; +package eu.dnetlib.repo.manager.service; import org.mitre.openid.connect.model.OIDCAuthenticationToken; import org.springframework.beans.factory.annotation.Value; @@ -8,13 +8,14 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@Component +@Service("userService") public class UserApiImpl implements UserApi { private static final org.apache.log4j.Logger LOGGER = org.apache.log4j.Logger @@ -24,7 +25,6 @@ public class UserApiImpl implements UserApi { private String oidc_issuer; @Override - @PreAuthorize("hasRole('ROLE_USER')") public ResponseEntity login() { OIDCAuthenticationToken authentication = (OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); LOGGER.debug("User authentication : " + authentication); diff --git a/src/main/java/eu/dnetlib/repo/manager/service/ValidatorApi.java b/src/main/java/eu/dnetlib/repo/manager/service/ValidatorApi.java new file mode 100644 index 0000000..bc0580f --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/service/ValidatorApi.java @@ -0,0 +1,42 @@ +package eu.dnetlib.repo.manager.service; + +import eu.dnetlib.api.functionality.ValidatorServiceException; +import eu.dnetlib.domain.functionality.validator.JobForValidation; +import eu.dnetlib.domain.functionality.validator.RuleSet; +import eu.dnetlib.domain.functionality.validator.StoredJob; +import eu.dnetlib.repo.manager.shared.InterfaceInformation; +import eu.dnetlib.repo.manager.shared.ValidationServiceException; +import org.json.JSONException; +import org.springframework.http.ResponseEntity; + +import java.util.List; + + + +public interface ValidatorApi { + + + JobForValidation submitJobForValidation(JobForValidation jobForValidation) throws ValidatorServiceException; + + ResponseEntity reSubmitJobForValidation(String email, String jobId) throws JSONException, ValidatorServiceException; + + List getRuleSets(String mode); + + List getSetsOfRepository(String url); + + boolean identifyRepo(String url); + + RuleSet getRuleSet(String acronym); + + List getStoredJobsNew(String user, + String jobType, + String offset, + String limit, + String dateFrom, + String dateTo, + String validationStatus) throws ValidatorServiceException; + + int getStoredJobsTotalNumberNew(String user, String jobType, String validationStatus) throws ValidatorServiceException; + + InterfaceInformation getInterfaceInformation(String baseUrl) throws ValidationServiceException; +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/ValidatorApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/ValidatorApiImpl.java similarity index 97% rename from src/main/java/eu/dnetlib/repo/manager/service/controllers/ValidatorApiImpl.java rename to src/main/java/eu/dnetlib/repo/manager/service/ValidatorApiImpl.java index 08611b9..7a92f87 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/ValidatorApiImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/ValidatorApiImpl.java @@ -1,18 +1,15 @@ -package eu.dnetlib.repo.manager.service.controllers; +package eu.dnetlib.repo.manager.service; +import eu.dnetlib.api.functionality.ValidatorService; import eu.dnetlib.api.functionality.ValidatorServiceException; -import eu.dnetlib.domain.functionality.validator.StoredJob; -import eu.dnetlib.repo.manager.service.utils.OaiTools; -import eu.dnetlib.repo.manager.shared.InterfaceInformation; -import eu.dnetlib.repo.manager.shared.ValidationServiceException; -import gr.uoa.di.driver.util.ServiceLocator; import eu.dnetlib.domain.functionality.validator.JobForValidation; import eu.dnetlib.domain.functionality.validator.RuleSet; +import eu.dnetlib.domain.functionality.validator.StoredJob; import eu.dnetlib.repo.manager.shared.Constants; - -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import eu.dnetlib.api.functionality.ValidatorService; +import eu.dnetlib.repo.manager.shared.InterfaceInformation; +import eu.dnetlib.repo.manager.shared.ValidationServiceException; +import eu.dnetlib.repo.manager.utils.OaiTools; +import gr.uoa.di.driver.util.ServiceLocator; import io.swagger.annotations.ApiParam; import org.apache.log4j.Logger; import org.json.JSONException; @@ -22,16 +19,19 @@ import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.PostConstruct; import javax.annotation.Resource; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; -@Component -public class ValidatorApiImpl implements ValidatorApi{ +@Service("validatorService") +public class ValidatorApiImpl implements ValidatorApi { @Autowired private MonitorApiImpl monitorApi; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/BrokerApi.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/BrokerApi.java deleted file mode 100644 index a7aad1b..0000000 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/BrokerApi.java +++ /dev/null @@ -1,81 +0,0 @@ -package eu.dnetlib.repo.manager.service.controllers; - -import eu.dnetlib.repo.manager.shared.BrokerException; -import eu.dnetlib.repo.manager.shared.Term; -import eu.dnetlib.repo.manager.shared.broker.*; -import io.swagger.annotations.Api; -import org.json.JSONException; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -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; - -@RestController -@RequestMapping(value = "/broker") -@Api(description = "Broker API", tags = {"broker"}) -public interface BrokerApi { - - @RequestMapping(value = "/getDatasourcesOfUser" , method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - DatasourcesBroker getDatasourcesOfUser(String user,String includeShared,String includeByOthers) throws BrokerException, JSONException; - - @RequestMapping(value = "/getTopicsForDatasource/{datasourceName:.+}" , method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - List getTopicsForDatasource(String datasourceName) throws BrokerException; - - @RequestMapping(value = "/advancedShowEvents/{page}/{size}" , method = RequestMethod.POST, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - EventsPage advancedShowEvents(String page, - String size, - AdvQueryObject advQueryObject) throws BrokerException, JSONException ,IOException; - - @RequestMapping(value = "/showEvents/{datasourceName:.+}/{topic}/{page}" , method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - EventsPage showEvents(String datasourceName, - String topic, - String page, - String size) throws BrokerException, JSONException; - - @RequestMapping(value = "/getSimpleSubscriptionsOfUser/{userEmail}" , method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - Map> getSimpleSubscriptionsOfUser(String userEmail) throws BrokerException; - - @RequestMapping(value = "/subscribe" , method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON_VALUE, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - Subscription subscribe(OpenaireSubscription obj) throws BrokerException; - - @RequestMapping(value = "/unsubscribe/{subscriptionId}" , method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON_VALUE, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - ResponseEntity unsubscribe(String subscriptionId) throws BrokerException; - - @RequestMapping(value = "/getSubscription/{subscriptionId}" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - Subscription getSubscription(String subscriptionId) throws BrokerException; - - - @RequestMapping(value = "/getDnetTopics" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - Map getDnetTopics() throws BrokerException; - - @RequestMapping(value = "/getNotificationsBySubscriptionId/{subscriptionId}/{page}/{size}" , method = RequestMethod.GET - ,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - EventsPage getNotificationsBySubscriptionId(String subscriptionId,String page,String size) throws BrokerException; - - /*@RequestMapping(value = "/getSubscriptionsOfUser/{userEmail}" , method = RequestMethod.GET - ,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody*/ - Map> getSubscriptionsOfUser(String userEmail) throws BrokerException; -} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/MonitorApi.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/MonitorApi.java deleted file mode 100644 index 518d5a4..0000000 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/MonitorApi.java +++ /dev/null @@ -1,40 +0,0 @@ -package eu.dnetlib.repo.manager.service.controllers; - -import eu.dnetlib.api.functionality.ValidatorServiceException; -import eu.dnetlib.domain.functionality.validator.StoredJob; -import eu.dnetlib.repo.manager.shared.JobsOfUser; -import io.swagger.annotations.Api; -import org.json.JSONException; -import org.springframework.http.MediaType; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.*; - -@RestController -@RequestMapping(value = "/monitor") -@Api(description = "Monitor API", tags = {"monitor"}) -public interface MonitorApi { - - @RequestMapping(value = "/getJobsOfUser" , method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - JobsOfUser getJobsOfUser(String user, - String jobType, - String offset, - String limit, - String dateFrom, - String dateTo, - String validationStatus, - String includeJobsTotal) throws JSONException, ValidatorServiceException; - - @RequestMapping(value = "/getJobsOfUserPerValidationStatus" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - int getJobsOfUserPerValidationStatus(@RequestBody String user, - @RequestBody String jobType, - @RequestBody String validationStatus) throws JSONException; - - @RequestMapping(value = "/getJobSummary" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - StoredJob getJobSummary(@RequestBody String jobId, - @RequestBody String groupBy) throws JSONException; - -} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/PiWikApi.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/PiWikApi.java deleted file mode 100644 index bf5803f..0000000 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/PiWikApi.java +++ /dev/null @@ -1,46 +0,0 @@ -package eu.dnetlib.repo.manager.service.controllers; - - -import eu.dnetlib.domain.data.PiwikInfo; -import eu.dnetlib.repo.manager.shared.RepositoryServiceException; -import io.swagger.annotations.Api; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@RestController -@RequestMapping(value = "/piwik") -@Api(description = "Piwik API", tags = {"piwik"}) -public interface PiWikApi { - - - @RequestMapping(value = "/getPiwikSiteForRepo/{repositoryId}" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - PiwikInfo getPiwikSiteForRepo(String repositoryId); - - @RequestMapping(value = "/savePiwikInfo" , method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE) - PiwikInfo savePiwikInfo( PiwikInfo piwikInfo); - - @RequestMapping(value = "/getPiwikSitesForRepos" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - List getPiwikSitesForRepos(); - - @RequestMapping(value = "/approvePiwikSite/{repositoryId}" , method = RequestMethod.GET) - @ResponseBody - ResponseEntity approvePiwikSite(String repositoryId); - - @RequestMapping(value = "/getOpenaireId/{repositoryId}" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - String getOpenaireId(String repositoryid); - - - @RequestMapping(value = "/markPiwikSiteAsValidated/{repositoryId}" , method = RequestMethod.POST, - consumes = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - ResponseEntity markPiwikSiteAsValidated(String repositoryId) throws RepositoryServiceException; - - @RequestMapping(value = "/enableMetricsForRepository", method = RequestMethod.POST, - consumes = MediaType.APPLICATION_JSON_VALUE) - PiwikInfo enableMetricsForRepository(String officialName,String repoWebsite,PiwikInfo piwikInfo) throws RepositoryServiceException; -} 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 deleted file mode 100644 index 6b652e4..0000000 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApi.java +++ /dev/null @@ -1,148 +0,0 @@ -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.core.Authentication; -import org.springframework.web.bind.annotation.*; - -import java.io.IOException; -import java.util.List; -import java.util.Map; - - -@RestController -@RequestMapping(value = "/repository") -@Api(description = "Repository API", tags = {"repository"}) -public interface RepositoryApi { - - @RequestMapping(value = "/getCountries", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - Country[] getCountries() ; - - @RequestMapping(value = "/getRepositoriesByCountry/{country}/{mode}", method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - 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) - @ResponseBody - List getRepositoriesOfUser(String userEmail, - String page, - String size) throws JSONException; - - @RequestMapping(value = "/getRepositoryById/{id}", method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - Repository getRepositoryById(String id) throws JSONException, ResourceNotFoundException; - - - @RequestMapping(value = "/getRepositoryAggregations/{id}", method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - List getRepositoryAggregations(String id) throws JSONException; - - @RequestMapping(value = "/getRepositoryAggregationsByYear/{id}", method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - Map> getRepositoryAggregationsByYear(String id) throws JSONException; - - - @RequestMapping(value = "/getRepositoriesByName/{name:.+}/{page}/{size}/", method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - List getRepositoriesByName(String name, - String page, - String size) throws JSONException; - - @RequestMapping(value = "/getRepositoryInterface/{id}", method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - List getRepositoryInterface(String id) throws JSONException; - - @RequestMapping(value = "/addRepository", method = RequestMethod.POST, - consumes = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - Repository addRepository(String datatype, Repository repository) throws Exception; - - - @RequestMapping(value = "/deleteInterface/", method = RequestMethod.DELETE) - void deleteRepositoryInterface(String id,String registeredBy); - - @RequestMapping(value = "/addInterface", method = RequestMethod.POST, - consumes = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - RepositoryInterface addRepositoryInterface(String datatype, - String repoId, - String registeredBy, - RepositoryInterface iFace) throws JSONException,ResourceNotFoundException; - - @RequestMapping(value = "/getDnetCountries", method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - List getDnetCountries(); - - @RequestMapping(value = "/getTypologies", method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - List getTypologies(); - - @RequestMapping(value = "/getTimezones", method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - List getTimezones(); - - @RequestMapping(value = "/updateRepository", method = RequestMethod.POST, - consumes = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - Repository updateRepository(Repository repository, Authentication authentication) throws Exception; - - @RequestMapping(value = "/getUrlsOfUserRepos/{user_email}/{page}/{size}/",method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - List getUrlsOfUserRepos(String user_email, - String page, - String size) throws JSONException; - - @RequestMapping(value = "/getDatasourceVocabularies/{mode}",method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - List getDatasourceVocabularies(String mode); - - @RequestMapping(value = "/getCompatibilityClasses/{mode}",method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - Map getCompatibilityClasses(String mode); - - @RequestMapping(value = "/getDatasourceClasses/{mode}",method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - Map getDatasourceClasses(String mode); - - - String getCountryName(String countryCode); - - @RequestMapping(value = "/getMetricsInfoForRepository/{repoId}",method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - MetricsInfo getMetricsInfoForRepository(String repoId) throws RepositoryServiceException; - - @RequestMapping(value = "/getListLatestUpdate/{mode}",method = RequestMethod.GET, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - Map getListLatestUpdate(String mode) throws RepositoryServiceException, JSONException; - - @RequestMapping(value = "/updateRepositoryInterface", method = RequestMethod.POST, - consumes = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - RepositoryInterface updateRepositoryInterface(String repositoryId,String registeredBy,RepositoryInterface repositoryInterface) throws JSONException; - - - -} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApiImpl.java deleted file mode 100644 index 5f88f36..0000000 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApiImpl.java +++ /dev/null @@ -1,152 +0,0 @@ -package eu.dnetlib.repo.manager.service.controllers; - -import com.mongodb.util.JSON; -import org.apache.log4j.Logger; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpHeaders; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponents; -import org.springframework.web.util.UriComponentsBuilder; - -import javax.annotation.PostConstruct; -import java.util.HashMap; -import java.util.Map; - -@Component -public class StatsApiImpl implements StatsApi { - - private RestTemplate restTemplate = null; - - private HttpHeaders httpHeaders; - - private static final Logger LOGGER = Logger.getLogger(RepositoryApiImpl.class); - - @Value("${search.api.baseAddress}") - private String baseAddress; - - @Value("${search.api.usagestats}") - private String usagestatsBaseAddress; - - @Value("${search.api.usageEvents}") - private String usagestatsEvents; - - @PostConstruct - private void init() { - LOGGER.debug("Initialization method of statistics api!"); - - restTemplate = new RestTemplate(); - restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); - - httpHeaders = new HttpHeaders(); - httpHeaders.set("Content-Type", "application/json"); - } - - - @Override - public Map getStatistics() throws JSONException { - - - String aggregators = getTotalByType("datasource",baseAddress+"/resources", - "?query= " + - " oaftype exact datasource and " + - " ( datasourcetypename exact Institutional Repository Aggregator " + - " or datasourcetypename exact Publication Repository Aggregator )"); - - String dataRepositories = getTotalByType("datasource",baseAddress+"/resources", - "?query= " + - " oaftype exact datasource and " + - " datasourcetypename exact Data Repository " ); - - String literature = getTotalByType("datasource",baseAddress+"/resources", - "?query= " + - " oaftype exact datasource and " + - " ( datasourcetypename exact Institutional Repository " + - " or datasourcetypename exact Publication Repository )"); - - String journal = getTotalByType("datasource",baseAddress+"/resources", - "?query= " + - " oaftype exact datasource and " + - " datasourcetypename exact Journal"); - - String publications = getTotalByType("other",baseAddress,"/publications/count"); - String datasets = getTotalByType("other",baseAddress,"/datasets/count"); - String software = getTotalByType("other",baseAddress,"/software/count"); - JSONObject lastYearUsagestats = getLastYearUsageStatsTotal(); - Integer usagestats = getUsageStatsTotal(); - - - HashMap stats = new HashMap<>(); - stats.put("aggregators",aggregators); - stats.put("dataRepositories",dataRepositories); - stats.put("literature",literature); - stats.put("journal",journal); - - stats.put("publications",publications); - stats.put("datasets",datasets); - stats.put("software",software); - - stats.put("lastYearUsagestats",lastYearUsagestats.toString()); - stats.put("usagestats",usagestats.toString()); - - - return stats; - } - - - private String getTotalByType(String type,String url,String query) throws JSONException { - UriComponents uriComponents = UriComponentsBuilder - .fromHttpUrl(url + query) - .queryParam("page",0) - .queryParam("size",0) - .queryParam("format","json") - .build().encode(); - - String rs = restTemplate.getForObject(uriComponents.toUri(), String.class); - - if(type.equalsIgnoreCase("datasource")){ - JSONObject metadata = (JSONObject) new JSONObject(rs).get("meta"); - return String.valueOf(metadata.get("total")); - }else - return String.valueOf(new JSONObject(rs).get("total")); - - } - - private JSONObject getLastYearUsageStatsTotal() throws JSONException { - - UriComponents uriComponents = UriComponentsBuilder - .fromHttpUrl(usagestatsBaseAddress + "/totals") - .build().encode(); - - String rs = restTemplate.getForObject(uriComponents.toUri(), String.class); - - JSONArray resultSet = (JSONArray) new JSONObject(rs).getJSONArray("yearly_stats"); - JSONObject lastYear = resultSet.getJSONObject(resultSet.length()-1); - - Integer downloads = lastYear.getInt("downloads"); - Integer views = lastYear.getInt("views"); - String year = lastYear.getString("year"); - - JSONObject usagestats = new JSONObject(); - usagestats.put("number",String.valueOf(downloads+views)); - usagestats.put("year",year); - - return usagestats; - - } - - private Integer getUsageStatsTotal() throws JSONException { - UriComponents uriComponents = UriComponentsBuilder - .fromHttpUrl(usagestatsEvents) - .build().encode(); - - String rs = restTemplate.getForObject(uriComponents.toUri(), String.class); - JSONObject resultSet = new JSONObject(rs); - JSONObject totals = resultSet.getJSONObject("totals"); - return Integer.valueOf(totals.getString("events")); - } -} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/ValidatorApi.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/ValidatorApi.java deleted file mode 100644 index 646c50c..0000000 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/ValidatorApi.java +++ /dev/null @@ -1,69 +0,0 @@ -package eu.dnetlib.repo.manager.service.controllers; - -import eu.dnetlib.api.functionality.ValidatorServiceException; -import eu.dnetlib.domain.functionality.validator.JobForValidation; -import eu.dnetlib.domain.functionality.validator.RuleSet; -import eu.dnetlib.domain.functionality.validator.StoredJob; -import eu.dnetlib.repo.manager.shared.InterfaceInformation; -import eu.dnetlib.repo.manager.shared.ValidationServiceException; -import io.swagger.annotations.Api; -import org.json.JSONException; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - - -@RestController -@RequestMapping(value = "/validator") -@Api(description = "Validator API", tags = {"validator"}) -public interface ValidatorApi { - - @RequestMapping(value = "/submitJobForValidation",method = RequestMethod.POST, - consumes = MediaType.APPLICATION_JSON_VALUE, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - JobForValidation submitJobForValidation(JobForValidation jobForValidation) throws ValidatorServiceException; - - @RequestMapping(value = "/reSubmitJobForValidation/{email}/{jobId}",method = RequestMethod.POST, - consumes = MediaType.APPLICATION_JSON_VALUE, - produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - ResponseEntity reSubmitJobForValidation(String email,String jobId) throws JSONException, ValidatorServiceException; - - @RequestMapping(value = "/getRuleSets/{mode}" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - List getRuleSets(String mode); - - @RequestMapping(value = "/getSetsOfRepository" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - List getSetsOfRepository(String url); - - @RequestMapping(value = "/identifyRepository" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - boolean identifyRepo(String url); - - @RequestMapping(value = "/getRuleSet/{acronym}" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - RuleSet getRuleSet(String acronym); - - @RequestMapping(value = "/getStoredJobsNew" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - List getStoredJobsNew(String user, - String jobType, - String offset, - String limit, - String dateFrom, - String dateTo, - String validationStatus) throws ValidatorServiceException; - - - @RequestMapping(value = "/getStoredJobsTotalNumberNew" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - int getStoredJobsTotalNumberNew(String user, String jobType, String validationStatus) throws ValidatorServiceException; - - @RequestMapping(value = "/getInterfaceInformation" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - InterfaceInformation getInterfaceInformation(String baseUrl) throws ValidationServiceException; -} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/utils/Converter.java b/src/main/java/eu/dnetlib/repo/manager/utils/Converter.java similarity index 99% rename from src/main/java/eu/dnetlib/repo/manager/service/utils/Converter.java rename to src/main/java/eu/dnetlib/repo/manager/utils/Converter.java index b211c8f..209dd78 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/utils/Converter.java +++ b/src/main/java/eu/dnetlib/repo/manager/utils/Converter.java @@ -1,10 +1,10 @@ -package eu.dnetlib.repo.manager.service.utils; +package eu.dnetlib.repo.manager.utils; import com.fasterxml.jackson.core.JsonProcessingException; 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.domain.RepositorySnippet; import eu.dnetlib.repo.manager.shared.AggregationDetails; import eu.dnetlib.repo.manager.shared.Timezone; import org.apache.commons.codec.digest.DigestUtils; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/utils/OaiTools.java b/src/main/java/eu/dnetlib/repo/manager/utils/OaiTools.java similarity index 95% rename from src/main/java/eu/dnetlib/repo/manager/service/utils/OaiTools.java rename to src/main/java/eu/dnetlib/repo/manager/utils/OaiTools.java index 69adf0b..855042f 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/utils/OaiTools.java +++ b/src/main/java/eu/dnetlib/repo/manager/utils/OaiTools.java @@ -1,4 +1,4 @@ -package eu.dnetlib.repo.manager.service.utils; +package eu.dnetlib.repo.manager.utils; import org.apache.log4j.Logger; import org.dom4j.io.DOMWriter; diff --git a/src/main/resources/application-context.xml b/src/main/resources/application-context.xml index 57e38d8..1508354 100644 --- a/src/main/resources/application-context.xml +++ b/src/main/resources/application-context.xml @@ -10,7 +10,7 @@ - diff --git a/src/main/resources/eu/dnetlib/repo/manager/service/utils/countries.txt b/src/main/resources/eu/dnetlib/repo/manager/service/countries.txt similarity index 100% rename from src/main/resources/eu/dnetlib/repo/manager/service/utils/countries.txt rename to src/main/resources/eu/dnetlib/repo/manager/service/countries.txt diff --git a/src/main/resources/eu/dnetlib/repo/manager/service/utils/timezones.txt b/src/main/resources/eu/dnetlib/repo/manager/service/timezones.txt similarity index 100% rename from src/main/resources/eu/dnetlib/repo/manager/service/utils/timezones.txt rename to src/main/resources/eu/dnetlib/repo/manager/service/timezones.txt diff --git a/src/main/resources/eu/dnetlib/repo/manager/service/utils/typologies.txt b/src/main/resources/eu/dnetlib/repo/manager/service/typologies.txt similarity index 100% rename from src/main/resources/eu/dnetlib/repo/manager/service/utils/typologies.txt rename to src/main/resources/eu/dnetlib/repo/manager/service/typologies.txt diff --git a/src/main/webapp/WEB-INF/aai-security.xml b/src/main/webapp/WEB-INF/aai-security.xml index 272fb2d..98de7b5 100644 --- a/src/main/webapp/WEB-INF/aai-security.xml +++ b/src/main/webapp/WEB-INF/aai-security.xml @@ -42,7 +42,7 @@ - + @@ -54,7 +54,7 @@ - diff --git a/src/main/webapp/WEB-INF/applicationContext.xml b/src/main/webapp/WEB-INF/applicationContext.xml index 66ec56e..72ee304 100644 --- a/src/main/webapp/WEB-INF/applicationContext.xml +++ b/src/main/webapp/WEB-INF/applicationContext.xml @@ -36,7 +36,7 @@ - @@ -94,6 +94,6 @@ - + \ No newline at end of file diff --git a/src/test/java/unitest/PiwikTest.java b/src/test/java/unitest/PiwikTest.java index 49943e9..3b55e6b 100644 --- a/src/test/java/unitest/PiwikTest.java +++ b/src/test/java/unitest/PiwikTest.java @@ -2,7 +2,7 @@ package unitest; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.repo.manager.service.config.RepoManagerContextLoaderListener; +import eu.dnetlib.repo.manager.config.RepoManagerContextLoaderListener; import org.apache.commons.lang.StringEscapeUtils; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/src/test/java/unitest/ValidatorTest.java b/src/test/java/unitest/ValidatorTest.java index 5f23fcc..5cbe076 100644 --- a/src/test/java/unitest/ValidatorTest.java +++ b/src/test/java/unitest/ValidatorTest.java @@ -1,12 +1,11 @@ package unitest; -import eu.dnetlib.repo.manager.service.config.RepoManagerContextLoaderListener; -import eu.dnetlib.repo.manager.service.utils.OaiTools; +import eu.dnetlib.repo.manager.config.RepoManagerContextLoaderListener; +import eu.dnetlib.repo.manager.utils.OaiTools; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = RepoManagerContextLoaderListener.class) diff --git a/src/test/resources/application-context.xml b/src/test/resources/application-context.xml index 39e588e..b8a5cac 100644 --- a/src/test/resources/application-context.xml +++ b/src/test/resources/application-context.xml @@ -10,7 +10,7 @@ - diff --git a/src/test/resources/applicationContext.xml b/src/test/resources/applicationContext.xml index 79d2583..13e712e 100644 --- a/src/test/resources/applicationContext.xml +++ b/src/test/resources/applicationContext.xml @@ -36,7 +36,7 @@ - @@ -94,6 +94,6 @@ - + \ No newline at end of file