2022-10-24 08:35:49 +02:00
package eu.eudat.controllers ;
import eu.eudat.logic.managers.DepositManager ;
import eu.eudat.logic.security.claims.ClaimedAuthorities ;
import eu.eudat.logic.services.ApiContext ;
2022-10-27 08:32:26 +02:00
import eu.eudat.models.data.doi.DepositCode ;
2022-10-26 12:50:01 +02:00
import eu.eudat.models.data.doi.DepositRequest ;
2022-11-02 08:41:40 +01:00
import eu.eudat.models.data.doi.Doi ;
2022-11-22 08:40:05 +01:00
import eu.eudat.models.data.doi.RepositoryConfig ;
2022-10-24 08:35:49 +02:00
import eu.eudat.models.data.helpers.responses.ResponseItem ;
import eu.eudat.models.data.security.Principal ;
import eu.eudat.types.ApiMessageCode ;
import eu.eudat.types.Authorities ;
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.http.HttpStatus ;
import org.springframework.http.ResponseEntity ;
import org.springframework.web.bind.annotation.* ;
import java.util.List ;
@RestController
@CrossOrigin
@RequestMapping ( value = { " /api/deposit/ " } )
public class DepositController extends BaseController {
private static final Logger logger = LoggerFactory . getLogger ( DepositController . class ) ;
private DepositManager depositManager ;
@Autowired
public DepositController ( ApiContext apiContext , DepositManager depositManager ) {
super ( apiContext ) ;
this . depositManager = depositManager ;
}
@RequestMapping ( method = RequestMethod . GET , value = { " /repos " } )
public @ResponseBody
2022-11-22 08:40:05 +01:00
ResponseEntity < ResponseItem < List < RepositoryConfig > > > getAvailableRepos ( @ClaimedAuthorities ( claims = { Authorities . ADMIN , Authorities . MANAGER , Authorities . USER , Authorities . ANONYMOUS } ) Principal principal ) {
List < RepositoryConfig > ids = this . depositManager . getAvailableRepos ( ) ;
return ResponseEntity . status ( HttpStatus . OK ) . body ( new ResponseItem < List < RepositoryConfig > > ( ) . status ( ApiMessageCode . NO_MESSAGE ) . payload ( ids ) ) ;
2022-10-26 12:50:01 +02:00
}
2022-10-27 08:32:26 +02:00
@RequestMapping ( method = RequestMethod . POST , value = { " /getAccessToken " } )
2022-10-26 12:50:01 +02:00
public @ResponseBody
2022-10-27 08:32:26 +02:00
ResponseEntity < ResponseItem < String > > getAccessToken ( @RequestBody DepositCode depositCode , @ClaimedAuthorities ( claims = { Authorities . ADMIN , Authorities . MANAGER , Authorities . USER , Authorities . ANONYMOUS } ) Principal principal ) throws Exception {
String accessToken = this . depositManager . authenticate ( depositCode . getRepositoryId ( ) , depositCode . getCode ( ) ) ;
2022-10-26 12:50:01 +02:00
return ResponseEntity . status ( HttpStatus . OK ) . body ( new ResponseItem < String > ( ) . status ( ApiMessageCode . NO_MESSAGE ) . payload ( accessToken ) ) ;
}
@RequestMapping ( method = RequestMethod . POST , value = { " /createDoi " } )
2022-10-27 08:32:26 +02:00
public @ResponseBody
2022-11-02 08:41:40 +01:00
ResponseEntity < ResponseItem < Doi > > createDoi ( @RequestBody DepositRequest depositRequest , @ClaimedAuthorities ( claims = { Authorities . ADMIN , Authorities . MANAGER , Authorities . USER , Authorities . ANONYMOUS } ) Principal principal ) {
2022-10-26 12:50:01 +02:00
try {
2022-11-02 08:41:40 +01:00
Doi doi = this . depositManager . deposit ( depositRequest , principal ) ;
return ResponseEntity . status ( HttpStatus . OK ) . body ( new ResponseItem < Doi > ( ) . status ( ApiMessageCode . SUCCESS_MESSAGE ) . message ( " Successfully created DOI for Data Datamanagement Plan in question. " ) . payload ( doi ) ) ;
2022-10-26 12:50:01 +02:00
} catch ( Exception e ) {
logger . error ( e . getMessage ( ) , e ) ;
2022-11-02 08:41:40 +01:00
return ResponseEntity . status ( HttpStatus . BAD_REQUEST ) . body ( new ResponseItem < Doi > ( ) . status ( ApiMessageCode . ERROR_MESSAGE ) . message ( " Failed to create DOI for the Data Management Plan: " + e . getMessage ( ) ) ) ;
2022-10-26 12:50:01 +02:00
}
2022-10-24 08:35:49 +02:00
}
}