diff --git a/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPI.java b/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPI.java index 02be2ca1e6..19c17dfa1b 100644 --- a/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPI.java +++ b/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPI.java @@ -29,7 +29,7 @@ public interface DaisyAPI { Response addContributor(Integer projectId, ProjectParticipant contributor); - void deleteThesisPerson(Integer projectId, Integer personId); + Response deleteThesisPerson(Integer projectId, Integer personId); Response createProject(ThesisToBeCreated project); diff --git a/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPIImpl.java b/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPIImpl.java index 372712f41d..aa41073c08 100755 --- a/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPIImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPIImpl.java @@ -144,8 +144,8 @@ public class DaisyAPIImpl implements DaisyAPI { } @Override - public void deleteThesisPerson(Integer projectId, Integer personId) { - thesis() + public Response deleteThesisPerson(Integer projectId, Integer personId) { + return thesis() .path(String.valueOf(projectId)) .path(PERSON) .path(String.valueOf(personId)) diff --git a/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java index 19a59106b5..3bd943ffca 100644 --- a/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java +++ b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java @@ -4,6 +4,7 @@ import static com.querydsl.core.types.dsl.Expressions.anyOf; import jakarta.inject.Inject; import jakarta.inject.Named; +import jakarta.ws.rs.core.Response; import java.time.Instant; import java.time.Period; import java.util.Calendar; @@ -251,18 +252,36 @@ public class ProjectExporter extends AbstractWorker { } private void updateHeadSupervisor(Project project) throws ExternalExportException { - boolean add = true; + boolean toAdd = true; Set<ProjectParticipant> contributors = daisyAPI.getContributors(project.getIdentifier()); for (ProjectParticipant contributor : contributors) { if (contributor.getRole() == Role.SUPERVISOR) { if (contributor.getPerson().getId().equals(project.getHeadSupervisor().getIdentifier())) { - add = false; + toAdd = false; } else { - daisyAPI.deleteThesisPerson(project.getIdentifier(), contributor.getPerson().getId()); + Response response = daisyAPI.deleteThesisPerson( + project.getIdentifier(), + contributor.getPerson().getId() + ); + if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) { + LOG.warn( + "Failed to delete supervisor from project: {} (id: {} / {})", + project.getTitle(), + project.getId(), + project.getIdentifier() + ); + + // Card 3413 + // Do not attempt to add the new supervisor if the old one is still there to prevent + // the project from having multiple supervisors. + // Hopefully Daisy API will soon have support for the function "change supervisor" + // rather than just INSERT and DELETE rows in a table. + toAdd = false; + } } } } - if (add) { + if (toAdd) { externalExporter.addContributorToProject(project, project.getHeadSupervisor(), Role.SUPERVISOR); } }