diff --git a/src/main/java/se/su/dsv/scipro/io/facade/ImporterFacade.java b/src/main/java/se/su/dsv/scipro/io/facade/ImporterFacade.java index 1cd80e249e..2ad375804c 100644 --- a/src/main/java/se/su/dsv/scipro/io/facade/ImporterFacade.java +++ b/src/main/java/se/su/dsv/scipro/io/facade/ImporterFacade.java @@ -527,6 +527,30 @@ public class ImporterFacade { } } + public void removeUnitFromSupervisorsNotInSet(Set<PersonDTO> supervisorSet) { + final Set<Employee> supervisorsWithRemoteUnit = new HashSet<Employee>(); + final Set<Employee> currentSupervisors = new HashSet<Employee>(supervisorDao.findAll()); + + //Create SciPro Employees from DTOs. + for (PersonDTO supervisorDTO : supervisorSet) { + User supervisorUser = userDao.getUserByIdentifier(supervisorDTO.id); + Employee supervisor = supervisorDao.getFrom(supervisorUser); + supervisorsWithRemoteUnit.add(supervisor); + } + + //Remove units from supervisors that is not in the remote set. + for (Employee supervisor : currentSupervisors) { + if(!supervisorsWithRemoteUnit.contains(supervisor)) { + logger.debug(supervisor.getNameAsString()+" does not have a remote unit. Searching for local units to remove."); + List<Keyword> unitsToRemove = supervisor.getKeywords().getFiltered(keywordTypeDao.findByType(KeywordTypeDao.TYPE.UNIT)); + if(!unitsToRemove.isEmpty()){ + supervisor.getKeywords().getAll().removeAll(unitsToRemove); + logger.debug("Removed units from: " + supervisor.getNameAsString()); + } + } + } + } + private UnitDTO dtoFromUnitKeyword(final Keyword unit){ UnitDTO dto = new UnitDTO(); dto.setName(unit.getKeyword()); @@ -542,4 +566,5 @@ public class ImporterFacade { dto.setId(area.getIdentifier()); return dto; } + } diff --git a/src/main/java/se/su/dsv/scipro/io/impl/ExternalImporterDaisyImpl.java b/src/main/java/se/su/dsv/scipro/io/impl/ExternalImporterDaisyImpl.java index 74392ee070..fc7e6388b4 100644 --- a/src/main/java/se/su/dsv/scipro/io/impl/ExternalImporterDaisyImpl.java +++ b/src/main/java/se/su/dsv/scipro/io/impl/ExternalImporterDaisyImpl.java @@ -145,7 +145,7 @@ public class ExternalImporterDaisyImpl implements ExternalImporter { }); importerFacade.addUnexistingUnitsAsKeywords(unitSet); - + Set<PersonDTO> allSupervisorsOnUnits = new HashSet<PersonDTO>(); for (final UnitDTO unitDTO : unitSet){ Set<PersonDTO> supervisorSet = fetchSupervisorsOnUnit(new HashMap<String,String>(), HttpRequestSender.REQUEST_TYPE.GET, new UrlProcessor() { @Override @@ -153,15 +153,20 @@ public class ExternalImporterDaisyImpl implements ExternalImporter { return (url+"/orgunit/"+unitDTO.id+"/supervisors"); } }); + allSupervisorsOnUnits.addAll(supervisorSet); if(!supervisorSet.isEmpty()){ - for (PersonDTO supervisorDTO : supervisorSet) { + for (PersonDTO supervisorDTO : supervisorSet) { importerFacade.addUnitToSupervisor(supervisorDTO, unitDTO); - } + } } else logger.info("Unit: " + unitDTO.name + " has no supervisors attached."); - } - - + } + + // Compare the list of supervisors with remote units with the list of + // all supervisors in scipro, to make sure to remove units from the + // users that doesn't have one in daisy. + logger.debug("Number of supervisors on remote units: " + allSupervisorsOnUnits.size()); + importerFacade.removeUnitFromSupervisorsNotInSet(allSupervisorsOnUnits); } @Override