diff --git a/roda-common/roda-common-data/src/main/java/org/roda/core/data/common/RodaConstants.java b/roda-common/roda-common-data/src/main/java/org/roda/core/data/common/RodaConstants.java index eb07136286..e449fbbd9d 100644 --- a/roda-common/roda-common-data/src/main/java/org/roda/core/data/common/RodaConstants.java +++ b/roda-common/roda-common-data/src/main/java/org/roda/core/data/common/RodaConstants.java @@ -219,7 +219,7 @@ public enum DateGranularity { public static final String API_QUERY_KEY_ACCEPT_FORMAT = "acceptFormat"; public static final String API_QUERY_KEY_INLINE = "inline"; public static final String API_QUERY_KEY_JSONP_CALLBACK = "callback"; - public static final String API_QUERY_DEFAULT_JSONP_CALLBACK = "rodaCallback"; + public static final String API_QUERY_DEFAULT_JSONP_CALLBACK = ""; public static final String API_QUERY_VALUE_ACCEPT_FORMAT_BIN = "bin"; public static final String API_QUERY_VALUE_ACCEPT_FORMAT_XML = "xml"; public static final String API_QUERY_VALUE_ACCEPT_FORMAT_HTML = "html"; diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/api/v1/IndexResource.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/api/v1/IndexResource.java index ea28b8071a..0d42511f28 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/api/v1/IndexResource.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/api/v1/IndexResource.java @@ -27,6 +27,7 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.csv.CSVFormat; import org.apache.commons.lang3.StringUtils; +import org.glassfish.jersey.server.JSONP; import org.roda.core.RodaCoreFactory; import org.roda.core.common.UserUtility; import org.roda.core.data.common.RodaConstants; @@ -140,7 +141,8 @@ public class IndexResource { * if some error occurs. */ @GET - @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, ExtraMediaType.TEXT_CSV}) + @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, ExtraMediaType.TEXT_CSV, ExtraMediaType.APPLICATION_JAVASCRIPT}) + @JSONP(callback = RodaConstants.API_QUERY_DEFAULT_JSONP_CALLBACK, queryParam = RodaConstants.API_QUERY_KEY_JSONP_CALLBACK) @ApiOperation(value = "Find indexed resources", notes = "Find indexed resources.", response = IndexResult.class, responseContainer = "List") public Response list( @ApiParam(value = "Class of resources to return", required = true, example = "org.roda.core.data.v2.ip.IndexedFile") @QueryParam(RodaConstants.API_QUERY_KEY_RETURN_CLASS) final String returnClass, @@ -154,7 +156,8 @@ public Response list( @ApiParam(value = "Return only active resources?", defaultValue = "true") @QueryParam(RodaConstants.API_QUERY_KEY_ONLY_ACTIVE) final Boolean onlyActive, @ApiParam(value = "Export facet data", defaultValue = "false") @QueryParam(RodaConstants.API_QUERY_KEY_EXPORT_FACETS) final boolean exportFacets, @ApiParam(value = "Filename", defaultValue = DEFAULT_CSV_FILENAME) @QueryParam(RodaConstants.API_QUERY_KEY_FILENAME) final String filename, - @ApiParam(value = "Choose format in which to get the response") @QueryParam(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT) String acceptFormat) + @ApiParam(value = "Choose format in which to get the response") @QueryParam(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT) String acceptFormat, + @ApiParam(value = "JSONP callback name", required = false, allowMultiple = false, defaultValue = RodaConstants.API_QUERY_DEFAULT_JSONP_CALLBACK) @QueryParam(RodaConstants.API_QUERY_KEY_JSONP_CALLBACK) String jsonpCallbackName) throws RODAException { final String mediaType = ApiUtils.getMediaType(acceptFormat, request); diff --git a/roda-ui/roda-wui/src/main/java/org/roda/wui/api/v1/utils/ApiUtils.java b/roda-ui/roda-wui/src/main/java/org/roda/wui/api/v1/utils/ApiUtils.java index 906c6cc4e6..e6aba1269b 100644 --- a/roda-ui/roda-wui/src/main/java/org/roda/wui/api/v1/utils/ApiUtils.java +++ b/roda-ui/roda-wui/src/main/java/org/roda/wui/api/v1/utils/ApiUtils.java @@ -84,7 +84,7 @@ private ApiUtils() { /** * Get media type - * + * * @param acceptFormat * String with required format * @param request @@ -92,7 +92,11 @@ private ApiUtils() { * @return media type */ public static String getMediaType(String acceptFormat, HttpServletRequest request) { - return getMediaType(acceptFormat, request.getHeader(RodaConstants.API_HTTP_HEADER_ACCEPT)); + if(StringUtils.isBlank(acceptFormat) && StringUtils.isNotBlank(request.getParameter("callback"))){ + return ExtraMediaType.APPLICATION_JAVASCRIPT + "; charset=UTF-8"; + }else{ + return getMediaType(acceptFormat, request.getHeader(RodaConstants.API_HTTP_HEADER_ACCEPT)); + } } /**