revisited export method

This commit is contained in:
Francesco Mangiacrapa 2024-04-22 09:58:40 +02:00
parent 69e15b6243
commit e58935d489
1 changed files with 48 additions and 31 deletions

View File

@ -93,30 +93,39 @@ public class GeoportalExporter {
checkExportType(req, export_type);
try {
boolean checked = false;
SecretManager cm = SecretManagerProvider.instance.get();
String context = cm.getContext();
final String context = cm.getContext();
if (context == null) {
throw ExceptionManager.forbiddenException(req, "Cannot determine context (the scope)", this.getClass(),
helpURI);
}
org.gcube.common.authorization.utils.user.User user = cm.getUser();
final org.gcube.common.authorization.utils.user.User user = cm.getUser();
if (user == null) {
throw ExceptionManager.forbiddenException(req, "Cannot determine user", this.getClass(), helpURI);
}
LOG.info("Identified caller {} in context {}", user.getUsername(), context);
try {
Geoportal_PDF_Exporter pdfExporter = new Geoportal_PDF_Exporter();
boolean checked = pdfExporter.checkConfig();
checked = pdfExporter.checkConfig();
} catch (Exception e) {
LOG.error("Error on performing export", e);
throw ExceptionManager
.internalErrorException(req,
"Error the " + Geoportal_PDF_Exporter.class.getSimpleName()
+ " seems to be not configured in the context: " + context,
this.getClass(), helpURI);
}
if (checked) {
try {
if (userAgentName != null) {
LOG.info("Serving request as User-Agent {}", userAgentName);
final String pollingCode = ucdID + "_" + projectID + "_" + System.currentTimeMillis();
String serviceViewPDF_URL = String.format("%s/%s/view/%s", Util.getServerURL(req),
"geoportal", pollingCode);
String entity = HTML_Page.entityHTMLMessage("Exporting as PDF...",
"The project with id: " + projectID, true, serviceViewPDF_URL);
try {
Thread t = new Thread() {
@Override
@ -127,6 +136,7 @@ public class GeoportalExporter {
map.put(pollingCode, fetchPDF);
pdfRef = exportAsPDF(req, ucdID, projectID, null, context, user);
LOG.info("exportAsPDF setFileRef in thread for code: " + pollingCode);
fetchPDF.setFileRef(pdfRef);
map.put(pollingCode, fetchPDF);
}
@ -134,9 +144,15 @@ public class GeoportalExporter {
};
t.start();
} catch (Exception e) {
// TODO: handle exception
LOG.error("Error on performing export in thread", e);
}
String serviceViewPDF_URL = String.format("%s/%s/view/%s", Util.getServerURL(req), "geoportal",
pollingCode);
String entity = HTML_Page.entityHTMLMessage("Exporting as PDF...",
"The project with id: " + projectID, true, serviceViewPDF_URL);
return Response.ok(entity).encoding("UTF-8").header(ConstantsResolver.CONTENT_TYPE, "text/html")
.build();
} else {
@ -152,17 +168,17 @@ public class GeoportalExporter {
.header("Content-Type", pdfRef.getContentType());
return response.build();
}
} else {
return Response.status(Status.NOT_FOUND)
.entity(GeoportalExporter.class.getSimpleName() + " Config not found in the context " + context)
.type(MediaType.TEXT_PLAIN).build();
}
} catch (Exception e) {
LOG.error("Error on performing export", e);
throw ExceptionManager.internalErrorException(req, "Sorry, error occurred when exporting the project",
this.getClass(), helpURI);
}
} else {
return Response.status(Status.NOT_FOUND)
.entity(GeoportalExporter.class.getSimpleName()
+ "seems to be not configured in the context: " + context)
.type(MediaType.TEXT_PLAIN).build();
}
}
@ -210,19 +226,20 @@ public class GeoportalExporter {
@GET
@Path("/view/{pdfCode}")
@Produces({ MediaType.TEXT_PLAIN, MediaType.TEXT_HTML})
@Produces({ MediaType.TEXT_PLAIN, MediaType.TEXT_HTML })
public Response viewPDF(@Context HttpServletRequest req, @PathParam(PDF_CODE) String pdfCode)
throws WebApplicationException {
LOG.info(this.getClass().getSimpleName() + " viewPDF - GET starts...");
LOG.info("param "+PDF_CODE+": {}", pdfCode);
LOG.info("param " + PDF_CODE + ": {}", pdfCode);
FetchPDF fetchedPDF = map.get(pdfCode);
LOG.info("FileReference at code {} is {}", pdfCode, fetchedPDF);
if (fetchedPDF == null) {
LOG.info("returning not found");
return Response.status(Status.NOT_FOUND).entity(HTML_Page.getErrorPage("Job not created", "No job found with id "+pdfCode))
return Response.status(Status.NOT_FOUND)
.entity(HTML_Page.getErrorPage("Job not created", "No job found with id " + pdfCode))
.type(MediaType.TEXT_HTML).build();
}