|
17 | 17 | import edu.harvard.iq.dataverse.batch.jobs.importer.ImportMode; |
18 | 18 | import edu.harvard.iq.dataverse.dataaccess.*; |
19 | 19 | import edu.harvard.iq.dataverse.datacapturemodule.DataCaptureModuleUtil; |
| 20 | +import software.amazon.awssdk.services.s3.model.CompletedPart; |
20 | 21 | import edu.harvard.iq.dataverse.datacapturemodule.ScriptRequestResponse; |
21 | 22 | import edu.harvard.iq.dataverse.dataset.*; |
22 | 23 | import edu.harvard.iq.dataverse.datasetutility.AddReplaceFileHelper; |
|
65 | 66 | import jakarta.ws.rs.container.ContainerRequestContext; |
66 | 67 | import jakarta.ws.rs.core.*; |
67 | 68 | import jakarta.ws.rs.core.Response.Status; |
68 | | -import software.amazon.awssdk.services.s3.model.CompletedPart; |
69 | | - |
| 69 | +import org.apache.commons.lang3.exception.ExceptionUtils; |
70 | 70 | import org.apache.commons.lang3.StringUtils; |
71 | 71 | import org.apache.logging.log4j.util.Strings; |
72 | 72 | import org.eclipse.microprofile.openapi.annotations.Operation; |
@@ -202,7 +202,7 @@ public class Datasets extends AbstractApiBean { |
202 | 202 |
|
203 | 203 | @Inject |
204 | 204 | DatasetFieldsValidator datasetFieldsValidator; |
205 | | - |
| 205 | + |
206 | 206 | @Inject |
207 | 207 | DataFileCategoryServiceBean dataFileCategoryService; |
208 | 208 |
|
@@ -2151,6 +2151,11 @@ public Response createAssignment(@Context ContainerRequestContext crc, RoleAssig |
2151 | 2151 | return ok( |
2152 | 2152 | json(execCommand(new AssignRoleCommand(assignee, theRole, dataset, createDataverseRequest(getRequestUser(crc)), privateUrlToken)))); |
2153 | 2153 | } catch (WrappedResponse ex) { |
| 2154 | + var message = ExceptionUtils.getRootCause(ex).getMessage(); |
| 2155 | + if (message != null && message.contains("duplicate key")) { |
| 2156 | + // concurrent update |
| 2157 | + return error(Status.CONFLICT, BundleUtil.getStringFromBundle("datasets.api.grant.role.assignee.has.role.error")); |
| 2158 | + } |
2154 | 2159 | List<String> args = Arrays.asList(ex.getMessage()); |
2155 | 2160 | logger.log(Level.WARNING, BundleUtil.getStringFromBundle("datasets.api.grant.role.cant.create.assignment.error", args)); |
2156 | 2161 | return ex.getResponse(); |
|
0 commit comments