Search in sources :

Example 16 with MCRObject

use of org.mycore.datamodel.metadata.MCRObject in project mycore by MyCoRe-Org.

the class MCRRestAPIUploadHelper method uploadDerivate.

/**
 * creates or updates a MyCoRe derivate
 * @param info - the Jersey UriInfo object
 * @param request - the HTTPServletRequest object
 * @param mcrObjID - the MyCoRe Object ID
 * @param label - the label of the new derivate
 * @param overwriteOnExistingLabel, if true an existing MyCoRe derivate with the given label will be returned
 * @return a Jersey Response object
 * @throws MCRRestAPIException
 */
public static Response uploadDerivate(UriInfo info, HttpServletRequest request, String mcrObjID, String label, boolean overwriteOnExistingLabel) throws MCRRestAPIException {
    Response response = Response.status(Status.INTERNAL_SERVER_ERROR).build();
    SignedJWT signedJWT = MCRJSONWebTokenUtil.retrieveAuthenticationToken(request);
    // File fXML = null;
    MCRObjectID mcrObjIDObj = MCRObjectID.getInstance(mcrObjID);
    try (MCRJPATransactionWrapper mtw = new MCRJPATransactionWrapper()) {
        MCRSession session = MCRServlet.getSession(request);
        MCRUserInformation currentUser = session.getUserInformation();
        MCRUserInformation apiUser = MCRUserManager.getUser(MCRJSONWebTokenUtil.retrieveUsernameFromAuthenticationToken(signedJWT));
        session.setUserInformation(apiUser);
        MCRObject mcrObj = MCRMetadataManager.retrieveMCRObject(mcrObjIDObj);
        MCRObjectID derID = null;
        if (overwriteOnExistingLabel) {
            for (MCRMetaLinkID derLink : mcrObj.getStructure().getDerivates()) {
                if (label.equals(derLink.getXLinkLabel()) || label.equals(derLink.getXLinkTitle())) {
                    derID = derLink.getXLinkHrefID();
                }
            }
        }
        if (derID == null) {
            derID = MCRObjectID.getNextFreeId(mcrObjIDObj.getProjectId() + "_derivate");
            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()));
            MCRMetadataManager.create(mcrDerivate);
            MCRMetadataManager.addOrUpdateDerivateToObject(mcrObjIDObj, new MCRMetaLinkID("derobject", derID, null, label));
        }
        response = Response.created(info.getBaseUriBuilder().path("v1/objects/" + mcrObjID + "/derivates/" + derID).build()).type("application/xml; charset=UTF-8").header(HEADER_NAME_AUTHORIZATION, MCRJSONWebTokenUtil.createJWTAuthorizationHeader(signedJWT)).build();
        session.setUserInformation(currentUser);
    } catch (Exception e) {
        LOGGER.error("Exeption while uploading derivate", e);
    }
    return response;
}
Also used : Response(javax.ws.rs.core.Response) MCRSession(org.mycore.common.MCRSession) MCRObject(org.mycore.datamodel.metadata.MCRObject) MCRMetaLinkID(org.mycore.datamodel.metadata.MCRMetaLinkID) MCRDerivate(org.mycore.datamodel.metadata.MCRDerivate) SignedJWT(com.nimbusds.jwt.SignedJWT) MCRObjectID(org.mycore.datamodel.metadata.MCRObjectID) MCRMetaIFS(org.mycore.datamodel.metadata.MCRMetaIFS) MCRUserInformation(org.mycore.common.MCRUserInformation) MCRPersistenceException(org.mycore.common.MCRPersistenceException) MCRRestAPIException(org.mycore.restapi.v1.errors.MCRRestAPIException) MCRAccessException(org.mycore.access.MCRAccessException) IOException(java.io.IOException)

Example 17 with MCRObject

use of org.mycore.datamodel.metadata.MCRObject in project mycore by MyCoRe-Org.

the class MCRSolrCommands method rebuildMetadataIndexForObject.

@MCRCommand(syntax = "restricted rebuild solr metadata index for object {0}", help = "rebuilds solr's metadata index for object and all its children", order = 70)
public static void rebuildMetadataIndexForObject(String id) {
    MCRObject mcrObject = MCRMetadataManager.retrieveMCRObject(MCRObjectID.getInstance(id));
    List<MCRObject> objectList = MCRObjectUtils.getDescendantsAndSelf(mcrObject);
    List<String> idList = objectList.stream().map(obj -> obj.getId().toString()).collect(Collectors.toList());
    MCRSolrIndexer.rebuildMetadataIndex(idList);
}
Also used : MCRMetadataManager(org.mycore.datamodel.metadata.MCRMetadataManager) MCRAbstractCommands(org.mycore.frontend.cli.MCRAbstractCommands) Collectors(java.util.stream.Collectors) SolrClient(org.apache.solr.client.solrj.SolrClient) MCRObjectUtils(org.mycore.datamodel.metadata.MCRObjectUtils) MCRObjectCommands(org.mycore.frontend.cli.MCRObjectCommands) MCRSolrSearchUtils(org.mycore.solr.search.MCRSolrSearchUtils) List(java.util.List) ConcurrentUpdateSolrClient(org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrClient) MCRSolrClientFactory(org.mycore.solr.MCRSolrClientFactory) MCRCommand(org.mycore.frontend.cli.annotation.MCRCommand) MCRObjectID(org.mycore.datamodel.metadata.MCRObjectID) MCRSolrClassificationUtil(org.mycore.solr.classification.MCRSolrClassificationUtil) MCRSolrIndexer(org.mycore.solr.index.MCRSolrIndexer) MCRObject(org.mycore.datamodel.metadata.MCRObject) MCRXMLMetadataManager(org.mycore.datamodel.common.MCRXMLMetadataManager) MCRSolrCore(org.mycore.solr.MCRSolrCore) MCRCommandGroup(org.mycore.frontend.cli.annotation.MCRCommandGroup) MCRObject(org.mycore.datamodel.metadata.MCRObject) MCRCommand(org.mycore.frontend.cli.annotation.MCRCommand)

