private BiConsumer<Supplier<String>, MCRPath> createFileMetadata(MCRDerivate deriv) { return (urnSup, path) -> deriv.getDerivate().getOrCreateFileMetadata(path, urnSup.get()); }
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; }
/** * 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; }
/** * Sets a main file if not present. * @param derivateID the id of the derivate */ private static void setDefaultMainFile(String derivateID) { MCRPath path = MCRPath.getPath(derivateID, "/"); try { MCRFileCollectingFileVisitor<Path> visitor = new MCRFileCollectingFileVisitor<>(); Files.walkFileTree(path, visitor); MCRDerivate derivate = MCRMetadataManager.retrieveMCRDerivate(MCRObjectID.getInstance(derivateID)); visitor.getPaths().stream() .map(MCRPath.class::cast) .filter(p -> !p.getOwnerRelativePath().endsWith(".xml")) .findFirst() .ifPresent(file -> { derivate.getDerivate().getInternals().setMainDoc(file.getOwnerRelativePath()); try { MCRMetadataManager.update(derivate); } catch (MCRPersistenceException | MCRAccessException e) { LOGGER.error("Could not set main file!", e); } }); } catch (IOException e) { LOGGER.error("Could not set main file!", e); } } }
.filter(d -> MCRAccessManager.checkDerivateContentPermission(d, MCRAccessManager.PERMISSION_READ)) .map(d -> { String nameOfMainFile = MCRMetadataManager.retrieveMCRDerivate(d).getDerivate().getInternals() .getMainDoc(); return nameOfMainFile.isEmpty() ? null : MCRPath.getPath(d.toString(), '/' + nameOfMainFile);
.ofNullable(deriv.getDerivate()) .map(MCRObjectDerivate::getURN) .flatMap(new MCRDNBURNParser()::parse)
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); } }
@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); } }); } } }); }
String urn = derivate.getDerivate().getURN(); if (urn == null) { return; MCRMetadataManager.update(object); derivate.getDerivate().setURN(null); LOGGER.info("Updating derivate {} ...", derivateID); MCRMetadataManager.update(derivate);
der.getDerivate().getInternals().setIFSID(difs.getID()); der.getDerivate().getInternals().setSourcePath(derDir.toString()); der.getDerivate().getInternals().setMainDoc(maindoc); der.getDerivate().getInternals().setMainDoc(path);
@Override public MCRDNBURN register(MCRBase obj, String additional, boolean updateObject) throws MCRAccessException, MCRActiveLinkException, MCRPersistentIdentifierException { this.validateRegistration(obj, additional); MCRObjectDerivate derivate = ((MCRDerivate) obj).getDerivate(); MCRDNBURN newURN; if (additional.equals("")) { /* Multiple URN for entire Derivate... */ newURN = registerURNsDerivate(obj, additional, derivate); } else { /* Single URN to one File... */ newURN = registerSingleURN(obj, additional, derivate); } try { MCRMetadataManager.update(obj); } catch (Exception e) { throw new MCRPersistentIdentifierException("Error while updating derivate " + obj.getId(), e); } return newURN; }
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()));
derivate.setId(derId); derivate.setLabel(Optional.ofNullable(der.getLabel()).orElse("data object from " + mcrId)); derivate.getDerivate().setDisplayEnabled(der.isDisplayEnabled()); linkId.setSubTag("linkmeta"); linkId.setReference(mcrId, null, null); derivate.getDerivate().setLinkMeta(linkId); ifs.setSourcePath(null); ifs.setMainDoc(der.getMainDoc()); derivate.getDerivate().setInternals(ifs);
/** * @param derivateID * ID of derivate * @return empty String or absolute path to main file of derivate if file is supported. */ public static String getSupportedMainFile(String derivateID) { try { MCRDerivate deriv = MCRMetadataManager.retrieveMCRDerivate(MCRObjectID.getInstance(derivateID)); String nameOfMainFile = deriv.getDerivate().getInternals().getMainDoc(); // verify support if (nameOfMainFile != null && !nameOfMainFile.equals("")) { MCRPath mainFile = MCRPath.getPath(derivateID, '/' + nameOfMainFile); if (isFileSupported(mainFile)) { return mainFile.getRoot().relativize(mainFile).toString(); } } } catch (Exception e) { LOGGER.warn("Could not get main file of derivate.", e); } return ""; }
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) { 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) {
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; }
/** * 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; } }
linkId.setSubTag("linkmeta"); linkId.setReference(documentID, null, null); derivate.getDerivate().setLinkMeta(linkId); ifs.setSourcePath(null); derivate.getDerivate().setInternals(ifs);