Search in sources :

Example 1 with MCRPI

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);
}
Also used : MCRObject(org.mycore.datamodel.metadata.MCRObject) MCRPI(org.mycore.pi.backend.MCRPI) Test(org.junit.Test)

Example 2 with 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.");
}
Also used : MCRPIRegistrationInfo(org.mycore.pi.MCRPIRegistrationInfo) Optional(java.util.Optional) MCRPI(org.mycore.pi.backend.MCRPI) MCRPIUtils.generateMCRPI(org.mycore.pi.MCRPIUtils.generateMCRPI) Date(java.util.Date) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 3 with MCRPI

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);
    }
}
Also used : MCRDOIParser(org.mycore.pi.doi.MCRDOIParser) Date(java.util.Date) HashMap(java.util.HashMap) MCRException(org.mycore.common.MCRException) MessageFormat(java.text.MessageFormat) ArrayList(java.util.ArrayList) MCRPI(org.mycore.pi.backend.MCRPI) MCRIdentifierUnresolvableException(org.mycore.pi.exceptions.MCRIdentifierUnresolvableException) Map(java.util.Map) URI(java.net.URI) MCRCommandGroup(org.mycore.frontend.cli.annotation.MCRCommandGroup) MCRAccessException(org.mycore.access.MCRAccessException) MCRDataciteClient(org.mycore.pi.doi.MCRDataciteClient) MCRMetadataManager(org.mycore.datamodel.metadata.MCRMetadataManager) MCRPersistentIdentifierException(org.mycore.pi.exceptions.MCRPersistentIdentifierException) MCRHIBConnection(org.mycore.backend.hibernate.MCRHIBConnection) Collectors(java.util.stream.Collectors) MCRDOIRegistrationService(org.mycore.pi.doi.MCRDOIRegistrationService) List(java.util.List) Logger(org.apache.logging.log4j.Logger) MCRCommand(org.mycore.frontend.cli.annotation.MCRCommand) MCRObjectID(org.mycore.datamodel.metadata.MCRObjectID) MCRDigitalObjectIdentifier(org.mycore.pi.doi.MCRDigitalObjectIdentifier) MCRObject(org.mycore.datamodel.metadata.MCRObject) MCRActiveLinkException(org.mycore.datamodel.common.MCRActiveLinkException) MCRPersistentIdentifierMetadataManager(org.mycore.pi.MCRPersistentIdentifierMetadataManager) Collections(java.util.Collections) LogManager(org.apache.logging.log4j.LogManager) MCRPI(org.mycore.pi.backend.MCRPI) MCRPersistentIdentifierException(org.mycore.pi.exceptions.MCRPersistentIdentifierException) URI(java.net.URI) Date(java.util.Date) MCRObject(org.mycore.datamodel.metadata.MCRObject) MCRDigitalObjectIdentifier(org.mycore.pi.doi.MCRDigitalObjectIdentifier) MCRDOIRegistrationService(org.mycore.pi.doi.MCRDOIRegistrationService) MCRDataciteClient(org.mycore.pi.doi.MCRDataciteClient) MCRObjectID(org.mycore.datamodel.metadata.MCRObjectID) MCRCommand(org.mycore.frontend.cli.annotation.MCRCommand)

Example 4 with MCRPI

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;
}
Also used : Path(java.nio.file.Path) MCRPath(org.mycore.datamodel.niofs.MCRPath) MCRBase(org.mycore.datamodel.metadata.MCRBase) Arrays(java.util.Arrays) Date(java.util.Date) Session(org.hibernate.Session) MCRDerivate(org.mycore.datamodel.metadata.MCRDerivate) ArrayList(java.util.ArrayList) MCRPI(org.mycore.pi.backend.MCRPI) MCRFileCollectingFileVisitor(org.mycore.pi.MCRFileCollectingFileVisitor) MCRAccessException(org.mycore.access.MCRAccessException) Path(java.nio.file.Path) MCRMetadataManager(org.mycore.datamodel.metadata.MCRMetadataManager) MCRObjectDerivate(org.mycore.datamodel.metadata.MCRObjectDerivate) MCRPersistentIdentifierException(org.mycore.pi.exceptions.MCRPersistentIdentifierException) Files(java.nio.file.Files) Predicate(java.util.function.Predicate) MCRPath(org.mycore.datamodel.niofs.MCRPath) MCRHIBConnection(org.mycore.backend.hibernate.MCRHIBConnection) IOException(java.io.IOException) Collectors(java.util.stream.Collectors) MCRPIRegistrationService(org.mycore.pi.MCRPIRegistrationService) List(java.util.List) Logger(org.apache.logging.log4j.Logger) MCRPersistentIdentifierManager(org.mycore.pi.MCRPersistentIdentifierManager) Pattern(java.util.regex.Pattern) MCRActiveLinkException(org.mycore.datamodel.common.MCRActiveLinkException) LogManager(org.apache.logging.log4j.LogManager) Pattern(java.util.regex.Pattern) MCRPI(org.mycore.pi.backend.MCRPI) IOException(java.io.IOException) MCRPersistentIdentifierException(org.mycore.pi.exceptions.MCRPersistentIdentifierException) Date(java.util.Date) Predicate(java.util.function.Predicate) MCRPath(org.mycore.datamodel.niofs.MCRPath) MCRFileCollectingFileVisitor(org.mycore.pi.MCRFileCollectingFileVisitor) Session(org.hibernate.Session)

Example 5 with MCRPI

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;
    }
}
Also used : MCRException(org.mycore.common.MCRException) MCRIdentifierUnresolvableException(org.mycore.pi.exceptions.MCRIdentifierUnresolvableException) MCRPI(org.mycore.pi.backend.MCRPI) ParseException(java.text.ParseException) Date(java.util.Date)

Aggregations

MCRPI (org.mycore.pi.backend.MCRPI)23 Date (java.util.Date)8 EntityManager (javax.persistence.EntityManager)6 CriteriaBuilder (javax.persistence.criteria.CriteriaBuilder)6 MCRPersistentIdentifierException (org.mycore.pi.exceptions.MCRPersistentIdentifierException)6 MCRBase (org.mycore.datamodel.metadata.MCRBase)4 MCRCommand (org.mycore.frontend.cli.annotation.MCRCommand)4 Session (org.hibernate.Session)3 MCRAccessException (org.mycore.access.MCRAccessException)3 MCRException (org.mycore.common.MCRException)3 MCRActiveLinkException (org.mycore.datamodel.common.MCRActiveLinkException)3 MCRDerivate (org.mycore.datamodel.metadata.MCRDerivate)3 MCRObject (org.mycore.datamodel.metadata.MCRObject)3 MCRObjectID (org.mycore.datamodel.metadata.MCRObjectID)3 ArrayList (java.util.ArrayList)2 List (java.util.List)2 Collectors (java.util.stream.Collectors)2 LogManager (org.apache.logging.log4j.LogManager)2 Logger (org.apache.logging.log4j.Logger)2 Test (org.junit.Test)2