protected void setObjectId(final String mcrObjectId) { this.mcrObjectId = MCRObjectID.getInstance(mcrObjectId); }
private String getMappedProject(MCRObjectID id) { String mapping = getObjectProjectMapping(); String projectID = id.getProjectId(); return Optional.ofNullable(mapping) .map(mappingStr -> mappingStr.split(",")) .map(Arrays::asList) .filter(o -> o.get(0).equals(projectID)) .map(o -> o.get(1)) .orElse(projectID); }
public MCRObjectID setID(String projectID, int id) { MCRObjectID objID = MCRObjectID.getInstance(MCRObjectID.formatID(projectID, MODS_OBJECT_TYPE, id)); object.setId(objID); return objID; }
private MCRObjectID checkID(String objectID) { if (objectID == null || objectID.isEmpty() || !MCRObjectID.isValid(objectID)) { throw new WebApplicationException(Status.NOT_FOUND); } MCRObjectID oid = MCRObjectID.getInstance(objectID); if (!MCRMetadataManager.exists(oid)) { throw new WebApplicationException(Status.NOT_FOUND); } return oid; }
protected String formatURI(String uri, String id, String metadataPrefix) { MCRObjectID mcrID = MCRObjectID.isValid(id) ? MCRObjectID.getInstance(id) : null; boolean exists; String objectType; if (mcrID != null) { exists = MCRMetadataManager.exists(mcrID); objectType = mcrID.getTypeId(); } else { MCRFilesystemNode node = MCRFilesystemNode.getNode(id); exists = node != null; objectType = "data_file"; } return uri.replace("{id}", id).replace("{format}", metadataPrefix).replace("{objectType}", objectType).replace( ":{flag}", !exists ? ":deletedMcrObject" : ""); }
MCRObjectID mcrObjIDObj = MCRObjectID.getInstance(mcrObjID); derID = MCRObjectID.getNextFreeId(mcrObjIDObj.getProjectId() + "_derivate"); MCRDerivate mcrDerivate = new MCRDerivate(); mcrDerivate.setLabel(label); mcrDerivate.getDerivate().setLinkMeta(new MCRMetaLinkID("linkmeta", mcrObjIDObj, null, null)); mcrDerivate.getDerivate() .setInternals(new MCRMetaIFS("internal", UPLOAD_DIR.resolve(derID.toString()).toString()));
Document docOut = sb.build(uploadedInputStream); MCRObjectID mcrID = MCRObjectID.getInstance(docOut.getRootElement().getAttributeValue("ID")); if (mcrID.getNumberAsInteger() == 0) { mcrID = MCRObjectID.getNextFreeId(mcrID.getBase()); docOut.getRootElement().setAttribute("ID", mcrID.toString()); docOut.getRootElement().setAttribute("label", mcrID.toString()); XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat()); try (BufferedWriter bw = Files.newBufferedWriter(fXML, StandardCharsets.UTF_8)) {
private boolean checkObjectPermission(MCRObjectID objectId, String permission) { LOGGER.debug("checkObjectPermission({}, {})", objectId, permission); // 1. check read or write key of current user if (KEY_STRATEGY_HELPER.checkObjectPermission(objectId, permission)) { return true; } // 2. check if access mapping for object id exists String permissionId = objectId.toString(); if (ID_STRATEGY.hasRuleMapping(permissionId, permission)) { LOGGER.debug("Found match in ID strategy for {} on {}.", permission, objectId); return ID_STRATEGY.checkPermission(permissionId, permission); } // 3. check if creator rule applies if (CREATOR_STRATEGY.isCreatorRuleAvailable(permissionId, permission)) { LOGGER.debug("Found match in CREATOR strategy for {} on {}.", permission, objectId); return CREATOR_STRATEGY.checkPermission(permissionId, permission); } return getAccessCategory(objectId, objectId.getTypeId(), permission) // 4. check if classification rule applies .map(c -> { LOGGER.debug("using access rule defined for category: " + c); return ACCESS_IMPL.checkPermission(objectId.getTypeId() + ":" + c.toString(), permission); }) //5. fallback to MCRObjectBaseStrategy .orElseGet(() -> { LOGGER.debug("Using BASE strategy as fallback for {} on {}.", permission, objectId); return OBJECT_BASE_STRATEGY.checkPermission(permissionId, permission); }); }
mcrIdCheck = MCRObjectID.getInstance(href); } catch (Exception e) { if (mcrIdCheck.getNumberAsInteger() == 0) { href = relatedID.toString(); LOGGER.info("Setting href of related item to {}", href); relatedItem.setAttribute("href", href, MCRConstants.XLINK_NAMESPACE); MCRObjectID relatedID = MCRObjectID.getInstance(href); if (object.getStructure().getParentID() == null) { LOGGER.info("Setting {} as parent of {}", href, oid); object.getStructure().setParent(relatedID); } else if (!object.getStructure().getParentID().equals(relatedID)) { LOGGER.info("Setting {} as parent of {}", href, oid); object.getStructure().setParent(relatedID);
private MCRObjectID createRelatedObject(Element relatedItem, MCRObjectID childID) throws MCRPersistenceException, MCRAccessException { MCRMODSWrapper wrapper = new MCRMODSWrapper(); MCRObject object = wrapper.getMCRObject(); MCRObjectID oid = MCRObjectID.getNextFreeId(childID.getBase()); if (oid.equals(childID)) { oid = MCRObjectID.getNextFreeId(childID.getBase()); } object.setId(oid); if (isHost(relatedItem)) { object.getStructure().addChild(new MCRMetaLinkID("child", childID, childID.toString(), childID.toString())); } Element mods = cloneRelatedItem(relatedItem); wrapper.setMODS(mods); LOGGER.info("create object {}", oid); MCRMetadataManager.create(object); return oid; }
parameter.put("size", Long.toString(formParamSize)); MCRObjectID objID = MCRObjectID.getInstance(pathParamMcrObjID); MCRObjectID derID = MCRObjectID.getInstance(pathParamMcrDerID); if (!MCRAccessManager.checkPermission(derID.toString(), PERMISSION_WRITE)) { throw new MCRRestAPIException(Status.FORBIDDEN, new MCRRestAPIError(MCRRestAPIError.CODE_ACCESS_DENIED, "Could not add file to derivate", if (!der.getOwnerID().equals(objID)) { throw new MCRRestAPIException(Status.INTERNAL_SERVER_ERROR, new MCRRestAPIError(MCRRestAPIError.CODE_INTERNAL_ERROR, "Derivate object mismatch", derDir = UPLOAD_DIR.resolve(derID.toString()); if (Files.exists(derDir)) { Files.walkFileTree(derDir, MCRRecursiveDeleter.instance()); MCRDirectory difs = MCRDirectory.getRootDirectory(derID.toString()); if (difs == null) { difs = new MCRDirectory(derID.toString());
private Response doCreateDerivate(@BeanParam DerivateMetadata der) { LOGGER.debug(der); String projectID = mcrId.getProjectId(); MCRObjectID derId = MCRObjectID.getNextFreeId(projectID + "_derivate"); MCRDerivate derivate = new MCRDerivate(); derivate.setId(derId); throw new ForbiddenException(e); MCRPath rootDir = MCRPath.getPath(derId.toString(), "/"); if (Files.notExists(rootDir)) { try { rootDir.getFileSystem().createRoot(derId.toString()); } catch (FileSystemException e) { throw new InternalServerErrorException(e); return Response.created(uriInfo.getAbsolutePathBuilder().path(derId.toString()).build()).build();
public static void migrateURN(String derId) throws MCRPersistenceException, MCRActiveLinkException, MCRAccessException, IOException { MCRObjectID derivateID = MCRObjectID.getInstance(derId); if (!derivateID.getTypeId().equals("derivate")) { LOGGER.error("Command needs derivate as parameter: ", derId); return;
/** * Returns true of the given {@link MCRObjectID} has a mods type. Does not look at the object. * @param id - the {@link MCRObjectID} * @return true if has a mods type */ public static boolean isSupported(MCRObjectID id) { return SUPPORTED_TYPES.contains(id.getTypeId()); }
@Override public MCRObjectID ingestMetadata(Deposit entry) throws SwordError, SwordServerException { final MCRObjectID newObjectId = MCRObjectID .getNextFreeId(MCRConfiguration.instance().getString("MIR.projectid.default") + "_mods"); final Map<String, List<String>> dublinCoreMetadata = entry.getSwordEntry().getDublinCore(); Document dcDocument = buildDCDocument(dublinCoreMetadata); Document convertedDocument = convertDCToMods(dcDocument); final MCRObject mcrObject = MCRMODSWrapper.wrapMODSDocument(convertedDocument.detachRootElement(), newObjectId.getProjectId()); mcrObject.setId(newObjectId); try { MCRMetadataManager.create(mcrObject); } catch (MCRAccessException e) { throw new SwordError(UriRegistry.ERROR_BAD_REQUEST, HttpServletResponse.SC_UNAUTHORIZED, e.getMessage()); } return newObjectId; }
.build(), e); if (!derid.equals(derivate.getId())) { throw new BadRequestException(Response.status(Response.Status.BAD_REQUEST) .entity("MCRObjectID mismatch") if (create) { MCRMetadataManager.create(derivate); MCRPath rootDir = MCRPath.getPath(derid.toString(), "/"); if (Files.notExists(rootDir)) { rootDir.getFileSystem().createRoot(derid.toString());
private static MCRObjectID saveAsMyCoReObject(String projectID, Element modsRoot) throws MCRActiveLinkException, MCRPersistenceException, MCRAccessException { MCRObject mcrObject = MCRMODSWrapper.wrapMODSDocument(modsRoot, projectID); mcrObject.setId(MCRObjectID.getNextFreeId(mcrObject.getId().getBase())); MCRMetadataManager.create(mcrObject); return mcrObject.getId(); }
return false; } else if (!mcrObjectId.equals(other.mcrObjectId)) { return false;
@Override public MCRDigitalObjectIdentifier generate(MCRBase mcrObject, String additional) throws MCRPersistentIdentifierException { final MCRObjectID objectId = mcrObject.getId(); return Optional.ofNullable(getProperties().get("Prefix." + objectId.getBase())) .map(prefix -> { final int objectIdNumberAsInteger = objectId.getNumberAsInteger(); return prefix.contains("/") ? prefix + objectIdNumberAsInteger : prefix + '/' + objectIdNumberAsInteger; }) .flatMap(mcrdoiParser::parse).map(MCRDigitalObjectIdentifier.class::cast) .orElseThrow(() -> new MCRPersistentIdentifierException("Prefix." + objectId.getBase() + " is not defined in " + generatorID + ".")); }