diff --git a/src/main/java/org/gcube/datatransfer/resolver/geoportal/exporter/HTML_Page.java b/src/main/java/org/gcube/datatransfer/resolver/geoportal/exporter/HTML_Page.java index 3d505e7..d2a6f28 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/geoportal/exporter/HTML_Page.java +++ b/src/main/java/org/gcube/datatransfer/resolver/geoportal/exporter/HTML_Page.java @@ -75,7 +75,7 @@ public class HTML_Page { + " }\n" + " } catch (error) {\n" + " console.log(\"no json response \" + response_object);\n" - + " console.log(\"error \" + error);\n" + + " //console.log(\"error \" + error);\n" + " showError(\"Error when exporting PDF :-(\");\n" + " }\n" + "\n" diff --git a/src/main/java/org/gcube/datatransfer/resolver/services/GeoportalExporter.java b/src/main/java/org/gcube/datatransfer/resolver/services/GeoportalExporter.java index 053cd99..6330ce4 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/services/GeoportalExporter.java +++ b/src/main/java/org/gcube/datatransfer/resolver/services/GeoportalExporter.java @@ -3,11 +3,13 @@ package org.gcube.datatransfer.resolver.services; import java.io.InputStream; import java.util.LinkedHashMap; +import javax.annotation.Nullable; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; @@ -56,23 +58,31 @@ public class GeoportalExporter { public static final String PATH_USECASE_ID = GeoportalResolver.PATH_USECASE_ID; public static final String PATH_VRE_NAME = GeoportalResolver.PATH_VRE_NAME; + public static final String QUERY_PARAMETER_AS_URL = "as_url"; + private static final Logger LOG = LoggerFactory.getLogger(GeoportalExporter.class); private static String helpURI = "https://wiki.gcube-system.org/gcube/URI_Resolver#Geoportal_Resolver"; private static LinkedHashMap map = new LinkedHashMap(); + /** + * The Enum ACCEPTED_EXPORT_TYPE. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Apr 22, 2024 + */ public enum ACCEPTED_EXPORT_TYPE { pdf } /** - * Resolve geoportal no app def. + * Export. * - * @param req the req - * @param vreName the vre name - * @param exportType the export type - * @param ucdID the ucd ID - * @param projectID the project ID + * @param req the req + * @param export_type the export type + * @param ucdID the ucd ID + * @param projectID the project ID * @return the response * @throws WebApplicationException the web application exception */ @@ -80,8 +90,8 @@ public class GeoportalExporter { @Path("/export/{type}/{usecase_id}/{project_id}") @Produces({ MediaType.TEXT_HTML, MediaType.TEXT_PLAIN, MediaType.APPLICATION_OCTET_STREAM }) public Response export(@Context HttpServletRequest req, @PathParam(EXPORT_TYPE) String export_type, - @PathParam(PATH_USECASE_ID) String ucdID, @PathParam(PATH_PROJECT_ID) String projectID) - throws WebApplicationException { + @PathParam(PATH_USECASE_ID) String ucdID, @PathParam(PATH_PROJECT_ID) String projectID, + @QueryParam(QUERY_PARAMETER_AS_URL) @Nullable String asURL) throws WebApplicationException { String userAgentName = req.getHeader("User-Agent"); @@ -92,6 +102,13 @@ public class GeoportalExporter { checkPathParameterNotNull(req, PATH_USECASE_ID, ucdID); checkPathParameterNotNull(req, PATH_PROJECT_ID, projectID); + boolean getAsURL = false; + try { + getAsURL = Boolean.parseBoolean(asURL); + } catch (Exception e) { + // TODO: handle exception + } + checkExportType(req, export_type); boolean checked = false; @@ -159,14 +176,20 @@ public class GeoportalExporter { LOG.info("Serving request as client..."); FileReference pdfRef = exportAsPDF(req, ucdID, projectID, null, context, user); - InputStream input = pdfRef.getStorageVolatileURL().openStream(); - StreamingOutput so = new SingleFileStreamingOutput(input); + if (!getAsURL) { + //returning as stream + InputStream input = pdfRef.getStorageVolatileURL().openStream(); + StreamingOutput so = new SingleFileStreamingOutput(input); - ResponseBuilder response = Response.ok(so) - .header(ConstantsResolver.CONTENT_DISPOSITION, - "inline; filename=\"" + pdfRef.getFileName() + "\"") - .header("Content-Type", pdfRef.getContentType()); - return response.build(); + ResponseBuilder response = Response.ok(so) + .header(ConstantsResolver.CONTENT_DISPOSITION, + "inline; filename=\"" + pdfRef.getFileName() + "\"") + .header("Content-Type", pdfRef.getContentType()); + return response.build(); + }else { + //returning as URI; + return Response.seeOther(pdfRef.getStorageVolatileURL().toURI()).build(); + } } } catch (Exception e) { LOG.error("Error on performing export", e); @@ -182,6 +205,14 @@ public class GeoportalExporter { } + /** + * Healthcheck. + * + * @param req the req + * @param export_type the export type + * @return the response + * @throws WebApplicationException the web application exception + */ @GET @Path("/export/{type}/healthcheck") @Produces({ MediaType.TEXT_HTML, MediaType.TEXT_PLAIN }) @@ -224,6 +255,14 @@ public class GeoportalExporter { } } + /** + * View PDF. + * + * @param req the req + * @param pdfCode the pdf code + * @return the response + * @throws WebApplicationException the web application exception + */ @GET @Path("/view/{pdfCode}") @Produces({ MediaType.TEXT_PLAIN, MediaType.TEXT_HTML }) @@ -309,6 +348,14 @@ public class GeoportalExporter { } + /** + * Check path parameter not null. + * + * @param req the req + * @param parameter the parameter + * @param value the value + * @throws BadRequestException the bad request exception + */ public void checkPathParameterNotNull(HttpServletRequest req, String parameter, String value) throws BadRequestException { if (value == null || value.isEmpty()) { @@ -318,6 +365,14 @@ public class GeoportalExporter { } } + /** + * Check export type. + * + * @param req the req + * @param export_type the export type + * @return the accepted export type + * @throws BadRequestException the bad request exception + */ public ACCEPTED_EXPORT_TYPE checkExportType(HttpServletRequest req, String export_type) throws BadRequestException { ACCEPTED_EXPORT_TYPE exportType; try { @@ -333,6 +388,18 @@ public class GeoportalExporter { return exportType; } + /** + * Export as PDF. + * + * @param req the req + * @param profileID the profile ID + * @param projectID the project ID + * @param profileTitle the profile title + * @param context the context + * @param user the user + * @return the file reference + * @throws WebApplicationException the web application exception + */ public FileReference exportAsPDF(HttpServletRequest req, String profileID, String projectID, String profileTitle, String context, User user) throws WebApplicationException { LOG.info("exportAsPDF for profileID: " + profileID + ", projectID: " + projectID + "called"); @@ -370,6 +437,14 @@ public class GeoportalExporter { return pdfRef; } + /** + * Gets the public links for. + * + * @param item the item + * @param context the context + * @return the public links for + * @throws Exception the exception + */ public GeoportalItemReferences getPublicLinksFor(GeoportalItemReferences item, String context) throws Exception { LOG.info("getPublicLinksFor called for: " + item);