package gov.nysenate.openleg.controller.pdf;
import gov.nysenate.openleg.client.view.hearing.PublicHearingPdfView;
import gov.nysenate.openleg.model.hearing.PublicHearing;
import gov.nysenate.openleg.model.hearing.PublicHearingId;
import gov.nysenate.openleg.service.hearing.data.PublicHearingDataService;
import gov.nysenate.openleg.service.hearing.data.PublicHearingNotFoundEx;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.slf4j.Logger;
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.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@RestController
@RequestMapping(value = "/pdf/hearings")
public class PublicHearingPdfCtrl
{
private static final Logger logger = LoggerFactory.getLogger(PublicHearingPdfCtrl.class);
@Autowired
private PublicHearingDataService hearingData;
/**
* Single Public Hearing PDF retrieval.
* -----------------------------------
*
* Retrieve a single public hearing text pdf: (GET) /pdf/hearings/{filename}/
*
* Request Parameters: None.
*
* Expected Output: PDF response.
*/
@RequestMapping(value = "/{filename}")
public ResponseEntity<byte[]> getHearingPdf(@PathVariable String filename, HttpServletResponse response)
throws IOException {
try {
PublicHearing hearing = hearingData.getPublicHearing(new PublicHearingId(filename));
ByteArrayOutputStream pdfBytes = new ByteArrayOutputStream();
PublicHearingPdfView.writePublicHearingPdf(hearing, pdfBytes);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/pdf"));
return new ResponseEntity<>(pdfBytes.toByteArray(), headers, HttpStatus.OK);
} catch (PublicHearingNotFoundEx ex) {
response.sendError(404, ex.getMessage());
} catch (COSVisitorException ex) {
logger.error("Failed to return transcript PDF", ex);
response.sendError(404, ex.getMessage());
}
return null;
}
}