Example 18 with MCRObject

use of org.mycore.datamodel.metadata.MCRObject in project mycore by MyCoRe-Org.

the class MCRPersistentIdentifierManagerTest method testRegistrationService.

@Test
public void testRegistrationService() throws MCRAccessException, MCRActiveLinkException, MCRPersistentIdentifierException {
    MockMetadataManager mockMetadataManager = new MockMetadataManager();
    MCRPIRegistrationService<MCRMockIdentifier> registrationService = MCRPIRegistrationServiceManager.getInstance().getRegistrationService(MOCK_SERVICE);
    MCRMockIdentifierRegistrationService casted = (MCRMockIdentifierRegistrationService) registrationService;
    Assert.assertFalse("Delete should not have been called!", casted.isDeleteCalled());
    Assert.assertFalse("Register should not have been called!", casted.isRegisterCalled());
    Assert.assertFalse("Update should not have been called!", casted.isUpdatedCalled());
    MCRObject mcrObject = buildMockObject();
    mockMetadataManager.put(mcrObject.getId(), mcrObject);
    MCRMockIdentifier identifier = registrationService.register(mcrObject, "", true);
    Assert.assertFalse("Delete should not have been called!", casted.isDeleteCalled());
    Assert.assertTrue("The identifier " + identifier.asString() + " should be registered now!", registrationService.isCreated(mcrObject.getId(), ""));
    registrationService.onUpdate(identifier, mcrObject, "");
    Assert.assertFalse("Delete should not have been called!", casted.isDeleteCalled());
    Assert.assertTrue("The identifier " + identifier.asString() + " should have been updated!", casted.isUpdatedCalled());
    registrationService.onDelete(identifier, mcrObject, "");
    Assert.assertFalse("The identifier " + identifier.asString() + " should not be registered now!", registrationService.isCreated(mcrObject.getId(), ""));
    Assert.assertTrue("There should be one resolver", MCRPersistentIdentifierManager.getInstance().getResolvers().stream().filter(r -> r.getName().equals(MCRMockResolver.NAME)).count() > 0);
}
Also used : MCRPersistentIdentifierException(org.mycore.pi.exceptions.MCRPersistentIdentifierException) MCRHIBConnection(org.mycore.backend.hibernate.MCRHIBConnection) Test(org.junit.Test) Field(java.lang.reflect.Field) MCRPI(org.mycore.pi.backend.MCRPI) Stream(java.util.stream.Stream) Rule(org.junit.Rule) MCRAccessBaseImpl(org.mycore.access.MCRAccessBaseImpl) MCRStoreTestCase(org.mycore.common.MCRStoreTestCase) MCRObjectID(org.mycore.datamodel.metadata.MCRObjectID) Map(java.util.Map) After(org.junit.After) MCRObject(org.mycore.datamodel.metadata.MCRObject) Optional(java.util.Optional) MCRActiveLinkException(org.mycore.datamodel.common.MCRActiveLinkException) Assert(org.junit.Assert) MCRAccessException(org.mycore.access.MCRAccessException) TemporaryFolder(org.junit.rules.TemporaryFolder) Before(org.junit.Before) MCRObject(org.mycore.datamodel.metadata.MCRObject) Test(org.junit.Test)

Example 19 with MCRObject

use of org.mycore.datamodel.metadata.MCRObject 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;
}
Also used : MCRObject(org.mycore.datamodel.metadata.MCRObject) MCRObjectID(org.mycore.datamodel.metadata.MCRObjectID)

Example 20 with MCRObject

use of org.mycore.datamodel.metadata.MCRObject 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)

Aggregations

MCRObject (org.mycore.datamodel.metadata.MCRObject)71 MCRObjectID (org.mycore.datamodel.metadata.MCRObjectID)33 Document (org.jdom2.Document)18 Element (org.jdom2.Element)17 MCRException (org.mycore.common.MCRException)16 MCRDerivate (org.mycore.datamodel.metadata.MCRDerivate)14 MCRMetaLinkID (org.mycore.datamodel.metadata.MCRMetaLinkID)14 MCRCommand (org.mycore.frontend.cli.annotation.MCRCommand)12 IOException (java.io.IOException)11 MCRAccessException (org.mycore.access.MCRAccessException)11 MCRMODSWrapper (org.mycore.mods.MCRMODSWrapper)9 MCRPersistenceException (org.mycore.common.MCRPersistenceException)7 Date (java.util.Date)6 JDOMException (org.jdom2.JDOMException)6 MCRActiveLinkException (org.mycore.datamodel.common.MCRActiveLinkException)6 MCRPersistentIdentifierException (org.mycore.pi.exceptions.MCRPersistentIdentifierException)6 SAXException (org.xml.sax.SAXException)6 URI (java.net.URI)5 URISyntaxException (java.net.URISyntaxException)5 ArrayList (java.util.ArrayList)5