private static MCRDerivate createDerivate(MCRObjectID documentID, File fileDir) throws MCRPersistenceException, IOException, MCRAccessException { MCRDerivate derivate = new MCRDerivate(); derivate.setId(MCRObjectID.getNextFreeId(documentID.getProjectId(), "derivate")); derivate.setLabel("data object from " + documentID); String schema = CONFIG.getString("MCR.Metadata.Config.derivate", "datamodel-derivate.xml").replaceAll(".xml", ".xsd"); derivate.setSchema(schema); MCRMetaLinkID linkId = new MCRMetaLinkID(); linkId.setSubTag("linkmeta"); linkId.setReference(documentID, null, null); derivate.getDerivate().setLinkMeta(linkId); MCRMetaIFS ifs = new MCRMetaIFS(); ifs.setSubTag("internal"); ifs.setSourcePath(fileDir.getAbsolutePath()); derivate.getDerivate().setInternals(ifs); LOGGER.debug("Creating new derivate with ID {}", derivate.getId()); MCRMetadataManager.create(derivate); setDefaultPermissions(derivate.getId()); return derivate; }
private JsonObject getData(MCRDerivate der) { JsonObject event = new JsonObject(); event.addProperty("id", der.getId().toString()); event.addProperty("uri", uriResolver.apply(getPathURI("objects/" + der.getOwnerID())).toString() + "/derivates/" + der.getId()); event.addProperty("object", der.getOwnerID().toString()); event.addProperty("objectUri", uriResolver.apply(getPathURI("objects/" + der.getOwnerID())).toString()); copyFlagToProperty(der, event, "createdby", "createdBy"); copyServiceDateToProperty(der, event, "createdate", "created"); copyFlagToProperty(der, event, "modifiedby", "modifiedBy"); copyServiceDateToProperty(der, event, "modifydate", "modified"); return event; }
public MCRDNBURN createNewURN(MCRDerivate deriv) { MCRObjectID derivID = deriv.getId(); try { MCRDNBURN derivURN = getNewIdentifier(deriv, ""); deriv.getDerivate().setURN(derivURN.asString()); persistURNStr(deriv, new Date()).accept(derivURN::asString, ""); if (Boolean.valueOf(getProperties().getOrDefault("supportDfgViewerURN", "false"))) { String suffix = "dfg"; persistURNStr(deriv, null, getServiceID() + "-" + suffix) .accept(() -> derivURN.withNamespaceSuffix(suffix + "-").asString(), ""); } return derivURN; } catch (MCRPersistentIdentifierException e) { throw new MCRPICreationException("Could not create new URN for " + derivID, e); } }
private BiConsumer<Supplier<String>, MCRPath> createFileMetadata(MCRDerivate deriv) { return (urnSup, path) -> deriv.getDerivate().getOrCreateFileMetadata(path, urnSup.get()); }
String urn = derivate.getDerivate().getURN(); if (urn == null) { return; MCRObjectID objectID = derivate.getOwnerID(); if (!MCRMODSWrapper.isSupported(objectID)) { LOGGER.error("Cannot move urn {} to object {}.", urn, objectID); MCRMetadataManager.update(object); derivate.getDerivate().setURN(null); LOGGER.info("Updating derivate {} ...", derivateID); MCRMetadataManager.update(derivate);
MCRDerivate derivate; try { derivate = new MCRDerivate(inputContent.asXML()); derivate.validate(); } catch (JDOMException | SAXException | MCRException e) { throw new BadRequestException(Response.status(Response.Status.BAD_REQUEST) .build(), e); if (!derid.equals(derivate.getId())) { throw new BadRequestException(Response.status(Response.Status.BAD_REQUEST) .entity("MCRObjectID mismatch")
@MCRCommand(syntax = "migrate urn granular to service id {0}", help = "Used to migrate urn granular to MyCoRe-PI. " + "{0} should be your granular service id.") public static void migrateURNGranularToServiceID(String serviceID) { Session session = MCRHIBConnection.instance().getSession(); MCRXMLMetadataManager.instance().listIDsOfType("derivate").forEach(derivateID -> { MCRDerivate derivate = MCRMetadataManager.retrieveMCRDerivate(MCRObjectID.getInstance(derivateID)); String urn = derivate.getDerivate().getURN(); if (urn != null) { LOGGER.info("Found URN in :{}", derivateID); MCRPI derivatePI = new MCRPI(urn, MCRDNBURN.TYPE, derivateID, "", serviceID, new Date()); if (MCRPIManager.getInstance().exist(derivatePI)) { LOGGER.warn("PI-Entry for {} already exist!", urn); } else { session.save(derivatePI); derivate.getUrnMap().forEach((file, fileURN) -> { MCRPI filePI = new MCRPI(fileURN, MCRDNBURN.TYPE, derivateID, file, serviceID, new Date()); if (MCRPIManager.getInstance().exist(filePI)) { LOGGER.warn("PI-Entry for {} already exist!", fileURN); } else { session.save(fileURN); } }); } } }); }
eDerObject.setAttribute("ID", oid.getId()); MCRDerivate der = MCRMetadataManager.retrieveMCRDerivate(MCRObjectID.getInstance(oid.getId())); String mcrID = der.getDerivate().getMetaLink().getXLinkHref(); eDerObject.setAttribute("metadata", mcrID); if (der.getLabel() != null) { eDerObject.setAttribute("label", der.getLabel()); writer.name("ID").value(oid.getId()); MCRDerivate der = MCRMetadataManager.retrieveMCRDerivate(MCRObjectID.getInstance(oid.getId())); String mcrID = der.getDerivate().getMetaLink().getXLinkHref(); writer.name("metadata").value(mcrID); if (der.getLabel() != null) { writer.name("label").value(der.getLabel());
private static Stream<MCRPath> defaultDerivateFileStream(MCRDerivate derivate) { MCRObjectID derivateId = derivate.getId(); Path derivRoot = MCRPath.getPath(derivateId.toString(), "/"); try { return Files.walk(derivRoot) .map(MCRPath::toMCRPath) .filter(p -> !Files.isDirectory(p)) .filter(p -> !p.equals(derivRoot)); } catch (IOException e) { LOGGER.error("I/O error while access the starting file of derivate {}!", derivateId, e); } catch (SecurityException s) { LOGGER.error("No access to starting file of derivate {}!", derivateId, s); } return Stream.empty(); }
MCRDerivate derivate = MCRMetadataManager.retrieveMCRDerivate(MCRObjectID.getInstance(derivateID)); return new URL( MCRFrontendUtil.getBaseURL() + "receive/" + derivate.getOwnerID() + "?derivate=" + derivateID);
private MCRDNBURN registerURN(MCRDerivate deriv, String filePath) throws MCRPersistentIdentifierException { MCRObjectID derivID = deriv.getId(); .ofNullable(deriv.getDerivate()) .map(MCRObjectDerivate::getURN) .flatMap(new MCRDNBURNParser()::parse)
public static URL getDFGViewerURL(MCRPIRegistrationInfo urn) { URL url = null; try { MCRObjectID derivateId = MCRObjectID.getInstance(urn.getMycoreID()); MCRDerivate derivate = MCRMetadataManager.retrieveMCRDerivate(derivateId); String mainDoc = Optional.ofNullable(derivate.getDerivate()) .map(MCRObjectDerivate::getInternals) .map(MCRMetaIFS::getMainDoc) .orElseThrow(() -> new RuntimeException( "Could not get main doc for " + derivateId)); String spec = null; String baseURL = MCRFrontendUtil.getBaseURL(); String id = URLEncoder.encode(derivateId.toString(), "UTF-8"); if (mainDoc != null && mainDoc.length() > 0) { String mainDocEnc = URLEncoder.encode(mainDoc, "UTF-8"); spec = MessageFormat .format(baseURL + "servlets/MCRDFGLinkServlet?deriv={0}&file={1}", id, mainDocEnc); } else { spec = baseURL + "servlets/MCRDFGLinkServlet?deriv=" + id; } LOGGER.debug("Generated URL for urn {} is {}", urn.getIdentifier(), spec); url = new URL(spec); } catch (UnsupportedEncodingException | MalformedURLException e) { LOGGER.error("Could not create dfg viewer url", e); } return url; }
if (!der.getOwnerID().equals(objID)) { throw new MCRRestAPIException(Status.INTERNAL_SERVER_ERROR, new MCRRestAPIError(MCRRestAPIError.CODE_INTERNAL_ERROR, "Derivate object mismatch", der.getDerivate().getInternals().setIFSID(difs.getID()); der.getDerivate().getInternals().setSourcePath(derDir.toString()); der.getDerivate().getInternals().setMainDoc(maindoc); der.getDerivate().getInternals().setMainDoc(path);
private BiConsumer<Supplier<String>, String> persistURNStr(MCRDerivate deriv, Date registerDate, String serviceID) { return (urnSup, path) -> { MCRPI mcrpi = new MCRPI(urnSup.get(), getType(), deriv.getId().toString(), path, serviceID, registerDate); MCREntityManagerProvider.getCurrentEntityManager().persist(mcrpi); }; }
MCRDerivate mcrDerivate = new MCRDerivate(); mcrDerivate.setLabel(label); mcrDerivate.setId(derID); mcrDerivate.setSchema("datamodel-derivate.xsd"); mcrDerivate.getDerivate().setLinkMeta(new MCRMetaLinkID("linkmeta", mcrObjIDObj, null, null)); mcrDerivate.getDerivate() .setInternals(new MCRMetaIFS("internal", UPLOAD_DIR.resolve(derID.toString()).toString()));
/** * returns the URL of the main document of a derivate * * @param info - the Jersey UriInfo object * @param mcrObjID - the MyCoRe Object ID * @param mcrDerID - the MyCoRe Derivate ID * * @return the Resolving URL for the main document of the derivate * @throws IOException */ public static String retrieveMaindocURL(UriInfo info, String mcrObjID, String mcrDerID, Application app) throws IOException { try { MCRObjectID mcrObj = MCRObjectID.getInstance(mcrObjID); MCRDerivate derObj = retrieveMCRDerivate(mcrObj, mcrDerID); String maindoc = derObj.getDerivate().getInternals().getMainDoc(); String baseURL = MCRJerseyUtil.getBaseURL(info, app) + MCRConfiguration.instance().getString("MCR.RestAPI.v1.Files.URL.path"); baseURL = baseURL.replace("${mcrid}", mcrObj.toString()).replace("${derid}", derObj.getId().toString()); return baseURL + maindoc; } catch (MCRRestAPIException rae) { return null; } }
/** * Builds a list with with right content types and media urls assigned of a specific Object * * @param obj the object * @return a list of entrys Media-Type, URL */ public List<Map.Entry<String, URI>> getMediaList(MCRObject obj) { List<Map.Entry<String, URI>> entryList = new ArrayList<>(); Optional<MCRObjectID> derivateIdOptional = MCRMetadataManager.getDerivateIds(obj.getId(), 1, TimeUnit.MINUTES) .stream().findFirst(); derivateIdOptional.ifPresent(derivateId -> { MCRDerivate derivate = MCRMetadataManager.retrieveMCRDerivate(derivateId); String mainDoc = derivate.getDerivate().getInternals().getMainDoc(); MCRPath mainDocumentPath = MCRPath.getPath(derivateId.toString(), mainDoc); try { String contentType = Optional.ofNullable(MCRContentTypes.probeContentType(mainDocumentPath)) .orElse("application/octet-stream"); entryList.add(new AbstractMap.SimpleEntry<>(contentType, new URI(this.registerURL + MCRXMLFunctions .encodeURIPath("/servlets/MCRFileNodeServlet/" + derivateId + "/" + mainDoc)))); } catch (IOException | URISyntaxException e) { LOGGER.error("Error while detecting the file to register!", e); } }); return entryList; }
private static String listDerivateContentAsJson(MCRDerivate derObj, String path, int depth, UriInfo info, Application app) throws IOException { StringWriter sw = new StringWriter(); MCRPath root = MCRPath.getPath(derObj.getId().toString(), "/"); root = MCRPath.toMCRPath(root.resolve(path)); if (depth == -1) { depth = Integer.MAX_VALUE; } if (root != null) { JsonWriter writer = new JsonWriter(sw); Files.walkFileTree(root, EnumSet.noneOf(FileVisitOption.class), depth, new MCRJSONFileVisitor(writer, derObj.getOwnerID(), derObj.getId(), info, app)); writer.close(); } return sw.toString(); }
MCRDerivate der = MCRMetadataManager.retrieveMCRDerivate(derID); final MCRPath rootPath = MCRPath.getPath(der.getId().toString(), "/"); try { Files.walkFileTree(rootPath, MCRRecursiveDeleter.instance());
String projectID = mcrId.getProjectId(); MCRObjectID derId = MCRObjectID.getNextFreeId(projectID + "_derivate"); MCRDerivate derivate = new MCRDerivate(); derivate.setId(derId); derivate.setLabel(Optional.ofNullable(der.getLabel()).orElse("data object from " + mcrId)); derivate.getDerivate().setDisplayEnabled(der.isDisplayEnabled()); derivate.setSchema(schema); derivate.getDerivate().setLinkMeta(linkId); ifs.setSourcePath(null); ifs.setMainDoc(der.getMainDoc()); derivate.getDerivate().setInternals(ifs);