From 851748872d626cdb31f8cfd7aa1b6015d7ab9dd4 Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Tue, 13 Feb 2024 14:22:32 +0100 Subject: [PATCH 1/4] The all transactions are not updated in the user metadata after a new download.. --- .../ClarinUserMetadataRestController.java | 12 +-- .../ClarinUserMetadataRestControllerIT.java | 92 +++++++++++++++++++ 2 files changed, 98 insertions(+), 6 deletions(-) diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java index e726c600ce80..44036147c7f4 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestController.java @@ -238,8 +238,8 @@ public List processSignedInUser(Context context, EPerson cur currentUser.getID() + " is null."); } - // Copy current user_metadata records into a list and append it by a new user metadata. - List newClarinUserMetadataList = new ArrayList<>(clarinUserRegistration.getUserMetadata()); + // List of the new user metadata - passed from the request + List clarinUserMetadataList = new ArrayList<>(); // Create user metadata records from request for (ClarinUserMetadataRest clarinUserMetadataRest : clarinUserMetadataRestList) { @@ -249,20 +249,20 @@ public List processSignedInUser(Context context, EPerson cur clarinUserMetadata.setEperson(clarinUserRegistration); clarinUserMetadataService.update(context, clarinUserMetadata); // Add userMetadata to the list of the new user metadata - newClarinUserMetadataList.add(clarinUserMetadata); + clarinUserMetadataList.add(clarinUserMetadata); } // Process clrua with the new clarin user metadata ClarinLicenseResourceUserAllowance clrua = - this.createClrua(context, clarinLicenseResourceMapping, newClarinUserMetadataList, downloadToken, + this.createClrua(context, clarinLicenseResourceMapping, clarinUserMetadataList, downloadToken, clarinUserRegistration); // Add Clarin License Resource Allowance to the user metadata records - for (ClarinUserMetadata clarinUserMetadata : newClarinUserMetadataList) { + for (ClarinUserMetadata clarinUserMetadata : clarinUserMetadataList) { clarinUserMetadata.setTransaction(clrua); clarinUserMetadataService.update(context, clarinUserMetadata); } - return newClarinUserMetadataList; + return clarinUserMetadataList; } private ClarinLicenseResourceUserAllowance createClrua(Context context, diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java index 6eba735a2dfb..572826d93490 100644 --- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java +++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java @@ -9,6 +9,7 @@ import static org.dspace.app.rest.repository.ClarinLicenseRestRepository.OPERATION_PATH_LICENSE_RESOURCE; import static org.dspace.app.rest.repository.ClarinUserMetadataRestController.CHECK_EMAIL_RESPONSE_CONTENT; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.notNullValue; @@ -45,9 +46,12 @@ import org.dspace.content.WorkspaceItem; import org.dspace.content.clarin.ClarinLicense; import org.dspace.content.clarin.ClarinLicenseLabel; +import org.dspace.content.clarin.ClarinLicenseResourceUserAllowance; import org.dspace.content.clarin.ClarinUserRegistration; import org.dspace.content.service.clarin.ClarinLicenseLabelService; import org.dspace.content.service.clarin.ClarinLicenseService; +import org.dspace.content.service.clarin.ClarinUserMetadataService; +import org.hamcrest.Matchers; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; @@ -58,6 +62,8 @@ public class ClarinUserMetadataRestControllerIT extends AbstractControllerIntegr ClarinLicenseService clarinLicenseService; @Autowired ClarinLicenseLabelService clarinLicenseLabelService; + @Autowired + ClarinUserMetadataService clarinUserMetadataService; WorkspaceItem witem; ClarinLicense clarinLicense; @@ -408,6 +414,92 @@ public void authorizedUserWithoutMetadata_shouldDownloadToken() throws Exception .andExpect(jsonPath("$.page.totalElements", is(1))); } + @Test + public void shouldNotCreateDuplicateUserMetadataBasedOnHistory() throws Exception { + // Prepare environment with Clarin License, resource mapping, allowance, user registration and user metadata + // then try to download the same bitstream again and the user metadata should not be created based on history + this.prepareEnvironment("NAME,ADDRESS", 0); + context.turnOffAuthorisationSystem(); + ClarinUserRegistration clarinUserRegistration = ClarinUserRegistrationBuilder + .createClarinUserRegistration(context).withEPersonID(admin.getID()).build(); +// ClarinUserMetadataBuilder.createClarinUserMetadata(context) +// .withUserRegistration(clarinUserRegistration) +// .build(); + context.restoreAuthSystemState(); + + ObjectMapper mapper = new ObjectMapper(); + ClarinUserMetadataRest clarinUserMetadata1 = new ClarinUserMetadataRest(); + clarinUserMetadata1.setMetadataKey("NAME"); + clarinUserMetadata1.setMetadataValue("Test"); + + ClarinUserMetadataRest clarinUserMetadata2 = new ClarinUserMetadataRest(); + clarinUserMetadata2.setMetadataKey("ADDRESS"); + clarinUserMetadata2.setMetadataValue("Test2"); + + List clarinUserMetadataRestList = new ArrayList<>(); + clarinUserMetadataRestList.add(clarinUserMetadata1); + clarinUserMetadataRestList.add(clarinUserMetadata2); + + String adminToken = getAuthToken(admin.getEmail(), password); + + // There should exist record in the UserRegistration table + getClient(adminToken).perform(get("/api/core/clarinuserregistrations") + .contentType(contentType)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.page.totalElements", is(1))); + + // Manage UserMetadata and get token + getClient(adminToken).perform(post("/api/core/clarinusermetadata/manage?bitstreamUUID=" + bitstream.getID()) + .content(mapper.writeValueAsBytes(clarinUserMetadataRestList.toArray())) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$", notNullValue())) + .andExpect(jsonPath("$", not(CHECK_EMAIL_RESPONSE_CONTENT))); + + // Get created CLRUA + getClient(adminToken).perform(get("/api/core/clarinlruallowances") + .contentType(contentType)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.page.totalElements", is(1))); + + + // Get created User Metadata - there should be 2 records + getClient(adminToken).perform(get("/api/core/clarinusermetadata") + .contentType(contentType)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.page.totalElements", is(2))); +// ClarinUserMetadataBuilder.deleteClarinUserMetadata(clarinUserRegistration.getID()); + + // Second download + + // Manage UserMetadata and get token + getClient(adminToken).perform(post("/api/core/clarinusermetadata/manage?bitstreamUUID=" + bitstream.getID()) + .content(mapper.writeValueAsBytes(clarinUserMetadataRestList.toArray())) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$", notNullValue())) + .andExpect(jsonPath("$", not(CHECK_EMAIL_RESPONSE_CONTENT))); + + // Get created two CLRUA + getClient(adminToken).perform(get("/api/core/clarinlruallowances") + .contentType(contentType)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.page.totalElements", is(2))); + + // Get created User Metadata - there should be 4 records + getClient(adminToken).perform(get("/api/core/clarinusermetadata") + .contentType(contentType)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.page.totalElements", is(4))); + + context.commit(); + // The User Metadata should not have updated transaction ID after a new download - test for fixed issue + ClarinLicenseResourceUserAllowance clrua1 = clarinUserMetadataService.find(context, 1).getTransaction(); + ClarinLicenseResourceUserAllowance clrua2 = clarinUserMetadataService.find(context, 4).getTransaction(); + assertThat(clrua1.getID(), not(clrua2.getID())); + ClarinUserMetadataBuilder.deleteClarinUserMetadata(clarinUserRegistration.getID()); + } + private WorkspaceItem createWorkspaceItemWithFile() { parentCommunity = CommunityBuilder.createCommunity(context) .withName("Parent Community") From 473067e50b625e771c65b6a23c2465aaad825903 Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Wed, 14 Feb 2024 12:45:03 +0100 Subject: [PATCH 2/4] Return the user metadata depending on user registration, bitstream, mapping and the last translation. --- .../clarin/ClarinUserMetadataServiceImpl.java | 40 ++++++++++ .../dao/clarin/ClarinUserMetadataDAO.java | 6 ++ .../clarin/ClarinUserMetadataDAOImpl.java | 24 ++++++ .../clarin/ClarinUserMetadataService.java | 4 + .../ClarinUserMetadataRestRepository.java | 16 ++++ .../ClarinUserMetadataRestControllerIT.java | 74 +++++++++++++++++-- 6 files changed, 157 insertions(+), 7 deletions(-) diff --git a/dspace-api/src/main/java/org/dspace/content/clarin/ClarinUserMetadataServiceImpl.java b/dspace-api/src/main/java/org/dspace/content/clarin/ClarinUserMetadataServiceImpl.java index 4c3c3450b136..e065e6a48393 100644 --- a/dspace-api/src/main/java/org/dspace/content/clarin/ClarinUserMetadataServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/clarin/ClarinUserMetadataServiceImpl.java @@ -10,6 +10,8 @@ import java.sql.SQLException; import java.util.List; import java.util.Objects; +import java.util.UUID; +import java.util.stream.Collectors; import org.apache.commons.lang.NullArgumentException; import org.dspace.authorize.AuthorizeException; @@ -76,4 +78,42 @@ public void delete(Context context, ClarinUserMetadata clarinUserMetadata) throw } clarinUserMetadataDAO.delete(context, clarinUserMetadata); } + + @Override + public List findByUserRegistrationAndBitstream(Context context, Integer userRegUUID, + UUID bitstreamUUID, boolean lastTransaction) + throws SQLException { + if (lastTransaction) { + return getLastTransactionUserMetadata(clarinUserMetadataDAO.findByUserRegistrationAndBitstream(context, userRegUUID, bitstreamUUID)); + } + return clarinUserMetadataDAO.findByUserRegistrationAndBitstream(context, userRegUUID, bitstreamUUID); + } + + private List getLastTransactionUserMetadata(List userMetadataList) { + Integer latestTransactionId = getIdOfLastTransaction(userMetadataList); + if (latestTransactionId == null) { + return userMetadataList; + } + + List filteredUserMetadata = null; + // Filter all user metadata by the last transaction + try { + filteredUserMetadata = userMetadataList.stream() + .filter(clarinUserMetadata -> clarinUserMetadata.getTransaction().getID().equals(latestTransactionId)) + .collect(Collectors.toList()); + } catch (Exception e) { + log.error("Error filtering user metadata by the last transaction", e); + } + return filteredUserMetadata; + } + + private Integer getIdOfLastTransaction(List userMetadataList) { + // userMetadataList is filtered by the last transaction - first element is the last transaction + try { + return userMetadataList.get(0).getTransaction().getID(); + } catch (IndexOutOfBoundsException e) { + log.error("No transaction found for the user metadata"); + return null; + } + } } diff --git a/dspace-api/src/main/java/org/dspace/content/dao/clarin/ClarinUserMetadataDAO.java b/dspace-api/src/main/java/org/dspace/content/dao/clarin/ClarinUserMetadataDAO.java index db18c605a4a7..85d01e37c981 100644 --- a/dspace-api/src/main/java/org/dspace/content/dao/clarin/ClarinUserMetadataDAO.java +++ b/dspace-api/src/main/java/org/dspace/content/dao/clarin/ClarinUserMetadataDAO.java @@ -8,7 +8,13 @@ package org.dspace.content.dao.clarin; import org.dspace.content.clarin.ClarinUserMetadata; +import org.dspace.core.Context; import org.dspace.core.GenericDAO; +import java.sql.SQLException; +import java.util.List; +import java.util.UUID; + public interface ClarinUserMetadataDAO extends GenericDAO { + List findByUserRegistrationAndBitstream(Context context, Integer userRegUUID, UUID bitstreamUUID) throws SQLException; } diff --git a/dspace-api/src/main/java/org/dspace/content/dao/impl/clarin/ClarinUserMetadataDAOImpl.java b/dspace-api/src/main/java/org/dspace/content/dao/impl/clarin/ClarinUserMetadataDAOImpl.java index d0d45c11df0f..18ee7768e52f 100644 --- a/dspace-api/src/main/java/org/dspace/content/dao/impl/clarin/ClarinUserMetadataDAOImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/dao/impl/clarin/ClarinUserMetadataDAOImpl.java @@ -10,6 +10,12 @@ import org.dspace.content.clarin.ClarinUserMetadata; import org.dspace.content.dao.clarin.ClarinUserMetadataDAO; import org.dspace.core.AbstractHibernateDAO; +import org.dspace.core.Context; + +import javax.persistence.Query; +import java.sql.SQLException; +import java.util.List; +import java.util.UUID; public class ClarinUserMetadataDAOImpl extends AbstractHibernateDAO implements ClarinUserMetadataDAO { @@ -17,4 +23,22 @@ public class ClarinUserMetadataDAOImpl extends AbstractHibernateDAO findByUserRegistrationAndBitstream(Context context, Integer userRegUUID, + UUID bitstreamUUID) throws SQLException { + Query query = createQuery(context, "SELECT cum FROM ClarinUserMetadata as cum " + + "JOIN cum.eperson as ur " + + "JOIN cum.transaction as clrua " + + "JOIN clrua.licenseResourceMapping as map " + + "WHERE ur.id = :userRegUUID " + + "AND map.bitstream.id = :bitstreamUUID " + + "ORDER BY clrua.id DESC"); + + query.setParameter("userRegUUID", userRegUUID); + query.setParameter("bitstreamUUID", bitstreamUUID); + query.setHint("org.hibernate.cacheable", Boolean.TRUE); + + return list(query); + } } diff --git a/dspace-api/src/main/java/org/dspace/content/service/clarin/ClarinUserMetadataService.java b/dspace-api/src/main/java/org/dspace/content/service/clarin/ClarinUserMetadataService.java index 12a4cb5ba01a..7e617a2ee7c5 100644 --- a/dspace-api/src/main/java/org/dspace/content/service/clarin/ClarinUserMetadataService.java +++ b/dspace-api/src/main/java/org/dspace/content/service/clarin/ClarinUserMetadataService.java @@ -9,6 +9,7 @@ import java.sql.SQLException; import java.util.List; +import java.util.UUID; import org.dspace.authorize.AuthorizeException; import org.dspace.content.clarin.ClarinUserMetadata; @@ -22,4 +23,7 @@ public interface ClarinUserMetadataService { List findAll(Context context) throws SQLException; void update(Context context, ClarinUserMetadata clarinUserMetadata) throws SQLException; void delete(Context context, ClarinUserMetadata clarinUserMetadata) throws SQLException, AuthorizeException; + + List findByUserRegistrationAndBitstream(Context context, Integer userRegUUID, + UUID bitstreamUUID, boolean lastTransaction) throws SQLException; } diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestRepository.java index acb9fef41e22..3d384427448c 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestRepository.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/ClarinUserMetadataRestRepository.java @@ -10,7 +10,10 @@ import java.sql.SQLException; import java.util.List; import java.util.Objects; +import java.util.UUID; +import org.dspace.app.rest.Parameter; +import org.dspace.app.rest.SearchRestMethod; import org.dspace.app.rest.model.ClarinUserMetadataRest; import org.dspace.content.clarin.ClarinUserMetadata; import org.dspace.content.service.clarin.ClarinUserMetadataService; @@ -53,6 +56,19 @@ public Page findAll(Context context, Pageable pageable) } } + @SearchRestMethod(name = "byUserRegistrationAndBitstream") + public Page findByUserRegistrationAndBitstream( + @Parameter(value = "userRegUUID", required = true) Integer userRegId, + @Parameter(value = "bitstreamUUID", required = true) UUID bitstreamUUID, + Pageable pageable) throws SQLException { + Context context = obtainContext(); + + List clarinUserMetadataList = + clarinUserMetadataService.findByUserRegistrationAndBitstream(context, userRegId, bitstreamUUID, true); + + return converter.toRestPage(clarinUserMetadataList, pageable, utils.obtainProjection()); + } + @Override public Class getDomainClass() { return ClarinUserMetadataRest.class; diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java index 572826d93490..8082b88ad9ca 100644 --- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java +++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java @@ -66,8 +66,10 @@ public class ClarinUserMetadataRestControllerIT extends AbstractControllerIntegr ClarinUserMetadataService clarinUserMetadataService; WorkspaceItem witem; + WorkspaceItem witem2; ClarinLicense clarinLicense; Bitstream bitstream; + Bitstream bitstream2; // Attach ClarinLicense to the Bitstream private void prepareEnvironment(String requiredInfo, Integer confirmation) throws Exception { @@ -79,7 +81,8 @@ private void prepareEnvironment(String requiredInfo, Integer confirmation) throw // 1. Create WI with uploaded file context.turnOffAuthorisationSystem(); - witem = createWorkspaceItemWithFile(); + witem = this.createWorkspaceItemWithFile(false); + witem2 = this.createWorkspaceItemWithFile(true); List replaceOperations = new ArrayList(); String clarinLicenseName = "Test Clarin License"; @@ -102,16 +105,23 @@ private void prepareEnvironment(String requiredInfo, Integer confirmation) throw .content(updateBody) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); + getClient(tokenAdmin).perform(patch("/api/submission/workspaceitems/" + witem2.getID()) + .content(updateBody) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); // 4. Check if the Clarin License name was added to the Item's metadata `dc.rights` getClient(tokenAdmin).perform(get("/api/submission/workspaceitems/" + witem.getID())) .andExpect(status().isOk()) .andExpect(jsonPath("$._embedded.item.metadata['dc.rights'][0].value", is(clarinLicenseName))); + getClient(tokenAdmin).perform(get("/api/submission/workspaceitems/" + witem2.getID())) + .andExpect(status().isOk()) + .andExpect(jsonPath("$._embedded.item.metadata['dc.rights'][0].value", is(clarinLicenseName))); // 5. Check if the Clarin License was attached to the Bitstream getClient(tokenAdmin).perform(get("/api/core/clarinlicenses/" + clarinLicense.getID())) .andExpect(status().isOk()) - .andExpect(jsonPath("$.bitstreams", is(1))); + .andExpect(jsonPath("$.bitstreams", is(2))); } @Test @@ -468,12 +478,11 @@ public void shouldNotCreateDuplicateUserMetadataBasedOnHistory() throws Exceptio .contentType(contentType)) .andExpect(status().isOk()) .andExpect(jsonPath("$.page.totalElements", is(2))); -// ClarinUserMetadataBuilder.deleteClarinUserMetadata(clarinUserRegistration.getID()); // Second download // Manage UserMetadata and get token - getClient(adminToken).perform(post("/api/core/clarinusermetadata/manage?bitstreamUUID=" + bitstream.getID()) + getClient(adminToken).perform(post("/api/core/clarinusermetadata/manage?bitstreamUUID=" + bitstream2.getID()) .content(mapper.writeValueAsBytes(clarinUserMetadataRestList.toArray())) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) @@ -492,15 +501,62 @@ public void shouldNotCreateDuplicateUserMetadataBasedOnHistory() throws Exceptio .andExpect(status().isOk()) .andExpect(jsonPath("$.page.totalElements", is(4))); - context.commit(); // The User Metadata should not have updated transaction ID after a new download - test for fixed issue ClarinLicenseResourceUserAllowance clrua1 = clarinUserMetadataService.find(context, 1).getTransaction(); ClarinLicenseResourceUserAllowance clrua2 = clarinUserMetadataService.find(context, 4).getTransaction(); assertThat(clrua1.getID(), not(clrua2.getID())); + + // Check that the user registration for test data full user has been created + // Test /api/core/clarinusermetadatas search by userRegistrationAndBitstream endpoint + getClient(adminToken).perform(get("/api/core/clarinusermetadata/search/byUserRegistrationAndBitstream") + .param("userRegUUID", String.valueOf(clarinUserRegistration.getID())) + .param("bitstreamUUID", String.valueOf(bitstream2.getID())) + .contentType(contentType)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.page.totalElements", is(2))); + + // Download again the second bitstream and the user metadata should be returned only from the last transaction + + // Create a new User Metadata + ClarinUserMetadataRest clarinUserMetadata3 = new ClarinUserMetadataRest(); + clarinUserMetadata3.setMetadataKey("NAME"); + clarinUserMetadata3.setMetadataValue("New Test"); + + ClarinUserMetadataRest clarinUserMetadata4 = new ClarinUserMetadataRest(); + clarinUserMetadata4.setMetadataKey("ADDRESS"); + clarinUserMetadata4.setMetadataValue("New Test"); + + List newUserMetadataRestList = new ArrayList<>(); + newUserMetadataRestList.add(clarinUserMetadata3); + newUserMetadataRestList.add(clarinUserMetadata4); + + // Manage UserMetadata and get token + getClient(adminToken).perform(post("/api/core/clarinusermetadata/manage?bitstreamUUID=" + bitstream2.getID()) + .content(mapper.writeValueAsBytes(newUserMetadataRestList.toArray())) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$", notNullValue())) + .andExpect(jsonPath("$", not(CHECK_EMAIL_RESPONSE_CONTENT))); + + // Get created two CLRUA + getClient(adminToken).perform(get("/api/core/clarinlruallowances") + .contentType(contentType)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.page.totalElements", is(3))); + + // Get created User Metadata from the new transaction - there should be 2 records + getClient(adminToken).perform(get("/api/core/clarinusermetadata/search/byUserRegistrationAndBitstream") + .param("userRegUUID", String.valueOf(clarinUserRegistration.getID())) + .param("bitstreamUUID", String.valueOf(bitstream2.getID())) + .contentType(contentType)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.page.totalElements", is(2))); + + // Delete all created user metadata - clean test environment ClarinUserMetadataBuilder.deleteClarinUserMetadata(clarinUserRegistration.getID()); } - private WorkspaceItem createWorkspaceItemWithFile() { + private WorkspaceItem createWorkspaceItemWithFile(boolean secondBitstream) { parentCommunity = CommunityBuilder.createCommunity(context) .withName("Parent Community") .build(); @@ -520,7 +576,11 @@ private WorkspaceItem createWorkspaceItemWithFile() { .withFulltext("simple-article.pdf", "/local/path/simple-article.pdf", pdf) .build(); - bitstream = witem.getItem().getBundles().get(0).getBitstreams().get(0); + if (secondBitstream) { + this.bitstream2 = witem.getItem().getBundles().get(0).getBitstreams().get(0); + } else { + this.bitstream = witem.getItem().getBundles().get(0).getBitstreams().get(0); + } return witem; } From 878c1064ab847229a14191345b874e02b18c881e Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Wed, 14 Feb 2024 14:19:49 +0100 Subject: [PATCH 3/4] Fixed checkstyle issues --- .../content/clarin/ClarinUserMetadataServiceImpl.java | 6 ++++-- .../content/dao/clarin/ClarinUserMetadataDAO.java | 11 ++++++----- .../dao/impl/clarin/ClarinUserMetadataDAOImpl.java | 10 +++++----- .../service/clarin/ClarinUserMetadataService.java | 3 ++- .../app/rest/ClarinUserMetadataRestControllerIT.java | 1 - 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/dspace-api/src/main/java/org/dspace/content/clarin/ClarinUserMetadataServiceImpl.java b/dspace-api/src/main/java/org/dspace/content/clarin/ClarinUserMetadataServiceImpl.java index e065e6a48393..8704fc45a417 100644 --- a/dspace-api/src/main/java/org/dspace/content/clarin/ClarinUserMetadataServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/clarin/ClarinUserMetadataServiceImpl.java @@ -84,7 +84,8 @@ public List findByUserRegistrationAndBitstream(Context conte UUID bitstreamUUID, boolean lastTransaction) throws SQLException { if (lastTransaction) { - return getLastTransactionUserMetadata(clarinUserMetadataDAO.findByUserRegistrationAndBitstream(context, userRegUUID, bitstreamUUID)); + return getLastTransactionUserMetadata(clarinUserMetadataDAO.findByUserRegistrationAndBitstream(context, + userRegUUID, bitstreamUUID)); } return clarinUserMetadataDAO.findByUserRegistrationAndBitstream(context, userRegUUID, bitstreamUUID); } @@ -99,7 +100,8 @@ private List getLastTransactionUserMetadata(List clarinUserMetadata.getTransaction().getID().equals(latestTransactionId)) + .filter(clarinUserMetadata -> clarinUserMetadata.getTransaction().getID() + .equals(latestTransactionId)) .collect(Collectors.toList()); } catch (Exception e) { log.error("Error filtering user metadata by the last transaction", e); diff --git a/dspace-api/src/main/java/org/dspace/content/dao/clarin/ClarinUserMetadataDAO.java b/dspace-api/src/main/java/org/dspace/content/dao/clarin/ClarinUserMetadataDAO.java index 85d01e37c981..c25b77435d11 100644 --- a/dspace-api/src/main/java/org/dspace/content/dao/clarin/ClarinUserMetadataDAO.java +++ b/dspace-api/src/main/java/org/dspace/content/dao/clarin/ClarinUserMetadataDAO.java @@ -7,14 +7,15 @@ */ package org.dspace.content.dao.clarin; -import org.dspace.content.clarin.ClarinUserMetadata; -import org.dspace.core.Context; -import org.dspace.core.GenericDAO; - import java.sql.SQLException; import java.util.List; import java.util.UUID; +import org.dspace.content.clarin.ClarinUserMetadata; +import org.dspace.core.Context; +import org.dspace.core.GenericDAO; + public interface ClarinUserMetadataDAO extends GenericDAO { - List findByUserRegistrationAndBitstream(Context context, Integer userRegUUID, UUID bitstreamUUID) throws SQLException; + List findByUserRegistrationAndBitstream(Context context, Integer userRegUUID, + UUID bitstreamUUID) throws SQLException; } diff --git a/dspace-api/src/main/java/org/dspace/content/dao/impl/clarin/ClarinUserMetadataDAOImpl.java b/dspace-api/src/main/java/org/dspace/content/dao/impl/clarin/ClarinUserMetadataDAOImpl.java index 18ee7768e52f..74fb5cee2ea6 100644 --- a/dspace-api/src/main/java/org/dspace/content/dao/impl/clarin/ClarinUserMetadataDAOImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/dao/impl/clarin/ClarinUserMetadataDAOImpl.java @@ -7,16 +7,16 @@ */ package org.dspace.content.dao.impl.clarin; +import java.sql.SQLException; +import java.util.List; +import java.util.UUID; +import javax.persistence.Query; + import org.dspace.content.clarin.ClarinUserMetadata; import org.dspace.content.dao.clarin.ClarinUserMetadataDAO; import org.dspace.core.AbstractHibernateDAO; import org.dspace.core.Context; -import javax.persistence.Query; -import java.sql.SQLException; -import java.util.List; -import java.util.UUID; - public class ClarinUserMetadataDAOImpl extends AbstractHibernateDAO implements ClarinUserMetadataDAO { diff --git a/dspace-api/src/main/java/org/dspace/content/service/clarin/ClarinUserMetadataService.java b/dspace-api/src/main/java/org/dspace/content/service/clarin/ClarinUserMetadataService.java index 7e617a2ee7c5..3ea93d398f05 100644 --- a/dspace-api/src/main/java/org/dspace/content/service/clarin/ClarinUserMetadataService.java +++ b/dspace-api/src/main/java/org/dspace/content/service/clarin/ClarinUserMetadataService.java @@ -25,5 +25,6 @@ public interface ClarinUserMetadataService { void delete(Context context, ClarinUserMetadata clarinUserMetadata) throws SQLException, AuthorizeException; List findByUserRegistrationAndBitstream(Context context, Integer userRegUUID, - UUID bitstreamUUID, boolean lastTransaction) throws SQLException; + UUID bitstreamUUID, boolean lastTransaction) + throws SQLException; } diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java index 8082b88ad9ca..ed60bfb3a45d 100644 --- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java +++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java @@ -51,7 +51,6 @@ import org.dspace.content.service.clarin.ClarinLicenseLabelService; import org.dspace.content.service.clarin.ClarinLicenseService; import org.dspace.content.service.clarin.ClarinUserMetadataService; -import org.hamcrest.Matchers; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; From 33e28e1d57d40511b93361b3f0b7ccbc5b5b5848 Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Wed, 14 Feb 2024 16:03:05 +0100 Subject: [PATCH 4/4] Fixed failing integration tests - do not fetch user metadata for testing by ID where there are more tests which creates the user metadata --- .../app/rest/ClarinUserMetadataRestControllerIT.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java index ed60bfb3a45d..592363ba4270 100644 --- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java +++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/ClarinUserMetadataRestControllerIT.java @@ -47,6 +47,7 @@ import org.dspace.content.clarin.ClarinLicense; import org.dspace.content.clarin.ClarinLicenseLabel; import org.dspace.content.clarin.ClarinLicenseResourceUserAllowance; +import org.dspace.content.clarin.ClarinUserMetadata; import org.dspace.content.clarin.ClarinUserRegistration; import org.dspace.content.service.clarin.ClarinLicenseLabelService; import org.dspace.content.service.clarin.ClarinLicenseService; @@ -431,9 +432,6 @@ public void shouldNotCreateDuplicateUserMetadataBasedOnHistory() throws Exceptio context.turnOffAuthorisationSystem(); ClarinUserRegistration clarinUserRegistration = ClarinUserRegistrationBuilder .createClarinUserRegistration(context).withEPersonID(admin.getID()).build(); -// ClarinUserMetadataBuilder.createClarinUserMetadata(context) -// .withUserRegistration(clarinUserRegistration) -// .build(); context.restoreAuthSystemState(); ObjectMapper mapper = new ObjectMapper(); @@ -501,8 +499,9 @@ public void shouldNotCreateDuplicateUserMetadataBasedOnHistory() throws Exceptio .andExpect(jsonPath("$.page.totalElements", is(4))); // The User Metadata should not have updated transaction ID after a new download - test for fixed issue - ClarinLicenseResourceUserAllowance clrua1 = clarinUserMetadataService.find(context, 1).getTransaction(); - ClarinLicenseResourceUserAllowance clrua2 = clarinUserMetadataService.find(context, 4).getTransaction(); + List allUserMetadata = clarinUserMetadataService.findAll(context); + ClarinLicenseResourceUserAllowance clrua1 = allUserMetadata.get(0).getTransaction(); + ClarinLicenseResourceUserAllowance clrua2 = allUserMetadata.get(3).getTransaction(); assertThat(clrua1.getID(), not(clrua2.getID())); // Check that the user registration for test data full user has been created