dnet-applications/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/funders/FundersApiController.java

75 lines
2.6 KiB
Java
Raw Normal View History

2022-02-04 10:12:15 +01:00
package eu.dnetlib.openaire.funders;
2024-02-19 16:06:34 +01:00
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
2022-02-04 10:12:15 +01:00
2024-02-19 16:06:34 +01:00
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
2022-02-04 10:12:15 +01:00
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2024-02-19 16:06:34 +01:00
import org.springframework.http.MediaType;
2022-08-19 15:21:40 +02:00
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import eu.dnetlib.openaire.common.AbstractExporterController;
import eu.dnetlib.openaire.exporter.exceptions.FundersApiException;
2022-08-19 15:21:40 +02:00
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
2022-02-04 10:12:15 +01:00
@RestController
2022-08-19 15:21:40 +02:00
@CrossOrigin(origins = {
2024-01-29 15:01:03 +01:00
"*"
2022-08-19 15:21:40 +02:00
})
2022-02-04 10:12:15 +01:00
@ConditionalOnProperty(value = "openaire.exporter.enable.funders", havingValue = "true")
2022-08-19 15:21:40 +02:00
@Tag(name = "OpenAIRE funders API", description = "the OpenAIRE funders API")
2022-02-04 10:12:15 +01:00
public class FundersApiController extends AbstractExporterController {
@Autowired
2024-02-19 16:06:34 +01:00
private FunderService service;
private static final Log log = LogFactory.getLog(FundersApiController.class);
2022-02-04 10:12:15 +01:00
2024-02-19 16:06:34 +01:00
@RequestMapping(value = "/funders", produces = {
2024-01-29 15:01:03 +01:00
"application/json"
2022-08-19 15:21:40 +02:00
}, method = RequestMethod.GET)
2024-02-19 16:06:34 +01:00
@Operation(summary = "get all funders", description = "get all funders")
2022-02-04 10:12:15 +01:00
@ApiResponses(value = {
2024-01-29 15:01:03 +01:00
@ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "500", description = "unexpected error")
2022-08-19 15:21:40 +02:00
})
2024-02-19 16:06:34 +01:00
public void getFunders(final HttpServletResponse res) throws FundersApiException {
2022-02-04 10:12:15 +01:00
2024-02-19 16:06:34 +01:00
res.setContentType(MediaType.APPLICATION_JSON_VALUE);
2022-02-04 10:12:15 +01:00
2024-02-19 16:06:34 +01:00
final File file = service.getTempFile();
2022-02-04 10:12:15 +01:00
2024-02-19 16:06:34 +01:00
if (file == null) {
log.error("Missing temp file (NULL)");
throw new FundersApiException("Missing temp file (NULL)");
}
2022-02-04 10:12:15 +01:00
2024-02-19 16:06:34 +01:00
if (!file.exists()) {
log.error("Missing temp file " + service.getTempFile());
throw new FundersApiException("Missing temp file " + service.getTempFile());
}
2022-02-04 10:12:15 +01:00
2024-02-19 16:06:34 +01:00
try (final InputStream in = new FileInputStream(file); OutputStream out = res.getOutputStream()) {
IOUtils.copy(in, out);
return;
} catch (final Exception e) {
log.error("Error reading file " + service.getTempFile(), e);
throw new FundersApiException("Error reading file " + service.getTempFile(), e);
}
2024-02-19 12:37:50 +01:00
}
2022-02-04 10:12:15 +01:00
}