package eu.eudat.controllers; import eu.eudat.audit.AuditableAction; import eu.eudat.model.file.ExportRequestModel; import eu.eudat.model.file.FileEnvelope; import eu.eudat.model.file.RepositoryFileFormat; import eu.eudat.service.transformer.FileTransformerService; import gr.cite.tools.auditing.AuditService; import gr.cite.tools.logging.LoggerService; import gr.cite.tools.logging.MapLogEntry; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import javax.management.InvalidApplicationException; import java.io.IOException; import java.util.List; @RestController @CrossOrigin @RequestMapping(value = {"/api/file-transformer/"}) public class FileTransformerController { private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(FileTransformerController.class)); private final FileTransformerService fileTransformerService; private final AuditService auditService; @Autowired public FileTransformerController(FileTransformerService fileTransformerService, AuditService auditService){ this.fileTransformerService = fileTransformerService; this.auditService = auditService; } @GetMapping("/available") public List getAvailableConfigurations() { logger.debug(new MapLogEntry("getAvailableConfigurations")); List model = this.fileTransformerService.getAvailableExportFileFormats(); this.auditService.track(AuditableAction.FileTransformer_GetAvailableConfigurations); //this.auditService.trackIdentity(AuditableAction.IdentityTracking_Action); return model; } @PostMapping("/export-dmp") public ResponseEntity export(@RequestBody ExportRequestModel requestModel) throws InvalidApplicationException, IOException { logger.debug(new MapLogEntry("exporting dmp")); HttpHeaders headers = new HttpHeaders(); FileEnvelope fileEnvelope = this.fileTransformerService.exportDmp(requestModel.getId(), requestModel.getRepositoryId(), requestModel.getFormat()); headers.add("Content-Disposition", "attachment;filename=" + fileEnvelope.getFilename()); byte[] data = fileEnvelope.getFile(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); return new ResponseEntity<>(data, headers, HttpStatus.OK); } @PostMapping("/export-description") public ResponseEntity exportDescription(@RequestBody ExportRequestModel requestModel) { logger.debug(new MapLogEntry("exporting dmp")); HttpHeaders headers = new HttpHeaders(); FileEnvelope fileEnvelope = this.fileTransformerService.exportDescription(requestModel.getId(), requestModel.getRepositoryId(), requestModel.getFormat()); headers.add("Content-Disposition", "attachment;filename=" + fileEnvelope.getFilename()); byte[] data = fileEnvelope.getFile(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); return new ResponseEntity<>(data, headers, HttpStatus.OK); } }