diff --git a/dspace-api/src/main/java/org/dspace/content/packager/AbstractMETSIngester.java b/dspace-api/src/main/java/org/dspace/content/packager/AbstractMETSIngester.java index c10964a4a986..b602c17ca016 100644 --- a/dspace-api/src/main/java/org/dspace/content/packager/AbstractMETSIngester.java +++ b/dspace-api/src/main/java/org/dspace/content/packager/AbstractMETSIngester.java @@ -129,7 +129,7 @@ public abstract class AbstractMETSIngester extends AbstractPackageIngester { = DSpaceServicesFactory.getInstance().getConfigurationService(); - protected AuthorizeService authorizeService = AuthorizeServiceFactory.getInstance().getAuthorizeService(); + protected final AuthorizeService authorizeService = AuthorizeServiceFactory.getInstance().getAuthorizeService(); /** @@ -774,7 +774,14 @@ protected void addBitstreams(Context context, Item item, manifest.crosswalkBitstream(context, params, bitstream, mfileID, mdRefCallback); - authorizeService.addPolicies(context, bitstreamPolicies, bitstream); + // Only add the saved TYPE_SUBMISSION policies if the crosswalk actually removed them to prevent duplicates. + if (!bitstreamPolicies.isEmpty()) { + List remainingSubmissionPolicies = + authorizeService.findPoliciesByDSOAndType(context, bitstream, ResourcePolicy.TYPE_SUBMISSION); + if (remainingSubmissionPolicies.isEmpty()) { + authorizeService.addPolicies(context, bitstreamPolicies, bitstream); + } + } // is this the primary bitstream? if (primaryID != null && mfileID.equals(primaryID)) { diff --git a/dspace-server-webapp/src/test/java/org/dspace/curate/CurationScriptIT.java b/dspace-server-webapp/src/test/java/org/dspace/curate/CurationScriptIT.java index 8c0744a09cce..2ba8af4623be 100644 --- a/dspace-server-webapp/src/test/java/org/dspace/curate/CurationScriptIT.java +++ b/dspace-server-webapp/src/test/java/org/dspace/curate/CurationScriptIT.java @@ -667,7 +667,7 @@ public void testURLRedirectCurateTest() throws Exception { // MetadataValueLinkChecker uri field with regular link .withMetadata("dc", "description", null, "https://google.com") // MetadataValueLinkChecker uri field with redirect link - .withMetadata("dc", "description", "uri", "https://demo7.dspace.org/handle/123456789/1") + .withMetadata("dc", "description", "uri", "http://google.com") // MetadataValueLinkChecker uri field with non resolving link .withMetadata("dc", "description", "uri", "https://www.atmire.com/broken-link") .withSubject("ExtraEntry") @@ -690,8 +690,8 @@ public void testURLRedirectCurateTest() throws Exception { // field that should be ignored assertFalse(checkIfInfoTextLoggedByHandler(handler, "demo.dspace.org/home")); - // redirect links in field that should not be ignored (https) => expect OK - assertTrue(checkIfInfoTextLoggedByHandler(handler, "https://demo7.dspace.org/handle/123456789/1 = 200 - OK")); + // redirect links in field that should not be ignored => expect OK (even though curl responds with 301) + assertTrue(checkIfInfoTextLoggedByHandler(handler, "http://google.com = 200 - OK")); // regular link in field that should not be ignored (http) => expect OK assertTrue(checkIfInfoTextLoggedByHandler(handler, "https://google.com = 200 - OK")); // nonexistent link in field that should not be ignored => expect 404