2082 Ignore programs that do not have a type
This commit is contained in:
parent
eafa7a1e93
commit
9afe1e3e4b
core/src/main/java/se/su/dsv/scipro/daisyExternal
daisy-integration/src
main/java/se/su/dsv/scipro/integration/daisy/workers
test/java/se/su/dsv/scipro
view/src
main/java/se/su/dsv/scipro/user
test/java/se/su/dsv/scipro/user
@ -1,12 +1,15 @@
|
||||
package se.su.dsv.scipro.daisyExternal;
|
||||
|
||||
import se.su.dsv.scipro.io.dto.Person;
|
||||
import se.su.dsv.scipro.io.dto.Program;
|
||||
import se.su.dsv.scipro.io.dto.Thesis;
|
||||
import se.su.dsv.scipro.system.User;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface ImporterTransactions {
|
||||
User importPerson(Person person);
|
||||
User importStudent(Person person);
|
||||
User importSupervisor(Person person);
|
||||
User importPerson(Person person, final Map<Integer, Program> programCache);
|
||||
User importStudent(Person person, final Map<Integer, Program> programCache);
|
||||
User importSupervisor(Person person, final Map<Integer, Program> programCache);
|
||||
void importProject(Thesis thesis);
|
||||
}
|
||||
|
@ -59,9 +59,9 @@ public class ExternalImporterDaisyImpl implements ExternalImporter {
|
||||
User user;
|
||||
|
||||
if (client.getSupervisors(DSV).contains(person)){
|
||||
user = importerTransactions.importSupervisor(person);
|
||||
user = importerTransactions.importSupervisor(person, new HashMap<>());
|
||||
} else {
|
||||
user = importerTransactions.importStudent(person);
|
||||
user = importerTransactions.importStudent(person, new HashMap<>());
|
||||
}
|
||||
|
||||
importProjects(person);
|
||||
|
@ -52,15 +52,15 @@ public class ImporterTransactionsImpl implements ImporterTransactions {
|
||||
}
|
||||
|
||||
@Override
|
||||
public User importPerson(Person person) {
|
||||
public User importPerson(Person person, final Map<Integer, se.su.dsv.scipro.io.dto.Program> programCache) {
|
||||
LOGGER.info("Importing person: {} {} ({})", person.getFirstName(), person.getLastName(), person.getId());
|
||||
User user = updatePersonData(person.getId(), person);
|
||||
importUsernames(person, user);
|
||||
importAuthorLevel(user);
|
||||
importAuthorLevel(user, programCache);
|
||||
return user;
|
||||
}
|
||||
|
||||
private void importAuthorLevel(final User user) {
|
||||
private void importAuthorLevel(final User user, final Map<Integer, se.su.dsv.scipro.io.dto.Program> programCache) {
|
||||
final var semesterPrograms = client
|
||||
.getProgramAdmissionsForStudent(user.getIdentifier())
|
||||
.stream()
|
||||
@ -72,9 +72,10 @@ public class ImporterTransactionsImpl implements ImporterTransactions {
|
||||
.map(cr -> new Pair<>(cr.getSemester(), cr.getProgramId()));
|
||||
final DegreeLevel latestLevel = Stream
|
||||
.concat(semesterPrograms, registrationSemesters)
|
||||
.map(pair -> new Pair<>(pair.getHead(), getProgram(pair.getTail(), programCache)))
|
||||
.filter(pair -> pair.getTail().getType() != null)
|
||||
.max(Comparator.comparing(Pair::getHead))
|
||||
.map(Pair::getTail)
|
||||
.map(client::getProgram)
|
||||
.map(se.su.dsv.scipro.io.dto.Program::getType)
|
||||
.map(this::toDegreeLevel)
|
||||
.orElse(DegreeLevel.NONE);
|
||||
@ -86,6 +87,10 @@ public class ImporterTransactionsImpl implements ImporterTransactions {
|
||||
}
|
||||
}
|
||||
|
||||
private se.su.dsv.scipro.io.dto.Program getProgram(Integer programId, final Map<Integer, se.su.dsv.scipro.io.dto.Program> programCache) {
|
||||
return programCache.computeIfAbsent(programId, client::getProgram);
|
||||
}
|
||||
|
||||
private DegreeLevel toDegreeLevel(ProgramType programType) {
|
||||
switch (programType) {
|
||||
case BACHELOR:
|
||||
@ -101,34 +106,34 @@ public class ImporterTransactionsImpl implements ImporterTransactions {
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public User importStudent(Person person) {
|
||||
User user = importPerson(person);
|
||||
importProgramsAndMakeStudent(person, user);
|
||||
public User importStudent(Person person, final Map<Integer, se.su.dsv.scipro.io.dto.Program> programCache) {
|
||||
User user = importPerson(person, programCache);
|
||||
importProgramsAndMakeStudent(person, user, programCache);
|
||||
return user;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public User importSupervisor(Person person) {
|
||||
User user = importPerson(person);
|
||||
public User importSupervisor(Person person, final Map<Integer, se.su.dsv.scipro.io.dto.Program> programCache) {
|
||||
User user = importPerson(person, programCache);
|
||||
importResearchAreasAndMakeSupervisor(person, user);
|
||||
return user;
|
||||
}
|
||||
|
||||
private void importProgramsAndMakeStudent(Person person, User user) {
|
||||
private void importProgramsAndMakeStudent(Person person, User user, final Map<Integer, se.su.dsv.scipro.io.dto.Program> programCache) {
|
||||
Response response = client.getStudent(person.getId());
|
||||
if (response.getStatus() == Response.Status.OK.getStatusCode()) {
|
||||
se.su.dsv.scipro.io.dto.Student student = response.readEntity(se.su.dsv.scipro.io.dto.Student.class);
|
||||
for (StudentProgramAdmission admission : client.getProgramAdmissionsForStudent(student.getPerson().getId())) {
|
||||
Program program = importProgram(admission.getProgram().getId());
|
||||
Program program = importProgram(admission.getProgram().getId(), programCache);
|
||||
user.addProgram(program);
|
||||
}
|
||||
userService.save(user);
|
||||
}
|
||||
}
|
||||
|
||||
private Program importProgram(Integer id) {
|
||||
se.su.dsv.scipro.io.dto.Program program = client.getProgram(id);
|
||||
private Program importProgram(Integer id, final Map<Integer, se.su.dsv.scipro.io.dto.Program> programCache) {
|
||||
se.su.dsv.scipro.io.dto.Program program = getProgram(id, programCache);
|
||||
return programService.updateExternalProgram(program.getId(), program.getName(), program.getNameEn(), program.getCode());
|
||||
}
|
||||
|
||||
|
@ -19,9 +19,7 @@ import se.su.dsv.scipro.workerthreads.AbstractWorker;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.time.Year;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@ -57,11 +55,12 @@ public class UserImportWorker extends AbstractWorker {
|
||||
long startDate = System.currentTimeMillis();
|
||||
LOGGER.info("Starting execution for scheduled remote user import of all remote supervisors");
|
||||
|
||||
importUserDetails();
|
||||
importSupervisors();
|
||||
final Map<Integer, Program> programCache = new HashMap<>();
|
||||
importUserDetails(programCache);
|
||||
importSupervisors(programCache);
|
||||
importSupervisorUnits();
|
||||
importSupervisorActiveStatus();
|
||||
importPotentialNewStudents();
|
||||
importPotentialNewStudents(programCache);
|
||||
|
||||
long endDate = System.currentTimeMillis();
|
||||
long executionTimeSecs = (endDate - startDate) / 1000;
|
||||
@ -71,7 +70,7 @@ public class UserImportWorker extends AbstractWorker {
|
||||
executionTimeSecs % 60);
|
||||
}
|
||||
|
||||
private void importUserDetails() {
|
||||
private void importUserDetails(final Map<Integer, Program> programCache) {
|
||||
for (final User user : userService.findAll()) {
|
||||
if (user.getIdentifier() != null) {
|
||||
final var span = tracer.buildSpan("Importing user")
|
||||
@ -83,7 +82,7 @@ public class UserImportWorker extends AbstractWorker {
|
||||
if (idPerson.isPresent()) {
|
||||
Person person = idPerson.get();
|
||||
if (person.getEmail() != null) {
|
||||
importerTransactions.importPerson(person);
|
||||
importerTransactions.importPerson(person, programCache);
|
||||
}
|
||||
else {
|
||||
LOGGER.info("Skipping user because of no e-mail in Daisy: {}", person);
|
||||
@ -102,7 +101,7 @@ public class UserImportWorker extends AbstractWorker {
|
||||
else {
|
||||
user.setIdentifier(usernamePerson.get().getId());
|
||||
userService.save(user);
|
||||
importerTransactions.importPerson(usernamePerson.get());
|
||||
importerTransactions.importPerson(usernamePerson.get(), programCache);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -125,12 +124,12 @@ public class UserImportWorker extends AbstractWorker {
|
||||
externalImporter.importSupervisorActiveStatus();
|
||||
}
|
||||
|
||||
private void importSupervisors() {
|
||||
private void importSupervisors(final Map<Integer, Program> programCache) {
|
||||
List<Person> supervisors = daisyAPI.getSupervisors(DSV);
|
||||
for (Person supervisor : supervisors) {
|
||||
try {
|
||||
if (supervisor.getEmail() != null) {
|
||||
importerTransactions.importSupervisor(supervisor);
|
||||
importerTransactions.importSupervisor(supervisor, programCache);
|
||||
}
|
||||
else {
|
||||
LOGGER.info("Skipping supervisor because of no e-mail in Daisy: {}", supervisor);
|
||||
@ -164,8 +163,9 @@ public class UserImportWorker extends AbstractWorker {
|
||||
importerTransactions.importProject(project);
|
||||
}
|
||||
|
||||
private void importPotentialNewStudents() {
|
||||
private void importPotentialNewStudents(final Map<Integer, Program> programCache) {
|
||||
final List<Program> programs = daisyAPI.getPrograms(DSV);
|
||||
programs.forEach(program -> programCache.put(program.getId(), program));
|
||||
for (Program program : programs) {
|
||||
for (Semester admissionSemester : getAdmissionSemestersToImport()) {
|
||||
LOGGER.info("Checking for newly admitted students on {} ({})", program.getCode(), admissionSemester);
|
||||
@ -178,7 +178,7 @@ public class UserImportWorker extends AbstractWorker {
|
||||
.peek(person -> LOGGER.info("Found potential new student: {} {} ({}) - checking email...", person.getFirstName(), person.getLastName(), person.getId()))
|
||||
.filter(person -> person.getEmail() != null)
|
||||
.peek(person -> LOGGER.info("Email set - importing"))
|
||||
.forEach(importerTransactions::importStudent);
|
||||
.forEach(person1 -> importerTransactions.importStudent(person1, programCache));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
4
daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/UserImportWorkerTest.java
4
daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/UserImportWorkerTest.java
@ -97,7 +97,7 @@ public class UserImportWorkerTest {
|
||||
|
||||
worker.doWork();
|
||||
|
||||
verify(importerTransactions).importPerson(person);
|
||||
verify(importerTransactions).importPerson(person, new HashMap<>());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -108,7 +108,7 @@ public class UserImportWorkerTest {
|
||||
|
||||
worker.doWork();
|
||||
|
||||
verify(importerTransactions, never()).importPerson(person);
|
||||
verify(importerTransactions, never()).importPerson(person, new HashMap<>());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -15,6 +15,8 @@ import se.su.dsv.scipro.system.*;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.AdditionalAnswers.returnsFirstArg;
|
||||
import static org.mockito.Matchers.any;
|
||||
@ -60,7 +62,7 @@ public class ImporterTransactionsImplTest {
|
||||
public void updates_person_data() {
|
||||
Person person = createPerson();
|
||||
|
||||
importerTransactions.importPerson(person);
|
||||
importerTransactions.importPerson(person, new HashMap<>());
|
||||
|
||||
ArgumentCaptor<User> captor = ArgumentCaptor.forClass(User.class);
|
||||
verify(userService).save(captor.capture());
|
||||
|
@ -17,6 +17,7 @@ import se.su.dsv.scipro.system.UserService;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class AdminImportUserPage extends AbstractAdminUsersPage {
|
||||
@ -77,7 +78,7 @@ public class AdminImportUserPage extends AbstractAdminUsersPage {
|
||||
|
||||
@Override
|
||||
public void onClick() {
|
||||
importerTransactions.importStudent(getModelObject());
|
||||
importerTransactions.importStudent(getModelObject(), new HashMap<>());
|
||||
getPage().success(getString("person.imported", getModel()));
|
||||
}
|
||||
});
|
||||
|
@ -6,6 +6,7 @@ import se.su.dsv.scipro.SciProTest;
|
||||
import se.su.dsv.scipro.io.dto.Person;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
@ -99,6 +100,6 @@ public class AdminImportUserPageTest extends SciProTest {
|
||||
|
||||
tester.clickLink(path("importCandidates", "0", "import"));
|
||||
|
||||
verify(importerTransactions).importStudent(person);
|
||||
verify(importerTransactions).importStudent(person, new HashMap<>());
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user