package eu.dnetlib.data.mdstore; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import eu.dnetlib.common.controller.AbstractDnetController; import eu.dnetlib.data.mdstore.model.MDStoreType; import eu.dnetlib.data.mdstore.model.MDStoreVersion; import eu.dnetlib.data.mdstore.model.MDStoreWithInfo; import eu.dnetlib.errors.MDStoreManagerException; import io.swagger.v3.oas.annotations.Operation; public class AbstractMDStoreController extends AbstractDnetController { @Autowired protected MDStoreService service; @Operation(summary = "Return all the mdstores") @GetMapping("/") public Iterable find() { return service.listMdStores(); } @Operation(summary = "Return a mdstores by id") @GetMapping("/mdstore/{mdId}") public MDStoreWithInfo getMdStore(@PathVariable final String mdId) throws MDStoreManagerException { return service.findMdStore(mdId); } @Operation(summary = "Create a new mdstore") @PostMapping("/new/{format}/{layout}/{interpretation}/{type}") public MDStoreWithInfo createMDStore( @PathVariable final String format, @PathVariable final String layout, @PathVariable final String interpretation, @PathVariable final String type, @RequestParam(required = true) final String dsName, @RequestParam(required = true) final String dsId, @RequestParam(required = true) final String apiId) throws MDStoreManagerException { final String id = service.createMDStore(format, layout, interpretation, MDStoreType.valueOf(type), dsName, dsId, apiId); return service.findMdStore(id); } @Operation(summary = "Delete a mdstore by id") @DeleteMapping("/mdstore/{mdId}") public StatusResponse delete(@PathVariable final String mdId) throws MDStoreManagerException { service.deleteMdStore(mdId); return StatusResponse.DELETED; } @Operation(summary = "Return all the versions of a mdstore") @GetMapping("/mdstore/{mdId}/versions") public Iterable listVersions(@PathVariable final String mdId) throws MDStoreManagerException { return service.listVersions(mdId); } @Operation(summary = "Create a new preliminary version of a mdstore") @GetMapping("/mdstore/{mdId}/newVersion") public MDStoreVersion prepareNewVersion( @PathVariable final String mdId) throws MDStoreManagerException { return service.prepareMdStoreVersion(mdId); } @Operation(summary = "Promote a preliminary version to current") @GetMapping("/version/{versionId}/commit/{size}") public MDStoreVersion commitVersion( @PathVariable final String versionId, @PathVariable final long size) throws MDStoreManagerException { try { return service.commitMdStoreVersion(versionId, size); } finally { service.deleteExpiredVersions(); } } @Operation(summary = "Abort a preliminary version") @GetMapping("/version/{versionId}/abort") public StatusResponse commitVersion(@PathVariable final String versionId) throws MDStoreManagerException { service.deleteMdStoreVersion(versionId, true); return StatusResponse.ABORTED; } @Operation(summary = "Return an existing mdstore version") @GetMapping("/version/{versionId}") public MDStoreVersion getVersion(@PathVariable final String versionId) throws MDStoreManagerException { return service.findVersion(versionId); } @Operation(summary = "Delete a mdstore version") @DeleteMapping("/version/{versionId}") public StatusResponse deleteVersion(@PathVariable final String versionId, @RequestParam(required = false, defaultValue = "false") final boolean force) throws MDStoreManagerException { service.deleteMdStoreVersion(versionId, force); return StatusResponse.DELETED; } @Operation(summary = "Decrease the read count of a mdstore version") @GetMapping("/version/{versionId}/endReading") public MDStoreVersion endReading(@PathVariable final String versionId) throws MDStoreManagerException { return service.endReading(versionId); } @Operation(summary = "Reset the read count of a mdstore version") @GetMapping("/version/{versionId}/resetReading") public MDStoreVersion resetReading(@PathVariable final String versionId) throws MDStoreManagerException { return service.resetReading(versionId); } }