use of org.mycore.pi.backend.MCRPI in project mycore by MyCoRe-Org.
the class MCRPersistentIdentifierManagerTest method testGet.
@Test
public void testGet() throws Exception {
String mockString = MCRMockIdentifier.MOCK_SCHEME + "http://google.de/";
Optional<? extends MCRPersistentIdentifier> mockIdentifierOptional = MCRPersistentIdentifierManager.getInstance().get(mockString).findFirst();
Assert.assertTrue(mockIdentifierOptional.isPresent());
Assert.assertEquals(mockIdentifierOptional.get().asString(), mockString);
// test get(service, id, additional)
MockMetadataManager mockMetadataManager = new MockMetadataManager();
MCRPIRegistrationService<MCRMockIdentifier> registrationService = MCRPIRegistrationServiceManager.getInstance().getRegistrationService(MOCK_SERVICE);
MCRObject mcrObject = buildMockObject();
mockMetadataManager.put(mcrObject.getId(), mcrObject);
registrationService.register(mcrObject, null);
MCRPI mcrpi = MCRPersistentIdentifierManager.getInstance().get(MOCK_SERVICE, mcrObject.getId().toString(), null);
Assert.assertNotNull(mcrpi);
}
use of org.mycore.pi.backend.MCRPI in project mycore by MyCoRe-Org.
the class MCRURNGranularRESTRegistrationTaskTest method run.
@Ignore
@Test
public void run() throws Exception {
MCRPI urn1 = generateMCRPI(randomFilename(), countRegistered);
MCREntityManagerProvider.getCurrentEntityManager().persist(urn1);
Assert.assertNull("Registered date should be null.", urn1.getRegistered());
MCRPersistentIdentifierManager.getInstance().getUnregisteredIdentifiers(urn1.getType()).stream().map(MCRPIRegistrationInfo::getIdentifier).map("URN: "::concat).forEach(LOGGER::info);
Integer progressedIdentifiersFromDatabase;
Function<MCRPIRegistrationInfo, Optional<Date>> registerFn = MCRPIUtils.getMCRURNClient()::register;
do {
progressedIdentifiersFromDatabase = MCRPersistentIdentifierManager.getInstance().setRegisteredDateForUnregisteredIdenifiers(MCRDNBURN.TYPE, registerFn, BATCH_SIZE);
} while (progressedIdentifiersFromDatabase > 0);
boolean registered = MCRPersistentIdentifierManager.getInstance().isRegistered(urn1);
LOGGER.info("Registered: {}", registered);
MCRPI mcrpi = MCREntityManagerProvider.getCurrentEntityManager().find(MCRPI.class, urn1.getId());
Optional.ofNullable(mcrpi).filter(pi -> pi.getRegistered() != null).map(MCRPI::getRegistered).map(Date::toString).map("URN registered: "::concat).ifPresent(LOGGER::info);
MCRPersistentIdentifierManager.getInstance().getUnregisteredIdentifiers(urn1.getType()).stream().map(MCRPIRegistrationInfo::getIdentifier).map("URN update: "::concat).forEach(LOGGER::info);
LOGGER.info("end.");
}
use of org.mycore.pi.backend.MCRPI in project mycore by MyCoRe-Org.
the class MCRDOICommands method synchronizeDatabase.
@MCRCommand(syntax = "repair registered dois {0}", help = "Contacts the Registration Service and inserts all registered DOIs to the Database. It also updates all media files. The Service ID{0} is the id from the configuration.", order = 10)
public static void synchronizeDatabase(String serviceID) {
MCRDOIRegistrationService registrationService = new MCRDOIRegistrationService(serviceID);
try {
MCRDataciteClient dataciteClient = registrationService.getDataciteClient();
List<MCRDigitalObjectIdentifier> doiList = dataciteClient.getDOIList();
doiList.stream().filter(doi -> {
boolean isTestDOI = doi.getPrefix().equals(MCRDigitalObjectIdentifier.TEST_DOI_PREFIX);
return !isTestDOI || registrationService.usesTestPrefix();
}).forEach(doi -> {
try {
URI uri = dataciteClient.resolveDOI(doi);
if (uri.toString().startsWith(registrationService.getRegisterURL())) {
LOGGER.info("Checking DOI: {}", doi.asString());
MCRObjectID objectID = getObjectID(uri);
if (MCRMetadataManager.exists(objectID)) {
if (!registrationService.isRegistered(objectID, "")) {
LOGGER.info("DOI is not registered in MyCoRe. Add to Database: {}", doi.asString());
MCRPI databaseEntry = new MCRPI(doi.asString(), registrationService.getType(), objectID.toString(), "", serviceID, new Date());
MCRHIBConnection.instance().getSession().save(databaseEntry);
}
// Update main files
MCRObject obj = MCRMetadataManager.retrieveMCRObject(objectID);
List<Map.Entry<String, URI>> entryList = registrationService.getMediaList(obj);
dataciteClient.setMediaList(doi, entryList);
} else {
LOGGER.info("Could not find Object : {}", objectID);
}
} else {
LOGGER.info("DOI/URL is not from this application: {}/{}", doi.asString(), uri);
}
} catch (MCRPersistentIdentifierException e) {
LOGGER.error("Error occurred for DOI: {}", doi, e);
}
});
} catch (MCRPersistentIdentifierException e) {
LOGGER.error("Error while receiving DOI list from Registration-Service!", e);
}
}
use of org.mycore.pi.backend.MCRPI in project mycore by MyCoRe-Org.
the class MCRURNGranularOAIRegistrationService method registerURNsDerivate.
private MCRDNBURN registerURNsDerivate(MCRBase obj, String additional, MCRObjectDerivate derivate) throws MCRPersistentIdentifierException {
LOGGER.info("Add URNs to all files of {}", obj.getId());
Session session = MCRHIBConnection.instance().getSession();
Path path = MCRPath.getPath(obj.getId().toString(), "/");
MCRFileCollectingFileVisitor<Path> collectingFileVisitor = new MCRFileCollectingFileVisitor<>();
try {
Files.walkFileTree(path, collectingFileVisitor);
} catch (IOException e) {
throw new MCRPersistentIdentifierException("Could not walk derivate file tree!", e);
}
List<String> ignoreFileNamesList = getIgnoreFileList();
List<Predicate<String>> predicateList = ignoreFileNamesList.stream().map(Pattern::compile).map(Pattern::asPredicate).collect(Collectors.toList());
List<MCRPath> pathList = collectingFileVisitor.getPaths().stream().filter(file -> predicateList.stream().noneMatch(p -> p.test(file.toString().split(":")[1]))).map(p -> (MCRPath) p).sorted().collect(Collectors.toList());
MCRDNBURN newURN = getNewIdentifier(obj.getId(), additional);
String setID = obj.getId().getNumberAsString();
for (int pathListIndex = 0; pathListIndex < pathList.size(); pathListIndex++) {
MCRDNBURN subURN = newURN.toGranular(setID, pathListIndex + 1, pathList.size());
derivate.getOrCreateFileMetadata(pathList.get(pathListIndex), subURN.asString()).setUrn(subURN.asString());
MCRPI databaseEntry = new MCRPI(subURN.asString(), getType(), obj.getId().toString(), pathList.get(pathListIndex).getOwnerRelativePath(), this.getRegistrationServiceID(), null);
session.save(databaseEntry);
}
derivate.setURN(newURN.asString());
MCRPI databaseEntry = new MCRPI(newURN.asString(), getType(), obj.getId().toString(), "", this.getRegistrationServiceID(), new Date());
session.save(databaseEntry);
return newURN;
}
use of org.mycore.pi.backend.MCRPI in project mycore by MyCoRe-Org.
the class MCRURNOAIRegistrationService method isRegistered.
@Override
public boolean isRegistered(MCRObjectID id, String additional) {
boolean registered = super.isRegistered(id, additional);
if (registered)
return true;
if (!isCreated(id, additional)) {
return false;
}
// URN is created. Now we need to check if it is resolvable
MCRPI mcrpi = getTableEntry(id, additional);
MCRDNBURN dnburn = new MCRDNBURNParser().parse(mcrpi.getIdentifier()).orElseThrow(() -> new MCRException("Cannot parse Identifier from table: " + mcrpi.getIdentifier()));
try {
// Find register date in dnb rest
Date dnbRegisteredDate = MCRURNUtils.getDNBRegisterDate(dnburn);
if (dnbRegisteredDate == null) {
return false;
}
mcrpi.setRegistered(dnbRegisteredDate);
updateFlag(id, additional, mcrpi);
return true;
} catch (ParseException e) {
LOGGER.error("Could not parse Date from PIDEF ! URN wont be marked as registered because of this! ", e);
return false;
} catch (MCRIdentifierUnresolvableException e) {
return false;
}
}
Aggregations