Skip to content

Commit e19abc3

Browse files
authored
Re add getOtherMetadata API method (#3538)
* WIP readd retrieveOtherMetadata API method * Finish readding getOtherMetadata API method * moved file API method from interface to controller
1 parent 4020b7d commit e19abc3

4 files changed

Lines changed: 43 additions & 2 deletions

File tree

roda-core/roda-core/src/main/resources/config/roda-permissions.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ core.permissions.org.roda.wui.api.v2.controller.FilesController.retrievePreserva
8888
core.permissions.org.roda.wui.api.v2.controller.FilesController.retrieveTechnicalMetadataInfos=READ
8989
core.permissions.org.roda.wui.api.v2.controller.FilesController.retrieveFileTechnicalMetadataHTML=READ
9090
core.permissions.org.roda.wui.api.v2.controller.FilesController.retrieveTechnicalMetadataFile=READ
91+
core.permissions.org.roda.wui.api.v2.controller.FilesController.getOtherMetadata = READ
9192

9293
# Preservation events permissions
9394
core.permissions.org.roda.wui.api.v2.controller.PreservationEventController.downloadPreservationEvent = READ

roda-core/roda-core/src/main/resources/config/roda-roles.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ core.roles.org.roda.wui.api.v2.controller.FilesController.retrievePreservationMe
130130
core.roles.org.roda.wui.api.v2.controller.FilesController.retrieveTechnicalMetadataInfos=preservation_metadata.read
131131
core.roles.org.roda.wui.api.v2.controller.FilesController.retrieveFileTechnicalMetadataHTML=preservation_metadata.read
132132
core.roles.org.roda.wui.api.v2.controller.FilesController.retrieveTechnicalMetadataFile=preservation_metadata.read
133+
core.roles.org.roda.wui.api.v2.controller.FilesController.getOtherMetadata = preservation_metadata.read
133134

134135
# Metrics roles
135136
core.roles.org.roda.wui.api.v2.controller.MetricsController.getMetrics = job.manage

roda-ui/roda-wui/src/main/java/org/roda/wui/api/v2/controller/FilesController.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.roda.core.data.v2.ip.IndexedAIP;
3535
import org.roda.core.data.v2.ip.IndexedFile;
3636
import org.roda.core.data.v2.ip.IndexedRepresentation;
37+
import org.roda.core.data.v2.ip.metadata.OtherMetadata;
3738
import org.roda.core.data.v2.ip.metadata.TechnicalMetadataInfos;
3839
import org.roda.core.data.v2.jobs.Job;
3940
import org.roda.core.model.utils.UserUtility;
@@ -413,8 +414,7 @@ public List<String> process(RequestContext requestContext, RequestControllerAssi
413414
@Override
414415
public ResponseEntity<StreamingResponseBody> exportToCSV(String findRequestString) {
415416
// delegate
416-
return ApiUtils
417-
.okResponse(indexService.exportToCSV(findRequestString, IndexedFile.class));
417+
return ApiUtils.okResponse(indexService.exportToCSV(findRequestString, IndexedFile.class));
418418
}
419419

420420
@GetMapping(path = "/{uuid}/metadata/technical/{typeId}/html", produces = MediaType.TEXT_HTML_VALUE)
@@ -483,4 +483,32 @@ public ResponseEntity<StreamingResponseBody> process(RequestContext requestConte
483483
}
484484
});
485485
}
486+
487+
@RequestMapping(method = RequestMethod.GET, path = "/{fileUUID}/other_metadata/{metadata_type}/{metadata_file_suffix}", produces = MediaType.APPLICATION_JSON_VALUE)
488+
@Operation(summary = "Gets other metadata (JSON info or ZIP file).\nOptional query params of **start** and **limit** defined the returned query", responses = {
489+
@ApiResponse(responseCode = "200", description = "Other metadata file", content = @Content(schema = @Schema(implementation = OtherMetadata.class))),
490+
@ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(schema = @Schema(implementation = ErrorResponseMessage.class))),
491+
@ApiResponse(responseCode = "403", description = "Forbidden", content = @Content(schema = @Schema(implementation = ErrorResponseMessage.class))),
492+
@ApiResponse(responseCode = "404", description = "Not found", content = @Content(schema = @Schema(implementation = ErrorResponseMessage.class)))})
493+
ResponseEntity<StreamingResponseBody> getOtherMetadata(
494+
@Parameter(description = "The UUID of the existing File", required = true) @PathVariable(name = "fileUUID") String fileUUID,
495+
@Parameter(description = "The type of the other metadata", required = true) @PathVariable(name = "metadata_type") String metadataType,
496+
@Parameter(description = "The file suffix of the other metadata", required = true) @PathVariable(name = "metadata_file_suffix") String metadataFileSuffix) {
497+
return requestHandler.processRequest(new RequestHandler.RequestProcessor<ResponseEntity<StreamingResponseBody>>() {
498+
@Override
499+
public ResponseEntity<StreamingResponseBody> process(RequestContext requestContext,
500+
RequestControllerAssistant controllerAssistant) throws RODAException, RESTException, IOException {
501+
controllerAssistant.setParameters(RodaConstants.CONTROLLER_FILE_ID_PARAM, fileUUID);
502+
// check object permissions
503+
IndexedFile indexedFile = requestContext.getIndexService().retrieve(IndexedFile.class, fileUUID,
504+
RodaConstants.FILE_FIELDS_TO_RETURN);
505+
controllerAssistant.checkObjectPermissions(requestContext.getUser(), indexedFile);
506+
507+
// delegate
508+
StreamResponse streamResponse = filesService.retrieveOtherMetadata(requestContext, indexedFile, metadataType,
509+
metadataFileSuffix);
510+
return ApiUtils.okResponse(streamResponse);
511+
}
512+
});
513+
}
486514
}

roda-ui/roda-wui/src/main/java/org/roda/wui/api/v2/services/FilesService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,4 +447,15 @@ public StreamResponse retrieveFileTechnicalMetadata(RequestContext requestContex
447447
return ret;
448448
}
449449

450+
public StreamResponse retrieveOtherMetadata(RequestContext requestContext, IndexedFile file, String metadataType,
451+
String metadataSuffix)
452+
throws AuthorizationDeniedException, RequestNotValidException, NotFoundException, GenericException {
453+
final ConsumesOutputStream stream;
454+
ModelService model = requestContext.getModelService();
455+
Binary otherMetadataBinary = model.retrieveOtherMetadataBinary(file.getAipId(), file.getRepresentationId(),
456+
file.getPath(), file.getId(), metadataSuffix, metadataType);
457+
stream = new BinaryConsumesOutputStream(otherMetadataBinary, RodaConstants.MEDIA_TYPE_TEXT_HTML);
458+
return new StreamResponse(stream);
459+
}
460+
450461
}

0 commit comments

Comments
 (0)