2019-02-16 11:04:41 +01:00
package eu.dnetlib.repo.manager.controllers ;
import eu.dnetlib.domain.data.PiwikInfo ;
2019-07-22 15:00:51 +02:00
import eu.dnetlib.repo.manager.domain.OrderByField ;
import eu.dnetlib.repo.manager.domain.OrderByType ;
2019-07-23 10:07:39 +02:00
import eu.dnetlib.repo.manager.domain.Paging ;
2019-02-16 11:04:41 +01:00
import eu.dnetlib.repo.manager.service.PiWikServiceImpl ;
import eu.dnetlib.repo.manager.shared.RepositoryServiceException ;
import io.swagger.annotations.Api ;
2019-07-23 09:47:39 +02:00
import io.swagger.annotations.ApiImplicitParam ;
import io.swagger.annotations.ApiImplicitParams ;
2019-07-23 11:39:08 +02:00
import org.apache.log4j.Logger ;
2019-02-16 11:04:41 +01:00
import org.springframework.beans.factory.annotation.Autowired ;
2019-07-23 11:39:08 +02:00
import org.springframework.core.io.FileSystemResource ;
2019-02-16 11:04:41 +01:00
import org.springframework.http.MediaType ;
import org.springframework.http.ResponseEntity ;
import org.springframework.security.access.prepost.PreAuthorize ;
import org.springframework.web.bind.annotation.* ;
2019-07-23 11:39:08 +02:00
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse ;
import java.io.File ;
import java.io.FileNotFoundException ;
import java.io.IOException ;
import java.io.PrintWriter ;
import java.nio.file.Files ;
import java.nio.file.Path ;
import java.text.SimpleDateFormat ;
import java.util.Date ;
2019-02-16 11:04:41 +01:00
import java.util.List ;
@RestController
@RequestMapping ( value = " /piwik " )
@Api ( description = " Piwik API " , tags = { " piwik " } )
public class PiWikController {
2019-07-23 14:30:46 +02:00
private static final Logger logger = Logger
2019-07-23 11:39:08 +02:00
. getLogger ( PiWikController . class ) ;
2019-02-16 11:04:41 +01:00
@Autowired
2019-07-22 15:00:51 +02:00
private PiWikServiceImpl piWikService ;
2019-02-16 11:04:41 +01:00
@RequestMapping ( value = " /getPiwikSiteForRepo/{repositoryId} " , method = RequestMethod . GET , produces = MediaType . APPLICATION_JSON_VALUE )
@ResponseBody
public PiwikInfo getPiwikSiteForRepo ( @PathVariable ( " repositoryId " ) String repositoryId ) {
return piWikService . getPiwikSiteForRepo ( repositoryId ) ;
}
@RequestMapping ( value = " /savePiwikInfo " , method = RequestMethod . POST , produces = MediaType . APPLICATION_JSON_VALUE )
2019-07-19 11:31:23 +02:00
@PreAuthorize ( " hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or (hasRole('ROLE_USER') " +
2019-02-16 11:04:41 +01:00
" and #piwikInfo.requestorEmail == authentication.userInfo.email) " )
public PiwikInfo savePiwikInfo ( @RequestBody PiwikInfo piwikInfo ) {
return piWikService . savePiwikInfo ( piwikInfo ) ;
}
@RequestMapping ( value = " /getPiwikSitesForRepos " , method = RequestMethod . GET , produces = MediaType . APPLICATION_JSON_VALUE )
2019-07-23 09:47:39 +02:00
@ApiImplicitParams ( {
@ApiImplicitParam ( name = " from " , dataType = " number " , paramType = " query " ) ,
@ApiImplicitParam ( name = " quantity " , dataType = " number " , paramType = " query " ) ,
@ApiImplicitParam ( name = " order " , dataType = " eu.dnetlib.repo.manager.domain.OrderByType " , paramType = " query " ) ,
@ApiImplicitParam ( name = " searchField " , dataType = " eu.dnetlib.repo.manager.domain.OrderByField " , paramType = " query " ) ,
@ApiImplicitParam ( name = " orderField " , dataType = " string " , paramType = " query " ) ,
} )
2019-07-23 10:07:39 +02:00
public Paging < PiwikInfo > getPiwikSitesForRepos (
2019-07-22 15:00:51 +02:00
@RequestParam ( value = " from " , required = false , defaultValue = " 0 " ) int from ,
@RequestParam ( value = " quantity " , required = false , defaultValue = " 100 " ) int quantity ,
2019-07-23 11:39:08 +02:00
@RequestParam ( value = " order " , required = false , defaultValue = " DSC " ) OrderByType orderType ,
2019-07-22 15:00:51 +02:00
@RequestParam ( value = " orderField " , required = false , defaultValue = " REPOSITORY_NAME " ) OrderByField orderField ,
@RequestParam ( value = " searchField " , required = false , defaultValue = " " ) String searchField
) {
2019-07-23 10:07:39 +02:00
Paging < PiwikInfo > results = new Paging < > ( ) ;
List < PiwikInfo > returning = piWikService . getPiwikSitesForRepos ( orderField , orderType , from , quantity , searchField ) ;
results . setFrom ( from ) ;
results . setTo ( from + returning . size ( ) ) ;
results . setTotal ( piWikService . getPiwikSitesTotals ( ) ) ;
results . setResults ( returning ) ;
return results ;
2019-02-16 11:04:41 +01:00
}
2019-07-23 11:39:08 +02:00
@ApiImplicitParams ( {
@ApiImplicitParam ( name = " from " , dataType = " number " , paramType = " query " ) ,
@ApiImplicitParam ( name = " quantity " , dataType = " number " , paramType = " query " ) ,
@ApiImplicitParam ( name = " order " , dataType = " eu.dnetlib.repo.manager.domain.OrderByType " , paramType = " query " ) ,
@ApiImplicitParam ( name = " searchField " , dataType = " eu.dnetlib.repo.manager.domain.OrderByField " , paramType = " query " ) ,
@ApiImplicitParam ( name = " orderField " , dataType = " string " , paramType = " query " ) ,
} )
@RequestMapping ( value = " /getPiwikSitesForRepos/csv " , method = RequestMethod . GET , produces = MediaType . APPLICATION_OCTET_STREAM_VALUE )
@ResponseBody
public FileSystemResource getPiwikSitesForReposToCsv (
@RequestParam ( value = " from " , required = false , defaultValue = " 0 " ) int from ,
@RequestParam ( value = " quantity " , required = false , defaultValue = " 100 " ) int quantity ,
@RequestParam ( value = " order " , required = false , defaultValue = " DSC " ) OrderByType orderType ,
@RequestParam ( value = " orderField " , required = false , defaultValue = " REPOSITORY_NAME " ) OrderByField orderField ,
@RequestParam ( value = " searchField " , required = false , defaultValue = " " ) String searchField ,
HttpServletResponse response ,
HttpServletRequest request
) throws IOException {
Path p = Files . createTempFile ( " exportingCsv- " , new Date ( ) . toString ( ) ) ;
List < PiwikInfo > returning = piWikService . getPiwikSitesForRepos ( orderField , orderType , from , quantity , searchField ) ;
try ( PrintWriter writer = new PrintWriter ( p . toFile ( ) ) ) {
StringBuilder sb = new StringBuilder ( ) ;
2019-07-23 11:47:20 +02:00
sb . append ( " Repository ID , Repository name, Country, Site ID, Authentication token, Creation date, Requestor full name, Requestor email, Validated, Validation date, Comment \ n " ) ;
2019-07-23 11:39:08 +02:00
for ( PiwikInfo piwikInfo : returning ) {
sb . append (
( piwikInfo . getRepositoryId ( ) = = null ? " , " : piwikInfo . getRepositoryId ( ) + " , " ) +
2019-07-23 11:47:20 +02:00
( piwikInfo . getRepositoryName ( ) = = null ? " , " : piwikInfo . getRepositoryName ( ) + " , " ) +
( piwikInfo . getCountry ( ) = = null ? " , " : piwikInfo . getCountry ( ) + " , " ) +
2019-07-23 11:39:08 +02:00
( piwikInfo . getSiteId ( ) = = null ? " , " : piwikInfo . getSiteId ( ) + " , " ) +
( piwikInfo . getAuthenticationToken ( ) = = null ? " , " : piwikInfo . getAuthenticationToken ( ) + " , " ) +
( piwikInfo . getCreationDate ( ) = = null ? " , " : piwikInfo . getCreationDate ( ) . toString ( ) + " , " ) +
( piwikInfo . getRequestorName ( ) = = null ? " , " : piwikInfo . getRequestorName ( ) + " , " ) +
( piwikInfo . getRequestorEmail ( ) = = null ? " , " : piwikInfo . getRequestorEmail ( ) + " , " ) +
piwikInfo . isValidated ( ) + " , " +
( piwikInfo . getValidationDate ( ) = = null ? " , " : piwikInfo . getValidationDate ( ) . toString ( ) + " , " ) +
2019-07-23 11:47:20 +02:00
( piwikInfo . getComment ( ) = = null ? " \ n " : piwikInfo . getComment ( ) + " \ n " )
2019-07-23 11:39:08 +02:00
) ;
}
writer . write ( sb . toString ( ) ) ;
} catch ( FileNotFoundException e ) {
2019-07-23 14:30:46 +02:00
logger . error ( e . getMessage ( ) ) ;
2019-07-23 11:39:08 +02:00
}
String mimeType = request . getServletContext ( ) . getMimeType ( p . toFile ( ) . getAbsolutePath ( ) ) ;
if ( mimeType = = null ) {
mimeType = " application/octet-stream " ;
}
response . setContentType ( mimeType ) ;
response . setContentLength ( ( int ) p . toFile ( ) . length ( ) ) ;
String headerKey = " Content-Disposition " ;
2019-07-23 14:30:46 +02:00
SimpleDateFormat sdfDate = new SimpleDateFormat ( " ddMMyyyy " ) ;
2019-07-23 11:39:08 +02:00
Date now = new Date ( ) ;
String strDate = sdfDate . format ( now ) ;
String headerValue = String . format ( " attachment; filename= \" csv-%s.csv \" " ,
strDate ) ;
response . setHeader ( headerKey , headerValue ) ;
return new FileSystemResource ( p . toFile ( ) ) ;
}
2019-02-16 11:04:41 +01:00
@RequestMapping ( value = " /approvePiwikSite/{repositoryId} " , method = RequestMethod . GET )
@ResponseBody
2019-07-19 11:31:23 +02:00
@PreAuthorize ( " hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') " )
2019-02-16 11:04:41 +01:00
public ResponseEntity < Object > approvePiwikSite ( @PathVariable ( " repositoryId " ) String repositoryId ) {
return piWikService . approvePiwikSite ( repositoryId ) ;
}
@RequestMapping ( value = " /getOpenaireId/{repositoryId} " , method = RequestMethod . GET , produces = MediaType . APPLICATION_JSON_VALUE )
@ResponseBody
2019-07-22 15:00:51 +02:00
public String getOpenaireId ( String repositoryid ) {
2019-02-16 11:04:41 +01:00
return piWikService . getOpenaireId ( repositoryid ) ;
}
@RequestMapping ( value = " /markPiwikSiteAsValidated/{repositoryId} " , method = RequestMethod . POST ,
consumes = MediaType . APPLICATION_JSON_VALUE )
@ResponseBody
2019-07-19 11:31:23 +02:00
@PreAuthorize ( " hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') " )
2019-02-16 11:04:41 +01:00
public ResponseEntity < Object > markPiwikSiteAsValidated ( @PathVariable ( " repositoryId " ) String repositoryId ) throws RepositoryServiceException {
return piWikService . markPiwikSiteAsValidated ( repositoryId ) ;
}
@RequestMapping ( value = " /enableMetricsForRepository " , method = RequestMethod . POST ,
consumes = MediaType . APPLICATION_JSON_VALUE )
2019-07-19 11:31:23 +02:00
@PreAuthorize ( " hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or (hasRole('ROLE_USER') and #piwikInfo.requestorEmail == authentication.userInfo.email) " )
2019-02-16 11:04:41 +01:00
public PiwikInfo enableMetricsForRepository ( @RequestParam ( " officialName " ) String officialName ,
@RequestParam ( " repoWebsite " ) String repoWebsite ,
@RequestBody PiwikInfo piwikInfo ) throws RepositoryServiceException {
return piWikService . enableMetricsForRepository ( officialName , repoWebsite , piwikInfo ) ;
}
}