public void deleteObject(MCRObject object) throws SwordServerException { try { object .getStructure() .getDerivates() .stream() .map(MCRMetaLinkID::getXLinkHrefID) .forEach(id -> { try { MCRMetadataManager.deleteMCRDerivate(id); } catch (Exception e) { throw new MCRException(e); } }); MCRMetadataManager.delete(object); } catch (MCRActiveLinkException | MCRAccessException | MCRException e) { Throwable ex = e; if (e instanceof MCRException && Optional.ofNullable(e.getCause()).map(Object::getClass) .filter(MCRAccessException.class::isAssignableFrom).isPresent()) { //unwrapp ex = e.getCause(); } throw new SwordServerException("Error while deleting Object.", ex); } }
@DELETE @Operation(summary = "Deletes MCRDerivate {" + PARAM_DERID + "}", tags = MCRRestUtils.TAG_MYCORE_DERIVATE, responses = { @ApiResponse(responseCode = "204", description = "MCRDerivate successfully deleted"), }) @MCRRequireTransaction @Path("/{" + PARAM_DERID + "}") public Response deleteDerivate( @Parameter(example = "mir_derivate_00004711") @PathParam(PARAM_DERID) MCRObjectID derid) { if (!MCRMetadataManager.exists(derid)) { throw new NotFoundException(); } try { MCRMetadataManager.deleteMCRDerivate(derid); return Response.noContent().build(); } catch (MCRAccessException e) { throw new ForbiddenException(); } }
/** * deletes a whole derivate * @param info - the Jersey UriInfo object * @param request - the HTTPServletRequest object * @param pathParamMcrObjID - the MyCoRe Object ID * @param pathParamMcrDerID - the MyCoRe Derivate ID * @return a Jersey Response Object * @throws MCRRestAPIException */ public static Response deleteDerivate(UriInfo info, HttpServletRequest request, String pathParamMcrObjID, String pathParamMcrDerID) throws MCRRestAPIException { MCRObjectID objID = MCRObjectID.getInstance(pathParamMcrObjID); MCRObjectID derID = MCRObjectID.getInstance(pathParamMcrDerID); try { MCRMetadataManager.deleteMCRDerivate(derID); return Response .created(info.getBaseUriBuilder().path("v1/objects/" + objID + "/derivates").build()) .type("application/xml; charset=UTF-8") .build(); } catch (MCRAccessException e) { throw new MCRRestAPIException(Status.FORBIDDEN, new MCRRestAPIError(MCRRestAPIError.CODE_ACCESS_DENIED, "Could not delete derivate", e.getMessage())); } }
@Override public void ingestResource(MCRObject object, Deposit entry) throws SwordServerException, SwordError { final MCRObjectID objectID = object.getId(); MCRObjectID createdDerivateID = null; boolean complete = false; try { final MCRDerivate derivate = MCRSwordUtil.createDerivate(objectID.toString()); createdDerivateID = derivate.getId(); mcrSwordMediaHandler.addResource(createdDerivateID.toString(), "/", entry); complete = true; } catch (IOException e) { throw new SwordServerException("Error while creating new derivate for object " + objectID.toString(), e); } catch (MCRAccessException e) { throw new SwordError(UriRegistry.ERROR_BAD_REQUEST, HttpServletResponse.SC_UNAUTHORIZED, e.getMessage()); } finally { if (createdDerivateID != null && !complete) { try { MCRMetadataManager.deleteMCRDerivate(createdDerivateID); } catch (MCRAccessException e1) { // derivate can be created but not deleted ?! LOGGER.error("Derivate could not be deleted(deposit was invalid)", e1); } } else if(complete) { setDefaultMainFile(createdDerivateID.toString()); } } }