use of org.mycore.datamodel.metadata.MCRObjectID in project mycore by MyCoRe-Org.
the class MCRDerivateURNUtils method getDFGViewerURL.
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;
}
use of org.mycore.datamodel.metadata.MCRObjectID in project mycore by MyCoRe-Org.
the class MCRURNGranularRESTRegistrationService method createNewURN.
public MCRDNBURN createNewURN(MCRDerivate deriv) {
MCRObjectID derivID = deriv.getId();
try {
MCRDNBURN derivURN = getNewIdentifier(derivID, "");
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, getRegistrationServiceID() + "-" + suffix).accept(() -> derivURN.withNamespaceSuffix(suffix + "-").asString(), "");
}
return derivURN;
} catch (MCRPersistentIdentifierException e) {
throw new MCRPICreationException("Could not create new URN for " + derivID, e);
}
}
use of org.mycore.datamodel.metadata.MCRObjectID in project mycore by MyCoRe-Org.
the class MCRURNGranularRESTRegistrationService method registerURN.
private MCRDNBURN registerURN(MCRDerivate deriv, String filePath) {
MCRObjectID derivID = deriv.getId();
Function<String, Integer> countCreatedPI = s -> MCRPersistentIdentifierManager.getInstance().getCreatedIdentifiers(derivID, getType(), getRegistrationServiceID()).size();
int seed = Optional.of(filePath).filter(p -> !"".equals(p)).map(countCreatedPI).map(count -> count + 1).orElse(1);
MCRDNBURN derivURN = Optional.ofNullable(deriv.getDerivate()).map(MCRObjectDerivate::getURN).flatMap(new MCRDNBURNParser()::parse).orElseGet(() -> createNewURN(deriv));
String setID = derivID.getNumberAsString();
GranularURNGenerator granularURNGen = new GranularURNGenerator(seed, derivURN, setID);
Function<MCRPath, Supplier<String>> generateURN = p -> granularURNGen.getURNSupplier();
derivateFileStream.apply(deriv).filter(notInIgnoreList().and(matchFile(filePath))).sorted().collect(Collectors.toMap(generateURN, p -> p, (m1, m2) -> m1, LinkedHashMap::new)).forEach(createFileMetadata(deriv).andThen(persistURN(deriv)));
try {
MCRMetadataManager.update(deriv);
} catch (MCRPersistenceException | MCRAccessException e) {
LOGGER.error("Error while updating derivate {}", derivID, e);
}
EntityTransaction transaction = MCREntityManagerProvider.getCurrentEntityManager().getTransaction();
if (!transaction.isActive()) {
transaction.begin();
}
transaction.commit();
return derivURN;
}
use of org.mycore.datamodel.metadata.MCRObjectID in project mycore by MyCoRe-Org.
the class MCRURNGranularRESTRegistrationService method defaultDerivateFileStream.
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();
}
use of org.mycore.datamodel.metadata.MCRObjectID in project mycore by MyCoRe-Org.
the class MCRPersistentIdentifierManagerTest method buildMockObject.
private MCRObject buildMockObject() {
MCRObject mcrObject = new MCRObject();
MCRObjectID id = MCRObjectID.getNextFreeId("test", "mock");
mcrObject.setId(id);
mcrObject.setSchema("http://www.w3.org/2001/XMLSchema");
return mcrObject;
}
Aggregations